

# Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)
<a name="UsingServerSideEncryption"></a>

**重要**  
Amazon S3 では、Amazon S3 内のすべてのバケットの基本レベルの暗号化として、Amazon S3 が管理するキー (SSE-S3) によるサーバー側の暗号化が適用されるようになりました。2023 年 1 月 5 日以降、Amazon S3 にアップロードされるすべての新しいオブジェクトは、追加費用なしで、パフォーマンスに影響を与えずに自動的に暗号化されます。S3 バケットのデフォルト暗号化設定と新しいオブジェクトのアップロードのための自動暗号化ステータスは、CloudTrail ログ、S3 インベントリ、S3 ストレージレンズ、Amazon S3 コンソール、および AWS CLI と AWS SDK の追加の Amazon S3 API レスポンスヘッダーとして利用できるようになりました。詳細については、「[デフォルト暗号化に関するよくある質問](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html)」を参照してください。

Amazon S3 バケットへの新しいオブジェクトのアップロードはすべて、デフォルトでは Amazon S3 マネージドキーによる暗号化 (SSE-S3) で暗号化されます。

サーバー側の暗号化は、保管中のデータを保護します。Amazon S3 は、一意のキーで各オブジェクトを暗号化します。追加の保護措置として、S3 は定期的にローテーションされるキーを使ってキーそのものを暗号化します。Amazon S3 サーバー側の暗号化では、256 ビットの高度暗号化標準 Galois/Counter Mode (AES-GCM) を使用して、アップロードされたすべてのオブジェクトを暗号化します。

Amazon S3 が管理するキーによるサーバー側の暗号化 (SSE−S3) を使用するために、追加でかかる料金はありません。ただし、デフォルトの暗号化機能を設定するためのリクエストには、標準 Amazon S3 リクエスト料金がかかります。料金については、[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)を参照してください。

Amazon S3 マネージドキーのみを使用してデータアップロードを暗号化する必要がある場合は、次のバケットポリシーを使用できます。例えば、次のバケットポリシーは、サーバー側の暗号化を要求する `x-amz-server-side-encryption` ヘッダーがリクエストに含まれない限り、オブジェクトをアップロードする許可を拒否します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "PutObjectPolicy",
  "Statement": [
    {
      "Sid": "DenyObjectsThatAreNotSSES3",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
   ]
}
```

------

**注記**  
サーバー側の暗号化では、オブジェクトのメタデータではなく、オブジェクトデータのみが暗号化されます。

## サーバー側の暗号化での API サポート
<a name="APISupportforServer-SideEncryption"></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/)」を参照してください。

オブジェクト作成の REST API を使用してサーバー側の暗号化を設定するには、`x-amz-server-side-encryption` リクエストヘッダーを提供します。REST API の詳細については、[REST API の使用](specifying-s3-encryption.md#SSEUsingRESTAPI) を参照してください。

以下の Amazon S3 API でこのヘッダーがサポートされています。
+ **PUT オペレーション** − `PUT` API を使用してデータをアップロードする場合は、リクエストヘッダーを指定します。詳細については、「[PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)」を参照してください。
+ **マルチパートアップロードの開始** — マルチパートアップロード API オペレーションを使用して大きいオブジェクトをアップロードするときに、開始リクエストでヘッダーを指定します。詳細については、[Initiate Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html) を参照してください。
+ **COPY オペレーション** – オブジェクトをコピーする場合、ソースオブジェクトとターゲットオブジェクトがあります。詳細については、[PUT Object − Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html) を参照してください。

**注記**  
`POST` オペレーションを使用してオブジェクトをアップロードする場合は、リクエストヘッダーを指定する代わりに、フォームフィールドで同じ情報を指定します。詳細については、[POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html) を参照してください。

AWS SDK にも、サーバー側の暗号化を要求するために使用できるラッパー API があります。また、AWS マネジメントコンソール を使用して、オブジェクトをアップロードしてサーバー側の暗号化を要求することもできます。

詳細については、*AWS Key Management Service デベロッパーガイド*の「[AWS KMS の概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html)」を参照してください。

**Topics**
+ [サーバー側の暗号化での API サポート](#APISupportforServer-SideEncryption)
+ [Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3) の指定](specifying-s3-encryption.md)