為相同帳戶中的儲存貯體設定複寫 - Amazon Simple Storage Service

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

為相同帳戶中的儲存貯體設定複寫

即時複寫是自動、非同步地在相同或不同的儲存貯體之間複製物件 AWS 區域。即時複寫會將新建立的物件和物件更新從來源儲存貯體複製到目的地儲存貯體或儲存貯體。如需詳細資訊,請參閱在 區域內和跨區域複寫物件

設定複寫時,會將複寫規則新增至來源儲存貯體。複寫規則會定義要複寫的來源儲存貯體物件,以及存放已複寫物件的目的地儲存貯體。您可以建立規則,以特定的金鑰名稱前綴、一或多個物件標籤、或兩種都用,複寫儲存貯體中的所有物件,或一部分的物件。目的地儲存貯體可以 AWS 帳戶 與來源儲存貯體位於相同的 ,也可以位於不同的 帳戶中。

如果您指定要刪除的物件版本 ID,Amazon S3 會刪除來源儲存貯體中的該物件版本。但不會在目的地儲存貯體中進行刪除。換句話說,它不會從目的地儲存貯體中刪除相同的物件版本。這可防止資料遭到惡意刪除。

當您將複寫規則新增至儲存貯體時,預設會啟用此規則,讓它在您儲存它之後立即運作。

在此範例中,您可以為相同 擁有的來源和目的地儲存貯體設定即時複寫 AWS 帳戶。提供使用 Amazon S3 主控台、 AWS Command Line Interface (AWS CLI) 和 AWS SDK for Java 和 的範例 AWS SDK for .NET。

若要在目的地儲存貯體與 AWS 帳戶 來源儲存貯體位於相同位置時設定複寫規則,請遵循下列步驟。

