範例 3:授予對其未擁有之物件的許可的儲存貯體擁有者 - Amazon Simple Storage Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

範例 3:授予對其未擁有之物件的許可的儲存貯體擁有者

重要

將權限授予 IAM 角色比授予個別使用者更好。若要了解如何操作,請參閱 了解跨帳戶許可和使用 IAM 角色

此範例的案例是值區擁有者想要授與存取物件的權限,但值區擁有者並未擁有值區中的所有物件。在此範例中,儲存貯體擁有者嘗試使用它自己的帳戶將許可授予使用者。

值區擁有者可以讓其他 AWS 帳戶 人上傳物件。預設情況下,儲存貯體擁有者不會擁有由另一個 AWS 帳戶寫入儲存貯體的物件。物件由將其寫入 S3 儲存貯體的帳戶擁有。如果值區擁有者不擁有值區中的物件,物件擁有者必須先使用物件存取控制清單 (ACL) 將權限授與值區擁有者。然後,值區擁有者可以將權限授與他們不擁有的物件。如需詳細資訊,請參閱 Amazon S3 儲存貯體和物件擁有權

如果儲存貯體擁有者為儲存貯體套用儲存貯體擁有者強制執行的 S3 物件所有權設定,則儲存貯體擁有者會擁有儲存貯體中的所有物件,包括由另一個 AWS 帳戶寫入的物件。此方法可解決物件不屬於值區擁有者的問題。然後,您可以將許可委派給您自己帳戶中的使用者或其他 AWS 帳戶。

注意

S3 物件擁有權是一項 Amazon S3 儲存貯體層級設定,您可以用來同時控制上傳至儲存貯體之物件的擁有權,以及停用或啟用 ACL。根據預設,物件擁有權設定為「儲存貯體擁有者強制執行」設定,而且所有 ACL 都會停用。停用 ACL 時,儲存貯體擁有者會擁有儲存貯體中的所有物件,並使用存取管理政策專門管理對這些物件的存取。

Amazon S3 中的大多數新式使用案例不再需要使用 ACL。建議您將 ACL 保持停用狀態,除非在異常情況下必須個別控制每個物件的存取。停用 ACL 後,您可以使用政策來控制對儲存貯體中所有物件的存取,無論是誰將物件上傳到您的儲存貯體。如需詳細資訊,請參閱 控制物件的擁有權並停用儲存貯體的 ACL

在此範例中,假設儲存貯體擁有者尚未套用儲存貯體擁有者強制執行的「物件擁有權」設定。儲存貯體擁有者向其自己帳戶中的使用者委派許可。以下是逐步解說步驟的摘要:

值區擁有者授與權限給它不擁有的物件。
  1. 帳戶 A 管理員使用者使用兩個陳述式來連接儲存貯體政策。

    • 允許帳戶 B 上傳物件的跨帳戶許可。

    • 允許其自己帳戶中的使用者存取儲存貯體中的物件。

  2. 帳戶 B 管理員使用者將物件上傳至帳戶 A 所擁有的儲存貯體。

  3. 帳戶 B 管理員會更新物件 ACL,以新增將物件完全控制許可給予儲存貯體擁有者的授予。

  4. 帳戶 A 中的使用者會存取儲存貯體中的物件來進行驗證,而不管其擁有者為何。

在此範例中,您需要兩個帳戶。下表顯示如何參照這些帳戶與這些帳戶中的管理員使用者。在此演練中,您不會根據建議的 IAM 指導方針使用帳戶根使用者憑證。如需詳細資訊,請參閱 關於使用管理員使用者來建立資源並授予許可。相反地,您可以在每個帳戶中建立管理員,並使用這些憑證來建立資源以及向其授予許可。

AWS 帳戶 身份證 帳戶稱為 帳戶中的管理員

1111-1111-1111

帳戶 A

AccountAadmin

2222-2222-2222

帳戶 B

AccountBadmin

所有建立使用者與授予許可的任務都是在 AWS Management Console完成。若要驗證權限,逐步解說會使用指令行工具 AWS Command Line Interface (AWS CLI) 和 AWS Tools for Windows PowerShell,因此您不需要撰寫任何程式碼。

步驟 0:準備演練

  1. 請確定您有兩個帳戶, AWS 帳戶 而且每個帳戶都有一個管理員,如前一節的表格所示。

    1. 如果需要 AWS 帳戶,請註冊。

    2. 使用帳戶 A 登入資料登入 IAM 主控台,然後執行下列動作以建立管理員使用者:

      • 建立使用者AccountAadmin並記下使用者的安全認證。如需有關新增使用者的詳細資訊,請參閱《IAM 使用者指南》中的在您的 AWS 帳戶中建立 IAM 使用者

      • 附加可提供完整存AccountAadmin取權的使用者原則,以授與管理員權限。如需說明,請參閱《IAM 使用者指南》中的管理 IAM 政策

      • IAM 主控台儀表板中,記下 IAM 使用者登入 URL。登入 AWS Management Console時,此帳戶中的使用者必須使用此 URL。如需詳細資訊,請參閱《IAM 使用者指南》中的使用者如何登入您的帳戶

    3. 使用帳戶 B 認證重複上述步驟,並建立系統管理員使用者AccountBadmin

  2. 設定 AWS CLI 或視窗工具 PowerShell。請確定您如下所示儲存系統管理員憑證:

    • 如果使用 AWS CLI,請建立兩個設定檔AccountBadminAccountAadmin並在組態檔案中建立。

    • 如果使用 Windows 適用的工具 PowerShell,請確定您將工作階段的認證儲存為AccountAadminAccountBadmin

    如需說明,請參閱設定逐步解說的工具

