如何授予另一個 AWS 帳戶中的使用者權限,使其能將物件上傳到我的 Amazon S3 儲存貯體?
我想授予另一個 AWS 帳戶中的 AWS Identity and Access Management (IAM) 使用者,存取我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體的權限。此外,我想授予跨帳戶存取權,讓使用者可以將物件上傳到我的 Amazon S3 儲存貯體。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
若要授予另一個帳戶中的使用者將物件上傳至您 S3 儲存貯體的存取權,請更新使用者或其帳戶的 IAM 政策。最佳實務是透過帳戶控制存取權,並搭配儲存貯體擁有者強制執行物件擁有權。
如果您的儲存貯體使用存取控制清單 (ACL),而不是儲存貯體擁有者強制執行擁有權,則請考慮使用 Amazon S3 組態 BucketOwnerEnforced,該組態會關閉 ACL。使用以下 get-bucket-ownership-controls 命令檢查您的儲存貯體是否使用 ACL:
aws s3api get-bucket-ownership-controls --bucket DOC-EXAMPLE-BUCKET
**注意:**將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。
如果輸出顯示 BucketOwnerPreferred 或 ObjectWriter,而不是 BucketOwnerEnforced,則您的儲存貯體會使用 ACL。跨帳戶上傳的物件由上傳者擁有,而非儲存貯體擁有者。
儲存貯體擁有者強制執行物件擁有權
若要在帳戶層級授予儲存貯體的存取權,請使用儲存貯體擁有者強制執行物件擁有權。使用以下步驟,授予帳戶 A 中的 IAM 使用者將物件上傳至帳戶 B 中 S3 儲存貯體的存取權:
-
在帳戶 A 中,為需要存取帳戶 B 儲存貯體的使用者建立 IAM 政策:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }**注意:**將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。
-
從帳戶 A 取得 IAM 使用者的 Amazon Resource Name (ARN)。
-
從帳戶 B 建立儲存貯體政策,授予跨帳戶使用者上傳物件的權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountUploadAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/UploadData" }, "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" }, { "Sid": "CrossAccountListAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/UploadData" }, "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" } ] }**注意:**對於 Principal 的值,請務必輸入帳戶 A 中 IAM 使用者的 ARN。將 DOC-EXAMPLE-BUCKET 替換為您的儲存貯體名稱。
ACL 強制執行物件擁有權
若要授予使用 ACL 強制執行物件擁有權的儲存貯體存取權,請在儲存貯體政策和 IAM 使用者政策中授予 PutObjectAcl 權限。
-
從帳戶 A,將政策連接至 IAM 使用者。該政策必須允許使用者在帳戶 B 中的儲存貯體上執行 PutObject 和 PutObjectAcl 動作:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }**注意:**您必須具有 s3:PutObjectAcl 權限,才能指定上傳的 ACL。否則,當您使用 ACL 上傳物件時,會收到 Access Denied 錯誤,例如 bucket-owner-full control ACL。
-
從帳戶 B 附加一個儲存貯體政策,授予帳戶 A 中的 IAM 使用者執行 s3:PutObject 與 s3:PutObjectAcl 動作的權限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateS3ObjectAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::999999999999:user/UploadData" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" }, { "Sid": "DelegateS3BucketAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/UploadData" }, "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" } ] }
相關資訊
相關內容
- 已提問 3 年前
- 已提問 1 年前
- 已提問 8 個月前

