View a markdown version of this page

變更複本擁有者 - Amazon Simple Storage Service

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

變更複本擁有者

在複寫中,來源物件的擁有者依預設也擁有複本。不過,當來源和目的地儲存貯體由不同的 擁有時 AWS 帳戶,您可能想要變更複本擁有權。例如,您可能想要變更擁有權,以限制對物件複本的存取。在複寫組態中,您可以新增選用的組態設定,將複本擁有權變更為 AWS 帳戶 擁有目的地儲存貯體的 。

若要變更複本擁有者,請執行下列動作:

  • 將擁有者覆寫選項新增至複寫組態,以指示 Amazon S3 變更複本所有權。

  • 授予 Amazon S3 變更複本擁有權的 s3:ObjectOwnerOverrideToBucketOwner 許可。

  • 在目的地儲存貯體政策中新增 s3:ObjectOwnerOverrideToBucketOwner 許可,以允許變更複本所有權。s3:ObjectOwnerOverrideToBucketOwner 許可能夠讓目的地儲存貯體的擁有者接受物件複本的擁有權。

如需詳細資訊,請參閱所有權覆寫選項的考量事項及將擁有者覆寫選項新增至複寫組態。如需含逐步說明的運作範例,請參閱 如何變更複本擁有者。

重要

您可以針對物件擁有權使用儲存貯體擁有者強制執行的「物件擁有權」設定,而不是使用擁有者覆寫選項。當您使用複寫,且來源和目的地儲存貯體由不同的 擁有時 AWS 帳戶,目的地儲存貯體的儲存貯體擁有者可以使用物件擁有權的儲存貯體擁有者強制執行設定,將複本擁有權變更為 AWS 帳戶 擁有目的地儲存貯體的 。此設定會停用物件存取控制清單 (ACL)。

由儲存貯體擁有者強制執行的設定會模擬現有的擁有者覆寫行為,而無需 s3:ObjectOwnerOverrideToBucketOwner 許可。使用儲存貯體擁有者強制執行設定複寫至目的地儲存貯體的所有物件都由目的地儲存貯體擁有者所擁有。如需「物件擁有權」的詳細資訊,請參閱 控制物件的擁有權並停用儲存貯體的 ACL。

所有權覆寫選項的考量事項

當您設定擁有者覆寫選項時有下列考量:

  • 依預設,來源物件的擁有者也擁有複本。Amazon S3 會複寫物件版本以及與其相關聯的 ACL。

    如果您將擁有者覆寫選項新增至您的複寫組態,Amazon S3 僅會複寫物件版本,而不會複寫 ACL。此外,Amazon S3 不會將後續變更複寫到來源物件 ACL。Amazon S3 會在複本上設定 ACL,將完整控制權授予目的地儲存貯體擁有者。

  • 當您更新複寫組態以啟用或停用擁有者覆寫時,會發生下列行為:

    • 如果您將擁有者覆寫選項新增至複寫組態:

      當 Amazon S3 複寫物件版本時,其會捨棄與來源物件相關聯的 ACL。相反地,Amazon S3 會在複本上設定 ACL,將完整控制權授予目的地儲存貯體的擁有者。Amazon S3 不會將後續變更複寫到來源物件 ACL。不過,如果是在您設定擁有者覆寫選項之前即已複寫的物件版本,就不適用這項 ACL 變更。針對在設定擁有者覆寫之前即已複寫的來源物件,系統會繼續複寫其中的任何 ACL 更新 (因為物件及其複本的擁有者仍然相同)。

    • 如果您移除複寫組態中的擁有者覆寫選項:

      Amazon S3 會將來源儲存貯體中出現的新物件與相關聯的 ACL 複寫至目的地儲存貯體。如果物件是在您移除擁有者覆寫之前即已複寫,Amazon S3 就不會複寫 ACL,因為 Amazon S3 所做的物件擁有權變更仍然有效。亦即,針對在設定擁有者覆寫時複寫的物件版本,系統仍然不會複寫其上的 ACL。

將擁有者覆寫選項新增至複寫組態

警告

只有在來源和目的地儲存貯體由不同 擁有時,才新增擁有者覆寫選項 AWS 帳戶。Amazon S3 不會檢查儲存貯體的擁有者是相同或不同的帳戶。如果您在兩個儲存貯體都由相同擁有時新增擁有者覆寫 AWS 帳戶,Amazon S3 會套用擁有者覆寫。此選項會將完整許可授予目的地儲存貯體擁有者,而且不會將後續更新複寫至來源物件存取控制清單 (ACL)。複本擁有者可以使用 PutObjectAcl 要求直接變更與複本相關聯的 ACL,但不是透過複寫。

若要指定擁有者覆寫選項,請將下列項目新增至 Destination 元素:

  • AccessControlTranslation 元素,其可通知 Amazon S3 變更複本擁有權

  • Account 元素,指定目的地儲存貯體擁有者 AWS 帳戶 的

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> ... <Destination> ... <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> <Account>destination-bucket-owner-account-id</Account> </Destination> </Rule> </ReplicationConfiguration>

下列複寫組態範例會通知 Amazon S3,將含 Tax 金鑰字首的物件複寫至 amzn-s3-demo-destination-bucket 目的地儲存貯體,並變更複本的擁有權。若要使用此範例,請以您自己的資訊取代 user input placeholders。

