本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
範例 3:授予對其未擁有之物件的許可的儲存貯體擁有者
重要
授予IAM角色許可比授予個別使用者許可更好。若要了解如何操作,請參閱 了解跨帳戶許可和使用IAM角色。
此範例的案例是儲存貯體擁有者想要授予存取物件的許可,但儲存貯體擁有者並未擁有儲存貯體中的所有物件。在此範例中,儲存貯體擁有者嘗試使用它自己的帳戶將許可授予使用者。
儲存貯體擁有者可以讓其他 AWS 帳戶 上傳物件。預設情況下,儲存貯體擁有者不會擁有由另一個 AWS 帳戶寫入儲存貯體的物件。物件由將其寫入 S3 儲存貯體的帳戶擁有。如果儲存貯體擁有者沒有儲存貯體中的物件,則物件擁有者必須先使用物件存取控制清單 () 將許可授予儲存貯體擁有者ACL。然後,儲存貯體擁有者可以將許可授予他們未擁有的物件。如需詳細資訊,請參閱Amazon S3 儲存貯體和物件擁有權。
如果儲存貯體擁有者為儲存貯體套用儲存貯體擁有者強制執行的 S3 物件所有權設定,則儲存貯體擁有者會擁有儲存貯體中的所有物件,包括由另一個 AWS 帳戶寫入的物件。此方法可解決儲存貯體擁有者不擁有物件的問題。然後,您可以將許可委派給您自己帳戶中的使用者或其他 AWS 帳戶。
注意
S3 物件擁有權是 Amazon S3 儲存貯體層級設定,可用來控制上傳到儲存貯體的物件擁有權,以及停用或啟用 ACLs。根據預設,物件擁有權設定為儲存貯體擁有者強制執行設定,且所有 ACLs 都會停用。ACLs 停用 時,儲存貯體擁有者會擁有儲存貯體中的所有物件,並使用存取管理政策來管理對它們的存取。
Amazon S3 中的大多數現代使用案例不再需要使用 ACLs。建議您保持ACLs停用狀態,除非在異常情況下,您需要個別控制每個物件的存取。在ACLs停用的情況下,您可以使用政策來控制對儲存貯體中所有物件的存取,無論物件上傳到儲存貯體的對象是誰。如需詳細資訊,請參閱控制物件的擁有權,並ACLs停用儲存貯體。
在此範例中,假設儲存貯體擁有者尚未套用儲存貯體擁有者強制執行的「物件擁有權」設定。儲存貯體擁有者向其自己帳戶中的使用者委派許可。以下是逐步解說步驟的摘要:
-
帳戶 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。此帳戶中的使用者在登入 URL時必須使用此功能 AWS Management Console。如需詳細資訊,請參閱 IAM 使用者指南 中的使用者如何登入您的帳戶。
-
-
使用帳戶 B 憑證重複上述步驟,並建立管理員使用者
AccountBadmin
。
-
-
設定 AWS CLI 或適用於 Windows 的工具 PowerShell。請確定您如下所示儲存系統管理員憑證:
-
如果使用 AWS CLI,請在組態檔案中建立兩個設定檔
AccountBadmin
,AccountAadmin
以及 。 -
如果使用 Tools for Windows PowerShell,請確定您將工作階段的憑證儲存為
AccountAadmin
和AccountBadmin
。
如需說明,請參閱 設定演練的工具。
-
步驟 1:執行帳戶 A 任務
針對帳號 A 執行以下步驟:
步驟 1.1:登入主控台
使用帳戶 A URL IAM的使用者登入,以AccountAadmin
使用者 AWS Management Console 身分登入 。此使用者將建立儲存貯體並連接其政策。
步驟 1.2:建立儲存貯體和使用者,並新增授予使用者許可的儲存貯體政策
-
在 Amazon S3 主控台中建立儲存貯體。此練習假設儲存貯體是在美國東部 (維吉尼亞北部) 建立的 AWS 區域,名稱為
。amzn-s3-demo-bucket1
如需說明,請參閱 建立儲存貯體。
-
在IAM主控台
中,建立使用者 Dave
。如需 step-by-step指示,請參閱 IAM 使用者指南 中的建立IAM使用者 (主控台)。
-
請注意使用者 Dave 憑證。
-
在 Amazon S3 主控台中,將下列儲存貯體政策連接至
儲存貯體。如需說明,請參閱 使用 Amazon S3 主控台新增儲存貯體政策。遵循新增儲存貯體政策的步驟。如需有關如何尋找帳戶 的資訊IDs,請參閱尋找您的 AWS 帳戶 ID 。amzn-s3-demo-bucket1
政策會將
s3:PutObject
與s3:ListBucket
許可授予帳戶 B。此政策也會授予使用者Dave
s3:GetObject
許可。{ "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
參數會識別要上傳的來源檔案。例如,如果檔案位於C:
Windows 機器,指定c:\HappyFace.jpg
。--key
參數提供物件的金鑰名稱。aws s3api put-object --bucket
amzn-s3-demo-bucket1
--key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin -
將授予新增至物件ACL,以允許儲存貯體擁有者完全控制物件。如需有關如何尋找正式使用者 ID 的資訊,請參閱 AWS 帳戶管理參考指南 中的尋找 的正式使用者 ID AWS 帳戶。
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
,並執行下列操作:
-
-
使用帳戶 B 憑證登入 AWS Management Console
。在IAM主控台 中,刪除使用者 AccountBadmin。