AWS KMS (SSE-KMS) によるサーバー側の暗号化の指定 - Amazon Simple Storage Service

AWS KMS (SSE-KMS) によるサーバー側の暗号化の指定

オブジェクトを作成するときに、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化の使用を指定して、データを暗号化できます。これは、新しいオブジェクトをアップロードしたり、既存のオブジェクトをコピーするときも同様です。この暗号化は SSE-KMS と呼ばれます。

S3 コンソール、REST API、AWS SDK、AWS CLI を使用して SSE-KMS を指定できます。詳細については、以下のトピックを参照してください。

注記

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

このトピックでは、Amazon S3 コンソールを使用してオブジェクトの暗号化のタイプを設定または変更する方法について説明します。

注記

オブジェクトの暗号化を変更すると、新しいオブジェクトが作成され、古いオブジェクトが置き換えられます。S3 バージョニングが有効になっている場合は、オブジェクトの新しいバージョンが作成され、既存のオブジェクトが古いバージョンになります。また、プロパティを変更するロールは、新しいオブジェクト (オブジェクトのバージョン) の所有者になります。

オブジェクトの暗号化を追加または変更するには

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

  2. [Buckets] (バケット) リストで、オブジェクトが含まれるバケットの名前を選択します。

  3. [Objects] (オブジェクト) リストで、暗号化を追加または変更するオブジェクトの名前を選択します。

    [Object overview] (オブジェクトの概要) が開き、オブジェクトのプロパティが表示されます。

  4. [Server-side encryption settings (サーバー側の暗号化設定)] で、[Edit (編集)] を選択します。

    [Edit server-side encryption (サーバー側の暗号化を編集する)] ページが開きます

  5. オブジェクトのサーバー側の暗号化を有効にするには、[Server-side encryption (サーバー側の暗号化)] で [Enable (有効化)] を選択します。

  6. [Encryption type] (暗号化キーのタイプ) で、[AWS Key Management Service key (SSE-KMS)] (AWS Key Management Service キー (SSE-KMS)) を選択します。

    重要

    デフォルト暗号化設定に AWS KMS オプションを使用する場合、AWS KMS の RPS (1 秒あたりのリクエスト) 制限が適用されます。AWS KMS の制限と、制限の引き上げをリクエストする方法については、「AWS KMS の制限」を参照してください。

  7. [AWS KMS key] (AWS KMS キー) で、次のいずれかを選択します。

    • AWS マネージドキー (aws/s3)

    • AWS KMS keys から選択しKMS キーを選択します。

    • [Enter KMS master key ARN] (AWS KMS キー ARN を入力する) では、AWS KMS キー ARN を入力します。

    重要

    バケットと同じ AWS リージョン で有効になっている AWS KMS keys のみを使用できます。[Choose from your AWS KMS keys] ( から選択する) を選択する場合、S3 コンソールにはリージョンごとに 100 個の KMS キーしか表示されません。同じリージョンに 100 個以上の KMS キーがある場合、S3 コンソールには最初の 100 個の KMS キーしか表示されません。コンソールに表示されていない KMS キーを使用するには、[カスタム KMS ARN] を選択し、KMS キーARN を入力します。

    Amazon S3 でサーバー側の暗号化に AWS KMS key を使用する場合は、バケットと同じリージョンで有効な KMS キーを選択する必要があります。さらに、Amazon S3 では、対称 KMS キーのみがサポートされ、非対称 KMS キーはサポートされません。詳細については、AWS Key Management Service デベロッパーガイド対称キーと非対称キーの使用を参照してください。

    AWS KMS key の作成の詳細については、AWS Key Management Service デベロッパーガイドキーの作成を参照してください。Amazon S3 での AWS KMS の使用に関する詳細は、AWS Key Management Service (SSE-KMS) に保存されている KMS キーでサーバー側の暗号化を使用してデータを保護する を参照してください。

  8. [Save changes] (変更を保存) をクリックします。

注記

このアクションは、指定されたすべてのオブジェクトに暗号化を適用します。フォルダを暗号化する場合は、保存オペレーションが完了するのを待ってから、フォルダに新しいオブジェクトを追加します。

オブジェクトを作成するとき (新しいオブジェクトをアップロードするか、既存のオブジェクトをコピーするとき) に、AWS KMS keys を使用したサーバー側の暗号化の使用を指定してデータを暗号化できます。これを行うには、リクエストに x-amz-server-side-encryption ヘッダーを追加します。ヘッダーの値を、暗号化アルゴリズム aws:kms に設定します。Amazon S3 によりレスポンスヘッダー x-amz-server-side-encryption が返されるため、SSE-KMS を使用してオブジェクトが保存されたことを確認できます。

