

# ディレクトリバケットでの AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用
<a name="s3-express-UsingKMSEncryption"></a>

 AWS KMS のセキュリティ制御は、暗号化関連のコンプライアンス要件を満たすのに役立ちます。AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用するようにディレクトリバケットを設定し、これらの KMS キーを使用して Amazon S3 ディレクトリバケット内のデータを保護することを選択できます。SSE-KMS に関する詳細は、「[AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用](UsingKMSEncryption.md)」を参照してください。

**アクセス許可**  
AWS KMS key を使用して暗号化されたオブジェクトを Amazon S3 にアップロードまたは Amazon S3 からダウンロードするには、キーに対する `kms:GenerateDataKey` および `kms:Decrypt` の許可が必要です。詳細については、*AWS Key Management Service デベロッパーガイド*の「[キーユーザーが暗号化オペレーションに KMS キーを使用することを許可する](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-users-crypto)」を参照してください。マルチパートアップロードに必要な AWS KMS アクセス許可については、[[マルチパートアップロード API とアクセス許可](mpuoverview.md#mpuAndPermissions)]を参照してください。

SSE-KMS のキーに関する詳細は、「[AWS KMS (SSE−KMS) によるサーバー側の暗号化の指定](specifying-kms-encryption.md)」を参照してください。

**Topics**
+ [AWS KMS keys](#s3-express-aws-managed-customer-managed-keys)
+ [クロスアカウント操作での SSE-KMS の使用](#s3-express-bucket-encryption-update-bucket-policy)
+ [Amazon S3 バケットキー](#s3-express-sse-kms-bucket-keys)
+ [SSE-KMS の要求](#s3-express-require-sse-kms)
+ [暗号化コンテキスト](#s3-express-encryption-context)
+ [AWS KMS 暗号化されたオブジェクトへのリクエストの送信](#s3-express-aws-signature-version-4-sse-kms)
+ [ディレクトリバケットでの SSE-KMS 暗号化の監査](#s3-express-bucket-encryption-sse-auditing)
+ [ディレクトリバケット内の新しいオブジェクトのアップロードに AWS KMS によるサーバー側の暗号化 (SSE-KMS) を指定する](s3-express-specifying-kms-encryption.md)

## AWS KMS keys
<a name="s3-express-aws-managed-customer-managed-keys"></a>

SSE-KMS 設定では、バケットの存続期間中、ディレクトリバケットごとに 1 つの[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)しかサポートできません。[https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`aws/s3`) はサポートされていません。また、SSE-KMS のカスタマーマネージドキーを指定した後は、バケットの SSE-KMS 設定のカスタマーマネージドキーを上書きすることはできません。

バケットの SSE-KMS 設定に指定したカスタマーマネージドキーは、次のように識別できます。
+ `HeadObject` API オペレーションリクエストを実行して、レスポンス内の `x-amz-server-side-encryption-aws-kms-key-id` の値を検索します。

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

ディレクトリバケットで暗号化に [AWS KMS カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を指定する場合は、キー ID またはキー ARN のみを使用します。KMS キーのキーエイリアス形式はサポートされていません。

SSE-KMS のキーに関する詳細は、「[AWS KMS keys](UsingKMSEncryption.md#aws-managed-customer-managed-keys)」を参照してください。

## クロスアカウント操作での SSE-KMS の使用
<a name="s3-express-bucket-encryption-update-bucket-policy"></a>

ディレクトリバケットのクロスアカウント操作で暗号化を使用する場合は、次の点に注意してください。
+ S3 オブジェクトへのクロスアカウントアクセスを許可する場合は、別のアカウントからのアクセスを許可するようにカスタマーマネージドキーのポリシーを設定します。
+ カスタマーマネージドキーを指定するには、完全修飾 KMS キー ARN を使用する必要があります。

## Amazon S3 バケットキー
<a name="s3-express-sse-kms-bucket-keys"></a>

S3 バケットキーは、ディレクトリバケット内の `GET` および `PUT` オペレーションで常に有効になっており、無効にすることはできません。SSE-KMS で暗号化されたオブジェクトを、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)、[バッチオペレーションの Copy オペレーション](directory-buckets-objects-Batch-Ops.md)、または [import ジョブ](create-import-job.md)を使用して、汎用バケットからディレクトリバケットへ、ディレクトリバケットから汎用バケットへ、またはディレクトリバケット間でコピーする場合、S3 バケットキーはサポートされません。この場合、KMS で暗号化されたオブジェクトのコピーリクエストが実行されるたびに、Amazon S3 は AWS KMS を呼び出します。

[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) および [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) を除く[ゾーンエンドポイント (オブジェクトレベル) API オペレーション](s3-express-differences.md#s3-express-differences-api-operations)では、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) を介してリクエストを認証および承認することで低レイテンシーを実現します。バケットのデフォルトの暗号化では、必要な暗号化設定を使用することをお勧めします。`CreateSession` リクエストまたは `PUT` オブジェクトリクエストでは、バケットのデフォルトの暗号化を上書きしないことをお勧めします。その後、新しいオブジェクトは必要な暗号化設定で自動的に暗号化されます。SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトを暗号化するには、KMS キー (特に[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります。その後、ゾーンエンドポイント API オペレーションのセッションが作成されると、セッション中に新しいオブジェクトが SSE-KMS および S3 バケットキーで自動的に暗号化および復号されます。ディレクトリバケットの暗号化の上書き動作の詳細については、「[新しいオブジェクトのアップロードに AWS KMS を使用してサーバー側の暗号化を指定する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)」を参照してください。

S3 バケットキーは Amazon S3 内で期間限定で使用されるため、Amazon S3 で AWS KMS にリクエストを実行し、暗号化オペレーションを完了する必要性が軽減されます。S3 バケットキーの使用の詳細については、「[Amazon S3 バケットキー](UsingKMSEncryption.md#sse-kms-bucket-keys)」および「[Amazon S3 バケットキーを使用した SSE−KMS のコストの削減](bucket-key.md)」を参照してください。

## SSE-KMS の要求
<a name="s3-express-require-sse-kms"></a>

特定のディレクトリバケット内のすべてのオブジェクトの SSE-KMS を要求するには、バケットポリシーを使用できます。例えば、`CreateSession` API オペレーションを使用して新しいオブジェクト (`PutObject`、`CopyObject`、および `CreateMultipartUpload`) をアップロードするアクセス許可を付与する場合、`CreateSession` リクエストに SSE-KMS をリクエストする `x-amz-server-side-encryption-aws-kms-key-id` ヘッダーが含まれていない場合、次のバケットポリシーはすべてのユーザーに対してオブジェクトのアップロードアクセス許可 (`s3express:CreateSession`) を拒否します。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id":"UploadObjectPolicy",
   "Statement":[{
         "Sid":"DenyObjectsThatAreNotSSEKMS",
         "Effect":"Deny",
         "Principal":"*",
         "Action":"s3express:CreateSession",
         "Resource":"arn:aws:s3express:us-east-1:111122223333:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3",
         "Condition":{
            "Null":{
               "s3express:x-amz-server-side-encryption-aws-kms-key-id":"true"
            }
         }
      }
   ]
}
```

------

特定の AWS KMS key を使用してバケット内のオブジェクトを暗号化することを要求するには、`s3express:x-amz-server-side-encryption-aws-kms-key-id` 条件キーを使用できます。KMS キーを指定するには、キーの Amazon リソースネーム (ARN) を `arn:aws:kms:region:acct-id:key/key-id` 形式で使用する必要があります。AWS Identity and Access Management は、`s3express:x-amz-server-side-encryption-aws-kms-key-id` の文字列が存在するかどうかを検証しません。Amazon S3 がオブジェクトの暗号化に使用する AWS KMS キー ID とポリシーの AWS KMS キー ID は一致する必要があります。一致しない場合、Amazon S3 はリクエストを拒否します。

新しいオブジェクトのアップロードに SSE-KMS を使用する方法の詳細については、「[ディレクトリバケット内の新しいオブジェクトのアップロードに AWS KMS によるサーバー側の暗号化 (SSE-KMS) を指定する](s3-express-specifying-kms-encryption.md)」を参照してください。

ディレクトリバケットの固有条件キーの詳細なリストについては、「[IAM を使用したリージョンエンドポイント API オペレーションの承認](s3-express-security-iam.md)」を参照してください。

## 暗号化コンテキスト
<a name="s3-express-encryption-context"></a>

ディレクトリバケットの場合、暗号化コンテキストは、データに関する追加のコンテキスト情報が含まれたキーと値のペアのセットです。**追加の暗号化コンテキスト値はサポートされていません。暗号化コンテキストの詳細については、「[暗号化コンテキスト](UsingKMSEncryption.md#encryption-context)」を参照してください。



デフォルトでは、ディレクトリバケットで SSE-KMS を使用する場合、Amazon S3 はバケットの Amazon リソースネーム (ARN) を暗号化コンテキストペアとして使用します。

```
arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3
```

IAM ポリシーまたは AWS KMS キーポリシーで、暗号化コンテキストとしてバケット ARN が使用されていることを確認します。

オプションで、[CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html#API_CreateSession_RequestSyntax) などのゾーンエンドポイント API リクエストで `x-amz-server-side-encryption-context` ヘッダーを使用して、明示的な暗号化コンテキストペアを指定できます。このヘッダーの値は、UTF-8 Base64-encoded でエンコードされた JSON の文字列で、暗号化コンテキストをキーと値のペアとして含めます。ディレクトリバケットの場合、暗号化コンテキストはデフォルトの暗号化コンテキストであるバケット Amazon リソースネーム (ARN) と一致する必要があります。また、暗号化コンテキストは暗号化されないため、機密情報を含めないよう注意してください。

暗号化コンテキストを使用して、暗号化オペレーションを識別および分類できます。デフォルトの暗号化コンテキスト ARN 値を使用して、どのディレクトリバケット ARN がどの暗号化キーで使用されたかを確認することで、AWS CloudTrail の関連するリクエストを追跡することもできます。

CloudTrail ログファイルの `requestParameters` フィールドで、ディレクトリバケットで SSE-KMS を使用する場合、暗号化コンテキスト値はバケットの ARN です。

```
"encryptionContext": {
    "aws:s3express:arn": "arn:aws:s3:::arn:aws:s3express:region:account-id:bucket/bucket-base-name--zone-id--x-s3"
}
```

また、ディレクトリバケット内の SSE-KMS によるオブジェクト暗号化の場合、AWS KMS CloudTrail イベントはオブジェクト ARN ではなくバケット ARN をログに記録します。

## AWS KMS 暗号化されたオブジェクトへのリクエストの送信
<a name="s3-express-aws-signature-version-4-sse-kms"></a>

ディレクトリバケットには、HTTPS (TLS) 経由でのみアクセスできます。また、ディレクトリバケットは AWS Signature Version 4 (SigV4) を使用してリクエストに署名します。AWS KMS 暗号化されたオブジェクトのリクエストの送信の詳細については、「[AWS KMS 暗号化されたオブジェクトへのリクエストの送信](UsingKMSEncryption.md#aws-signature-version-4-sse-kms)」を参照してください。

オブジェクトで SSE−KMS を使用している場合、`GET` リクエストおよび `HEAD` リクエストに対して暗号化リクエストヘッダーを送信しないでください。そうしないと、HTTP 400 Bad Request エラーが表示されます。

## ディレクトリバケットでの SSE-KMS 暗号化の監査
<a name="s3-express-bucket-encryption-sse-auditing"></a>

SSE-KMS で暗号化されたデータの AWS KMS キーの使用状況を監査するには、AWS CloudTrail ログを使用します。[https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-generatedatakey.html) や [https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html](https://docs.aws.amazon.com/kms/latest/developerguide/ct-decrypt.html) などの[暗号化オペレーション](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#cryptographic-operations)に関するインサイトを得ることができます。CloudTrail は、イベント名、ユーザー名、イベントソースなど、検索をフィルタリングするための多数の[属性値](https://docs.aws.amazon.com/awscloudtrail/latest/APIReference/API_LookupEvents.html)をサポートしています。

**Topics**
+ [AWS KMS keys](#s3-express-aws-managed-customer-managed-keys)
+ [クロスアカウント操作での SSE-KMS の使用](#s3-express-bucket-encryption-update-bucket-policy)
+ [Amazon S3 バケットキー](#s3-express-sse-kms-bucket-keys)
+ [SSE-KMS の要求](#s3-express-require-sse-kms)
+ [暗号化コンテキスト](#s3-express-encryption-context)
+ [AWS KMS 暗号化されたオブジェクトへのリクエストの送信](#s3-express-aws-signature-version-4-sse-kms)
+ [ディレクトリバケットでの SSE-KMS 暗号化の監査](#s3-express-bucket-encryption-sse-auditing)
+ [ディレクトリバケット内の新しいオブジェクトのアップロードに AWS KMS によるサーバー側の暗号化 (SSE-KMS) を指定する](s3-express-specifying-kms-encryption.md)

# ディレクトリバケット内の新しいオブジェクトのアップロードに AWS KMS によるサーバー側の暗号化 (SSE-KMS) を指定する
<a name="s3-express-specifying-kms-encryption"></a>

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

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

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

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

**注記**  
 ディレクトリバケットの場合、暗号化の上書き動作は次のとおりです。  
REST API で [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) を使用して [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) および [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) を除くゾーンエンドポイント API リクエストを認証および承認する場合、バケットのデフォルトの暗号化を以前に SSE-KMS で指定した場合にのみ、暗号化設定を SSE-S3 または SSE-KMS に上書きできます。
AWS CLI または AWS SDK で [CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) を使用して [CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) および [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) を除くゾーンエンドポイント API リクエストを認証および承認する場合、暗号化設定を上書きすることはできません。
[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) リクエストを行うときは、バケットのデフォルトの暗号化を以前に SSE-KMS で指定した場合にのみ、暗号化設定を SSE-S3 または SSE-KMS に上書きできます。[UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) リクエストを行う場合、暗号化設定を上書きすることはできません。
Amazon S3 では、マルチリージョン AWS KMS keys を使用できます。ただし、Amazon S3 では現在、マルチリージョンキーは、単一リージョンキーであるかのように処理され、キーのマルチリージョン特徴は使用しません。詳細については、**「AWS Key Management Service デベロッパーガイド」の[「マルチリージョンキーを使用する」](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html)を参照してください。
別のアカウントが所有している KMS キーを使用する場合は、そのキーを使用するアクセス許可が必要です。KMS キーのクロスアカウント権限の詳細については、**「AWS Key Management Service デベロッパーガイド」の「[他のアカウントで使用できる KMS キーを作成する](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-modifying-external-accounts.html#cross-account-console)」を参照してください。

## REST API の使用
<a name="s3-express-KMSUsingRESTAPI"></a>

**注記**  
 バケットの存続期間中は、ディレクトリバケットごとに 1 つの[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)のみがサポートされます。[https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`aws/s3`) はサポートされていません。カスタマーマネージドキーを使用してバケットのデフォルトの暗号化設定として SSE-KMS を指定した後は、バケットの SSE-KMS 設定のカスタマーマネージドキーを変更することはできません。

[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) および [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) を除く[ゾーンエンドポイント (オブジェクトレベル) API オペレーション](s3-express-differences.md#s3-express-differences-api-operations)では、[CreateSession](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) を介してリクエストを認証および承認することで低レイテンシーを実現します。バケットのデフォルト暗号化では、必要な暗号化設定を使用することをお勧めします。`CreateSession` リクエストまたは `PUT` オブジェクトリクエストでは、バケットのデフォルト暗号化を上書きしないことをお勧めします。その後、新しいオブジェクトは必要な暗号化設定で自動的に暗号化されます。SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトを暗号化するには、KMS キー (特に[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります その後、ゾーンエンドポイント API オペレーションのセッションが作成されると、セッション中に新しいオブジェクトが SSE-KMS および S3 バケットキーで自動的に暗号化および復号されます。ディレクトリバケットの暗号化の上書き動作の詳細については、「[新しいオブジェクトのアップロードに AWS KMS を使用してサーバー側の暗号化を指定する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-specifying-kms-encryption.html)」を参照してください。

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

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

[CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) の場合、SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトコピーを暗号化するには、KMS キー (特に[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります。次に、SSE-KMS で新しいオブジェクトコピーにサーバー側の暗号化設定を指定するときは、暗号化キーがディレクトリバケットのデフォルトの暗号化設定に指定したカスタマーマネージドキーと同じであることを確認する必要があります。[UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) では、SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトパーツコピーを暗号化するには、KMS キー (特に[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります。[UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) リクエストヘッダーで SSE-KMS を使用して新しいオブジェクトパートコピーのサーバー側の暗号化設定を指定することはできません。また、[CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) リクエストで指定する暗号化設定は、送信先バケットのデフォルトの暗号化設定と一致する必要があります。



**Topics**
+ [SSE-KMS をサポートする Amazon S3 REST API オペレーション](#s3-express-sse-request-headers-kms)
+ [暗号化コンテキスト (`x-amz-server-side-encryption-context`)](#s3-express-s3-kms-encryption-context)
+ [AWS KMS キー ID (`x-amz-server-side-encryption-aws-kms-key-id`)](#s3-express-s3-kms-key-id-api)
+ [S3 バケットキー (`x-amz-server-side-encryption-aws-bucket-key-enabled`)](#s3-express-bucket-key-api)

### SSE-KMS をサポートする Amazon S3 REST API オペレーション
<a name="s3-express-sse-request-headers-kms"></a>

ディレクトリバケット内のオブジェクトレベルの REST API オペレーションでは `x-amz-server-side-encryption`、`x-amz-server-side-encryption-aws-kms-key-id`、および `x-amz-server-side-encryption-context` リクエストヘッダーを受け入れます。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html) – ゾーンエンドポイント (オブジェクトレベル) API オペレーション (CopyObject および UploadPartCopy を除く) を使用する場合、これらのリクエストヘッダーを指定できます。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) - `PUT` オペレーションを使用してデータをアップロードするとき、これらのリクエストヘッダーを指定できます。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) — オブジェクトをコピーするときには、ソースオブジェクトとターゲットオブジェクトの両方があります。`CopyObject` オペレーションで SSE−KMS ヘッダーを渡す場合は、ターゲットオブジェクトにのみ適用されます。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) — マルチパートアップロード API オペレーションを使用して大きいオブジェクトをアップロードする場合、これらのヘッダーを指定できます。これらのヘッダーを `CreateMultipartUpload` リクエストで指定します。

次の REST API オペレーションのレスポンスヘッダーは、オブジェクトがサーバー側の暗号化を使用して保存されているときに `x-amz-server-side-encryption` ヘッダーを返します。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateSession.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)

**重要**  
AWS KMS で保護されたオブジェクトに対する `GET` リクエストと `PUT` リクエストはすべて、Transport Layer Security (TLS)、または署名バージョン 4 を使用していない場合、失敗します。
オブジェクトで SSE−KMS を使用している場合、`GET` リクエストおよび `HEAD` リクエストに対して暗号化リクエストヘッダーを送信しないでください。送信すると、HTTP 400 BadRequest エラーが発生します。

### 暗号化コンテキスト (`x-amz-server-side-encryption-context`)
<a name="s3-express-s3-kms-encryption-context"></a>

`x-amz-server-side-encryption:aws:kms` を指定した場合、Amazon S3 API はオプションで `x-amz-server-side-encryption-context` ヘッダーの暗号化コンテキストの指定をサポートします。ディレクトリバケットの場合、暗号化コンテキストは、データに関するコンテキスト情報が含まれたキーと値のペアのセットです。値は、デフォルトの暗号化コンテキストであるバケット Amazon リソースネーム (ARN) と一致する必要があります。追加の暗号化コンテキスト値はサポートされていません。

ディレクトリバケットの暗号化コンテキストの詳細については、「[暗号化コンテキスト](s3-express-UsingKMSEncryption.md#s3-express-encryption-context)」を参照してください。暗号化コンテキストの一般的な情報については、**「AWS Key Management Service デベロッパーガイド」の「[AWS Key Management Service Concepts - Encryption context](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)」を参照してください。

### AWS KMS キー ID (`x-amz-server-side-encryption-aws-kms-key-id`)
<a name="s3-express-s3-kms-key-id-api"></a>

`x-amz-server-side-encryption-aws-kms-key-id` ヘッダーを使用して、データの保護に使用するカスタマーマネージドキーの ID を指定できます。

SSE-KMS 設定では、バケットの存続期間中、ディレクトリバケットごとに 1 つの[カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)しかサポートできません。[https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) (`aws/s3`) はサポートされていません。また、SSE-KMS のカスタマーマネージドキーを指定した後は、バケットの SSE-KMS 設定のカスタマーマネージドキーを上書きすることはできません。

バケットの SSE-KMS 設定に指定したカスタマーマネージドキーは、次のように識別できます。
+ `HeadObject` API オペレーションリクエストを実行して、レスポンス内の `x-amz-server-side-encryption-aws-kms-key-id` の値を検索します。

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

ディレクトリバケットの暗号化コンテキストの詳細については、「[AWS KMS keys](s3-express-UsingKMSEncryption.md#s3-express-aws-managed-customer-managed-keys)」を参照してください。

### S3 バケットキー (`x-amz-server-side-encryption-aws-bucket-key-enabled`)
<a name="s3-express-bucket-key-api"></a>

S3 バケットキーは、ディレクトリバケット内の `GET` および `PUT` オペレーションで常に有効になっており、無効にすることはできません。SSE-KMS で暗号化されたオブジェクトを、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)、[バッチオペレーションの Copy オペレーション](directory-buckets-objects-Batch-Ops.md)、または [import ジョブ](create-import-job.md)を使用して、汎用バケットからディレクトリバケットへ、ディレクトリバケットから汎用バケットへ、またはディレクトリバケット間でコピーする場合、S3 バケットキーはサポートされません。この場合、KMS で暗号化されたオブジェクトのコピーリクエストが実行されるたびに、Amazon S3 は AWS KMS を呼び出します。ディレクトリバケットでの S3 バケットキーの詳細については、「[暗号化コンテキスト](s3-express-UsingKMSEncryption.md#s3-express-encryption-context)」を参照してください。

## の使用AWS CLI
<a name="s3-express-KMSUsingCLI"></a>

**注記**  
`CreateSession` に AWS CLI を使用すると、セッショントークンが自動的に更新され、セッションの有効期限が切れたときにサービスが中断されるのを防ぐことができます。`CreateSession` リクエストの暗号化設定値を上書きすることはサポートされていません。また、ゾーンエンドポイント API コール ([CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) および [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) を除く) では、`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 キー](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#customer-cmk)を追加します。`--server-side-encryption aws:kms` を指定する場合は、カスタマーマネージドキーの AWS KMS キー ID を指定する必要があります。ディレクトリバケットは AWS マネージドキーを使用しません。コマンドの例については、「[の使用AWS CLI](s3-express-bucket-encryption.md#s3-express-default-bucket-encryption-cli)」を参照してください。

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

```
aws s3api put-object --bucket bucket-base-name--zone-id--x-s3 --key example-object-key --body filepath
```

ゾーンエンドポイント API オペレーションコマンドに `-\-bucket-key-enabled` を明示的に追加する必要はありません。S3 バケットキーは、ディレクトリバケット内の `GET` および `PUT` オペレーションで常に有効になっており、無効にすることはできません。SSE-KMS で暗号化されたオブジェクトを、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html)、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)、[バッチオペレーションの Copy オペレーション](directory-buckets-objects-Batch-Ops.md)、または [import ジョブ](create-import-job.md)を使用して、汎用バケットからディレクトリバケットへ、ディレクトリバケットから汎用バケットへ、またはディレクトリバケット間でコピーする場合、S3 バケットキーはサポートされません。この場合、KMS で暗号化されたオブジェクトのコピーリクエストが実行されるたびに、Amazon S3 は AWS KMS を呼び出します。

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

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

## AWS SDK の使用
<a name="s3-express-kms-using-sdks"></a>

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

**注記**  
`CreateSession` に AWS SDK を使用する場合、セッショントークンは自動的に更新され、セッションの有効期限が切れたときのサービス中断を回避します。`CreateSession` リクエストの暗号化設定値を上書きすることはサポートされていません。また、ゾーンエンドポイント API コール ([CopyObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) および [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) を除く) では、`CreateSession` リクエストからの暗号化設定の値を上書きすることはできません。  
SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります その後、ゾーンエンドポイント API オペレーションのセッションが作成されると、セッション中に新しいオブジェクトが SSE-KMS および S3 バケットキーで自動的に暗号化および復号されます。  
AWS SDK を使用してディレクトリバケットのデフォルト暗号化設定を SSE-KMS として設定する方法の詳細については、「[AWS SDK の使用](s3-express-bucket-encryption.md#s3-express-kms-put-bucket-encryption-using-sdks)」を参照してください。

**重要**  
Amazon S3 でサーバー側の暗号化に AWS KMS key を使用する場合は、対称暗号化 KMS キーを選択する必要があります。Amazon S3 は、対称暗号化 KMS キーのみをサポートします。このキーの詳細については、「**AWS Key Management Service デベロッパーガイド」の「[対称暗号化 KMS キー](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks)」を参照してください。

カスタマーマネージドキーの作成の詳細については、**「AWS Key Management Service デベロッパーガイド」の「[AWS KMS API のプログラミング](https://docs.aws.amazon.com/kms/latest/developerguide/programming-top.html)」を参照してください。