AWS S3 policy

Gary Ng
9 min readOct 26, 2020

--

policy 語法結構可以參考此文章

policy 結構中還有一個叫 Principal , 可以將 principal 理解成 『 誰 』, 就是允許誰有條件

Principal 指定使用者格式

  1. 授予 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

  1. CreateBucket: 新增 bucket
  2. DeleteBucket: 刪除 bucket
  3. GetBucketLocation:取得 bucket 所在的位置
  4. GetObject: 允許取的 bucket 的物件
  5. ListBucket: bucket 物件列表
  6. 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 的權限
}
]
}

參考資料:

--

--

Gary Ng
Gary Ng

Written by Gary Ng

軟體工程師、後端工程師

No responses yet