

# ディレクトリバケットのデフォルト暗号化の設定とモニタリング
<a name="s3-express-bucket-encryption"></a>

Amazon S3 バケットにはデフォルトで暗号化が有効化されており、新しいオブジェクトは Amazon S3 マネージドキー (SSE-S3) を使用してサーバー側の暗号化により自動的に暗号化されます。この暗号化は Amazon 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)」を参照してください。
SSE-KMS を使用してディレクトリバケット内の新しいオブジェクトを暗号化するには、KMS キー (特にカスタマーマネージドキー) を使用してディレクトリバケットのデフォルトの暗号化設定として SSE-KMS を指定する必要があります。次に、ゾーンエンドポイント API オペレーションのセッションが作成されると、セッション中に新しいオブジェクトが SSE-KMS および S3 バケットキーで自動的に暗号化および復号されます。
デフォルトのバケット暗号化を SSE-KMS に設定すると、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 バケットキーで AWS KMS リクエストコストを削減する方法の詳細については、「[Amazon S3 バケットキーを使用した SSE−KMS のコストの削減](bucket-key.md)」を参照してください。
ディレクトリバケットで暗号化に [AWS KMS カスタマーマネージドキー](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk)を指定する場合は、キー ID またはキー ARN のみを使用します。KMS キーのキーエイリアス形式はサポートされていません。
AWS KMS キーによる二層式サーバー側の暗号化 (DSSE-KMS) およびお客様が提供する暗号化キーを使用したサーバー側の暗号化 (SSE-C) は、ディレクトリバケットのデフォルトの暗号化ではサポートされません。

デフォルトの暗号化設定の詳細については、「[デフォルトの暗号化の設定](default-bucket-encryption.md)」を参照してください。

デフォルトの暗号化に必要なアクセス許可の詳細については、『*Amazon Simple Storage Service API リファレンス*』の「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketEncryption.html)」を参照してください。

Amazon S3 コンソール、AWS SDK、Amazon S3 REST API、および AWS Command Line Interface (AWS CLI) を使用して、Amazon S3 で S3 バケットのデフォルトの暗号化を設定できます。

## S3 コンソールの使用
<a name="s3-express-bucket-encryption-how-to-set-up-console"></a>

**Amazon S3 バケットにデフォルトの暗号化を設定するには**

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

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. **[バケット]** リストで、目的のバケットの名前を選択します。

1. **[プロパティ]** タブを選択します。

1. **[サーバー側の暗号化設定]** では、ディレクトリバケットは **[Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE-S3)]** を使用します。

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

## の使用AWS CLI
<a name="s3-express-default-bucket-encryption-cli"></a>

以下の例では、SSE-S3 を使用するか、SSE-KMS と S3 バケット キーを使用して、デフォルトの暗号化を設定する方法を示します。

デフォルトの暗号化の詳細については、[[Amazon S3 バケット向けのサーバー側のデフォルトの暗号化動作の設定](bucket-encryption.md)] を参照してください。AWS CLI を使用してデフォルトの暗号化を設定する方法の詳細については、[put-bucket-encryption](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-bucket-encryption.html) を参照してください。

**Example - SSE-S3 を使用したデフォルトの暗号化**  
この例では、Amazon S3 マネージドキーを使用したデフォルトのバケット暗号化を設定します。このコマンドを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。  

```
aws s3api put-bucket-encryption --bucket bucket-base-name--zone-id--x-s3 --server-side-encryption-configuration '{
    "Rules": [
        {
            "ApplyServerSideEncryptionByDefault": {
                "SSEAlgorithm": "AES256"
            }
        }
    ]
}'
```

**Example - S3 バケットキーを使用した SSE-KMS でのデフォルトの暗号化**  
この例では、S3 バケットキーを使用して SSE-KMS でデフォルトのバケット暗号化を設定します。このコマンドを使用するには、*ユーザー入力用プレースホルダー*を独自の情報に置き換えます。  

```
aws s3api put-bucket-encryption --bucket bucket-base-name--zone-id--x-s3 --server-side-encryption-configuration '{
    "Rules": [
            {
                "ApplyServerSideEncryptionByDefault": {
                    "SSEAlgorithm": "aws:kms",
                    "KMSMasterKeyID": "KMS-Key-ARN"
                },
                "BucketKeyEnabled": true
            }
        ]
    }'
```

## REST API の使用
<a name="s3-express-bucket-encryption-how-to-set-up-api"></a>

REST API `PutBucketEncryption` オペレーションを使用して、デフォルト暗号化を設定し、使用するサーバー側の暗号化のタイプ (SSE-S3 または SSE-KMS) を設定します。

詳細については、「**Amazon Simple Storage Service API リファレンス」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTencryption.html)」を参照してください。

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

AWS SDK を使用する場合、サーバー側の暗号化に AWS KMS keys を使用するよう Amazon S3 にリクエストできます。次の AWS SDK for Java および .NET の例では、SSE-KMS と S3 バケットキーを使用してディレクトリバケットのデフォルトの暗号化設定を設定します。他の 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)」を参照してください。

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

