

# AWS KMS (SSE−KMS) によるサーバー側の暗号化の指定
<a name="specifying-kms-encryption"></a>

すべての Amazon S3 バケットにはデフォルトで暗号化が設定されており、S3 バケットにアップロードされたすべての新しいオブジェクトは保存時に自動的に暗号化されます。Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) は、Amazon S3 のすべてのバケットでのデフォルトの暗号化設定です。別のタイプの暗号化を使用するには、S3 `PUT` リクエストで使用するサーバー側の暗号化のタイプを指定するか、宛先バケットにデフォルトの暗号化設定を更新できます。

`PUT` リクエストで別の暗号化タイプを指定する場合は、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS)、AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS)、または顧客提供のキーによるサーバー側の暗号化 (SSE-C) を使用できます。宛先バケットに別のデフォルト暗号化設定を設定する場合は、SSE-KMS または DSSE-KMS を使用できます。

汎用バケットのデフォルトの暗号化設定を変更する方法の詳細については、「[デフォルトの暗号化の設定](default-bucket-encryption.md)」を参照してください。

バケットのデフォルトの暗号化設定を SSE-KMS に変更しても、バケット内の既存の Amazon S3 オブジェクトの暗号化タイプは変更されません。デフォルトの暗号化設定を SSE-KMS に更新した後に既存のオブジェクトの暗号化タイプを変更するには、Amazon S3 バッチオペレーションを使用できます。S3 バッチオペレーションにオブジェクトのリストを指定すると、バッチオペレーションが対応する API オペレーションを呼び出します。[オブジェクトのコピー](batch-ops-copy-object.md) アクションを使用して既存のオブジェクトをコピーし、SSE-KMS で暗号化されたオブジェクトと同じバケットに書き戻すことができます。1 つのバッチオペレーションジョブで、数十億ものオブジェクトに対して、指定されたオペレーションを実行できます。詳細については、「[バッチオペレーションでオブジェクトオペレーションを一括で実行する](batch-ops.md)」および *AWS Storage Blog* の投稿「[How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/)」を参照してください。

Amazon S3 コンソール、REST API オペレーション、AWS SDK、および AWS Command Line Interface (AWS CLI) を使用して SSE-KMS を指定できます。詳細については、以下のトピックを参照してください。

**注記**  
Amazon S3 では、マルチリージョン AWS KMS keys を使用できます。ただし、Amazon S3 では現在、マルチリージョンキーは、単一リージョンキーであるかのように処理され、キーのマルチリージョン特徴は使用しません。詳細については、「AWS Key Management Service デベロッパーガイド」の「[Using multi-Region keys](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)」を参照してください。

## S3 コンソールの使用
<a name="add-object-encryption-kms"></a>

このトピックでは、Amazon S3 コンソールを使用して、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化 (SSE-KMS) を使用するようにオブジェクトの暗号化のタイプを設定または変更する方法について説明します。

