ディレクトリバケット内の新しいオブジェクトのアップロードに AWS KMS によるサーバー側の暗号化 (SSE-KMS) を指定する - Amazon Simple Storage Service

ディレクトリバケット内の新しいオブジェクトのアップロードに AWS KMS によるサーバー側の暗号化 (SSE-KMS) を指定する

ディレクトリバケットの場合、Amazon S3 マネージドキー (SSE-S3) (デフォルト) を使用したサーバー側の暗号化、AWS Key Management Service (AWS KMS) キーを使用したサーバー側の暗号化 (SSE-KMS) を使用できます。バケットのデフォルトの暗号化では、必要な暗号化設定を使用することをお勧めします。CreateSession リクエストまたは PUT オブジェクトリクエストでは、バケットのデフォルトの暗号化を上書きしないことをお勧めします。その後、新しいオブジェクトは必要な暗号化設定で自動的に暗号化されます。ディレクトリバケットの暗号化の上書き動作の詳細については、「新しいオブジェクトのアップロードに AWS KMS を使用してサーバー側の暗号化を指定する」を参照してください。

すべての Amazon S3 バケットにはデフォルトで暗号化が設定されており、S3 バケットにアップロードされたすべての新しいオブジェクトは保存時に自動的に暗号化されます。Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) は、Amazon S3 のすべてのバケットでのデフォルトの暗号化設定です。ディレクトリバケットに別の暗号化タイプを指定する場合は、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用できます。SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります AWS マネージドキー (aws/s3) はサポートされていません。SSE-KMS 設定では、バケットの存続期間中、ディレクトリバケットごとに 1 つのカスタマーマネージドキーしかサポートできません。SSE-KMS のカスタマーマネージドキーを指定した後は、バケットの SSE-KMS 設定のカスタマーマネージドキーを上書きすることはできません。次に、SSE-KMS で新しいオブジェクトにサーバー側の暗号化設定を指定するときは、暗号化キーがディレクトリバケットのデフォルトの暗号化設定に指定したカスタマーマネージドキーと同じであることを確認する必要があります。データに新しいカスタマーマネージドキーを使用するには、新しいカスタマーマネージドキーを使用して既存のオブジェクトを新しいディレクトリバケットにコピーすることをお勧めします。

暗号化は、新しいオブジェクトをアップロードしたり、既存のオブジェクトをコピーしたりするときに適用できます。オブジェクトの暗号化を変更すると、新しいオブジェクトが作成され、古いオブジェクトが置き換えられます。

REST API オペレーション、AWS SDK、および AWS Command Line Interface (AWS CLI) を使用して SSE-KMS を指定できます。

注記
  • ディレクトリバケットの場合、暗号化の上書き動作は次のとおりです。

    • REST API で CreateSession を使用して CopyObject および UploadPartCopy を除くゾーンエンドポイント API リクエストを認証および承認する場合、バケットのデフォルトの暗号化を以前に SSE-KMS で指定した場合にのみ、暗号化設定を SSE-S3 または SSE-KMS に上書きできます。

    • AWS CLI または AWS SDK で CreateSession を使用して CopyObject および UploadPartCopy を除くゾーンエンドポイント API リクエストを認証および承認する場合、暗号化設定を上書きすることはできません。

    • CopyObject リクエストを行うときは、バケットのデフォルトの暗号化を以前に SSE-KMS で指定した場合にのみ、暗号化設定を SSE-S3 または SSE-KMS に上書きできます。UploadPartCopy リクエストを行う場合、暗号化設定を上書きすることはできません。

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

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

注記

バケットの存続期間中は、ディレクトリバケットごとに 1 つのカスタマーマネージドキーのみがサポートされます。AWS マネージドキー (aws/s3) はサポートされていません。カスタマーマネージドキーを使用してバケットのデフォルトの暗号化設定として SSE-KMS を指定した後は、バケットの SSE-KMS 設定のカスタマーマネージドキーを変更することはできません。

CopyObject および UploadPartCopy を除くゾーンエンドポイント (オブジェクトレベル) API オペレーションでは、CreateSession を介してリクエストを認証および承認して低レイテンシーを実現します。バケットのデフォルト暗号化では、必要な暗号化設定を使用することをお勧めします。CreateSession リクエストまたは PUT オブジェクトリクエストでは、バケットのデフォルト暗号化を上書きしないことをお勧めします。その後、新しいオブジェクトは必要な暗号化設定で自動的に暗号化されます。SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります その後、ゾーンエンドポイント API オペレーションのセッションが作成されると、セッション中に新しいオブジェクトが SSE-KMS および S3 バケットキーで自動的に暗号化および復号されます。ディレクトリバケットの暗号化の上書き動作の詳細については、「新しいオブジェクトのアップロードに AWS KMS を使用してサーバー側の暗号化を指定する」を参照してください。