步驟 1:執行帳戶 A 任務

針對帳號 A 執行以下步驟:

步驟 1.1:登入主控台

使用帳戶 A 的 IAM 使用者登入 URL,以使用AccountAadmin者 AWS Management Console 身分登入。此使用者將建立儲存貯體並連接其政策。

步驟 1.2:建立儲存貯體和使用者,並新增授予使用者許可的儲存貯體政策

  1. 在 Amazon S3 主控台中建立儲存貯體。本練習假設值區是在美國東部 (維吉尼亞北部) 建立的 AWS 區域,名稱為DOC-EXAMPLE-BUCKET1

    如需說明,請參閱建立儲存貯體

  2. IAM 主控台中建立使用者Dave

    如需 step-by-step 指示,請參閱 IAM 使用者指南中的建立 IAM 使用者 (主控台)

  3. 請注意使用者 Dave 認證。

  4. 在 Amazon S3 主控台中,將下列儲存貯體政策連接至 DOC-EXAMPLE-BUCKET1 儲存貯體。如需說明,請參閱使用 Amazon S3 主控台新增儲存貯體政策。遵循新增儲存貯體政策的步驟。如需如何尋找帳號 ID 的詳細資訊,請參閱尋找您的 AWS 帳戶 ID

    政策會將 s3:PutObjects3:ListBucket 許可授予帳戶 B。此策略也會授與使用Daves3: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:::DOC-EXAMPLE-BUCKET1/*", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" ] }, { "Sid": "Statement3", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountA-ID:user/Dave" }, "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] } ] }

步驟 2:執行帳戶 B 任務

現在帳戶 B 具有對帳戶 A 儲存貯體執行作業的權限,帳戶 B 管理員會執行下列動作:

  • 將物件上傳至帳戶 A 的值區

  • 在物件 ACL 中新增授權,以允許帳戶 A (值區擁有者) 完全控制

使用 AWS CLI
  1. 使用put-object AWS CLI 指令上載物件。命令中的 ---body 參數會識別要上傳的來源檔案。例如,如果檔案位於機器的C:磁碟Windows機上,請指定c:\HappyFace.jpg--key 參數提供物件的金鑰名稱。

    aws s3api put-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --body HappyFace.jpg --profile AccountBadmin
  2. 新增物件 ACL 的授予許可,以允許儲存貯體擁有者可完全控制物件。如需如何尋找規範使用者 ID 的詳細資訊,請參閱《AWS 帳戶理參考指南》 AWS 帳戶中的「尋找您的標準使用者 ID」。

    aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBadmin
使用視窗工具 PowerShell
  1. 使用Write-S3Object指令上載物件。

    Write-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -key HappyFace.jpg -file HappyFace.jpg -StoredCredentials AccountBadmin
  2. 新增物件 ACL 的授予許可,以允許儲存貯體擁有者可完全控制物件。

    Set-S3ACL -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -CannedACLName "bucket-owner-full-control" -StoredCreden

步驟 3:測試許可

現在,驗證帳戶 A 中的使用者 Dave 可以存取帳戶 B 所擁有的物件。

使用 AWS CLI
  1. 將使用者 Dave 認證新增至設 AWS CLI 定檔,並建立新的設定檔UserDaveAccountA。如需詳細資訊,請參閱 設定逐步解說的工具

    [profile UserDaveAccountA] aws_access_key_id = access-key aws_secret_access_key = secret-access-key region = us-east-1
  2. 執行 get-object CLI 命令來下載 HappyFace.jpg,並將其儲存在本機。您可以新增 --profile 參數,來提供使用者 Dave 憑證。

    aws s3api get-object --bucket DOC-EXAMPLE-BUCKET1 --key HappyFace.jpg Outputfile.jpg --profile UserDaveAccountA
使用視窗工具 PowerShell
  1. 將使用者 Dave AWS 認證儲存為UserDaveAccountA永久性存放區。

    Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -storeas UserDaveAccountA
  2. 執行 Read-S3Object 命令來下載 HappyFace.jpg 物件,並將其儲存在本機。您可以新增 -StoredCredentials 參數,來提供使用者 Dave 憑證。

    Read-S3Object -BucketName DOC-EXAMPLE-BUCKET1 -Key HappyFace.jpg -file HappyFace.jpg -StoredCredentials UserDaveAccountA

步驟 4:清理

  1. 完成測試後,您可以執行以下操作來清理:

    1. 使用帳戶 A 憑證登入 AWS Management Console,並執行下列操作:

      • 在 Amazon S3 主控台中,移除連接至 DOC-EXAMPLE-BUCKET1 的儲存貯體政策。在儲存貯體 Properties (屬性) 中,刪除 Permissions (許可) 區段中的政策。

      • 如果儲存貯體是為此練習而建立,請在 Amazon S3 主控台中刪除物件,然後刪除儲存貯體。

      • IAM 主控台中,移除使AccountAadmin用者。如需step-by-step 指示,請參閱 IAM 使用者指南中的刪除 IAM 使用者

  2. 使用帳戶 B 憑證登入 AWS Management Console。在 IAM 主控台中,刪除使用者AccountBadmin