AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) の指定 - Amazon Simple Storage Service

AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) の指定

重要

Amazon S3 では、Amazon S3 内のすべてのバケットの基本レベルの暗号化として、Amazon S3 が管理するキー (SSE-S3) によるサーバー側の暗号化が適用されるようになりました。2023 年 1 月 5 日以降、Amazon S3 にアップロードされるすべての新しいオブジェクトは、追加費用なしで、パフォーマンスに影響を与えずに自動的に暗号化されます。S3 バケットのデフォルト暗号化設定と新しいオブジェクトのアップロードのための自動暗号化ステータスは、AWS CloudTrail ログ、S3 インベントリ、S3 ストレージレンズ、Amazon S3 コンソール、および AWS Command Line Interface と AWS SDK の追加の Amazon S3 API レスポンスヘッダーとして利用できるようになりました。詳細については、「デフォルト暗号化に関するよくある質問」を参照してください。

すべての Amazon S3 バケットにはデフォルトで暗号化が設定されており、S3 バケットにアップロードされたすべての新しいオブジェクトは保存時に自動的に暗号化されます。Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) は、Amazon S3 のすべてのバケットでのデフォルトの暗号化設定です。別のタイプの暗号化を使用するには、S3 PUT リクエストで使用するサーバー側の暗号化のタイプを指定するか、宛先バケットにデフォルトの暗号化設定を設定できます。

PUT リクエストで別の暗号化タイプを指定する場合は、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS)、AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS)、または顧客提供のキーによるサーバー側の暗号化 (SSE-C) を使用できます。宛先バケットに別のデフォルト暗号化設定を設定する場合は、SSE-KMS または DSSE-KMS を使用できます。

暗号化は、新しいオブジェクトをアップロードしたり、既存のオブジェクトをコピーしたりするときに適用できます。

Amazon S3 コンソール、Amazon S3 REST API、および AWS Command Line Interface (AWS CLI) を使用して、DSSE-KMS を指定できます。詳細については、以下のトピックを参照してください。

注記

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

注記

別のアカウントが所有している KMS キーを使用する場合は、そのキーを使用するアクセス許可が必要です。KMS キーのクロスアカウント権限の詳細については、「AWS Key Management Service デベロッパーガイド」の「他のアカウントで使用できる KMS キーを作成する」を参照してください。

このセクションでは、Amazon S3 コンソールを使用して、AWS Key Management Service (AWS KMS) キーによる二層式サーバー側の暗号化 (DSSE-KMS) を使用するようにオブジェクトの暗号化のタイプを設定または変更する方法について説明します。

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

  • ユーザー定義タグを持つオブジェクトの暗号化タイプを変更する場合は、s3:GetObjectTagging アクセス許可が必要です。ユーザー定義タグがなく、サイズが 16 MB を超えるオブジェクトの暗号化タイプを変更する場合は、s3:GetObjectTagging アクセス許可も必要です。

    ターゲットバケットポリシーによって s3:GetObjectTagging アクションが拒否されると、オブジェクトの暗号化タイプは更新されますが、ユーザー定義タグはオブジェクトから削除され、エラーが発生します。