REST API を使用したゾーンエンドポイント API コール (CopyObject および UploadPartCopy を除く) では、CreateSession リクエストから暗号化設定 (x-amz-server-side-encryptionx-amz-server-side-encryption-aws-kms-key-idx-amz-server-side-encryption-contextx-amz-server-side-encryption-bucket-key-enabled) の値を上書きすることはできません。ゾーンエンドポイント API コールでこれらの暗号化設定値を明示的に指定する必要はありません。Amazon S3 は CreateSession リクエストの暗号化設定値を使用してディレクトリバケット内の新しいオブジェクトを保護します。

注記

AWS CLI または AWS SDK を使用する場合、セッショントークンは CreateSession に対して自動的に更新され、セッションの有効期限が切れたときのサービス中断を回避します。AWS CLI または AWS SDK は、CreateSession リクエストにバケットのデフォルトの暗号化設定を使用します。CreateSession リクエストの暗号化設定値を上書きすることはサポートされていません。また、ゾーンエンドポイント API コール (CopyObject および UploadPartCopyを除く) では、CreateSession リクエストからの暗号化設定の値を上書きすることはできません。

CopyObject の場合、SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトコピーを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります。次に、SSE-KMS で新しいオブジェクトコピーにサーバー側の暗号化設定を指定するときは、暗号化キーがディレクトリバケットのデフォルトの暗号化設定に指定したカスタマーマネージドキーと同じであることを確認する必要があります。UploadPartCopy では、SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトパーツコピーを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります。UploadPartCopy リクエストヘッダーで SSE-KMS を使用して新しいオブジェクトパートコピーのサーバー側の暗号化設定を指定することはできません。また、CreateMultipartUpload リクエストで指定する暗号化設定は、送信先バケットのデフォルトの暗号化設定と一致する必要があります。

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

  • CreateSession – ゾーンエンドポイント (オブジェクトレベル) API オペレーション (CopyObject および UploadPartCopy を除く) を使用する場合、これらのリクエストヘッダーを指定できます。

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

  • CopyObject — オブジェクトをコピーするときには、ソースオブジェクトとターゲットオブジェクトの両方があります。CopyObject オペレーションで SSE−KMS ヘッダーを渡す場合は、ターゲットオブジェクトにのみ適用されます。

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

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

重要
  • AWS KMS で保護されたオブジェクトに対する GET リクエストと PUT リクエストはすべて、Transport Layer Security (TLS)、または署名バージョン 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 リソースネーム (ARN) と一致する必要があります。追加の暗号化コンテキスト値はサポートされていません。

ディレクトリバケットの暗号化コンテキストの詳細については、「暗号化コンテキスト」を参照してください。暗号化コンテキストの一般的な情報については、「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 を指定できます。

SSE-KMS 設定では、バケットの存続期間中、ディレクトリバケットごとに 1 つのカスタマーマネージドキーしかサポートできません。AWS マネージドキー (aws/s3) はサポートされていません。また、SSE-KMS のカスタマーマネージドキーを指定した後は、バケットの SSE-KMS 設定のカスタマーマネージドキーを上書きすることはできません。

バケットの SSE-KMS 設定に指定したカスタマーマネージドキーは、次のように識別できます。

  • HeadObject API オペレーションリクエストを実行して、レスポンス内の x-amz-server-side-encryption-aws-kms-key-id の値を検索します。

データに新しいカスタマーマネージドキーを使用するには、新しいカスタマーマネージドキーを使用して既存のオブジェクトを新しいディレクトリバケットにコピーすることをお勧めします。

ディレクトリバケットの暗号化コンテキストの詳細については、「AWS KMS keys」を参照してください。

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

S3 バケットキーは、ディレクトリバケット内の GET および PUT オペレーションで常に有効になっており、無効にすることはできません。SSE-KMS で暗号化されたオブジェクトを、CopyObjectUploadPartCopyバッチオペレーションの Copy オペレーション、または import ジョブを使用して、汎用バケットからディレクトリバケットへ、ディレクトリバケットから汎用バケットへ、またはディレクトリバケット間でコピーする場合、S3 バケットキーはサポートされません。この場合、KMS で暗号化されたオブジェクトのコピーリクエストが実行されるたびに、Amazon S3 は AWS KMS を呼び出します。ディレクトリバケットでの S3 バケットキーの詳細については、「暗号化コンテキスト」を参照してください。

