Amazon Simple Storage Service
開発者ガイド (API バージョン 2006-03-01)

例 4: 暗号化オブジェクトのレプリケート

デフォルトで Amazon S3 は、AWS KMS が管理するキーによりサーバー側の暗号化を使用して保管されているオブジェクトをレプリケートしません。暗号化オブジェクトをレプリケートするには、バケットレプリケーション設定を変更して、Amazon S3 がこれらのオブジェクトをレプリケートするよう指示します。この例では、Amazon S3 コンソールと AWS Command Line Interface (AWS CLI) を使用してバケットのレプリケーション設定を変更し、暗号化オブジェクトのレプリケーションを有効にする方法について説明します。詳細については、「追加のレプリケーション設定: AWS KMS に保存された暗号化キーを使用してサーバー側の暗号化 (SSE) で作成されたオブジェクトをレプリケートする」を参照してください。

トピック

    暗号化オブジェクトのレプリケート (コンソール)

    手順については、Amazon Simple Storage Service コンソールユーザーガイド にある「レプリケーションルールを S3 バケットに追加する方法」を参照してください。このトピックでは、バケットが同じ AWS アカウントで所有されている場合、および異なる AWS アカウントで所有されている場合にレプリケーション設定を行う手順について説明します。

    暗号化オブジェクトのレプリケート (AWS CLI)

    AWS CLI を使用して暗号化オブジェクトをレプリケートするには、バケットを作成し、バケットのバージョニングを有効にします。さらに、IAM ロールを作成して Amazon S3 にオブジェクトをレプリケートするアクセス権限を与え、レプリケート元バケットにレプリケーション設定を追加します。レプリケーション設定は、KMS キーを使用して暗号化されたオブジェクトのレプリケーションに関する情報を提供します。IAM ロールのアクセス権限には、暗号化オブジェクトをレプリケートするために必要なアクセス権限が含まれています。また、セットアップをテストします。

    暗号化オブジェクトをレプリケートするには (AWS CLI)

    1. この例では、レプリケート元バケットおよびレプリケート先バケットの両方を同じ AWS アカウント内で作成します。AWS CLI の認証情報プロファイルを設定します。この例では、プロファイル名 acctA を使用します。認証情報プロファイルの設定については、AWS Command Line Interface ユーザーガイド の「名前付きプロファイル」を参照してください。

    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 アカウントによってバケットが所有されている場合、レプリケーション設定をテストするには、それぞれに異なるプロファイルを指定します。

      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-kmsobj.json という名前のファイルに保存します。このポリシーは、ロールを引き受けるアクセス権限を Amazon S3 サービスプリンシパルに付与し、Amazon S3 がユーザーに代わってタスクを実行できるようにします。

          { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"s3.amazonaws.com" }, "Action":"sts:AssumeRole" } ] }
        2. ロールを作成します。

          $ aws iam create-role \ --role-name replicationRolekmsobj \ --assume-role-policy-document file://s3-role-trust-policy-kmsobj.json \ --profile acctA
      2. アクセス権限ポリシーをロールにアタッチします。このポリシーは、さまざまな Amazon S3 バケットとオブジェクトアクションに対するアクセス権限を付与します。

        1. 次のアクセス権限ポリシーをコピーして、ローカルコンピュータの現在のディレクトリにある s3-role-permissions-policykmsobj.json という名前のファイルに保存します。IAM ロールを作成して、後からポリシーをアタッチします。

          重要

          アクセス許可ポリシーで、source および destination バケットの暗号化に使用される AWS KMS キー ID を指定します。2 つの別々の KMS キーを source および destination バケット用に作成する必要があります。KMS キーは、それらが作成された AWS リージョン外で共有されることはありません。

          { "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::source", "arn:aws:s3:::source/*" ] }, { "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags", "s3:GetObjectVersionTagging" ], "Effect":"Allow", "Condition":{ "StringLikeIfExists":{ "s3:x-amz-server-side-encryption":[ "aws:kms", "AES256" ], "s3:x-amz-server-side-encryption-aws-kms-key-id":[ "AWS KMS key IDs(in ARN format) to use for encrypting object replicas" ] } }, "Resource":"arn:aws:s3:::destination/*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::source/*" ] } }, "Resource":[ "AWS KMS key IDs(in ARN format) used to encrypt source objects." ] }, { "Action":[ "kms:Encrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-west-2.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::destination/*" ] } }, "Resource":[ "AWS KMS key IDs(in ARN format) to use for encrypting object replicas" ] } ] }
        2. ポリシーを作成し、ロールにアタッチします。

          $ aws iam put-role-policy \ --role-name replicationRolekmsobj \ --policy-document file://s3-role-permissions-policykmsobj.json \ --policy-name replicationRolechangeownerPolicy \ --profile acctA
    5. レプリケート元バケットに、以下のレプリケーション設定を追加します。Amazon S3 が、Tax/ プレフィックスを持つオブジェクトをレプリケート先バケットにレプリケートするように指示します。

      重要

      レプリケーション設定で、Amazon S3 が引き受けることができる IAM ロールを指定します。ユーザーに iam:PassRole アクセス権限がある場合のみ実行できます。CLI コマンドで指定するプロファイルには、アクセス権限が必要です。詳細については、IAM ユーザーガイド の「AWS サービスにロールを渡すアクセス許可をユーザーに許可する」を参照してください。

      <ReplicationConfiguration> <Role>IAM-Role-ARN</Role> <Rule> <Status>Enabled</Status> <Priority>1</Priority> <DeleteMarkerReplication> <Status>Disabled</Status> </DeleteMarkerReplication> <Filter> <Prefix>Tax</Prefix> </Filter> <Status>Enabled</Status> <SourceSelectionCriteria> <SseKmsEncryptedObjects> <Status>Enabled</Status> </SseKmsEncryptedObjects> </SourceSelectionCriteria> <Destination> <Bucket>arn:aws:s3:::dest-bucket-name</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

      レプリケート元バケットにレプリケーション設定を追加するには、以下を実行します。

      1. 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", "EncryptionConfiguration":{ "ReplicaKmsKeyID":"AWS KMS key IDs(in ARN format) to use for encrypting object replicas" } }, "SourceSelectionCriteria":{ "SseKmsEncryptedObjects":{ "Status":"Enabled" } } } ] }
      2. レプリケート先バケットの値、KMS ID ARNIAM-role-ARN を指定するように、JSON を編集します。変更を保存します。

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

        $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket source \ --profile acctA
    6. セットアップをテストして、暗号化オブジェクトがレプリケートされていることを確認します。Amazon S3 コンソールで:

      1. AWS マネジメントコンソールにサインインして Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

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

      3. サンプルオブジェクトをフォルダに追加します。必ず暗号化オプションを選択し、オブジェクトを暗号化するための KMS キーを指定してください。

      4. レプリケート先バケットにオブジェクトレプリカが含まれていること、および設定で指定した KMS 暗号化キーを使用して暗号化されていることを確認します。

    暗号化オブジェクトのレプリケート (AWS SDK)

    レプリケーション設定を追加するコード例については、「バケットが同じアカウントに所有されている場合のレプリケーションの設定 (AWS SDK)」を参照してください。レプリケーション設定を適切に変更する必要があります。

    概念については、「追加のレプリケーション設定: AWS KMS に保存された暗号化キーを使用してサーバー側の暗号化 (SSE) で作成されたオブジェクトをレプリケートする」を参照してください。