policy 語法結構可以參考此文章
policy 結構中還有一個叫 Principal , 可以將 principal 理解成 『 誰 』, 就是允許誰有條件
Principal 指定使用者格式
- 授予 aws 帳號
{“AWS”:”arn:aws:iam::AccountNumber:root"}
2. 授予 service
{“Service”:[”service-name.amazonaws.com"]}
3. 授予 iam 使用者
{“AWS”:”arn:aws:iam::AccountNumber:user/username"}
4. 指定所有 iam 使用者
{“AWS”:”arn:aws:iam::AccountNumber:user/*"}
S3 主要 Action
- CreateBucket: 新增 bucket
- DeleteBucket: 刪除 bucket
- GetBucketLocation:取得 bucket 所在的位置
- GetObject: 允許取的 bucket 的物件
- ListBucket: bucket 物件列表
- ListAllMyBuckets: 顯示所有 bucket
7. PutObject: 新增物件
s3 Resource 指定規則
arn:aws:s3:region:accountid:resource-type/resource-id
arn:aws:s3:::bucket_name/key_name
範例 1:
授予 iam user Dave 擁有新增物件的權限
{
“Version”: “2012–10–17”,
“Statement”: [
{
“Sid”: “statement1”,
“Effect”: “Allow”,
“Principal”: {
“AWS”: “arn:aws:iam::12345678901:user/Dave”
},
“Action”: [
“s3:PutObject”,
“s3:PutObjectAcl”
],
“Resource”: “arn:aws:s3:::awsexamplebucket1/*"
}
]
}
範例 2: 授與 iam 使用者可以查看所有的 buckets, 但是這樣只能看到 bucket 無法看到其物件
此操作在 iam policy 操作
{
“Version”: “2012–10–17”,
“Statement”: [
{
“Sid”: “statement1”,
“Effect”: “Allow”,
“Action”: [
“s3:ListAllMyBuckets”
],
“Resource”: “arn:aws:s3:::*"
}
]
}
範例3: 在受與特定的 bucket 可以顯示物件 (跟範例2結合)
{
“Version”: “2012–10–17”,
“Statement”: [
{
“Sid”: “statement1”,
“Effect”: “Allow”,
“Action”: [
“s3:ListAllMyBuckets”
],
“Resource”: “arn:aws:s3:::*"
} , {
"Effect": "Allow",
"Action": [
"s3:ListBucket" ],
"Resource": "arn:aws:s3:::/{bucketname}" // 可以查看此 bucket 嚇得 object }
]
}
範例4: 授與 bucket object 的權限 (跟範例3結合)
{
“Version”: “2012–10–17”,
“Statement”: [
{
“Sid”: “statement1”,
“Effect”: “Allow”,
“Action”: [
“s3:ListAllMyBuckets”
],
“Resource”: “arn:aws:s3:::*"
} , {
"Effect": "Allow",
"Action": [
"s3:ListBucket" ],
"Resource": "arn:aws:s3:::{bucketname}" // 可以查看此 bucket 嚇得 object } , {
"Effect": "Allow", "Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject" ],
"Resource": "arn:aws:s3:::{bucketname}/*" // 授與底下 bucket object 擁有 顯示、刪除、更新的權限 }
]
}
範例5: 授予 iam object 的 copy 、 rename等操作
{
“Version”: “2012–10–17”,
“Statement”: [
{
“Sid”: “statement1”,
“Effect”: “Allow”,
“Action”: [
“s3:ListAllMyBuckets”
],
“Resource”: “arn:aws:s3:::*"
} , {
"Effect": "Allow",
"Action": [
"s3:ListBucket" ],
"Resource": "arn:aws:s3:::{bucketname}" // 可以查看此 bucket 嚇得 object } , {
"Effect": "Allow", "Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:PutObject",
"s3:GetObjectAcl", // 增加此項目
"s3:PutObjectAcl" // 增加此項目 ],
"Resource": "arn:aws:s3:::{bucketname}/*" // 授與底下 bucket object 擁有 顯示、刪除、更新、複製以及更名 object 的權限 }
]
}
參考資料: