本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
範例 3:授予對其未擁有之物件的許可的儲存貯體擁有者
重要
將權限授予 IAM 角色比授予個別使用者更好。若要了解如何操作,請參閱 了解跨帳戶許可和使用 IAM 角色。
此範例的情況是儲存貯體擁有者想要授予物件存取許可,但儲存貯體擁有者未擁有儲存貯體中的所有物件。在此範例中,儲存貯體擁有者嘗試使用它自己的帳戶將許可授予使用者。
儲存貯 AWS 帳戶 體擁有者可以讓其他 上傳物件。預設情況下,儲存貯體擁有者不會擁有由另一個 AWS 帳戶寫入儲存貯體的物件。物件由將其寫入 S3 儲存貯體的帳戶擁有。如果儲存貯體擁有者未擁有儲存貯體中的物件,則物件擁有者必須先使用物件存取控制清單 (ACL) 將許可授予儲存貯體擁有者。然後,儲存貯體擁有者可以授予其未擁有的物件許可。如需詳細資訊,請參閱Amazon S3 儲存貯體和物件擁有權。
如果儲存貯體擁有者為儲存貯體套用儲存貯體擁有者強制執行的 S3 物件所有權設定,則儲存貯體擁有者會擁有儲存貯體中的所有物件,包括由另一個 AWS 帳戶寫入的物件。此方法可解決物件不屬於儲存貯體擁有者的問題。然後,您可以將許可委派給您自己帳戶中的使用者或其他 AWS 帳戶。
注意
S3 物件擁有權是一項 Amazon S3 儲存貯體層級設定,您可以用來同時控制上傳至儲存貯體之物件的擁有權,以及停用或啟用 ACL。根據預設,物件擁有權設定為「儲存貯體擁有者強制執行」設定,而且所有 ACL 都會停用。停用 ACL 時,儲存貯體擁有者會擁有儲存貯體中的所有物件,並使用存取管理政策專門管理對這些物件的存取。
Amazon S3 中的大多數新式使用案例不再需要使用 ACL。建議您將 ACL 保持停用狀態,除非在異常情況下必須個別控制每個物件的存取。停用 ACL 後,您可以使用政策來控制對儲存貯體中所有物件的存取,無論是誰將物件上傳到您的儲存貯體。如需詳細資訊,請參閱控制物件的擁有權並停用儲存貯體的 ACL。
在此範例中,假設儲存貯體擁有者尚未套用儲存貯體擁有者強制執行的「物件擁有權」設定。儲存貯體擁有者向其自己帳戶中的使用者委派許可。以下是逐步解說步驟的摘要:

