當不同帳戶擁有來源與目的地儲存貯體時變更複本擁有者 - Amazon Simple Storage Service

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

當不同帳戶擁有來源與目的地儲存貯體時變更複本擁有者

當複寫組態中的來源目標儲存貯體擁有不同時 AWS 帳戶,您可以告訴 Amazon S3 將複本擁有權變更為擁有目標儲存貯體 AWS 帳戶 的擁有權。此範例說明如何使用 Amazon S3 主控台以及變 AWS CLI 更複本擁有權。如需詳細資訊,請參閱 變更複本擁有者

注意

當您使用 S3 複寫且來源和目的地儲存貯體屬於不同時 AWS 帳戶,目的地儲存貯體的擁有者可以停用 ACL (使用儲存貯體擁有者強制執行物件擁有權設定),將複本擁有權變更為擁有目的 AWS 帳戶 地儲存貯體的擁有權。此設定會模擬現有的擁有者覆寫行為,而無需 s3:ObjectOwnerOverrideToBucketOwner 許可。這意味著使用儲存貯體擁有者強制執行設定複寫至目的地儲存貯體的所有物件都由目的地儲存貯體擁有者所擁有。如需「物件擁有權」的詳細資訊,請參閱 控制物件的擁有權並停用儲存貯體的 ACL

如需 AWS Key Management Service 在跨帳戶案例中使用資料夾端加密來設定複寫的詳細資訊,請參閱。跨帳戶案例之授予其他許可

如需 step-by-step 指示,請參閱為相同帳戶擁有的來源和目的地儲存貯體設定複寫。本主題提供在值區為相同且不同擁有時設定複製組態的指示 AWS 帳戶。

若要使用變更複本擁有權 AWS CLI,您可以建立儲存貯體、在儲存貯體上啟用版本控制、建立 IAM 角色以授予 Amazon S3 複寫物件的權限,以及將複寫組態新增至來源儲存貯體。請在複寫組態中指示 Amazon S3 變更複本擁有者。您也可以測試設定。

當來源和目的地值區為不同時變更複本擁有權 AWS 帳戶 (AWS CLI)
  1. 在此範例中,您會以兩個不同的方式建立來源值區和的地值區 AWS 帳戶。 AWS CLI 使用兩個具名的設定檔進行配置。此範例分別使用名為 acctAacctB 的描述檔。如需設定憑證描述檔的詳細資訊,請參閱《AWS Command Line Interface 使用者指南》https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html中的具名描述檔

    重要

    用於此練習的描述檔必須有必要的許可。例如,您可以在複寫組態中指定 Amazon S3 可以擔任的 IAM 角色。只有當您所用的描述檔有 iam:PassRole 許可時才可執行此作業。如果您使用管理員使用者憑證建立具名描述檔,即可執行所有任務。如需詳細資訊,請參閱《IAM 使用者指南》中的授與使用者將角色傳遞給 AWS 服務的權限。

    您需要確定這些描述檔有必要的許可。例如,複寫組態包含 Amazon S3 可以擔任的 IAM 角色。用以連接此類組態和儲存貯體的具名描述檔只有在具備 iam:PassRole 許可時才可執行此作業。如果您在建立這些具名描述檔時指定管理員使用者憑證,則它們全都具備所有許可。如需詳細資訊,請參閱《IAM 使用者指南》中的授與使用者將角色傳遞給 AWS 服務的權限。

  2. 建立 source 儲存貯體並啟用版本控制。本範例會在美國東部 (維吉尼亞北部) (us-east-1) 區域中建立 source 儲存貯體。

    aws s3api create-bucket \ --bucket source \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket source \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 建立 destination 儲存貯體並啟用版本控制。本範例會在美國西部 (奧勒岡) (us-west-2) 區域中建立 destination 儲存貯體。使用不同於 source 儲存貯體所使用的 AWS 帳戶 設定檔。

    aws s3api create-bucket \ --bucket destination \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctB
    aws s3api put-bucket-versioning \ --bucket destination \ --versioning-configuration Status=Enabled \ --profile acctB
  4. 您必須在 destination 儲存貯體政策中新增許可,以允許複本擁有權的變更。

    1. 將下列政策儲存至 destination-bucket-policy.json

      { "Version": "2012-10-17", "Statement": [ { "Sid": "destination_bucket_policy_sid", "Principal": { "AWS": "source-bucket-owner-account-id" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::destination/*" ] } ] }
    2. 將以上原則放到 destination 儲存貯體:

      aws s3api put-bucket-policy --region $ {destination_region} --bucket $ {destination} --policy file://destination_bucket_policy.json
  5. 建立 IAM 角色。您可以在複寫組態中指定稍後要新增至 source 儲存貯體的角色,Amazon S3 就會擔任此角色以代您複寫物件。建立 IAM 角色需要兩個步驟:

    • 建立角色。

    • 將許可政策連接到角色。

    1. 建立 IAM 角色。

      1. 複製下列信任政策,並將它儲存至本機電腦目前目錄下名稱為 s3-role-trust-policy.json 的檔案中。此政策會授予 Amazon S3 擔任該角色的許可。

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
      2. 執行下列 AWS CLI 命令以建立角色。

        $ aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
    2. 將許可政策連接到角色。

      1. 複製下列許可政策,並將它儲存至本機電腦目前目錄中名為 s3-role-perm-pol-changeowner.json 的檔案。此政策會授予各種 Amazon S3 儲存貯體與物件動作的許可。在下列步驟中,您需要建立 IAM 角色,並將此政策連接至該角色。

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::source/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Resource":"arn:aws:s3:::destination/*" } ] }
      2. 若要建立政策並將它連接至角色,請執行下列命令。

        $ aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-perm-pol-changeowner.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
  6. 將複寫組態新增到來源儲存貯體。

    1. AWS CLI 需要將複寫組態指定為 JSON。將下列 JSON 儲存至您本機電腦目前目錄中名為 replication.json 的檔案。在組態中,新增 AccessControlTranslation 指出複本擁有權的變更。

      { "Role":"IAM-role-ARN", "Rules":[ { "Status":"Enabled", "Priority":1, "DeleteMarkerReplication":{ "Status":"Disabled" }, "Filter":{ }, "Status":"Enabled", "Destination":{ "Bucket":"arn:aws:s3:::destination", "Account":"destination-bucket-owner-account-id", "AccessControlTranslation":{ "Owner":"Destination" } } } ] }
    2. 提供 destination 儲存貯體擁有者帳戶 ID 和 IAM-role-ARN 的值,以編輯 JSON。儲存變更。

    3. 執行下列命令,將複寫組態新增至來源儲存貯體。提供 source 儲存貯體名稱。

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket source \ --profile acctA
  7. 在 Amazon S3 主控台中檢查複本擁有權。

    1. 登入 AWS Management Console 並開啟 Amazon S3 主控台,網址為 https://console.aws.amazon.com/s3/

    2. 將物件新增到來源儲存貯體。確認目的地值區包含物件複本,以及複本的擁有權已變更為擁有的地值區 AWS 帳戶 的擁有權。

如需新增複寫組態的程式碼範例,請參閱 使用 AWS 軟體開發套件。您需要正確修改複寫組態。如需相關概念資訊,請參閱 變更複本擁有者