**注記**  
オブジェクトが 5 GB 未満の場合は、オブジェクトの暗号化を変更できます。オブジェクトが 5 GB を超える場合は、[AWS CLI](mpu-upload-object.md#UsingCLImpUpload) または [AWS SDK](CopyingObjectsMPUapi.md) を使用してオブジェクトの暗号化を変更する必要があります。
オブジェクトの暗号化の変更に必要な追加のアクセス許可のリストについては、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。このアクセス許可を付与するポリシーの例については、「[Amazon S3 のアイデンティティベースのポリシー例](example-policies-s3.md)」を参照してください。
オブジェクトの暗号化を変更すると、新しいオブジェクトが作成され、古いオブジェクトが置き換えられます。S3 バージョニングが有効になっている場合は、オブジェクトの新しいバージョンが作成され、既存のオブジェクトが古いバージョンになります。また、プロパティを変更するロールは、新しいオブジェクト (またはオブジェクトのバージョン) の所有者になります。

**オブジェクトの暗号化を追加または変更するには**

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. ナビゲーションペインで **[バケット]** を選択してから、**[汎用バケット]** タブをクリックします。変更するオブジェクトを含む Amazon S3 バケットまたはフォルダに移動します。

1. 変更するオブジェクトのチェックボックスをオンにします。

1. **[アクション]** メニューに表示されるオプションのリストから **[サーバー側の暗号化を編集]** を選択します。

1. **[サーバー側の暗号化]** セクションまでスクロールします。

1. **[暗号化設定]** で、**[デフォルトの暗号化にバケット設定を使用する]** または **[デフォルトの暗号化にバケット設定を上書きする]** を選択します。
**重要**  
デフォルト暗号化設定に SSE-KMS オプションを使用する場合、AWS KMS の 1 秒あたりのリクエスト (RPS) 制限が適用されます。AWS KMS クォータの詳細およびクォータの引き上げをリクエストする方法については、*AWS Key Management Service デベロッパーガイド*の「[クォータ](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html)」を参照してください。

1. **[デフォルトの暗号化にバケット設定を上書きする]** を選択した場合は、次の暗号化設定を設定します。

   1. **[暗号化タイプ]** で、**[AWS Key Management Service キーによるサーバー側の暗号化 (SSE-KMS)]** を選択します。

   1. **[AWS KMS キー]** で、次のいずれかを実行して KMS キーを選択します。
      + 使用可能な KMS キーのリストから選択するには、**[AWS KMS keys から選択する]** を選択し、使用可能なキーのリストから自分の **KMS** キーを選択します。

        AWS マネージドキー (`aws/s3`) とカスタマーマネージドキーの両方がこのリストに表示されます。カスタマーマネージドキーの詳細については、*AWS Key Management Serviceデベロッパーガイド*の「[カスタマーキーと AWS キー](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#key-mgmt)」を参照してください。
      + KMS キー ARN を入力するには、**[AWS KMS key ARN を入力]** を選択し、表示されるフィールドに KMS キー ARN を入力します。
      + AWS KMS コンソールで新しいカスタマーマネージドキーを作成するには、**[KMS キーを作成]** を選択します。

        AWS KMS key の作成の詳細については、**「AWS Key Management Service デベロッパーガイド」の「[キーの作成](https://docs.aws.amazon.com//kms/latest/developerguide/create-keys.html)」を参照してください。
**重要**  
バケットと同じ AWS リージョン で使用可能な KMS キーのみを使用できます。Amazon S3 コンソールには、バケットと同じリージョンで最初の 100 個の KMS キーしか表示されません。リストに存在しない KMS キーを使用するには、KMS キー ARN を入力する必要があります。別のアカウントが所有している KMS キーを使用する場合は、まずそのキーを使用するアクセス許可が必要であり、次に KMS キー ARN を入力する必要があります。  
Amazon S3 では、対称暗号化 KMS キーのみがサポートされ、非対称暗号化 KMS キーはサポートされません。詳細については、*AWS Key Management Service デベロッパーガイド*の「[Identifying symmetric and asymmetric KMS keys](https://docs.aws.amazon.com//kms/latest/developerguide/find-symm-asymm.html)」(対称および非対称 KMS キーの識別) を参照してください。

1. **[追加のコピー設定]** で、**[ソース設定をコピー]** するか、**[設定を指定しない]** か、**[設定を指定]** するかを選択します。**[ソース設定をコピー]** がデフォルトのオプションです。ソース設定の属性なしでオブジェクトのみをコピーする場合は、**[設定を指定しない]** を選択します。ストレージクラス、ACL、オブジェクトタグ、メタデータ、サーバー側の暗号化、その他のチェックサムの設定を指定するには、**[設定を指定]** を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

**注記**  
このアクションは、指定されたすべてのオブジェクトに暗号化を適用します。フォルダを暗号化する場合は、保存オペレーションが完了するのを待ってから、フォルダに新しいオブジェクトを追加します。

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

オブジェクトを作成するとき (新しいオブジェクトをアップロードするか、既存のオブジェクトをコピーするとき) に、AWS KMS keys (SSE-KMS) を使用したサーバー側の暗号化の使用を指定してデータを暗号化できます。これを行うには、リクエストに `x-amz-server-side-encryption` ヘッダーを追加します。ヘッダーの値を、暗号化アルゴリズム `aws:kms` に設定します。Amazon S3 によりレスポンスヘッダー `x-amz-server-side-encryption` が返されるため、SSE−KMS を使用してオブジェクトが保存されたことを確認できます。

`x-amz-server-side-encryption` の値で `aws:kms` ヘッダーを指定する場合は、次のリクエストヘッダーも使用できます。
+ `x-amz-server-side-encryption-aws-kms-key-id`
+ `x-amz-server-side-encryption-context`
+ `x-amz-server-side-encryption-bucket-key-enabled`

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

### SSE-KMS をサポートする Amazon S3 REST API オペレーション
<a name="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_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/RESTObjectPOST.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) — `POST` オペレーションを使用してオブジェクトをアップロードするときには、リクエストヘッダーの代わりに、フォームフィールドで同じ情報を指定します。
+ [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_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` リクエストはすべて、Secure Sockets Layer (SSL)、Transport Layer Security (TLS)、または署名バージョン 4 を使用していない場合、失敗します。
オブジェクトで SSE−KMS を使用している場合、`GET` リクエストおよび `HEAD` リクエストに対して暗号化リクエストヘッダーを送信しないでください。送信すると、HTTP 400 BadRequest エラーが発生します。

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

`x-amz-server-side-encryption:aws:kms` を指定した場合、Amazon S3 API は `x-amz-server-side-encryption-context` ヘッダーの暗号化コンテキストをサポートします。暗号化コンテキストは、データに関する追加のコンテキスト情報が含まれたキーバリューペアのセットです。

Amazon S3 は、オブジェクトまたはバケットの Amazon リソースネーム (ARN) を暗号化コンテキストペアとして自動的に使用します。S3 バケットキーを有効にせずに SSE−KMS を使用する場合は、オブジェクト ARN を暗号化コンテキストとして使用します。例えば、`arn:aws:s3:::object_ARN` です。ただし、S3 バケットキーを有効にして SSE−KMS を使用する場合は、バケット ARN を暗号化コンテキストに使用します。例えば、`arn:aws:s3:::bucket_ARN` です。

オプションで、`x-amz-server-side-encryption-context` ヘッダーを使用して、追加の暗号化コンテキストペアを指定することもできます。しかし、暗号化コンテキストは暗号化されないため、機密情報を含めないでください。Amazon S3 は、この追加のキーペアをデフォルトの暗号化コンテキストとともに保存します。

Amazon S3 の暗号化コンテキストの詳細については、「[暗号化コンテキスト](UsingKMSEncryption.md#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-kms-key-id-api"></a>

`x-amz-server-side-encryption-aws-kms-key-id` ヘッダーを使用して、データの保護に使用するカスタマーマネージドキーの ID を指定できます。`x-amz-server-side-encryption:aws:kms` ヘッダーを指定しても `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 キー](https://docs.aws.amazon.com//kms/latest/developerguide/concepts.html#symmetric-cmks)」を参照してください。

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

`x-amz-server-side-encryption-aws-bucket-key-enabled` リクエストヘッダーを使用して、オブジェクトレベルで S3 バケットキーを有効または無効にできます。S3 バケットキーで、Amazon S3 から AWS KMS へのリクエストトラフィックを減らすことにより、AWS KMS リクエストコストを削減できます。詳細については、「[Amazon S3 バケットキーを使用した SSE−KMS のコストの削減](bucket-key.md)」を参照してください。

`x-amz-server-side-encryption:aws:kms` ヘッダーを指定しても、`x-amz-server-side-encryption-aws-bucket-key-enabled` は指定しない場合、オブジェクトは送信先バケットの S3 バケットキーの設定を使用して、オブジェクトを暗号化します。詳細については、「[オブジェクトレベルで S3 バケットキーを設定する](configuring-bucket-key-object.md)」を参照してください。

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

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

新しいオブジェクトをアップロードするか、既存のオブジェクトをコピーするときに、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)を追加します。AWS KMS キー ID を指定せずに `--server-side-encryption aws:kms` を指定した場合、Amazon S3 は AWS マネージドキーを使用します。

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --body filepath
```

さらに、`--bucket-key-enabled` または `--no-bucket-key-enabled` を追加することで、PUT または COPY オペレーションで Amazon S3 バケットキーを有効または無効にできます。S3 バケットキーで、Amazon S3 から AWS KMS へのリクエストトラフィックを減らすことにより、AWS KMS リクエストコストを削減できます。詳細については、「[Amazon S3 バケットキーを使用した SSE-KMS のコストの削減](https://docs.aws.amazon.com//AmazonS3/latest/userguide/bucket-key.html)」を参照してください。

```
aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --bucket-key-enabled --body filepath
```

暗号化されていないオブジェクトを元の場所にコピーすることで、SSE-KMS を使用するように暗号化できます。

```
aws s3api copy-object --bucket amzn-s3-demo-bucket --key example-object-key --body filepath --bucket amzn-s3-demo-bucket --key example-object-key --sse aws:kms --sse-kms-key-id example-key-id --body filepath
```

## AWS SDK の使用
<a name="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)を参照してください。

**重要**  
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)」を参照してください。

### `CopyObject` オペレーション
<a name="kms-copy-operation"></a>

オブジェクトをコピーする場合は、同じリクエストプロパティ (`ServerSideEncryptionMethod` および `ServerSideEncryptionKeyManagementServiceKeyId`) を追加して、AWS KMS key を使用するように Amazon S3 に対してリクエストします。オブジェクトのコピーの詳細については、[オブジェクトのコピー、移動、名前の変更](copy-object.md) を参照してください。

### `PUT` オペレーション
<a name="kms-put-operation"></a>

------
#### [ Java ]

AWS SDK for Java を使用してオブジェクトをアップロードする場合、次のリクエストのように `SSEAwsKeyManagementParams` プロパティを追加することによって、AWS KMS key を使用するように Amazon S3 に対してリクエストできます。

```
PutObjectRequest putRequest = new PutObjectRequest(bucketName,
   keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());
```

この場合、Amazon S3 は AWS マネージドキー (`aws/s3`) を使用します。詳細については、「[AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用](UsingKMSEncryption.md)」を参照してください。次の例に示すように、オプションで、対称暗号化 KMS キーを作成し、それをリクエストで指定できます。

```
PutObjectRequest putRequest = new PutObjectRequest(bucketName,
   keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));
```

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

オブジェクトをアップロードするためのコード例については、以下のトピックを参照してください。これらの例を使用するには、コード例を更新し、前出のコード例に示されているように暗号化情報を提供する必要があります。
+ 1 つのオペレーションでオブジェクトをアップロードする場合は、[オブジェクトのアップロード](upload-objects.md) を参照してください。
+ 高レベルまたは低レベルのマルチパートアップロード API オペレーションを使用するマルチパートアップロードについては、「[マルチパートアップロードを使用したオブジェクトのアップロード](mpu-upload-object.md)」を参照してください。

------
#### [ .NET ]

AWS SDK for .NET を使用してオブジェクトをアップロードする場合、次のリクエストのように `ServerSideEncryptionMethod` プロパティを追加することによって、AWS KMS key を使用するように Amazon S3 に対してリクエストできます。

```
PutObjectRequest putRequest = new PutObjectRequest
 {
     BucketName = amzn-s3-demo-bucket,
     Key = keyName,
     // other properties
     ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS
 };
```

この場合、Amazon S3 は AWS マネージドキー を使用します。詳細については、「[AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) の使用](UsingKMSEncryption.md)」を参照してください。次の例に示すように、オプションで、独自の対称暗号化カスタマーマネージドキーを作成し、それをリクエストで指定できます。

```
PutObjectRequest putRequest1 = new PutObjectRequest
{
  BucketName = amzn-s3-demo-bucket,
  Key = keyName,
  // other properties
  ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS,
  ServerSideEncryptionKeyManagementServiceKeyId = keyId
};
```

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

オブジェクトをアップロードするためのコード例については、以下のトピックを参照してください。これらの例を使用するには、コード例を更新し、前出のコード例に示されているように暗号化情報を提供する必要があります。
+ 1 つのオペレーションでオブジェクトをアップロードする場合は、[オブジェクトのアップロード](upload-objects.md) を参照してください。
+ 高レベルまたは低レベルのマルチパートアップロード API オペレーションを使用するマルチパートアップロードについては、「[マルチパートアップロードを使用したオブジェクトのアップロード](mpu-upload-object.md)」を参照してください。

------

### 署名付き URL
<a name="kms-presigned-urls"></a>

------
#### [ Java ]

次の例に示すように、AWS KMS key で暗号化されたオブジェクトの署名付き URL を作成する際には、署名バージョン 4 を明示的に指定する必要があります。

```
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setSignerOverride("AWSS3V4SignerType");
AmazonS3Client s3client = new AmazonS3Client(
        new ProfileCredentialsProvider(), clientConfiguration);
...
```

コード例については、[署名付き URL を使用したオブジェクトの共有](ShareObjectPreSignedURL.md) を参照してください。

------
#### [ .NET ]

次の例に示すように、AWS KMS key で暗号化されたオブジェクトの署名付き URL を作成する際には、署名バージョン 4 を明示的に指定する必要があります。

```
AWSConfigs.S3Config.UseSignatureVersion4 = true;
```

コード例については、[署名付き URL を使用したオブジェクトの共有](ShareObjectPreSignedURL.md) を参照してください。

------