注記

CreateSession に AWS CLI を使用すると、セッショントークンが自動的に更新され、セッションの有効期限が切れたときにサービスが中断されるのを防ぐことができます。CreateSession リクエストの暗号化設定値を上書きすることはサポートされていません。また、ゾーンエンドポイント API コール (CopyObject および UploadPartCopy を除く) では、CreateSession リクエストからの暗号化設定の値を上書きすることはできません。

SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります その後、ゾーンエンドポイント API オペレーションのセッションが作成されると、セッション中に新しいオブジェクトが SSE-KMS および S3 バケットキーで自動的に暗号化および復号されます。

次の AWS CLI コマンド例を使用する際は、user input placeholders をユーザー自身の情報に置き換えます。

新しいオブジェクトをアップロードするか、既存のオブジェクトをコピーするときに、AWS KMS キーを使用したサーバー側の暗号化の使用を指定してデータを暗号化できます。これを行うには、put-bucket-encryption コマンドを使用して、ディレクトリバケットのデフォルトの暗号化設定を SSE-KMS (aws:kms) に設定します。具体的には、--server-side-encryption aws:kms ヘッダーをリクエストに追加します。--ssekms-key-id example-key-idを使用して、作成したカスタマーマネージド AWS KMS キーを追加します。--server-side-encryption aws:kms を指定する場合は、カスタマーマネージドキーの AWS KMS キー ID を指定する必要があります。ディレクトリバケットは AWS マネージドキーを使用しません。コマンドの例については、AWS CLI の使用 をご参照ください。

次に、次のコマンドを使用して新しいオブジェクトをアップロードすると、Amazon S3 はデフォルトの暗号化にバケット設定を使用して、デフォルトでオブジェクトを暗号化します。

aws s3api put-object --bucket bucket-base-name--azid--x-s3 --key example-object-key --body filepath

ゾーンエンドポイント API オペレーションコマンドに -\-bucket-key-enabled を明示的に追加する必要はありません。S3 バケットキーは、ディレクトリバケット内の GET および PUT オペレーションで常に有効になっており、無効にすることはできません。SSE-KMS で暗号化されたオブジェクトを、CopyObjectUploadPartCopyバッチオペレーションの Copy オペレーション、または import ジョブを使用して、汎用バケットからディレクトリバケットへ、ディレクトリバケットから汎用バケットへ、またはディレクトリバケット間でコピーする場合、S3 バケットキーはサポートされません。この場合、KMS で暗号化されたオブジェクトのコピーリクエストが実行されるたびに、Amazon S3 は AWS KMS を呼び出します。

オブジェクトをレプリケート元バケット (汎用バケットなど) から新しいバケット (ディレクトリバケットなど) にコピーし、レプリケート先オブジェクトに SSE-KMS 暗号化を使用できます。これを行うには、put-bucket-encryption コマンドを使用して、レプリケート先バケット (ディレクトリバケットなど) のデフォルトの暗号化設定を SSE-KMS (aws:kms) に設定します。コマンドの例については、AWS CLI の使用 をご参照ください。次に、次のコマンドを使用してオブジェクトをコピーすると、Amazon S3 はデフォルトの暗号化にバケット設定を使用して、デフォルトでオブジェクトを暗号化します。

aws s3api copy-object --copy-source amzn-s3-demo-bucket/example-object-key --bucket bucket-base-name--azid--x-s3 --key example-object-key

AWS SDK を使用する場合、サーバー側の暗号化に AWS KMS keys を使用するよう Amazon S3 にリクエストできます。次の例は、AWS SDK for Java および .NET で SSE-KMS を使用する方法を示しています。他の SDK については、AWS デベロッパーセンターのサンプルコードとライブラリを参照してください。

注記

CreateSession に AWS SDK を使用する場合、セッショントークンは自動的に更新され、セッションの有効期限が切れたときのサービス中断を回避します。CreateSession リクエストの暗号化設定値を上書きすることはサポートされていません。また、ゾーンエンドポイント API コール (CopyObject および UploadPartCopy を除く) では、CreateSession リクエストからの暗号化設定の値を上書きすることはできません。

SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります その後、ゾーンエンドポイント API オペレーションのセッションが作成されると、セッション中に新しいオブジェクトが SSE-KMS および S3 バケットキーで自動的に暗号化および復号されます。

AWS SDK を使用してディレクトリバケットのデフォルト暗号化設定を SSE-KMS として設定する方法の詳細については、「AWS SDK の使用」を参照してください。

重要

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

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