AWS 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 デベロッパーガイド」の「Using multi-Region keys」を参照してください。
注記
別のアカウントが所有している KMS キーを使用する場合は、そのキーを使用するアクセス許可が必要です。KMS キーのクロスアカウント権限の詳細については、AWS Key Management Service デベロッパーガイドの「他のアカウントで使用できる KMS キーを作成する」を参照してください。
このセクションでは、Amazon S3 コンソールを使用して、AWS Key Management Service (AWS KMS) キーによる二層式サーバー側の暗号化 (DSSE-KMS) を使用するようにオブジェクトの暗号化のタイプを設定または変更する方法について説明します。
注記
-
オブジェクトが 5 GB 未満の場合は、オブジェクトの暗号化を変更できます。オブジェクトが 5 GB を超える場合は、AWS CLI または AWS SDK を使用してオブジェクトの暗号化を変更する必要があります。
-
オブジェクトの暗号化の変更に必要な追加のアクセス許可のリストについては、「Amazon S3 API オペレーションに必要なアクセス許可」を参照してください。このアクセス許可を付与するポリシーの例については、「Amazon S3 のアイデンティティベースのポリシー例」を参照してください。
オブジェクトの暗号化を変更すると、新しいオブジェクトが作成され、古いオブジェクトが置き換えられます。S3 バージョニングが有効になっている場合は、オブジェクトの新しいバージョンが作成され、既存のオブジェクトが古いバージョンになります。また、プロパティを変更するロールは、新しいオブジェクト (またはオブジェクトのバージョン) の所有者になります。
オブジェクトの暗号化を追加または変更するには
AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/
) を開きます。 -
ナビゲーションペインで [バケット] を選択してから、[汎用バケット] タブをクリックします。変更するオブジェクトを含む Amazon S3 バケットまたはフォルダに移動します。
-
変更するオブジェクトのチェックボックスをオンにします。
-
[アクション] メニューに表示されるオプションのリストから [サーバー側の暗号化を編集] を選択します。
[サーバー側の暗号化] セクションまでスクロールします。
[暗号化設定] で、[デフォルトの暗号化にバケット設定を使用する] または [デフォルトの暗号化にバケット設定を上書きする] を選択します。
-
[デフォルトの暗号化にバケット設定を上書きする] を選択した場合は、次の暗号化設定を設定します。
-
[暗号化タイプ] で、[AWS Key Management Service キーによる二層式サーバー側の暗号化 (DSSE-KMS)] を選択します。
-
[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 キーの識別」を参照してください。
-
-
-
[バケットキー] で、[無効] を選択します。S3 バケットキーは DSSE-KMS ではサポートされていません。
-
[追加のコピー設定] で、[ソース設定をコピー] するか、[設定を指定しない] か、[設定を指定] するかを選択します。[ソース設定をコピー] がデフォルトのオプションです。ソース設定の属性なしでオブジェクトのみをコピーする場合は、[設定を指定しない] を選択します。ストレージクラス、ACL、オブジェクトタグ、メタデータ、サーバー側の暗号化、その他のチェックサムの設定を指定するには、[設定を指定] を選択します。
-
[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-encryption
、x-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
パラメータを使用して、作成したカスタマーマネージド AWS KMS キーを追加します。AWS KMS キー ID を指定せずに example-key-id
--server-side-encryption aws:kms:dsse
を指定した場合、Amazon S3 は AWS マネージドキー (aws/s3
) を使用します。
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keyexample-object-key
--server-side-encryption aws:kms:dsse --ssekms-key-idexample-key-id
--bodyfilepath
暗号化されていないオブジェクトを元の場所にコピーすることで、DSSE-KMS を使用するように暗号化できます。
aws s3api copy-object --bucket
amzn-s3-demo-bucket
--keyexample-object-key
--bodyfilepath
--bucketamzn-s3-demo-bucket
--keyexample-object-key
--sse aws:kms:dsse --sse-kms-key-idexample-key-id
--bodyfilepath