x-amz-server-side-encryption の値で aws:kms ヘッダーを指定する場合は、次のリクエストヘッダーも使用できます。

  • x-amz-server-side-encryption-aws-kms-key-id

  • x-amz-server-side-encryption-context

  • x-amz-server-side-encryption-bucket-key-enabled

SSE-KMS をサポートする Amazon S3 REST API

次の REST API では x-amz-server-side-encryptionx-amz-server-side-encryption-aws-kms-key-id、および x-amz-server-side-encryption-context リクエストヘッダーを受け入れます。

  • PUT オブジェクト — PUT API を使用してデータをアップロードする場合、これらのリクエストヘッダーを指定できます。

  • PUT オブジェクト - コピー — オブジェクトをコピーする場合、ソースオブジェクトとターゲットオブジェクトがあります。Copy オペレーションで SSE-KMS ヘッダーを渡す場合は、ターゲットオブジェクトにのみ適用されます。既存のオブジェクトをコピーする際は、コピー元オブジェクトが暗号化されているかどうかに関係なく、明示的にサーバー側の暗号化を要求しない限り、コピー先オブジェクトは暗号化されません。

  • POST オブジェクト — POST オペレーションを使用してオブジェクトをアップロードする場合は、リクエストヘッダーの代わりに、フォームフィールドで同じ情報を指定します。

  • マルチパートアップロードの開始 — マルチパートアップロード API を使用して大きいオブジェクトをアップロードする場合、これらのヘッダーを指定できます。これらのヘッダーを開始リクエストで指定します。

次の REST API のレスポンスヘッダーは、オブジェクトがサーバー側の暗号化を使用して保存されているときに x-amz-server-side-encryption ヘッダーを返します。

重要
  • AWS KMS で保護されたオブジェクトに対する GET リクエストと PUT リクエストはすべて、Secure Sockets Language (SSL) または署名バージョン 4 を使用してしない場合、失敗します。

  • オブジェクトで SSE-KMS を使用している場合、GET リクエストおよび HEAD リクエストに対して暗号化リクエストヘッダーを送信しないでください。送信すると、HTTP 400 BadRequest エラーが発生します。

暗号化コンテキスト (x-amz-server-side-encryption-context)

x-amz-server-side-encryption:aws:kms を指定した場合、Amazon S3 API は x-amz-server-side-encryption-context ヘッダーの暗号化コンテキストをサポートします。暗号化コンテキストは、データに関する追加のコンテキスト情報を含めることができるキーと値のペアのオプションのセットです。

Amazon S3 では、オブジェクトまたはバケットの Amazon リソースネーム (ARN) が暗号化コンテキストとして一般的に使用されます。S3 バケットキーを有効にせずに SSE-KMS を使用する場合は、オブジェクト ARN を暗号化コンテキストとして使用します。たとえば、arn:aws:s3:::object_ARN です。ただし、S3 バケットキーを有効にして SSE-KMS を使用する場合は、バケット ARN を暗号化コンテキストに使用します。たとえば、arn:aws:s3:::bucket_ARN です。

Amazon S3 の暗号化コンテキストの詳細については、「暗号化コンテキスト」を参照してください。暗号化コンテキストの一般的な情報については、AWS Key Management Service デベロッパーガイドAWS Key Management Service の概念 - 暗号化コンテキストを参照してください。

AWS KMS キー ID (x-amz-server-side-encryption-aws-kms-key-id)

x-amz-server-side-encryption-aws-kms-key-id ヘッダーを使用して、データの保護に使用するカスタマーマネージドキーの ID を指定できます。x-amz-server-side-encryption:aws:kms を指定しても x-amz-server-side-encryption-aws-kms-key-id を指定しない場合、Amazon S3 はAWS マネージドキーを使用してデータを保護します。カスタマーマネージドキーを使用する場合は、カスタマーマネージドキーの x-amz-server-side-encryption-aws-kms-key-id を指定する必要があります。

重要

Amazon S3 でサーバー側の暗号化に AWS KMS key を使用する場合は、対称キーを選択する必要があります。Amazon S3 では、対称キーのみがサポートされ、非対称キーはサポートされません。詳細については、AWS Key Management Service デベロッパーガイド対称キーと非対称キーの使用を参照してください。

