将存储桶配置为将 S3 存储桶密钥与 SSE-KMS 结合使用于新对象 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将存储桶配置为将 S3 存储桶密钥与 SSE-KMS 结合使用于新对象

使用 SSE-KMS 配置服务器端加密时,您可以将存储桶配置为使用 S3 存储桶密钥对新对象进行 SSE-KMS 加密。S3 存储桶密钥可减少从 Amazon S3 到 Amazon Key Management Service (Amazon KMS) 的请求流量,从而降低了 SSE-KMS 的成本。有关更多信息,请参阅 使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本

您可以使用 Amazon S3 控制台、REST API、Amazon 开发工具包、Amazon CLI 或 Amazon CloudFormation 将存储桶配置为使用 S3 存储桶密钥对新对象进行 SSE-KMS 加密。如果要为现有对象启用或禁用 S3 存储桶密钥,则可以使用 COPY 操作。有关更多信息,请参阅 使用分批操作、REST API、Amazon 开发工具包或 Amazon CLI 在对象级别配置 S3 存储桶密钥 使用 S3 分批操作加密具有 S3 存储桶密钥的对象

当为源存储桶或目标存储桶启用 S3 存储桶密钥时,加密上下文将是存储桶 Amazon Resource Name (ARN),而不是对象 ARN,例如 arn:aws:s3:::bucket_ARN。您需要更新 IAM 策略才能将存储桶 ARN 用于加密上下文。有关更多信息,请参阅 为 IAM 角色授予额外权限

以下示例说明了 S3 存储桶密钥如何与复制结合使用。有关更多信息,请参阅 复制使用 Amazon KMS CMK 的服务器端加密 (SSE) 创建的对象。 

先决条件:

在将存储桶配置为使用 S3 存储桶密钥之前,请查看启用 S3 存储桶密钥之前需要注意的更改

主题

    在 S3 控制台中,您可以为新存储桶或现有存储桶启用或禁用 S3 存储桶密钥。S3 控制台中的对象从存储桶配置中继承其 S3 存储桶密钥设置。当您为存储桶启用 S3 存储桶密钥时,您上传到存储桶的新对象将利用 S3 存储桶密钥使用 Amazon KMS 进行服务器端加密。

    在启用了 S3 存储桶密钥的存储桶中上传,复制或修改对象

    如果您在启用了 S3 存储桶密钥的存储桶中上传、修改或复制对象,则该对象的 S3 存储桶密钥设置可能会更新以与存储桶配置保持一致。

    如果对象已启用 S3 存储桶密钥,则在复制或修改对象时,该对象的 S3 存储桶密钥设置不会更改。但是,如果您修改或复制未启用 S3 存储桶密钥的对象,并且目标存储桶具有 S3 存储桶密钥配置,则该对象将继承目标存储桶的 S3 存储桶密钥设置。例如,如果源对象尚未启用 S3 存储桶密钥,但目标存储桶已启用 S3 存储桶密钥,则将为该对象启用 S3 存储桶密钥。

    在创建新存储桶时启用 S3 存储桶密钥

    1. 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

    2. 选择 Create bucket (创建存储桶)

    3. 输入存储桶名称,然后选择您的 Amazon Web Services 区域 。

    4. Default encryption (默认加密) 下,选择 Enable (启用)

    5. Encryption type (加密类型) 下,选择 Amazon Key Management Service key (SSE-KMS) (Amazon Key Management Service 密钥(SSE-KMS))

    6. 选择一个 Amazon KMS 密钥。

      • 选择 Amazon managed key (aws/s3) (Amazon 托管密钥 [aws/s3])

      • 选择 Customer managed key (客户托管密钥) ,然后选择与存储桶位于同一区域的对称客户托管 CMK。

    7. Bucket Key (存储桶密钥) 下,选择 Enable (启用)

    8. 选择 Create bucket (创建存储桶)

      Amazon S3 创建启用了 S3 存储桶密钥的存储桶。您上传到存储桶的新对象将使用 S3 存储桶密钥。要禁用 S3 存储桶密钥,请按照前面的步骤操作,然后选择 disable (禁用)

    为现有存储桶启用 S3 存储桶密钥

    1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

    2. Buckets (存储桶) 列表中,选择要为其启用 S3 存储桶密钥的存储桶。

    3. 选择属性

    4. Default encryption (默认加密) 下,选择 Edit (编辑)

    5. Default encryption (默认加密) 下,选择 Enable (启用)

    6. Encryption type (加密类型) 下,选择 Amazon Key Management Service key (SSE-KMS) (Amazon Key Management Service 密钥(SSE-KMS))

    7. 选择一个 Amazon KMS 密钥。

      • 选择 Amazon managed key (aws/s3) (Amazon 托管密钥 [aws/s3])

      • 选择 Customer managed key (客户托管密钥) ,然后选择与存储桶位于同一区域的对称客户托管 CMK。

    8. Bucket Key (存储桶密钥) 下,选择 Enable (启用)

    9. 选择保存更改

      Amazon S3 为添加到存储桶中的新对象启用 S3 存储桶密钥。现有对象未使用 S3 存储桶密钥。要禁用 S3 存储桶密钥,请按照前面的步骤操作,然后选择 Disable (禁用)

    您可以使用 PutBucketEncryption 为存储桶启用或禁用 S3 存储桶密钥。要使用 PutBucketEncryption 配置 S3 存储桶密钥,请指定 ServerSideEncryptionRule,其中包括使用 Amazon KMS 客户主密钥 (CMK) 进行服务器端加密的默认加密。您还可以通过指定 CMK 的 KMS 密钥 ID 来选择使用客户托管的 CMK。 

    有关更多信息和示例语法,请参阅 putbucKetenCryption

    以下示例使用 Amazon SDK for Java,通过 SSE-KMS 和 S3 存储桶密钥实现默认存储桶加密。

    Java
    AmazonS3 s3client = AmazonS3ClientBuilder.standard()     .withRegion(Regions.DEFAULT_REGION)     .build();     ServerSideEncryptionByDefault serverSideEncryptionByDefault = new ServerSideEncryptionByDefault()     .withSSEAlgorithm(SSEAlgorithm.KMS); ServerSideEncryptionRule rule = new ServerSideEncryptionRule()     .withApplyServerSideEncryptionByDefault(serverSideEncryptionByDefault)     .withBucketKeyEnabled(true); ServerSideEncryptionConfiguration serverSideEncryptionConfiguration =     new ServerSideEncryptionConfiguration().withRules(Collections.singleton(rule)); SetBucketEncryptionRequest setBucketEncryptionRequest = new SetBucketEncryptionRequest()     .withServerSideEncryptionConfiguration(serverSideEncryptionConfiguration)     .withBucketName(bucketName);              s3client.setBucketEncryption(setBucketEncryptionRequest);

    以下示例使用 Amazon CLI,通过 SSE-KMS 和 S3 存储桶密钥实现默认存储桶加密。

    aws s3api put-bucket-encryption --bucket <bucket-name> --server-side-encryption-configuration '{         "Rules": [             {                 "ApplyServerSideEncryptionByDefault": {                     "SSEAlgorithm": "aws:kms",                     "KMSMasterKeyID": "<KMS-Key-ARN>"                 },                 "BucketKeyEnabled": true             }         ]     }'

    有关使用 Amazon CloudFormation 配置 S3 存储桶密钥的更多信息,请参阅《 Amazon CloudFormation 用户指南》中的 AWS::S3::Bucket ServerSideEncryptionRule