メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

AWS KMS で管理されたキーによるサーバー側の暗号化 (SSE-KMS) を使用したデータの保護

サーバー側の暗号化は、保管時のデータ保護に関するものです。AWS Key Management Service (AWS KMS) は、安全で可用性の高いハードウェアおよびソフトウェアを結合するサービスであり、クラウド向けに拡張されたキー管理システムを提供します。 AWS KMS は顧客のマスターキー (CMK) を使用して Amazon S3 オブジェクトを暗号化します。 IAM コンソールの [Encryption Keys] セクションまたは AWS KMS API から AWS KMS を使用して、暗号化キーの作成、キーの使用法を管理するポリシーの定義、キーが正しく使用されていることを証明するキー使用の監査を集中的に実行できます。 これらのキーを使用して、Amazon S3 バケットのデータを保護することができます。

SSE-KMS を使用して暗号化されたオブジェクトをリージョン内のバケットに初めて追加するときは、デフォルトの CMK が自動的に作成されます。AWS Key Management Service を使用して別途作成した CMK を選択しない限り、SSE-KMS 暗号化ではこのキーが使用されます。独自の CMK を作成すると、アクセスコントロールを作成、使い回し、無効化、定義できるほか、データの保護に使用される暗号化キーを監査できるなど、より高い柔軟性が得られます。

詳細については、『AWS Key Management Service Developer Guide』の「AWS Key Management Service とは」を参照してください。AWS KMS を使用する場合、AWS-KMS キーを使用する際には追加料金が発生します。 詳細については、「AWS Key Management Service の料金」を参照してください。

注記

SSE-KMS で暗号化されたオブジェクトをアップロードしたり、それらへアクセスする場合、セキュリティを強化するために AWS 署名バージョン 4 を使用する必要があります。AWS SDK を使用してこれを行う方法については、「リクエスト認証時の署名バージョンの指定」を参照してください。です。

SSE-KMS の特長は次のとおりです。

  • ご自身で暗号化キーを作成および管理することを選択するか、リージョンレベルのサービスごとにお客様に対して一意に作成されるデフォルトのサービスキーの使用を選択することができます。

  • レスポンスの ETag はオブジェクトデータの MD5 ではありません。

  • データの暗号化に使用されるデータキーも、保護対象のデータとともに暗号化されて保管されます。

  • Auditable マスターキーは、IAM コンソールから作成、ローテーション、および無効化することができます。

  • AWS KMS のセキュリティ制御は、暗号化関連のコンプライアンス要件を満たすのに役立ちます。

Amazon S3 では、バケットに保存するすべてのオブジェクトに対してサーバー側の暗号化を必要とする場合は、バケットポリシーを使用できます。たとえば、SSE-KMS を使用したサーバー側の暗号化を要求する x-amz-server-side-encryption ヘッダーがリクエストに含まれていない場合、次のバケットポリシーはすべてのユーザーに対し、オブジェクト(s3:PutObject)をアップロードするアクセス権限を拒否します。