-
帳戶 A 管理員使用者使用兩個陳述式來連接儲存貯體政策。
-
允許帳戶 B 上傳物件的跨帳戶許可。
-
允許其自己帳戶中的使用者存取儲存貯體中的物件。
-
-
帳戶 B 管理員使用者將物件上傳至帳戶 A 所擁有的儲存貯體。
-
帳戶 B 管理員會更新物件 ACL,以新增將物件完全控制許可給予儲存貯體擁有者的授予。
-
帳戶 A 中的使用者會存取儲存貯體中的物件來進行驗證,而不管其擁有者為何。
在此範例中,您需要兩個帳戶。下表顯示如何參照這些帳戶與這些帳戶中的管理員使用者。在此演練中,您不會根據建議的 IAM 指導方針使用帳戶根使用者憑證。如需詳細資訊,請參閱關於使用管理員使用者來建立資源並授予許可。相反地,您可以在每個帳戶中建立管理員,並使用這些憑證來建立資源以及向其授予許可。
AWS 帳戶 ID | 帳戶稱為 | 帳戶中的管理員 |
---|---|---|
|
帳戶 A |
AccountAadmin |
|
帳戶 B |
AccountBadmin |
所有建立使用者與授予許可的任務都是在 AWS Management Console完成。為了驗證許可,演練使用命令列工具 AWS Command Line Interface (AWS CLI) 和 AWS Tools for Windows PowerShell,因此您不需要撰寫任何程式碼。
步驟 0:準備演練
-
請確定您有兩個 AWS 帳戶 ,而且每個帳戶都有一個管理員,如上一節的表格所示。
-
如有需要 AWS 帳戶,請註冊 。
-
使用帳戶 A 憑證登入 IAM 主控台
,然後執行下列步驟以建立管理員使用者: -
建立使用者
AccountAadmin
,並記下使用者的安全憑證。如需有關新增使用者的詳細資訊,請參閱《IAM 使用者指南》中的在您的 AWS 帳戶中建立 IAM 使用者。 -
連接給予完整存取權的使用者政策,以授予 AccountAadmin 管理員許可。如需說明,請參閱《IAM 使用者指南》中的管理 IAM 政策。
-
在 IAM 主控台
儀表板中,記下 IAM 使用者登入 URL。登入 AWS Management Console時,此帳戶中的使用者必須使用此 URL。如需詳細資訊,請參閱《IAM 使用者指南》中的使用者如何登入您的帳戶。
-
-
使用帳戶 B 憑證重複前一個步驟,並建立管理員使用者
AccountBadmin
。
-
-
設定 AWS CLI 或 Tools for Windows PowerShell。請確定您如下所示儲存系統管理員憑證:
-
如果使用 AWS CLI,請在組態檔案中建立兩個設定檔
AccountBadmin
AccountAadmin
和 。 -
如果使用 Tools for Windows PowerShell,請確定您將工作階段的憑證作為
AccountAadmin
和AccountBadmin
來存放。
如需說明,請參閱 為逐步解說設定工具。
-
步驟 1:執行帳戶 A 任務
針對帳號 A 執行以下步驟:
步驟 1.1:登入主控台
使用帳戶 A 的 IAM 使用者登入 URL,以AccountAadmin
使用者 AWS Management Console 身分登入 。此使用者將建立儲存貯體並連接其政策。
步驟 1.2:建立儲存貯體和使用者,並新增授予使用者許可的儲存貯體政策
-
在 Amazon S3 主控台中建立儲存貯體。本練習假設儲存貯體是在美國東部 (維吉尼亞北部) 建立 AWS 區域,且名稱為 。
amzn-s3-demo-bucket1
如需說明,請參閱 建立儲存貯體。
-
在 IAM 主控台
中,建立使用者 Dave
。如需逐步說明,請參閱《IAM 使用者指南》中的建立 IAM 使用者 (主控台)。
-
記下使用者 Dave 的憑證。
-
在 Amazon S3 主控台中,將下列儲存貯體政策連接至
儲存貯體。如需說明,請參閱 使用 Amazon S3 主控台新增儲存貯體政策。遵循新增儲存貯體政策的步驟。如需如何尋找帳戶 IDs的資訊,請參閱尋找您的 AWS 帳戶 ID。amzn-s3-demo-bucket1
政策會將
s3:PutObject
與s3:ListBucket
許可授予帳戶 B。該政策也會將s3:GetObject
許可授予使用者Dave
。{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
AccountB-ID
:root" }, "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1
/*", "arn:aws:s3:::amzn-s3-demo-bucket1
" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID
:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1
/*" ] } ] }
步驟 2:執行帳戶 B 任務
現在,帳戶 B 具有對帳戶 A 之儲存貯體執行操作的許可,帳戶 B 管理員會執行下列操作:
-
將物件上傳至帳戶 A 的儲存貯體
-
在物件 ACL 中新增授權,以允許帳戶 A (儲存貯體擁有者) 具有完整控制權。
使用 AWS CLI
-
使用
put-object
AWS CLI 命令上傳物件。命令中的 ---body
參數會識別要上傳的來源檔案。例如,若檔案位於 Windows 電腦的C:
磁碟機,請指定c:\HappyFace.jpg
。--key
參數提供物件的金鑰名稱。aws s3api put-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin -
新增物件 ACL 的授予許可,以允許儲存貯體擁有者可完全控制物件。如需如何尋找正式使用者 ID 的資訊,請參閱《AWS 帳戶管理參考指南》中的尋找 AWS 帳戶的正式使用者 ID。
aws s3api put-object-acl --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
使用 Tools for Windows PowerShell
-
使用
Write-S3Object
命令上傳物件。Write-S3Object -BucketName
amzn-s3-demo-bucket1
-key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin -
新增物件 ACL 的授予許可,以允許儲存貯體擁有者可完全控制物件。
Set-S3ACL -BucketName
amzn-s3-demo-bucket1
-Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden
步驟 3:測試許可
現在,驗證帳戶 A 中的使用者 Dave 可以存取帳戶 B 所擁有的物件。
使用 AWS CLI
-
將使用者 Dave AWS CLI 登入資料新增至組態檔案,並建立新的設定檔
UserDaveAccountA
。如需詳細資訊,請參閱為逐步解說設定工具。[profile UserDaveAccountA] aws_access_key_id =
access-key
aws_secret_access_key =secret-access-key
region =us-east-1
-
執行
get-object
CLI 命令來下載HappyFace.jpg
,並將其儲存在本機。您可以新增--profile
參數,來提供使用者 Dave 憑證。aws s3api get-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpgOutputfile.jpg
--profile UserDaveAccountA
使用 Tools for Windows PowerShell
-
將使用者 Dave AWS 登入資料以 的形式存放
UserDaveAccountA
至持久性存放區。Set-AWSCredentials -AccessKey
UserDave-AccessKey
-SecretKeyUserDave-SecretAccessKey
-storeas UserDaveAccountA -
執行
Read-S3Object
命令來下載HappyFace.jpg
物件,並將其儲存在本機。您可以新增-StoredCredentials
參數,來提供使用者 Dave 憑證。Read-S3Object -BucketName
amzn-s3-demo-bucket1
-Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA
步驟 4:清理
-
完成測試之後,您可以執行下列步驟進行清除:
-
使用帳戶 A 憑證登入 AWS Management Console
,並執行下列操作: -
在 Amazon S3 主控台中,移除連接至
amzn-s3-demo-bucket1
的儲存貯體政策。在儲存貯體 Properties (屬性) 中,刪除 Permissions (許可) 區段中的政策。 -
如果儲存貯體是為此練習而建立,請在 Amazon S3 主控台中刪除物件,然後刪除儲存貯體。
-
在 IAM 主控台
中,移除 AccountAadmin 使用者。如需逐步說明,請參閱《IAM 使用者指南》中的刪除 IAM 使用者。
-
-
-
使用帳戶 B 憑證登入 AWS Management Console
。在 IAM 主控台 中,刪除使用者 AccountBadmin。