<?xml version="1.0" encoding="UTF-8"?> <ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Role>arn:aws:iam::account-id:role/role-name</Role> <Rule> <ID>Rule-1</ID> <Priority>1</Priority> <Status>Enabled</Status> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Destination> <Bucket>arn:aws:s3:::amzn-s3-demo-destination-bucket</Bucket> <Account>destination-bucket-owner-account-id</Account> <AccessControlTranslation> <Owner>Destination</Owner> </AccessControlTranslation> </Destination> </Rule> </ReplicationConfiguration>

授予 Amazon S3 變更複本擁有權的許可

在與 AWS Identity and Access Management (IAM) 角色相關聯的許可政策中新增s3:ObjectOwnerOverrideToBucketOwner動作的許可,授予 Amazon S3 變更複本擁有權的許可。此角色為您在複寫組態中指定的 IAM 角色,其可讓 Amazon S3 擔任角色並代您複寫物件。若要使用下列範例,請使用目的地儲存貯體的名稱取代 amzn-s3-demo-destination-bucket。

... { "Effect":"Allow", "Action":[ "s3:ObjectOwnerOverrideToBucketOwner" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ...

在目的地儲存貯體政策中新增許可,以允許變更複本所有權

目的地儲存貯體擁有者必須授予來源儲存貯體擁有者變更複本所有權的許可。目的地儲存貯體擁有者可授予來源儲存貯體擁有者 s3:ObjectOwnerOverrideToBucketOwner 動作的許可。此許可能夠讓目的地儲存貯體擁有者接受物件複本的所有權。下列範例儲存貯體政策陳述式說明如何執行此作業。若要使用此範例,請以您自己的資訊取代 user input placeholders。

... { "Sid":"1", "Effect":"Allow", "Principal":{"AWS":"source-bucket-account-id"}, "Action":["s3:ObjectOwnerOverrideToBucketOwner"], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ...

如何變更複本擁有者

當複寫組態中的來源和目的地儲存貯體由不同的 擁有時 AWS 帳戶,您可以指示 Amazon S3 將複本擁有 AWS 帳戶 權變更為擁有目的地儲存貯體的 。下列範例示範如何使用 Amazon S3 主控台、 AWS Command Line Interface (AWS CLI) 和 AWS SDKs來變更複本擁有權。

如需逐步說明,請參閱 設定相同帳戶內的儲存貯體複寫。本主題提供當來源和目的地儲存貯體為相同和不同擁有者時,設定複寫組態的指示 AWS 帳戶。

下列程序說明如何使用 AWS CLI變更複本擁有權。在此過程中,您將執行以下操作:

  • 建立來源與目的地儲存貯體。

  • 在儲存貯體上啟用版本控制。

  • 建立 AWS Identity and Access Management (IAM) 角色,授予 Amazon S3 複寫物件的許可。

  • 將複寫組態新增至來源儲存貯體。

  • 請在複寫組態中指示 Amazon S3 變更複本擁有權。

  • 測試您的複寫組態。

在來源和目的地儲存貯體由 different AWS 帳戶 (AWS CLI) 擁有時變更複本擁有權

若要使用此程序中的範例 AWS CLI 命令,請將 取代user input placeholders為您自己的資訊。

  1. 在此範例中,您會在兩個不同的 中建立來源和目的地儲存貯體 AWS 帳戶。若要使用這兩個帳戶,請使用兩個具名設定檔來設定 AWS CLI 。此範例分別使用名為 acctA 和 acctB 的設定檔。如需設定憑證設定檔和使用具名設定檔的相關資訊,請參閱《AWS Command Line Interface 使用者指南》中的組態和憑證檔案設定。

    重要

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

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

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

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

    1. 將以下政策儲存到名為 destination-bucket-policy.json 的檔案。請務必以您自己的資訊取代 user input placeholders。

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Sid": "destination_bucket_policy_sid", "Principal": { "AWS": "source-bucket-owner-123456789012" }, "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }
    2. 使用下列 put-bucket-policy 命令,將上述政策新增至目的地儲存貯體:

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

    • 建立角色。

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

    1. 建立 IAM 角色。

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

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

        $ aws iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA

        記下您所建立 IAM 角色的 Amazon Resource Name (ARN)。稍後的步驟中會需要此 ARN。

    2. 將許可政策連接到角色。

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

        JSON
        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::amzn-s3-demo-source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ObjectOwnerOverrideToBucketOwner", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ] }
      2. 若要將先前的許可政策附加至角色,請執行下列 put-role-policy 命令:

        $ 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:::amzn-s3-demo-destination-bucket", "Account":"destination-bucket-owner-account-id", "AccessControlTranslation":{ "Owner":"Destination" } } } ] }
    2. 透過提供目的地儲存貯體名稱、目的地儲存貯體擁有者帳戶 ID 和 IAM-role-ARN 的值來編輯 JSON。將 IAM-role-ARN 取代為您先前建立之 IAM 角色的 ARN。儲存變更。

    3. 若要將複寫組態新增至來源儲存貯體,請執行下列命令:

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket amzn-s3-demo-source-bucket \ --profile acctA
  7. 在 Amazon S3 主控台中檢查複本擁有權,以測試您的複寫組態。

    1. 登入 AWS 管理主控台 ,並在 https://console.aws.amazon.com/s3/:// 開啟 Amazon S3 主控台。

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

如需新增複寫組態的程式碼範例,請參閱使用 AWS SDKs。您必須正確修改複寫組態。如需相關概念資訊,請參閱 變更複本擁有者。