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

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

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

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

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

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

先决条件

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

主题

    在 S3 控制台中,您可以为新存储桶或现有存储桶启用或禁用 S3 存储桶密钥。S3 控制台中的对象从存储桶配置中继承其 S3 存储桶密钥设置。当您为存储桶启用 S3 存储桶密钥时,您上传到存储桶的新对象将利用 S3 存储桶密钥进行 SSE-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. 在左侧导航窗格中,选择存储桶

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

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

    5. 默认加密下,对于加密密钥类型,选择 Amazon Key Management Service 密钥(SSE-KMS)

    6. Amazon KMS 密钥下,执行以下操作以选择您的 KMS 密钥:

      • 要从可用的 KMS 密钥列表中进行选择,请选择从您的 Amazon KMS keys 中进行选择,然后从可用密钥的列表中选择您的 KMS 密钥

        Amazon 托管式密钥(aws/s3)和您的客户自主管理型密钥都显示在此列表中。有关客户自主管理型密钥的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的客户密钥和 Amazon 密钥

      • 要输入 KMS 密钥 ARN,请选择输入 Amazon KMS key ARN,然后在显示的字段中输入您的 KMS 密钥 ARN。

      • 要在 Amazon KMS 控制台中创建新的客户自主管理型密钥,请选择创建 KMS 密钥

        有关创建 Amazon KMS key 的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的创建密钥

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

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

      Amazon S3 创建启用了 S3 存储桶密钥的存储桶。您上传到存储桶的新对象将使用 S3 存储桶密钥。 

      要禁用 S3 存储桶密钥,请按照前面的步骤操作,然后选择 Disable(禁用)

    为现有存储桶启用 S3 存储桶密钥
    1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

    2. 在左侧导航窗格中,选择存储桶

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

    4. 选择属性选项卡。

    5. 默认加密下,选择编辑

    6. 默认加密下,对于加密密钥类型,选择 Amazon Key Management Service 密钥(SSE-KMS)

    7. Amazon KMS 密钥下,执行以下操作以选择您的 KMS 密钥:

      • 要从可用的 KMS 密钥列表中进行选择,请选择从您的 Amazon KMS keys 中进行选择,然后从可用密钥的列表中选择您的 KMS 密钥

        Amazon 托管式密钥(aws/s3)和您的客户自主管理型密钥都显示在此列表中。有关客户自主管理型密钥的更多信息,请参阅《Amazon Key Management Service 开发人员指南》中的客户密钥和 Amazon 密钥

      • 要输入 KMS 密钥 ARN,请选择输入 Amazon KMS key ARN,然后在显示的字段中输入您的 KMS 密钥 ARN。

      • 要在 Amazon KMS 控制台中创建新的客户自主管理型密钥,请选择创建 KMS 密钥

        有关创建 Amazon KMS key 的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的创建密钥

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

    9. 选择 Save Changes(保存更改)。

      Amazon S3 为添加到存储桶中的新对象启用 S3 存储桶密钥。现有对象未使用 S3 存储桶密钥。要为现有对象配置 S3 存储桶密钥,可以使用 CopyObject 操作。有关更多信息,请参阅 在对象级别配置 S3 存储桶密钥

      要禁用 S3 存储桶密钥,请按照前面的步骤操作,然后选择 Disable(禁用)

    您可以使用 PutBucketEncryption 为存储桶启用或禁用 S3 存储桶密钥。要使用 PutBucketEncryption 配置 S3 存储桶密钥,请使用 ServerSideEncryptionRule 数据类型,其中包括使用 SSE-KMS 进行的默认加密。您还可以通过客户托管密钥的 KMS 密钥 ID 来选择使用客户托管密钥。 

    有关更多信息和示例语法,请参阅 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 存储桶密钥启用默认存储桶加密。将 user input placeholders 替换为您自己的信息。

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

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