S3 バケットキー (x-amz-server-side-encryption-aws-bucket-key-enabled)

x-amz-server-side-encryption-aws-bucket-key-enabled リクエストヘッダーを使用して、オブジェクトレベルで S3 バケットキーを有効または無効にできます。S3 バケットキーで、Amazon S3 から AWS KMS へのリクエストトラフィックを減らすことにより、AWS KMS リクエストコストを削減できます。詳細については、「Amazon S3 バケットキーを使用した SSE-KMS のコストの削減」を参照してください。

x-amz-server-side-encryption:aws:kms を指定するが、x-amz-server-side-encryption-aws-bucket-key-enabled は指定しない場合、オブジェクトは送信先バケットの S3 バケットキーの設定を使用して、オブジェクトを暗号化します。詳細については、「バッチオペレーション、REST API、AWS SDK、または AWS CLI を使用してオブジェクトレベルで S3 バケットキーを設定する」を参照してください。

AWS SDKを使用する場合、Amazon S3 に AWS KMS keys を使用するようにリクエストします。このセクションでは、AWS SDK for Java および AWS SDK for .NET を使用する例を示します。他の SDK については、「サンプルコードとライブラリ」を参照してください。

重要

Amazon S3 でサーバー側の暗号化に AWS KMS key を使用する場合は、対称キーを選択する必要があります。Amazon S3 では、対称キーのみがサポートされ、非対称キーはサポートされません。詳細については、AWS Key Management Service デベロッパーガイド対称キーと非対称キーの使用を参照してください。

Copy オペレーション

オブジェクトをコピーする場合は、同じリクエストプロパティ ( および ServerSideEncryptionKeyManagementServiceKeyId) を追加して、AWS KMS key を使用するように Amazon S3 に対してリクエストします。オブジェクトのコピーの詳細については、オブジェクトのコピー を参照してください。

Put オペレーション

Java

AWS SDK for Java を使用してオブジェクトをアップロードする場合、次のリクエストのように SSEAwsKeyManagementParams プロパティを追加することによって、AWS KMS key を使用するように Amazon S3 に対してリクエストできます。

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());

この場合、Amazon S3 は AWS マネージドキーを使用します (AWS KMS に保存された KMS キーのサーバー側暗号化の使用を参照)。オプションで、対称 KMS キーを作成し、それをリクエストで指定できます。

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));

カスタマーマネージドキーの作成の詳細については、AWS Key Management Service デベロッパーガイドAWS KMS API のプログラミングを参照してください。

オブジェクトをアップロードするためのコード例については、以下のトピックを参照してください。前出のコード例に示したように、これらのコード例は更新して暗号化情報を追加する必要があります。

.NET

AWS SDK for .NET を使用してオブジェクトをアップロードする場合、次のリクエストのように ServerSideEncryptionMethod プロパティを追加することによって、AWS KMS key を使用するように Amazon S3 に対してリクエストできます。

PutObjectRequest putRequest = new PutObjectRequest { BucketName = bucketName, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS };

この場合、Amazon S3 は AWS マネージドキーを使用します。詳細については、「AWS Key Management Service (SSE-KMS) に保存されている KMS キーでサーバー側の暗号化を使用してデータを保護する」を参照してください。オプションで、独自の対称カスタマーマネージドキーを作成し、それをリクエストで指定できます。

PutObjectRequest putRequest1 = new PutObjectRequest { BucketName = bucketName, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = keyId };

カスタマーマネージドキーの作成の詳細については、AWS Key Management Service デベロッパーガイドAWS KMS API のプログラミングを参照してください。

オブジェクトをアップロードするためのコード例については、以下のトピックを参照してください。前出のコード例に示したように、これらのコード例は更新して暗号化情報を提供する必要があります。

署名付き URL

Java

AWS KMS key を使用して暗号化されたオブジェクトの署名付き URL を作成する際には、署名バージョン 4 を明示的に指定する必要があります。

ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSignerOverride("AWSS3V4SignerType"); AmazonS3Client s3client = new AmazonS3Client( new ProfileCredentialsProvider(), clientConfiguration); ...

コード例については、「署名付き URL を使用したオブジェクトの共有」を参照してください。

.NET

AWS KMS key を使用して暗号化されたオブジェクトの署名付き URL を作成する際には、署名バージョン 4 を明示的に指定する必要があります。

AWSConfigs.S3Config.UseSignatureVersion4 = true;

コード例については、「署名付き URL を使用したオブジェクトの共有」を参照してください。