如果目的地儲存貯體位在與來源儲存貯體不同的帳戶中,您必須將儲存貯體政策新增至目的地儲存貯體,以將複寫目的地儲存貯體中物件的許可授予來源儲存貯體帳戶擁有者。如需詳細資訊,請參閱當來源和目的地儲存貯體由不同 擁有時授予許可 AWS 帳戶

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

  2. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。

  3. Buckets (儲存貯體) 清單中,選擇您所需的儲存貯體名稱。

  4. 選擇管理標籤,向下捲動至複寫規則,然後選擇建立複寫規則

  5. 複寫規則設定區段的複寫規則名稱下,輸入規則名稱,以便之後識別規則。此名稱為必要,且在儲存貯體內必須是唯一的。

  6. Status (狀態) 下,預設會選取 Enabled (已啟用)。已啟用規則在您儲存它之後就會立即運作。如果希望稍後再啟用此規則,請選擇已停用

  7. 如果儲存貯體有現存的複寫規則,系統會指示您設定規則的優先順序。您必須設定規則優先順序,以免多項規則範圍內的物件引發衝突。如果發生規則重疊的情況,Amazon S3 會使用規則優先順序來判斷要套用哪一個規則。數字愈高,優先順序愈高。如需有關規則優先順序的詳細資訊,請參閱 複寫組態檔案元素

  8. 來源儲存貯體之下,您有下列選項可用來設定複寫來源:

    • 若要複寫整個儲存貯體,請選擇 Apply to all objects in the bucket (套用至儲存貯體中的所有物件)。

    • 若要複寫具有相同字首的所有物件,請選擇Limit the scope of this rule using one or more filters (使用一或多個篩選器限制此規則的範圍)。這會將複寫限制為具有以您指定字首開頭的所有物件 (例如 pictures) 名稱。在字首方塊中輸入字首。

      注意

      如果您輸入的字首是資料夾名稱,最後一個字元必須使用 / (正斜線) (例如,pictures/)。

    • 若要複寫具有一個或多個物件標籤的所有物件,請選擇新增標籤,然後在方塊中輸入關鍵值比對。重複此過程,添加另一個標籤。您可以合併字首與標籤。如需物件標籤的詳細資訊,請參閱 使用標籤分類儲存空間

    新的複寫組態 XML 結構描述支援規則的字首和標籤篩選和優先順序。如需有關新結構描述的資訊,請參閱 回溯相容性考量。如需與 Amazon S3 XML 搭配使用且在使用者介面後方運作的 API 相關的詳細資訊,請參閱 複寫組態檔案元素。新的結構描述描述為複寫組態 XML V2

  9. 目的地下,選擇要 Amazon S3 複寫物件的儲存貯體。

    注意

    目的地儲存貯體的數量僅限於指定分割區 AWS 區域 中的 數量。分割區是 Regions 的群組。 AWS 目前有三個分割區: aws (標準區域)、 aws-cn (中國區域) 和 aws-us-gov(AWS GovCloud (US) 區域)。您可以使用服務配額來要求增加目的地儲存貯體配額。

    • 若要複寫到帳戶中的儲存貯體,請選擇選擇此帳戶中的儲存貯體,然後輸入或瀏覽目的地儲存貯體名稱。

    • 若要複寫至不同儲存貯體或儲存貯體 AWS 帳戶,請選擇在另一個帳戶中指定儲存貯體,然後輸入目的地儲存貯體帳戶 ID 和儲存貯體名稱。

      如果目的地儲存貯體位在與來源儲存貯體不同的帳戶中,您必須將儲存貯體原則新增至目的地儲存貯體,以將複寫物件的許可授予來源儲存貯體帳戶擁有者。如需詳細資訊,請參閱當來源和目的地儲存貯體由不同 擁有時授予許可 AWS 帳戶

      或者,如果您想要啟用協助標準化目的地儲存貯體中新物件的擁有權,請選擇將物件擁有權變更為目的地儲存貯體擁有者。如需有關此選項的詳細資訊,請參閱 控制物件的擁有權,並停用儲存貯體的 ACLs

    注意

    如果未在目的地儲存貯體上啟用版本控制,您會收到包含啟用版本控制按鈕的警告訊息。選擇此按鈕,以在儲存貯體上啟用版本控制。

  10. 設定 Amazon S3 可以擔任的 AWS Identity and Access Management (IAM) 角色,以代表您複寫物件。

    若要設定 IAM 角色,請在 IAM 角色區段中,從 IAM 角色下拉式清單中選取下列其中一項:

    • 強烈建議您選擇建立新角色,讓 Amazon S3 為您建立新的 IAM 角色。當您儲存規則時,會為符合您選擇的來源和目的地儲存貯體的 IAM 角色產生新的政策。

    • 您可以選擇使用現有的 IAM 角色。如果這麼做,則必須選擇將必要複寫許可授予 Amazon S3 的角色。如果此角色未將遵循您複寫規則的足夠許可授予 Amazon S3,則複寫會失敗。

    重要

    當您將複寫規則新增至儲存貯體時,您必須具有iam:PassRole許可才能傳遞授予 Amazon S3 複寫許可的 IAM 角色。如需詳細資訊,請參閱 IAM 使用者指南中的授予使用者將角色傳遞至 的許可 AWS 服務

  11. 若要複寫來源儲存貯體中使用 AWS Key Management Service (AWS KMS) 金鑰 (SSE-KMS) 加密的物件,請選取加密下的複寫物件 AWS KMS。在用於加密目的地物件的AWS KMS 金鑰下,是您允許複寫使用的來源金鑰。預設包含所有來源 KMS 金鑰。若要縮小 KMS 金鑰選擇範圍,您可以選擇別名或金鑰 ID。

    您 AWS KMS keys 未選取的 加密物件不會複寫。已為您選擇 KMS 金鑰或一組 KMS 金鑰,但您可以視需要選擇 KMS 金鑰。如需使用 AWS KMS 搭配複寫的相關資訊,請參閱 複寫加密物件 (SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)

    重要

    當您複寫使用 加密的物件時 AWS KMS, AWS KMS 請求率會在來源區域中加倍,並在目的地區域中增加相同的數量。這些增加的呼叫率 AWS KMS 是由於使用您為複寫目的地區域定義的 KMS 金鑰來重新加密資料的方式。 AWS KMS 具有每個區域的每個呼叫帳戶的請求率配額。如需配額預設值的資訊,請參閱《AWS Key Management Service 開發人員指南》中的 AWS KMS 配額 – 每秒請求數:各有不同

    如果您在複寫期間目前的 Amazon S3 PUT 物件請求率超過您帳戶的預設 AWS KMS 費率限制的一半,建議您請求提高 AWS KMS 請求率配額。若要請求提高,請在 AWS Support 中心的聯絡我們中內建立案例。例如,假設您目前的PUT物件請求率為每秒 1,000 個請求,且您使用 AWS KMS 來加密物件。在此情況下,建議您 AWS Support 要求在來源和目的地區域 (如果不同) 中,將 AWS KMS 速率限制提高至每秒 2,500 個請求,以確保沒有調節 AWS KMS。

    若要查看來源儲存貯體中的PUT物件請求率,請在 Amazon S3 的 Amazon CloudWatch 請求指標PutRequests中檢視 。如需有關檢視 CloudWatch 指標的資訊,請參閱 使用 S3 主控台

    如果您選擇複寫使用 加密的物件 AWS KMS,請執行下列動作:

    1. AWS KMS key 下加密目的地物件 ,以下列其中一種方式指定您的 KMS 金鑰:

      • 若要從可用 KMS 金鑰清單中選擇,請選擇從 選擇 AWS KMS keys,然後從可用金鑰清單中選擇您的 KMS 金鑰。

        AWS 受管金鑰 (aws/s3) 和您的客戶受管金鑰都會顯示在此清單中。如需詳細了解客戶受管金鑰,請參閱《AWS Key Management Service 開發人員指南》中的客戶金鑰和 AWS 金鑰

      • 若要輸入 KMS 金鑰 Amazon Resource Name (ARN),請選擇輸入 AWS KMS key ARN,然後在出現的欄位中輸入您的 KMS 金鑰 ARN。此動作會加密目的地儲存貯體中的複本。您可以在 ARN 主控台的加密金鑰下找到 KMS for your IAM 金鑰。

      • 若要在 AWS KMS 主控台中建立新的客戶受管金鑰,請選擇建立 KMS 金鑰

        如需建立 的詳細資訊 AWS KMS key,請參閱 AWS Key Management Service 開發人員指南中的建立金鑰

      重要

      您只能使用 AWS 區域 與儲存貯體相同的 KMS 金鑰。當您從 KMS 金鑰中選擇選擇時,S3 主控台只會列出每個區域 100 個 KMS 金鑰。如果您在同一個區域中有超過 100 個 KMS 金鑰,則您只能看到 S3 主控台中的前 100 個 KMS 金鑰。若要使用主控台中未列出的 KMS 金鑰,請選擇輸入 AWS KMS key ARN,然後輸入您的 KMS 金鑰 ARN。

      當您在 Amazon S3 中使用 AWS KMS key 進行伺服器端加密時,您必須選擇對稱加密 KMS 金鑰。Amazon S3 僅支援對稱加密 KMS 金鑰,不支援非對稱 KMS 金鑰。如需詳細資訊,請參閱 AWS Key Management Service 開發人員指南中的識別對稱和非對稱 KMS 金鑰

      如需建立 的詳細資訊 AWS KMS key,請參閱 AWS Key Management Service 開發人員指南中的建立金鑰。如需 AWS KMS 搭配 Amazon S3 使用 的詳細資訊,請參閱 將伺服器端加密與 AWS KMS 金鑰搭配使用 (SSE-KMS)

  12. 目的地儲存方案之下,若要將資料複寫至目的地中的特定儲存方案,請選取變更已複寫物件的儲存方案。然後選擇您要用於目的地中已複寫物件的儲存體方案。如果您未選擇此選項,則已複寫物件的儲存體方案會與原始物件的類別相同。

  13. 設定其他複寫選項時,您具有下列其他選項:

    注意

    當您使用 S3 RTC 或 S3 複寫指標時,需支付額外費用。

  14. 若要完成,請選擇 Save (儲存)。

  15. 儲存規則之後,您可以選取規則並選擇編輯規則來編輯、啟用、停用或刪除規則

