AWS Key Management Service (SSE-KMS) に保存された CMK によるサーバー側の暗号化を使ったデータの保護 - Amazon Simple Storage Service

新しい Amazon S3 ユーザーガイドにようこそ! Amazon S3 ユーザーガイドは、使用中止された 3 つのガイド (Amazon S3 開発者ガイドAmazon S3 コンソールユーザーガイドAmazon S3 入門ガイド) の情報と手順をまとめたものです。

AWS Key Management Service (SSE-KMS) に保存された CMK によるサーバー側の暗号化を使ったデータの保護

サーバー側の暗号化とは、データを受信するアプリケーションまたはサービスによって、送信先でデータを暗号化することです。AWS Key Management Service (AWS KMS) は、安全で可用性の高いハードウェアおよびソフトウェアを結合するサービスであり、クラウド向けに拡張されたキー管理システムを提供します。Amazon S3 は AWS KMS カスタマーマスターキー (CMK) を使用して Amazon S3 オブジェクトを暗号化します。AWS KMS が暗号化するのはオブジェクトデータだけです。オブジェクトメタデータは暗号化されません。

CMK を使用する場合は、AWS マネジメントコンソールまたは AWS KMS API を通じて AWS KMS を使用することで、CMK を一元的に作成し、CMK の使用方法を制御するポリシーを定義して、CMK が正しく使用されていることを証明するために CMK の使用状況を監査します。これらの CMK を使用して、Amazon S3 バケットのデータを保護できます。S3 バケットで SSE-KMS 暗号化を使用する場合、AWS CMK はバケットと同じリージョンに存在する必要があります。

AWS KMS CMK を使用するための追加料金は不要です。詳細については、AWS Key Management Service 開発者ガイドの「AWS Key Management Service の概念 - カスタマーマスターキー (CMK)」および AWS KMS の料金を参照してください。

重要

AWS KMS CMK を使用して暗号化された Amazon S3 オブジェクトをアップロードまたはダウンロードする場合は kms:Decrypt のアクセス許可が必要です。これは、kms:ReEncryptkms:GenerateDataKey、および kms:DescribeKey のアクセス許可に追加されます。詳細については、「AWS KMS キーを使用した暗号化で大きなファイルを Amazon S3 にアップロードできない」を参照してください。

AWS 管理の CMK とカスタマー管理の CMK

AWS KMS (SSE-KMS) によるサーバー側暗号化を使用する場合は、デフォルトの AWS 管理 CMK を使用できます。または、作成済みのスタマー管理 CMK を指定できます。

カスタマー管理の CMK を指定しない場合、SSE-KMS で暗号化されたオブジェクトをバケットに初めて追加するとき、Amazon S3 によって自動的に AWS 管理の CMK が AWS アカウントに作成されます。デフォルトでは、Amazon S3 はこの CMK を SSE-KMS に使用します。

SSE-KMS にカスタマー管理の CMK を使用する場合は、SSE-KMS を設定する前に CMK を作成します。次に、バケット用に SSE-KMS を設定するときに、既存のカスタマー管理の CMK を指定します。

カスタマー管理の CMK を独自に作成することで、より柔軟に制御を行えます。たとえば、カスタマー管理の CMK を作成、更新、無効化することができます。また、アクセスコントロールを定義し、データを保護するために使用するカスタマー管理の CMK を監査することもできます。カスタマー管理の CMK と AWS 管理の CMK の作成の詳細については、AWS Key Management Service 開発者ガイドの「AWS KMS の概念」を参照してください。

重要

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

Amazon S3 バケットキー

AWS KMS (SSE-KMS) を使用してサーバー側の暗号化を設定する場合、SSE-KMS で S3 バケットキーを使用するようにバケットを設定できます。SSE-KMSで このバケットレベルのキーを使用すると、Amazon S3 から AWS KMS へのリクエストトラフィックを減らすことにより、KMS のリクエストコストを最大 99% 削減できます。

新しいオブジェクトで SSE-KMS の S3 バケットキーを使用するようにバケットを設定すると、AWS KMS によりバケットレベルのキーが生成されます。このキーは、バケット内のオブジェクトの一意のデータキーを作成するために使用されます。このバケットキーは Amazon S3 内で期間限定で使用されるため、Amazon S3 で AWS KMS にリクエストを行い、暗号化操作を完了する必要性がさらに軽減されます。S3 バケットキーの使用の詳細については、「Amazon S3 バケットキーを使用した SSE-KMS のコストの削減」を参照してください。

AWS 署名バージョン 4

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

重要

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

SSE-KMS のハイライト

SSE-KMS のハイライトは次のとおりです。

  • 自分で作成および管理するカスタマー管理の CMK を選択するか、Amazon S3 がユーザーに代わって AWS アカウントに作成して管理する AWS 管理の CMK を選択することができます。カスタマー管理の CMK と同様に、AWS 管理の CMK は AWS アカウントおよびリージョンに固有です。Amazon S3 のみが、お客様に代わってこの CMK を使用するアクセス許可を持っています。Amazon S3 は、対称 CMK のみをサポートしています。

  • AWS KMS コンソールから監査可能なカスタマー管理の CMK を作成、更新、および無効化できます。

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

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

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

サーバー側の暗号化の要求

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

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

特定の AWS KMS CMKを使用してバケット内のオブジェクトを暗号化することを要求するには、s3:x-amz-server-side-encryption-aws-kms-key-id 条件キーを使用できます。AWS KMS CMKを指定するには、「arn:aws:kms:region:acct-id:key/key-id" 形式」の重要な Amazon リソースネーム (ARN) を使用する必要があります。

注記

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

Amazon S3 固有の条件キーの完全なリストと条件キーの指定の詳細については、「Amazon S3 条件キーの例」を参照してください。

暗号化コンテキスト

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

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

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

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

暗号化コンテキストに aws:s3:arn キーがまだ存在しない場合、Amazon S3 は、指定した暗号化コンテキストに aws:s3:arn の定義済みのキーを追加できます。Amazon S3 は、リクエストを処理するときに、この定義済みのキーを追加します。S3 バケットキーなしで SSE-KMS を使用する場合、値はオブジェクト ARN と等しくなります。S3 バケットキーを有効にして SSE-KMS を使用する場合、値はバケット ARN と等しくなります。

この定義済みのキーを使用して、CloudTrail で関連するリクエストを追跡できます。したがって、どの Amazon S3 ARN がどの暗号化キーで使用されたかをいつでも確認できます。CloudTrail ログを使用して、異なる Amazon S3 オブジェクトとバケット間で暗号化コンテキストが同一でないことを確認できます。これにより、セキュリティがさらに強化されます。暗号化コンテキスト全体を対象に、オブジェクトあるいはバケット APN と同じ値があるかが検証されます。