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

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

デフォルトでは、Amazon S3 は AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) または AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) を使用して暗号化されたオブジェクトをレプリケートしません。SSE-KMS または DSSE-KMS で暗号化されたオブジェクトをレプリケートするには、バケットレプリケーション設定を変更して、Amazon S3 がこれらのオブジェクトをレプリケートするように指示します。この例では、Amazon S3 コンソールと AWS Command Line Interface (AWS CLI) を使用してバケットのレプリケーション設定を変更し、暗号化オブジェクトのレプリケーションを有効にする方法について説明します。

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

注記

レプリケート元バケットまたはレプリケート先バケットで S3 バケットキーを有効にすると、暗号化コンテキストはバケットの Amazon リソースネーム (ARN) になり、オブジェクトの ARN にはなりません。暗号化コンテキストとしてバケット ARN を使用するには、IAM ポリシーを更新する必要があります。詳細については、「S3 バケットキーとレプリケーション」を参照してください。

注記

Amazon S3 では、マルチリージョン AWS KMS keys を使用できます。ただし、Amazon S3 では現在、マルチリージョンキーは、単一リージョンキーであるかのように処理され、キーのマルチリージョン特徴は使用しません。詳細については、AWS Key Management Service デベロッパーガイド「マルチリージョンキーを使用する」を参照してください。

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

AWS CLI で暗号化されたオブジェクトをレプリケートするには、以下の操作を実行します。

  • レプリケート元バケットとレプリケート先バケットを作成して、これらのバケットのバージョニングを有効にします。

  • Amazon S3 にオブジェクトをレプリケートするアクセス許可を付与する AWS Identity and Access Management (IAM) サービスロールを作成します。IAM ロールのアクセス許可には、暗号化されたオブジェクトをレプリケートするために必要なアクセス許可が含まれています。

  • レプリケート元バケットにレプリケーション設定を追加します。レプリケーション設定は、KMS キーを使用して暗号化されたオブジェクトのレプリケーションに関する情報を提供します。

  • レプリケート元バケットに暗号化されたオブジェクトを追加します。

  • セットアップをテストして、暗号化されたオブジェクトがレプリケート先バケットにレプリケートされていることを確認します。

このプロセスを以下の手順で説明します。

サーバー側の暗号化されたオブジェクトをレプリケートするには (AWS CLI)
  1. この例では、DOC-EXAMPLE-SOURCE-BUCKET バケットと DOC-EXAMPLE-DESTINATION-BUCKET バケットの両方を同じ AWS アカウント に作成します。AWS CLI の認証情報プロファイルも設定します。この例では、プロファイル名 acctA を使用します。

    認証情報プロファイルの設定については、AWS Command Line Interfaceユーザーガイドの「名前付きプロファイル」を参照してください。この例のコマンドを使用するには、user input placeholders を自分の情報に置き換えてください。

  2. 次のコマンドを使用して DOC-EXAMPLE-SOURCE-BUCKET バケットを作成し、バージョニングを有効にします。次の例のコマンドは、DOC-EXAMPLE-SOURCE-BUCKET バケットを米国東部 (バージニア北部) (us-east-1) リージョンに作成します。

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --region us-east-1 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  3. 次のコマンドを使用して DOC-EXAMPLE-DESTINATION-BUCKET バケットを作成し、バージョニングを有効にします。次のコマンドは、DOC-EXAMPLE-DESTINATION-BUCKET バケットを米国西部 (オレゴン) (us-west-2) リージョンに作成します。

    注記

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

    aws s3api create-bucket \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --region us-west-2 \ --create-bucket-configuration LocationConstraint=us-west-2 \ --profile acctA
    aws s3api put-bucket-versioning \ --bucket DOC-EXAMPLE-DESTINATION-BUCKET \ --versioning-configuration Status=Enabled \ --profile acctA
  4. 次に、IAM サービスロールを作成します。このロールは、後で DOC-EXAMPLE-SOURCE-BUCKET バケットに追加するレプリケーション設定で指定します。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 ロールを作成して、後でポリシーをアタッチします。

        重要

        アクセス許可ポリシーで、DOC-EXAMPLE-SOURCE-BUCKET および DOC-EXAMPLE-DESTINATION-BUCKET バケットの暗号化に使用される AWS KMS キー ID を指定します。DOC-EXAMPLE-SOURCE-BUCKET および DOC-EXAMPLE-DESTINATION-BUCKET バケット用に 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:::DOC-EXAMPLE-SOURCE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/*" ] }, { "Action":[ "s3:ReplicateObject", "s3:ReplicateDelete", "s3:ReplicateTags" ], "Effect":"Allow", "Condition":{ "StringLikeIfExists":{ "s3:x-amz-server-side-encryption":[ "aws:kms", "AES256", "aws:kms:dsse" ], "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:::DOC-EXAMPLE-DESTINATION-BUCKET/*" }, { "Action":[ "kms:Decrypt" ], "Effect":"Allow", "Condition":{ "StringLike":{ "kms:ViaService":"s3.us-east-1.amazonaws.com", "kms:EncryptionContext:aws:s3:arn":[ "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET/*" ] } }, "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:::DOC-EXAMPLE-DESTINATION-BUCKET/*" ] } }, "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. 次に、以下のレプリケーション設定を DOC-EXAMPLE-SOURCE-BUCKET バケットに追加します。これは、Tax/ プレフィックスを持つオブジェクトを DOC-EXAMPLE-DESTINATION-BUCKET バケットにレプリケートするように 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:::DOC-EXAMPLE-DESTINATION-BUCKET</Bucket> <EncryptionConfiguration> <ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</ReplicaKmsKeyID> </EncryptionConfiguration> </Destination> </Rule> </ReplicationConfiguration>

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

    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:::DOC-EXAMPLE-DESTINATION-BUCKET", "EncryptionConfiguration":{ "ReplicaKmsKeyID":"AWS KMS key IDs (in ARN format) to use for encrypting object replicas" } }, "SourceSelectionCriteria":{ "SseKmsEncryptedObjects":{ "Status":"Enabled" } } } ] }
    2. JSON を編集して、DOC-EXAMPLE-DESTINATION-BUCKET バケット、AWS KMS key IDs (in ARN format)、および IAM-role-ARN の値を指定します。変更を保存します。

    3. 次のコマンドを使用して、レプリケーション設定を DOC-EXAMPLE-SOURCE-BUCKET バケットに追加します。必ず DOC-EXAMPLE-SOURCE-BUCKET バケット名を指定してください。

      $ aws s3api put-bucket-replication \ --replication-configuration file://replication.json \ --bucket DOC-EXAMPLE-SOURCE-BUCKET \ --profile acctA
  6. 設定をテストして、暗号化されたオブジェクトがレプリケートされることを確認します。Amazon S3 コンソールで、次の操作を行います。

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

    2. DOC-EXAMPLE-SOURCE-BUCKET バケットに Tax という名前のフォルダを作成します。

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

    4. DOC-EXAMPLE-DESTINATION-BUCKET バケットにオブジェクトのレプリカが含まれていることと、設定で指定した KMS キーを使用して暗号化されていることを確認します。詳細については、「レプリケーションステータス情報の取得」を参照してください。

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

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