若要在來源和目的地儲存貯體由相同 擁有時使用 AWS CLI 設定複寫 AWS 帳戶,請執行下列動作:

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

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

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

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

您可以測試以驗證設定。

在來源和目的地儲存貯體由相同 擁有時設定複寫 AWS 帳戶
  1. 設定 AWS CLI的憑證描述檔。此範例使用描述檔名稱 acctA。如需有關設定憑證設定檔和使用具名設定檔的資訊,請參閱 AWS Command Line Interface 使用者指南中的組態和憑證檔案設定

    重要

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

  2. 使用下列 AWS CLI 命令建立來源儲存貯體並啟用版本控制。若要使用這些命令,請取代 使用者輸入預留位置 使用您自己的資訊。

    下列create-bucket命令會在美國東部 (維吉尼亞北部) (us-east-1) amzn-s3-demo-source-bucket 區域建立名為 的來源儲存貯體:

    aws s3api create-bucket \ --bucket amzn-s3-demo-source-bucket \ --region us-east-1 \ --profile acctA

    下列put-bucket-versioning命令會在儲存amzn-s3-demo-source-bucket貯體上啟用 S3 版本控制:

    aws s3api put-bucket-versioning \ --bucket amzn-s3-demo-source-bucket \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 使用下列 AWS CLI 命令建立目的地儲存貯體並啟用版本控制。若要使用這些命令,請取代 使用者輸入預留位置 使用您自己的資訊。

    注意

    若要在來源和目的地儲存貯體處於相同狀態時設定複寫組態 AWS 帳戶,請針對來源和目的地儲存貯體使用相同的設定檔。此範例使用 acctA

    若要在儲存貯體由不同 擁有時測試複寫組態 AWS 帳戶,請為每個帳戶指定不同的設定檔。例如,使用目的地儲存貯體的acctB設定檔。

    下列create-bucket命令會在美國西部 (奧勒岡) (us-west-2) 區域中建立名為 amzn-s3-demo-destination-bucket的目的地儲存貯體:

    aws s3api create-bucket \ --bucket amzn-s3-demo-destination-bucket \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA

    下列put-bucket-versioning命令會在儲存amzn-s3-demo-destination-bucket貯體上啟用 S3 版本控制:

    aws s3api put-bucket-versioning \ --bucket amzn-s3-demo-destination-bucket \ --versioning-configuration Status=Enabled \ --profile acctA
  4. 建立 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 iam create-role \ --role-name replicationRole \ --assume-role-policy-document file://s3-role-trust-policy.json \ --profile acctA
    2. 將許可政策連接到角色。

      1. 複製下列許可政策,並將它儲存至本機電腦目前目錄中名為 s3-role-permissions-policy.json 的檔案。此政策會授予各種 Amazon S3 儲存貯體與物件動作的許可。

        { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "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:ReplicateTags" ], "Resource":"arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ] }
      2. 執行下列命令以建立政策,並將它連接至角色。取代 使用者輸入預留位置 使用您自己的資訊。

        $ aws iam put-role-policy \ --role-name replicationRole \ --policy-document file://s3-role-permissions-policy.json \ --policy-name replicationRolePolicy \ --profile acctA
  5. 將複寫組態新增至來源儲存貯體。

    1. 雖然 Amazon S3 API 要求您將複寫組態指定為 XML,但 AWS CLI 要求您將複寫組態指定為 JSON。將下列 JSON 儲存在replication.json名為您電腦上本機目錄的檔案中。

      { "Role": "IAM-role-ARN", "Rules": [ { "Status": "Enabled", "Priority": 1, "DeleteMarkerReplication": { "Status": "Disabled" }, "Filter" : { "Prefix": "Tax"}, "Destination": { "Bucket": "arn:aws:s3:::amzn-s3-demo-destination-bucket" } } ] }
    2. amzn-s3-demo-destination-bucket和 的值取代IAM-role-ARN為您自己的資訊,以更新 JSON。儲存變更。

    3. 執行下列put-bucket-replication命令,將複寫組態新增至來源儲存貯體。請務必提供來源儲存貯體名稱:

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket amzn-s3-demo-source-bucket \ --profile acctA

    若要擷取複寫組態,請使用 get-bucket-replication命令:

    $ aws s3api get-bucket-replication \ --bucket amzn-s3-demo-source-bucket \ --profile acctA
  6. 透過執行下列步驟,在 Amazon S3 主控台中測試 設定:

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

    2. 在左側導覽窗格中,選擇 Buckets (儲存貯體)。在一般用途儲存貯體清單中,選擇來源儲存貯體。

    3. 在來源儲存貯體中,建立名為 的資料夾Tax

    4. 將範例物件新增至來源儲存貯體中的Tax資料夾。

      注意

      Amazon S3 複寫物件所需的時間取決於物件的大小。如需如何查看複寫狀態的相關資訊,請參閱 取得複寫狀態資訊

      destination 儲存貯體中驗證下列事項:

      • Amazon S3 已複寫物件。

      • 物件是複本。在物件的屬性索引標籤上,向下捲動至物件管理概觀區段。在管理組態下,請參閱複寫狀態下的 值。請確定此值設定為 REPLICA

      • 複本由來源儲存貯體帳戶擁有。您可以在物件的許可索引標籤上驗證物件擁有權。

        如果來源和目的地儲存貯體由不同的帳戶擁有,您可以新增選用組態,告訴 Amazon S3 變更目的地帳戶的複本擁有權。如需範例,請參閱如何變更複本擁有者