AWS SDK for Java 2.x では、`applyServerSideEncryptionByDefault` メソッドを使用して、SSE-KMS によるデータ暗号化用にディレクトリバケットのデフォルトの暗号化設定を指定することで、AWS KMS key を使用するように Amazon S3 にリクエストできます。対称暗号化 KMS キーを作成し、それをリクエストで指定します。

```
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.PutBucketEncryptionRequest;
import software.amazon.awssdk.services.s3.model.ServerSideEncryption;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionByDefault;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionConfiguration;
import software.amazon.awssdk.services.s3.model.ServerSideEncryptionRule;

public class Main {
    public static void main(String[] args) {
        S3Client s3 = S3Client.create();
        String bucketName = "bucket-base-name--zoneid--x-s3";
        String kmsKeyId = "your-kms-customer-managed-key-id";

        // AWS managed KMS keys aren't supported. Only customer-managed keys are supported.
        ServerSideEncryptionByDefault serverSideEncryptionByDefault = ServerSideEncryptionByDefault.builder()
                .sseAlgorithm(ServerSideEncryption.AWS_KMS)
                .kmsMasterKeyID(kmsKeyId)
                .build();

        // The bucketKeyEnabled field is enforced to be true.
        ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder()
                .bucketKeyEnabled(true)
                .applyServerSideEncryptionByDefault(serverSideEncryptionByDefault)
                .build();
  
        ServerSideEncryptionConfiguration serverSideEncryptionConfiguration = ServerSideEncryptionConfiguration.builder()
                .rules(rule)
                .build();

        PutBucketEncryptionRequest putRequest = PutBucketEncryptionRequest.builder()
                .bucket(bucketName)
                .serverSideEncryptionConfiguration(serverSideEncryptionConfiguration)
                .build();

        s3.putBucketEncryption(putRequest);
        
    }
}
```

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

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

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

AWS SDK for .NET では、`ServerSideEncryptionByDefault` プロパティを使用して、SSE-KMS によるデータ暗号化用にディレクトリバケットのデフォルトの暗号化設定を指定することで、AWS KMS key を使用するように Amazon S3 にリクエストできます。対称暗号化カスタマーマネージドキーを作成し、それをリクエストで指定します。

```
    // Set the bucket server side encryption to use AWSKMS with a customer-managed key id.
    // bucketName: Name of the directory bucket. "bucket-base-name--zonsid--x-s3"
    // kmsKeyId: The Id of the customer managed KMS Key. "your-kms-customer-managed-key-id"
    // Returns True if successful.
    public static async Task<bool> SetBucketServerSideEncryption(string bucketName, string kmsKeyId)
    {
        var serverSideEncryptionByDefault = new ServerSideEncryptionConfiguration
        {
            ServerSideEncryptionRules = new List<ServerSideEncryptionRule>
            {
                new ServerSideEncryptionRule
                {
                    ServerSideEncryptionByDefault = new ServerSideEncryptionByDefault
                    {
                        ServerSideEncryptionAlgorithm = ServerSideEncryptionMethod.AWSKMS,
                        ServerSideEncryptionKeyManagementServiceKeyId = kmsKeyId
                    }
                }
            }
        };
        try
        {
            var encryptionResponse =await _s3Client.PutBucketEncryptionAsync(new PutBucketEncryptionRequest
            {
                BucketName = bucketName,
                ServerSideEncryptionConfiguration = serverSideEncryptionByDefault,
            });
            
            return encryptionResponse.HttpStatusCode == HttpStatusCode.OK;
        }
        catch (AmazonS3Exception ex)
        {
            Console.WriteLine(ex.ErrorCode == "AccessDenied"
                ? $"This account does not have permission to set encryption on {bucketName}, please try again."
                : $"Unable to set bucket encryption for bucket {bucketName}, {ex.Message}");
        }
        return false;
    }
```

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

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

------

## AWS CloudTrail を使用したディレクトリバケットのデフォルト暗号化のモニタリング
<a name="s3-express-bucket-encryption-tracking"></a>

AWS CloudTrail イベントを使用して、Amazon S3 ディレクトリバケットのデフォルトの暗号化設定リクエストを追跡できます。CloudTrail ログでは、以下の API イベント名が使用されます。
+ `PutBucketEncryption`
+ `GetBucketEncryption`
+ `DeleteBucketEncryption`

**注記**  
EventBridge はディレクトリバケットではサポートされていません。
AWS Key Management Service (AWS KMS) キーによる二層式サーバー側の暗号化 (DSSE-KMS) またはお客様が提供する暗号化キーを使用したサーバー側の暗号化 (SSE-C) は、ディレクトリバケットのデフォルトの暗号化ではサポートされません。

AWS CloudTrail を使用したデフォルト暗号化のモニタリングの詳細については、「[AWS CloudTrail および Amazon EventBridge によるデフォルト暗号化のモニタリング](bucket-encryption-tracking.md)」を参照してください。