オブジェクトの暗号化を追加または変更するには
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. 左側のナビゲーションペインで、[バケット] を選択します。

  3. [バケット] リストで、暗号化するオブジェクトが含まれるバケットの名前を選択します。

  4. [オブジェクト] リストで、暗号化を追加または変更するオブジェクトの横のチェックボックスを選択します。

    オブジェクトの詳細ページが開き、オブジェクトのプロパティを表示するいくつかのセクションが表示されます。

  5. [プロパティ] タブを選択します。

  6. [デフォルトの暗号化] セクションまでスクロールして、[編集] を選択します。

    [デフォルトの暗号化を編集する]  ページが開きます。

  7. [暗号化タイプ] で、[AWS Key Management Service キーによる二層式サーバー側の暗号化 (DSSE-KMS)] を選択します。

  8. [AWS KMS キー] で、次のいずれかを実行して KMS キーを選択します。

    • 使用可能な KMS キーのリストから選択するには、[AWS KMS keys から選択する] を選択し、使用可能なキーのリストから自分の KMS キーを選択します。

      AWS マネージドキー (aws/s3) とカスタマーマネージドキーの両方がこのリストに表示されます。カスタマーマネージドキーの詳細については、AWS Key Management Serviceデベロッパーガイドの「カスタマーキーと AWS キー」を参照してください。

    • KMS キー ARN を入力するには、[AWS KMS key ARN を入力] を選択し、表示されるフィールドに KMS キー ARN を入力します。

    • AWS KMS コンソールで新しいカスタマーマネージドキーを作成するには、[KMS キーを作成] を選択します。

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

    重要

    バケットと同じ AWS リージョン で使用可能な KMS キーのみを使用できます。Amazon S3 コンソールには、バケットと同じリージョンで最初の 100 個の KMS キーしか表示されません。リストに存在しない KMS キーを使用するには、KMS キー ARN を入力する必要があります。別のアカウントが所有している KMS キーを使用する場合は、まず、そのキーを使用するアクセス許可が必要であり、次に、KMS キー ARN を入力する必要があります。

    Amazon S3 では、対称暗号化 KMS キーのみがサポートされ、非対称暗号化 KMS キーはサポートされません。詳細については、『AWS Key Management Service デベロッパーガイド』の「非対称 KMS キーの識別」を参照してください。

  9. [バケットキー] で、[無効] を選択します。S3 バケットキーは DSSE-KMS ではサポートされていません。

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

注記

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

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

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

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

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

DSSE-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 リクエストヘッダーを受け入れます。

  • PutObject - PUT オペレーションを使用してデータをアップロードするとき、これらのリクエストヘッダーを指定できます。

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

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

  • CreateMultipartUpload - マルチパートアップロードを使用して大きいオブジェクトをアップロードするときには、CreateMultipartUpload リクエストでこれらのヘッダーを指定できます。

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

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

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

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

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

Amazon S3 は、オブジェクトの Amazon リソースネーム (ARN) を暗号化コンテキストペア (arn:aws:s3:::object_ARN など) として自動的に使用します。

オプションで、x-amz-server-side-encryption-context ヘッダーを使用して、追加の暗号化コンテキストペアを指定することもできます。しかし、暗号化コンテキストは暗号化されないため、機密情報を含めないでください。Amazon S3 は、この追加のキーペアをデフォルトの暗号化コンテキストとともに保存します。

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

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:dsse ヘッダーを指定しても x-amz-server-side-encryption-aws-kms-key-id ヘッダーを指定しない場合、Amazon S3 は AWS マネージドキー (aws/s3) を使用してデータを保護します。カスタマーマネージドキーを使用する場合は、カスタマーマネージドキーの x-amz-server-side-encryption-aws-kms-key-id ヘッダーを指定する必要があります。

重要

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

新しいオブジェクトをアップロードするか、既存のオブジェクトをコピーするときに、 データの暗号に DSSE-KMS を使用することを指定できます。これを行うには、リクエストに --server-side-encryption aws:kms:dsse パラメータを追加します。--ssekms-key-id example-key-id パラメータを使用して、作成したカスタマーマネージド AWS KMS キーを追加します。AWS KMS キー ID を指定せずに --server-side-encryption aws:kms:dsse を指定した場合、Amazon S3 は AWS マネージドキー (aws/s3) を使用します。

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key example-object-key --server-side-encryption aws:kms:dsse --ssekms-key-id example-key-id --body filepath

暗号化されていないオブジェクトを元の場所にコピーすることで、DSSE-KMS を使用するように暗号化できます。

aws s3api copy-object --bucket DOC-EXAMPLE-BUCKET --key example-object-key --body filepath --bucket DOC-EXAMPLE-BUCKET --key example-object-key --sse aws:kms:dsse --sse-kms-key-id example-key-id --body filepath