将存储桶配置为将 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 存储桶密钥和使用批量操作为 SSE-KMS 启用 S3 存储桶密钥。
当为源存储桶或目标存储桶启用 S3 存储桶密钥时,加密上下文将是存储桶 Amazon Resource Name(ARN),而不是对象 ARN,例如 arn:aws:s3:::。您需要更新 IAM 策略才能将存储桶 ARN 用于加密上下文。有关更多信息,请参阅 S3 存储桶密钥和复制。bucket_ARN
以下示例说明了 S3 存储桶密钥如何与复制结合使用。有关更多信息,请参阅 复制加密对象(SSE-S3、SSE-KMS、DSSE-KMS、SSE-C)。
先决条件
在将存储桶配置为使用 S3 存储桶密钥之前,请查看 启用 S3 存储桶密钥之前需要注意的更改。
主题
在 S3 控制台中,您可以为新存储桶或现有存储桶启用或禁用 S3 存储桶密钥。S3 控制台中的对象从存储桶配置中继承其 S3 存储桶密钥设置。当您为存储桶启用 S3 存储桶密钥时,您上传到存储桶的新对象将利用 S3 存储桶密钥进行 SSE-KMS 加密。
在启用了 S3 存储桶密钥的存储桶中上传,复制或修改对象
如果您在启用了 S3 存储桶密钥的存储桶中上传、修改或复制对象,则该对象的 S3 存储桶密钥设置可能会更新以与存储桶配置保持一致。
如果对象已启用 S3 存储桶密钥,则在复制或修改对象时,该对象的 S3 存储桶密钥设置不会更改。但是,如果您修改或复制未启用 S3 存储桶密钥的对象,并且目标存储桶具有 S3 存储桶密钥配置,则该对象将继承目标存储桶的 S3 存储桶密钥设置。例如,如果源对象尚未启用 S3 存储桶密钥,但目标存储桶已启用 S3 存储桶密钥,则为该对象启用 S3 存储桶密钥。
在创建新存储桶时启用 S3 存储桶密钥
- 登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/ - 。 
- 
            在左侧导航窗格中,选择存储桶。 
- 
            请选择 Create bucket(创建存储桶)。 
- 
            输入存储桶名称,然后选择您的 Amazon Web Services 区域。 
- 
            在默认加密下,对于加密密钥类型,选择 Amazon Key Management Service 密钥(SSE-KMS)。 
- 
            在 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 开发人员指南中的创建密钥。 
 
- 
                
- 
            在 Bucket Key(存储桶密钥)下,请选择 Enable(启用)。 
- 
            请选择 Create bucket(创建存储桶)。 Amazon S3 创建启用了 S3 存储桶密钥的存储桶。您上传到存储桶的新对象将使用 S3 存储桶密钥。 要禁用 S3 存储桶密钥,请按照前面的步骤操作,然后选择 Disable(禁用)。 
为现有存储桶启用 S3 存储桶密钥
- 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/ - 。 
- 
            在左侧导航窗格中,选择存储桶。 
- 
            在 Buckets(存储桶)列表中,请选择要为其启用 S3 存储桶密钥的存储桶。 
- 
            选择属性选项卡。 
- 
            在默认加密下,选择编辑。 
- 
            在默认加密下,对于加密密钥类型,选择 Amazon Key Management Service 密钥(SSE-KMS)。 
- 
            在 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 开发人员指南中的创建密钥。 
 
- 
                
- 
            在 Bucket Key(存储桶密钥)下,请选择 Enable(启用)。 
- 
            选择 Save Changes(保存更改)。 Amazon S3 为添加到存储桶中的新对象启用 S3 存储桶密钥。现有对象未使用 S3 存储桶密钥。要为现有对象配置 S3 存储桶密钥,可以使用 CopyObject操作。有关更多信息,请参阅 在对象级别配置 S3 存储桶密钥。要禁用 S3 存储桶密钥,请按照前面的步骤操作,然后选择 Disable(禁用)。 
您可以使用 PutBucketEncryption 为存储桶启用或禁用 S3 存储桶密钥。要使用 PutBucketEncryption 配置 S3 存储桶密钥,请使用 ServerSideEncryptionRule 数据类型,其中包括使用 SSE-KMS 进行的默认加密。您还可以通过客户托管密钥的 KMS 密钥 ID 来选择使用客户托管密钥。  
有关更多信息和示例语法,请参阅 putbucKetenCryption 。
以下示例使用 适用于 Java 的 Amazon SDK,通过 SSE-KMS 和 S3 存储桶密钥启用默认存储桶加密。
以下示例使用 Amazon CLI,通过 SSE-KMS 和 S3 存储桶密钥启用默认存储桶加密。将 user input
              placeholders
aws s3api put-bucket-encryption --bucketamzn-s3-demo-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。