如何授予使用者存取 Amazon S3 儲存貯體中特定資料夾的權限?
我想要限制 AWS Identity and Access Management (IAM) 使用者只能存取 Amazon Simple Storage Service (Amazon S3) 中的特定資料夾。
解決方法
如果 IAM 使用者和儲存貯體屬於相同 AWS 帳戶,則使用 IAM 政策授予使用者存取儲存貯體資料夾的權限。當您在 IAM 政策中授予存取權時,不需要更新儲存貯體政策。不過,如果儲存貯體政策明確拒絕 IAM 使用者存取資料夾,則您必須更新儲存貯體政策。
如果 IAM 使用者和 S3 儲存貯體屬於不同帳戶,則在 IAM 政策和儲存貯體政策中授予存取權。如需更多資訊,請參閱如何授予另一個 AWS 帳戶中的使用者權限,使其能將物件上傳到我的 Amazon S3 儲存貯體?
您可以在 IAM 政策中授予單一或多個使用者存取權。對於多個使用者,政策可以包含群組或 AWS IAM Identity Center ID。
授予單一使用者存取權
若要授予單一使用者僅存取其資料夾的權限,請建立 IAM 政策。
政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowStatement1", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowStatement2A", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringEquals": { "s3:prefix": [ "", "home/", "home/David" ], "s3:delimiter": [ "/" ] } } }, { "Sid": "AllowStatement3", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringLike": { "s3:prefix": [ "home/David/*" ] } } }, { "Sid": "AllowStatement4A", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/David/*" ] } ] }
注意: 將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。
在您的政策中,可包含以下陳述式:
- 使用 AllowStatement1,允許使用者列出屬於其帳戶的儲存貯體,並在主控台上導覽至該儲存貯體。
- 使用 AllowStatement2A,允許使用者列出 DOC-EXAMPLE-BUCKET 中的資料夾,並在主控台上導覽至該資料夾。
- 使用 AllowStatement3,允許使用者列出 DOC-EXAMPLE-BUCKET/home/Username 資料夾中的內容。
- 使用 AllowStatement4A,允許僅在 DOC-EXAMPLE-BUCKET/home/Username 資料夾中執行所有動作,例如讀取、寫入和刪除權限。
使用群組政策授予多個使用者存取權
使用政策變數為多個使用者建立群組政策。
使用 ${aws:username} 政策變數的儲存貯體政策範例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringEquals": { "s3:prefix": [ "", "home/" ], "s3:delimiter": [ "/" ] } } }, { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringLike": { "s3:prefix": [ "home/${aws:username}/*", "home/${aws:username}" ] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Action": [ "s3:*" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${aws:username}/*" ] } ] }
注意: 將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。
上述政策使用 aws:username 索引鍵,並傳回使用者的易記名稱,例如「Adele」或「David」。 當 aws:username 值可能不適用於特定 IAM 角色時,您也可以使用唯一 ID。 如需更多資訊,請參閱主體索引鍵值。
IAM 使用者可以列出父層級的所有前綴,例如 DOC-EXAMPLE-BUCKET/。使用者也可以在任何圖形化使用者介面 (GUI) 用戶端中導覽至其主目錄。如果您未在父層級提供 List 動作,則必須使用命令列介面來存取指定的資料夾。
使用 AWS IAM Identity Center 授予多個使用者存取權
您可以根據 AWS IAM Identity Center 主體來控制 S3 儲存貯體資料夾的存取權。IAM Identity Center 目錄中的每個使用者都有唯一的使用者 ID。對於您要限制資料夾存取權的每個使用者,請使用 ${identitystore:UserId} 政策變數。
建立 S3 資料夾時,請使用與 IAM Identity Center 目錄中使用者 ID 對應的資料夾名稱。例如,使用者 John 的唯一使用者 ID 為 1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c。若要管理 John,請在 S3 儲存貯體中為 John 建立名為 /home/1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c 的資料夾。若要尋找使用者的使用者 ID,請在 IAM Identity Center 主控台上導覽至每個使用者,或使用 DescribeUser API。
下列範例 IAM 政策使用 ${identitystore:UserId} 變數:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringEquals": { "s3:prefix": [ "", "home/" ], "s3:delimiter": [ "/" ] } } }, { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringLike": { "s3:prefix": [ "home/${identitystore:UserId}/*", "home/${identitystore:UserId}" ] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${identitystore:UserId}/*" ] } ] }
注意: 將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。
相關資訊
相關內容
已提問 2 年前
已提問 3 年前
已提問 1 年前