使用下列程式碼範例, AWS SDK for .NET分別將複寫組態新增至具有 AWS SDK for Java 和 的儲存貯體。

Java

下列範例會將複寫組態新增至儲存貯體,然後擷取它,並驗證組態。如需建立和測試工作範例的說明,請參閱 AWS SDK for Java 開發人員指南中的入門

import com.amazonaws.AmazonServiceException; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.identitymanagement.AmazonIdentityManagement; import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder; import com.amazonaws.services.identitymanagement.model.CreateRoleRequest; import com.amazonaws.services.identitymanagement.model.PutRolePolicyRequest; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.model.BucketReplicationConfiguration; import com.amazonaws.services.s3.model.BucketVersioningConfiguration; import com.amazonaws.services.s3.model.CreateBucketRequest; import com.amazonaws.services.s3.model.DeleteMarkerReplication; import com.amazonaws.services.s3.model.DeleteMarkerReplicationStatus; import com.amazonaws.services.s3.model.ReplicationDestinationConfig; import com.amazonaws.services.s3.model.ReplicationRule; import com.amazonaws.services.s3.model.ReplicationRuleStatus; import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest; import com.amazonaws.services.s3.model.StorageClass; import com.amazonaws.services.s3.model.replication.ReplicationFilter; import com.amazonaws.services.s3.model.replication.ReplicationFilterPredicate; import com.amazonaws.services.s3.model.replication.ReplicationPrefixPredicate; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CrossRegionReplication { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String accountId = "*** Account ID ***"; String roleName = "*** Role name ***"; String sourceBucketName = "*** Source bucket name ***"; String destBucketName = "*** Destination bucket name ***"; String prefix = "Tax/"; String roleARN = String.format("arn:aws:iam::%s:%s", accountId, roleName); String destinationBucketARN = "arn:aws:s3:::" + destBucketName; AmazonS3 s3Client = AmazonS3Client.builder() .withCredentials(new ProfileCredentialsProvider()) .withRegion(clientRegion) .build(); createBucket(s3Client, clientRegion, sourceBucketName); createBucket(s3Client, clientRegion, destBucketName); assignRole(roleName, clientRegion, sourceBucketName, destBucketName); try { // Create the replication rule. List<ReplicationFilterPredicate> andOperands = new ArrayList<ReplicationFilterPredicate>(); andOperands.add(new ReplicationPrefixPredicate(prefix)); Map<String, ReplicationRule> replicationRules = new HashMap<String, ReplicationRule>(); replicationRules.put("ReplicationRule1", new ReplicationRule() .withPriority(0) .withStatus(ReplicationRuleStatus.Enabled) .withDeleteMarkerReplication( new DeleteMarkerReplication().withStatus( DeleteMarkerReplicationStatus.DISABLED)) .withFilter(new ReplicationFilter().withPredicate( new ReplicationPrefixPredicate(prefix))) .withDestinationConfig(new ReplicationDestinationConfig() .withBucketARN(destinationBucketARN) .withStorageClass(StorageClass.Standard))); // Save the replication rule to the source bucket. s3Client.setBucketReplicationConfiguration(sourceBucketName, new BucketReplicationConfiguration() .withRoleARN(roleARN) .withRules(replicationRules)); // Retrieve the replication configuration and verify that the configuration // matches the rule we just set. BucketReplicationConfiguration replicationConfig = s3Client .getBucketReplicationConfiguration(sourceBucketName); ReplicationRule rule = replicationConfig.getRule("ReplicationRule1"); System.out.println("Retrieved destination bucket ARN: " + rule.getDestinationConfig().getBucketARN()); System.out.println("Retrieved priority: " + rule.getPriority()); System.out.println("Retrieved source-bucket replication rule status: " + rule.getStatus()); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } private static void createBucket(AmazonS3 s3Client, Regions region, String bucketName) { CreateBucketRequest request = new CreateBucketRequest(bucketName, region.getName()); s3Client.createBucket(request); BucketVersioningConfiguration configuration = new BucketVersioningConfiguration() .withStatus(BucketVersioningConfiguration.ENABLED); SetBucketVersioningConfigurationRequest enableVersioningRequest = new SetBucketVersioningConfigurationRequest( bucketName, configuration); s3Client.setBucketVersioningConfiguration(enableVersioningRequest); } private static void assignRole(String roleName, Regions region, String sourceBucket, String destinationBucket) { AmazonIdentityManagement iamClient = AmazonIdentityManagementClientBuilder.standard() .withRegion(region) .withCredentials(new ProfileCredentialsProvider()) .build(); StringBuilder trustPolicy = new StringBuilder(); trustPolicy.append("{\\r\\n "); trustPolicy.append("\\\"Version\\\":\\\"2012-10-17\\\",\\r\\n "); trustPolicy.append("\\\"Statement\\\":[\\r\\n {\\r\\n "); trustPolicy.append("\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Principal\\\":{\\r\\n "); trustPolicy.append("\\\"Service\\\":\\\"s3.amazonaws.com\\\"\\r\\n },\\r\\n "); trustPolicy.append("\\\"Action\\\":\\\"sts:AssumeRole\\\"\\r\\n }\\r\\n ]\\r\\n}"); CreateRoleRequest createRoleRequest = new CreateRoleRequest() .withRoleName(roleName) .withAssumeRolePolicyDocument(trustPolicy.toString()); iamClient.createRole(createRoleRequest); StringBuilder permissionPolicy = new StringBuilder(); permissionPolicy.append( "{\\r\\n \\\"Version\\\":\\\"2012-10-17\\\",\\r\\n \\\"Statement\\\":[\\r\\n {\\r\\n "); permissionPolicy.append( "\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Action\\\":[\\r\\n "); permissionPolicy.append("\\\"s3:GetObjectVersionForReplication\\\",\\r\\n "); permissionPolicy.append( "\\\"s3:GetObjectVersionAcl\\\"\\r\\n ],\\r\\n \\\"Resource\\\":[\\r\\n "); permissionPolicy.append("\\\"arn:aws:s3:::"); permissionPolicy.append(sourceBucket); permissionPolicy.append("/*\\\"\\r\\n ]\\r\\n },\\r\\n {\\r\\n "); permissionPolicy.append( "\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Action\\\":[\\r\\n "); permissionPolicy.append( "\\\"s3:ListBucket\\\",\\r\\n \\\"s3:GetReplicationConfiguration\\\"\\r\\n "); permissionPolicy.append("],\\r\\n \\\"Resource\\\":[\\r\\n \\\"arn:aws:s3:::"); permissionPolicy.append(sourceBucket); permissionPolicy.append("\\r\\n "); permissionPolicy .append("]\\r\\n },\\r\\n {\\r\\n \\\"Effect\\\":\\\"Allow\\\",\\r\\n "); permissionPolicy.append( "\\\"Action\\\":[\\r\\n \\\"s3:ReplicateObject\\\",\\r\\n "); permissionPolicy .append("\\\"s3:ReplicateDelete\\\",\\r\\n \\\"s3:ReplicateTags\\\",\\r\\n "); permissionPolicy.append("\\\"s3:GetObjectVersionTagging\\\"\\r\\n\\r\\n ],\\r\\n "); permissionPolicy.append("\\\"Resource\\\":\\\"arn:aws:s3:::"); permissionPolicy.append(destinationBucket); permissionPolicy.append("/*\\\"\\r\\n }\\r\\n ]\\r\\n}"); PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest() .withRoleName(roleName) .withPolicyDocument(permissionPolicy.toString()) .withPolicyName("crrRolePolicy"); iamClient.putRolePolicy(putRolePolicyRequest); } }
C#

下列 AWS SDK for .NET 程式碼範例會將複寫組態新增至儲存貯體,然後加以擷取。若要使用此程式碼,請提供儲存貯體的名稱,以及 IAM 角色的 Amazon Resource Name (ARN)。如需設定和執行程式碼範例的相關資訊,請參閱 AWS SDK for .NET 開發人員指南中的 入門 AWS SDK for .NET

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; using System.Threading.Tasks; namespace Amazon.DocSamples.S3 { class CrossRegionReplicationTest { private const string sourceBucket = "*** source bucket ***"; // Bucket ARN example - arn:aws:s3:::destinationbucket private const string destinationBucketArn = "*** destination bucket ARN ***"; private const string roleArn = "*** IAM Role ARN ***"; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint sourceBucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(sourceBucketRegion); EnableReplicationAsync().Wait(); } static async Task EnableReplicationAsync() { try { ReplicationConfiguration replConfig = new ReplicationConfiguration { Role = roleArn, Rules = { new ReplicationRule { Prefix = "Tax", Status = ReplicationRuleStatus.Enabled, Destination = new ReplicationDestination { BucketArn = destinationBucketArn } } } }; PutBucketReplicationRequest putRequest = new PutBucketReplicationRequest { BucketName = sourceBucket, Configuration = replConfig }; PutBucketReplicationResponse putResponse = await s3Client.PutBucketReplicationAsync(putRequest); // Verify configuration by retrieving it. await RetrieveReplicationConfigurationAsync(s3Client); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } } private static async Task RetrieveReplicationConfigurationAsync(IAmazonS3 client) { // Retrieve the configuration. GetBucketReplicationRequest getRequest = new GetBucketReplicationRequest { BucketName = sourceBucket }; GetBucketReplicationResponse getResponse = await client.GetBucketReplicationAsync(getRequest); // Print. Console.WriteLine("Printing replication configuration information..."); Console.WriteLine("Role ARN: {0}", getResponse.Configuration.Role); foreach (var rule in getResponse.Configuration.Rules) { Console.WriteLine("ID: {0}", rule.Id); Console.WriteLine("Prefix: {0}", rule.Prefix); Console.WriteLine("Status: {0}", rule.Status); } } } }