同じアカウントが所有するレプリケート元バケットとレプリケート先バケットのレプリケーションの設定 - Amazon Simple Storage Service

同じアカウントが所有するレプリケート元バケットとレプリケート先バケットのレプリケーションの設定

レプリケーションは、同一または異なる AWS リージョン にあるバケット間でオブジェクトを自動的に非同期コピーする機能です。レプリケーションでは、新しく作成されたオブジェクトおよびオブジェクトの更新が、レプリケート元バケットからレプリケート先バケットにコピーされます。詳細については、「オブジェクトのレプリケーション」を参照してください。

レプリケーションを設定するときは、レプリケート元バケットにレプリケーションルールを追加します。レプリケーションルールにより、レプリケート元のソースバケットオブジェクトと、レプリケートされたオブジェクトが保存されるレプリケート先バケットが定義されます。ルールを作成して、バケット内のすべてのオブジェクト、または特定のキー名のプレフィックス、1 つ以上のオブジェクトタグ、あるいはその両方を持つオブジェクトのサブセットをレプリケートできます。レプリケート先のバケットはレプリケート元バケットと同じ 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 にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [Buckets (バケット)] リストで、目的のバケットの名前を選択します。

  3. [管理] をクリックし、[レプリケーションルール] までスクロールして、[レプリケーションルールを作成] を選択します。

  4. [ルール名] で、後でルールを識別しやすいようにルールの名前を入力します。ルール名は必須であり、バケット内で一意である必要があります。

  5. Amazon S3 がユーザーのためにオブジェクトをレプリケートできる AWS Identity and Access Management (IAM) ロール を設定します。

    IAM ロールを設定するには、[Replication rule configuration (レプリケーションルールの設定)] セクションの [(IAM role (IAM ロール)] で、次のいずれかを実行します。

    • [Create new role (新しいロールの作成)] を選択して、Amazon S3 で新しい IAM ロールが自動的に作成されるようにすることを強くお勧めします。ルールを保存すると、選択したレプリケート元バケットとレプリケート先バケットに一致する IAM ロールに対して新しいポリシーが生成されます。

    • 既存の IAM ロールの使用も選択できます。その場合は、レプリケーションに必要なアクセス許可を Amazon S3 に付与するロールを選択する必要があります。このロールがレプリケーションルールに従うための十分なアクセス許可を Amazon S3 に付与しない場合、レプリケーションは失敗します。

    重要

    レプリケーションルールをバケットに追加する場合は、Amazon S3 にレプリケーションアクセス許可を付与する IAM ロールを渡すことができる iam:PassRole アクセス許可が必要です。詳細については、IAM ユーザーガイド.の「 AWS サービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。

  6. [Status (ステータス)] で、デフォルトにより [Enabled (有効)] が選択されていることを確認します。有効にされたルールは、保存するとすぐに機能し始めます。ルールを後から有効にする場合は、[無効] を選択します。

  7. バケットに既存のレプリケーションルールがある場合は、ルールの優先順位を指定するよう指示されます。ルールの優先順位を指定して、複数のルールの範囲に含まれるオブジェクトによって引き起こされる競合を回避する必要があります。ルールが重複している場合、Amazon S3 はルールの優先度を使用して適用するルールを決定します。数値が大きいほど、優先度が高くなります。ルーティングの優先度の詳細については、レプリケーション設定をご覧ください。

  8. [Replication rule configuration (レプリケーションルールの設定)] の [Source bucket (ソースバケット)] には、レプリケーションソースを設定するための次のオプションがあります。

    • バケット全体をレプリケートするには、[This rule applies to all objects in the bucket (このルールは、バケット内のすべてのオブジェクトに適用されます)] を選択します。

    • 同じプレフィックスを持つすべてのオブジェクトをレプリケートするには、[Limit the scope of this rule using one or more filters (1 つまたは複数のフィルターを使用してこのルールの適用範囲を制限します)] を選択します。これにより、文字列で始まる名前を持つすべてのオブジェクト (picturesなど) に対して、レプリケーションが制限されます。プレフィックスをボックスに入力します。

      注記

      フォルダの名前をプレフィックスとして入力する場合は、最後の文字に [/] (スラッシュ) を使用する必要があります (例: pictures/)。

    • 1 つまたは複数のオブジェクトタグを持つすべてのオブジェクトをレプリケートするには、[タグを追加] を選択し、ボックスにキーと値のペアを入力します。別のタグを追加するには、この手順を繰り返します。プレフィックスとタグを組み合わせることができます。オブジェクトロックの詳細については、タグを使用してストレージを分類するをご参照ください。

    新しいスキーマでは、プレフィックスとタグのフィルタリング、およびルールの優先順位付けがサポートされています。新しいスキーマの詳細については、下位互換性をご参照ください。ユーザーインターフェイスの背後で機能する Amazon S3 API で使用される XML の詳細については、「レプリケーション設定」を参照してください。新しいスキーマは、レプリケーション設定 XML V2 として記述されます。

  9. [レプリケート先] で、Amazon S3 がオブジェクトをレプリケートするバケットを選択します。

    注記

    レプリケート先バケットの数は、特定のパーティション内の AWS リージョン の数に制限されます。パーティションは、リージョンのグループです。AWS には、現在 aws (標準リージョン)、aws-cn (中国リージョン)、および aws-us-gov (AWS GovCloud [US] リージョン) の 3 つのパーティションがあります。Service Quotas を使用して、レプリケート先バケット制限の増加をリクエストできます。

    • アカウントのバケットにレプリケートするには、[このアカウントのバケットを選択] をクリックし、レプリケート先バケット名を入力または参照します。

    • 別の AWS アカウント のバケットにレプリケートするには、[Choose a bucket in another account] (別のアカウントのバケットを選択) を選択し、レプリケート先バケットのアカウント ID と名前を入力します。

      レプリケート先バケットがレプリケート元バケットとは別のアカウントにある場合は、レプリケート先バケットにバケットポリシーを追加して、レプリケート元バケットアカウントの所有者にオブジェクトをレプリケートするアクセス許可を付与する必要があります。詳細については、「レプリケーション元とレプリケーション先のバケットが異なる AWS アカウント によって所有されている場合の許可の付与」を参照してください。

    注記

    レプリケート先バケットでバージョニングが有効になっていない場合は、[バージョニングを有効化] ボタンを含む警告が表示されます。バケットでバージョニングを有効にするには、このボタンを選択します。

  10. [レプリケート先] の設定時に、次の追加オプションがあります。

    • [Object Ownership (オブジェクト所有者)] を有効にして、レプリケート先バケット内の新しいオブジェクトの所有を標準化する場合は、[Change object ownership to the destination bucket owner (オブジェクト所有者を送信先バケット所有者に変更)] を選択します。このオプションの詳細については、S3 のオブジェクトの所有権を使用したアップロードされたオブジェクトの所有権の管理をご参照ください。

    • レプリケート先でデータを特定のストレージクラスにレプリケートする場合は、[レプリケートされたオブジェクト用のストレージクラスを変更] を選択します。次に、レプリケート先のレプリケートされたオブジェクトに使用するストレージクラスを選択します。このオプションを選択しない場合、レプリケートされたオブジェクトのストレージクラスは元のオブジェクトのクラスと同じになります。

    • レプリケーション設定で削除マーカーレプリケーションを有効にする場合は、[削除マーカーのレプリケーション] を選択します。詳細については、「バケット間での削除マーカーのレプリケーション」を参照してください。

    • レプリケーション設定で Amazon S3 レプリカ変更の同期を有効にする場合は、[レプリカ変更の同期] を選択します。詳細については、「Amazon S3 レプリカの変更同期によるメタデータ変更のレプリケート」を参照してください。

    • レプリケーション設定で S3 レプリケーションメトリクスを有効にするには、[レプリケーションメトリクスとイベント] を選択します。詳細については、「レプリケーションメトリクスと Amazon S3 イベント通知による、進捗状況のモニタリング」を参照してください。

    • レプリケーション設定で S3 レプリケーション時間コントロール (S3 RTC) を有効にする場合は、[S3 Replication Time Control (S3 レプリケーション時間のコントロール)] を選択します。このオプションの詳細については、S3 Replication Time Control (S3 RTC) を使用してコンプライアンス要件を満たすをご参照ください。

    注記

    S3 RTC または S3 レプリケーションメトリクスを使用する場合は、追加料金が適用されます。

  11. AWS Key Management Service (AWS KMS) で暗号化されたソースバケットのオブジェクトをレプリケートするには、[レプリケーション条件] で、[AWS KMS で暗号化されたオブジェクトのレプリケート] を選択します。[AWS KMS key for encrypting destination objects] (送信先オブジェクトの暗号化用の キー) には、レプリケーションでの使用を許可するソースキーが示されています。デフォルトでは、すべてのソース CMK が含まれます。CMK の選択を絞り込むことができます。

    選択されていない AWS KMS CMK で暗号化されたオブジェクトはレプリケートされません。CMK または CMK のグループが選択されていますが、必要に応じて CMK を選択できます。AWS KMS をレプリケーションで使用する方法については、AWS KMS CMK を使用して、サーバー側の暗号化 (SSE) で作成されたオブジェクトをレプリケートする を参照してください。

    重要

    AWS KMS で暗号化されたオブジェクトをレプリケートすると、AWS KMS リクエストレートは、ソースリージョンでは倍になり、送信先リージョンでは同じ量だけ増加します。AWS KMS に対するこれらの呼び出しレートの増加は、レプリケーションの送信先リージョンに対して定義したカスタマーマスターキー (CMK) を使用してデータが再暗号化された方法によるものです。AWS KMS では、リージョンごとに呼び出しアカウントあたりのリクエストレートが制限されています。制限のデフォルト値については、AWS Key Management Service デベロッパーガイドAWS KMS の制限 - 1 秒あたりのリクエスト数: 可変を参照してください。

    レプリケーションにおける現在の Amazon S3 PUT オブジェクトリクエストレートが、アカウントでデフォルトで設定されている AWS KMS レート制限の半分を超えている場合は、AWS KMS リクエストレート制限の引き上げをリクエストすることをお勧めします。引き上げをリクエストするには、AWS Support センターのお問い合わせでケースを作成します。たとえば、現在の PUT オブジェクトのリクエストレートが 1 秒あたり 1,000 リクエストであり、オブジェクトの暗号化に AWS KMS を使用しているとします。この場合、レプリケート元リージョンとレプリケート先リージョン (リージョンが異なる場合) の両方で AWS KMS レート制限を毎秒 2,500 リクエストに引き上げるよう AWS Support に依頼することをお勧めします。これにより、AWS KMS によるスロットリングがなくなります。

    レプリケート元バケットの PUT オブジェクトのリクエストレートを確認するには、Amazon S3 の Amazon CloudWatch リクエストメトリクスの PutRequests を確認します。CloudWatch メトリクスの表示方法については、「S3 コンソールの使用」を参照してください

    AWS KMS で暗号化されたオブジェクトをレプリケートするように選択した場合は、レプリケート先バケットでレプリカの暗号化に使用する AWS KMS CMK の Amazon リソースネーム (ARN) を入力します。AWS KMS CMK の ARN は、IAM コンソールの [Encryption keys] (暗号化キー) の下にあります。または、ドロップダウンリストから CMK 名を選択します。

    AWS KMS CMK の作成の詳細については、AWS Key Management Service デベロッパーガイドキーの作成を参照してください。

    重要

    Amazon S3 コンソールには、AWS リージョンあたり 100 個の AWS KMS CMK のみが表示されます。同じリージョンに 100 個以上の CMK がある場合、S3 コンソールには最初の 100 個の CMK しか表示されません。コンソールに表示されていない KMS CMK を使用するには、[カスタム KMS ARN] を選択し、KMS CMK ARN を入力します。

  12. 終了するには、[Save (保存)] を選択します。

  13. ルールを保存したら、ルールを選択して [Edit rule (ルールの編集)] を選択することで、ルールを編集、有効化、無効化、または削除できます。

レプリケート元とレプリケート先のバケットが同じ AWS アカウント によって所有されている場合に AWS CLI を使用してレプリケーションを設定するには、レプリケート元とレプリケート先のバケットを作成し、バケットのバージョニングを有効にします。それから、オブジェクトをレプリケートする Amazon S3 許可を与える IAM ロールを作成し、レプリケーション設定をレプリケート元バケットに追加します。設定を確認するには、テストします。

レプリケート元バケットとレプリケート先バケットが同じ AWS アカウント によって所有されている場合にレプリケーションを設定するには

  1. AWS CLI の認証情報プロファイルを設定します。この例では、プロファイル名 acctA を使用します。認証情報プロファイルの設定については、AWS Command Line Interface ユーザーガイド名前付きプロファイルを参照してください。

    重要

    この演習に使用するプロファイルは、必要なアクセス許可を持っている必要があります。たとえば、レプリケーション設定で、Amazon S3 が引き受けることができる IAM ロールを指定します。使用するプロファイルに iam:PassRole アクセス権限がある場合のみ実行できます。詳細については、IAM ユーザーガイドの「AWS サービスにロールを渡すアクセス権限をユーザーに付与する」を参照してください。管理者ユーザーの認証情報を使用して名前付きプロファイルを作成すると、すべてのタスクを実行できるようになります。

  2. レプリケート元バケットを作成してバージョニングを有効にします。次のコードは、米国東部 (バージニア北部) (us-east-1) リージョンにレプリケート元バケットを作成します。

    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. レプリケート先バケットを作成してバージョニングを有効にします。次のコードは、米国西部 (オレゴン) (us-west-2) リージョンにレプリケート先バケットを作成します。

    注記

    レプリケート元バケットとレプリケート先バケットの両方が同じ AWS アカウント にある場合、レプリケーション設定をセットアップするには、同じプロファイルを使用します。この例では acctA を使用します。異なる AWS アカウント によってバケットが所有されている場合、レプリケーション設定をテストするには、それぞれに異なるプロファイルを指定します。この例では、レプリケーション先バケットに acctB プロファイルを使用します。

    aws s3api create-bucket \ --bucket destination \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket destination \ --versioning-configuration Status=Enabled \ --profile acctA
  4. IAM ロールを作成します。レプリケート元バケットに後で追加するレプリケーション設定でこのロールを指定します。Amazon S3 は、ユーザーに代わってオブジェクトをレプリケートするこの ロールを引き受けます。IAM ロールは 2 つのステップで作成します。

    • ロールを作成します。

    • アクセス権限ポリシーをロールにアタッチします。

    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:::source-bucket/*" ] }, { "Effect":"Allow", "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration" ], "Resource":[ "arn:aws:s3:::source-bucket" ] }, { "Effect":"Allow", "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Resource":"arn:aws:s3:::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:::destination-bucket" } } ] }
    2. destination-bucket および IAM-role-ARN の値を指定して JSON を更新します。変更を保存します。

    3. 次のコマンドを実行して、レプリケート元バケットにレプリケーション設定を追加します。必ずレプリケート元バケット名を指定してください。

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

    レプリケーション設定を取得するには、get-bucket-replication コマンドを使用します。

    $ aws s3api get-bucket-replication \ --bucket source \ --profile acctA
  6. Amazon S3 コンソールでセットアップをテストします。

    1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

    2. レプリケート元バケットに Tax という名前のフォルダを作成します。

    3. レプリケート元バケット内の Tax フォルダにサンプルオブジェクトを追加します。

      注記

      Amazon S3 がオブジェクトをレプリケートするのにかかる時間は、オブジェクトのサイズによって異なります。レプリケーションのステータスを確認する方法については、「レプリケーションステータス情報の取得」を参照してください。

      レプリケート先バケットで、以下の点を確認します。

      • Amazon S3 がオブジェクトをレプリケートしたこと。

      • オブジェクトの [プロパティ] で、[レプリケーションステータス] が Replica (これをレプリカオブジェクトとして識別する) に設定されていること。

      • オブジェクトの [プロパティ] で、アクセス権限セクションに何もアクセス権限が表示されていないこと。これは、レプリカがまだレプリケート元バケット所有者によって所有されており、レプリケート先バケット所有者にオブジェクトレプリカに対するアクセス権限がないことを意味します。オプションの設定を追加して、レプリカの所有権を変更するよう Amazon S3 に指示することができます。例については、「レプリケート元とレプリケート先のバケットが異なるアカウントによって所有されている場合での、レプリカの所有者の変更」を参照してください。

        
                                            レプリケーションのステータスとアクセス権限を示す、オブジェクトのプロパティのスクリーンショット。

    4. レプリケート元バケットにあるオブジェクトの ACL を更新し、レプリケート先バケットに変更が反映されることを確認します。

      手順については、「ACL の設定」を参照してください。

以下のコード例を使用して、AWS SDK for Java および AWS SDK for .NET で、レプリケーション設定をバケットにそれぞれ追加します。

Java

以下の例では、まずバケットにレプリケーション設定を追加した後、その設定を取得して確認します。ワーキングサンプルの作成とテストに関する手順については、「Amazon S3 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:role/%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 リソースネーム (ARN) を入力します。作業サンプルを作成およびテストする方法については、「Amazon S3 .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); } } } }