暗号化オブジェクトのレプリケート - Amazon Simple Storage Service

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

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

注記

Amazon S3 では、マルチリージョンキーを使用できます。マルチリージョンキーは、現在の AWS KMS keys と同様に機能しますが、キーのマルチリージョン機能は使用しません。詳細については、AWS Key Management Service デベロッパーガイドの「マルチリージョンキーを使用する」を参照してください。

手順については、「同じアカウントが所有するレプリケート元バケットとレプリケート先バケットのレプリケーションの設定」を参照してください。このトピックでは、バケットが同一の、または異なる AWS アカウント で所有されている場合にレプリケーション設定を行う手順について説明します。

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 ロールを作成して、後からポリシーをアタッチします。

        重要

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

        { "Version":"2012-10-17", "Statement":[ { "Action":[ "s3:ListBucket", "s3:GetReplicationConfiguration", "s3:GetObjectVersionForReplication", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging" ], "Effect":"Allow", "Resource":[ "arn:aws:s3:::source", "arn:aws:s3:::source/*" ] }, { "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "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. レプリケート元バケットに、以下のレプリケーション設定を追加します。Tax/ プレフィックスを持つオブジェクトをレプリケート先バケットにレプリケートするように Amazon S3 に指示します。

    重要

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

    <ReplicationConfiguration> <Role>IAM-Role-ARN</Role> <Rule> <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 Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

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

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

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

レプリケーション設定を追加するコード例については、「AWS SDK の使用」を参照してください。レプリケーション設定を適切に変更する必要があります。

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