将桶配置为将 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 桶密钥,则可以使用 COPY 操作。有关更多信息,请参阅在对象级别配置 S3 桶密钥 使用 S3 分批操作加密具有 S3 Bucket 密钥的对象

当为源桶或目标桶启用 S3 桶密钥时,加密上下文将是桶 Amazon Resource Name(ARN),而不是对象 ARN,例如 arn:aws:s3:::bucket_ARN。您需要更新 IAM policy 才能将桶 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. 选择 Properties(属性)选项卡。

    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 桶密钥,可以使用 COPY 操作。有关更多信息,请参阅在对象级别配置 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