Copy
{ "Version":"2012-10-17", "Id":"PutObjPolicy", "Statement":[{ "Sid":"DenyUnEncryptedObjectUploads", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::YourBucket/*", "Condition":{ "StringNotEquals":{ "s3:x-amz-server-side-encryption":"aws:kms" } } } ] }

Amazon S3 は、s3:x-amz-server-side-encryption-aws-kms-key-id 条件キーもサポートしており、オブジェクトの暗号化のための特定の KMS キーを要求するために使用できます。 ポリシーで指定した KMS キーには、arn:aws:kms:region:acct-id:key/key-id" 形式を使用する必要があります。

注記

オブジェクトをアップロードするときに、x-amz-server-side-encryption-aws-kms-key-id ヘッダーを使用して KMS キーを指定できます。 ヘッダーがリクエストにない場合、Amazon S3 はデフォルトの KMS キーと見なします。 その場合でも、Amazon S3 がオブジェクトの暗号化に使用する KMS キー ID とポリシーの KMS キー ID は一致する必要があります。一致しない場合、Amazon S3 はリクエストを拒否します。

重要

AWS KMS によって保護されているオブジェクトに対する GET および PUT リクエストは、SSL または SigV4 を使用して作成されている場合を除いて失敗します。

SSE-KMS が暗号化するのはオブジェクトデータだけです。オブジェクトメタデータは暗号化されません。

Amazon S3 マネジメントコンソールでの AWS Key Management Service の使用

Amazon S3 マネージメントコンソールで KMS で管理された暗号化キーを使用する方法の詳細については、Amazon Simple Storage Service ユーザーガイドの「S3 オブジェクトのアップロード」を参照してください。

Amazon S3 の AWS Key Management Service に対する API サポート

オブジェクト作成の REST API(「REST API を使用した Amazon S3 への AWS Key Management Service の指定」を参照)は、x-amz-server-side-encryption というリクエストヘッダーを提供します。これを使用して、値が aws:kms の SSE-KMS をリクエストできます。また、x-amz-server-side-encryption-aws-kms-key-id は、オブジェクトに使用された AWS KMS マスター暗号化キーの ID を指定します。 Amazon S3 API は、x-amz-server-side-encryption-context ヘッダーによる暗号化コンテキストもサポートしています。

暗号化コンテキストは、ヘッダーが Base64 でエンコードされた JSON 形式であるかぎり、お好みの値にすることができます。ただし、暗号化コンテキストは暗号化されず、AWS CloudTrail ログが有効になっている場合はログに記録されるので、これには機密情報を含めないでください。 さらに、暗号化または復号されるデータをコンテキストで説明し、AWS KMS で生成される CloudTrail イベントについてよく理解できるようにすることをお勧めします。詳細については、『AWS Key Management Service Developer Guide』の「暗号化コンテキスト」を参照してください。

また、Amazon S3 は提供された暗号化コンテキストのオブジェクト ARN と同じ値を aws:s3:arn の事前定義キーに付加する場合があります。これは、提供された暗号化コンテキストに aws:s3:arn キーが存在しない場合にのみ起こります。この場合は、Amazon S3 が Put リクエストを処理するときに、事前定義キーに付加されます。 この aws:s3:arn キーが暗号化コンテキストにすでに存在する場合は、キーは 2 回目に暗号化コンテキストに付加されません。

この事前定義キーが暗号化コンテキストの一部となっていることは、CloudTrail で関連するリクエストを追跡して、どの S3 オブジェクトの ARN がどの暗号化キーで使用されているかを常に確認できることを意味します。 さらに、この事前定義キーが暗号化コンテキストの一部となっていることで、異なる S3 オブジェクト間で暗号化キーが同じにならないことが保証されます。これによりオブジェクトのセキュリティが高まります。暗号化コンテキスト全体が検証され、オブジェクトの ARN と同じ値があるか検証されます。

以下の Amazon S3 API は、これらのリクエストヘッダーをサポートしています。

  • PUT オペレーション – PUT API(「PUT Object」を参照)を使用してデータをアップロードするときに、これらのリクエストヘッダーを指定できます。

  • マルチパートアップロードの開始 – マルチパートアップロード API を使用して大きいオブジェクトをアップロードするときに、これらのヘッダーを指定できます。これらのヘッダーは、開始リクエストで指定します(「マルチパートアップロードの開始」を参照)。

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

  • Copy オペレーション – オブジェクトをコピーする場合(「PUT Object - Copy」を参照)、ソースオブジェクトとターゲットオブジェクトがあります。Copy オペレーションで SSE-KMS ヘッダーを渡す場合は、ターゲットオブジェクトにのみ適用されます。

AWS SDK にも、Amazon S3 で SSE-KMS をリクエストするためのラッパー API があります。