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

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

變更複本擁有者

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

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

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

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

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

如需詳細資訊,請參閱 所有權覆寫選項的考量將擁有者覆寫選項新增至複寫組態。如需 step-by-step 指示的工作範例,請參閱 如何變更複本擁有者

重要

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

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

所有權覆寫選項的考量

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

  • 依預設,來源物件的擁有者也擁有複本。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 會將來源儲存貯體中出現的新物件和相關聯的 ACLs 複寫至目的地儲存貯體。對於移除擁有者覆寫之前複寫的物件,Amazon S3 不會複寫 ACLs,因為 Amazon S3 所做的物件擁有權變更仍然有效。也就是說,將 ACLs 放在設定擁有者覆寫時複寫的物件版本上,繼續不會複寫。

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

警告

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

若要指定擁有者覆寫選項,請將下列項目新增至 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 複寫具有 的物件 稅金 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 來變更複本擁有權。

如需 step-by-step 指示,請參閱 為相同帳戶中的儲存貯體設定複寫。本主題提供在來源和目的地儲存貯體由相同和不同擁有時設定複寫組態的指示 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。請務必取代 使用者輸入預留位置 使用您自己的資訊。

      { "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:::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 擔任該角色的許可。

        { "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 角色。

        { "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 和 的值來編輯 JSONIAM-role-ARN。Replace (取代) IAM-role-ARN 以及您先前建立的 ARN 角色的 IAM。儲存變更。

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

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

    1. 登入 AWS Management Console 並在 Word 開啟 Amazon S3 主控台。 https://console.aws.amazon.com/s3/

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

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