对通用存储桶阻止或取消阻止 SSE-C - Amazon Simple Storage Service

对通用存储桶阻止或取消阻止 SSE-C

Amazon S3 中的大多数现代化使用案例不再使用具有客户提供密钥的服务器端加密(SSE-C),因为相比具有 Amazon S3 托管式密钥的服务器端加密(SSE-S3)或具有 AWS KMS 密钥的服务器端加密(SSE-KMS),这种方法欠缺灵活性。SSE-C 要求您在每次与 SSE-C 加密数据交互时提供加密密钥,因此您无法通过与其他用户、角色或 AWS 服务共享 SSE-C 密钥来允许对方从您的 S3 存储桶读取数据以便操作数据。

要限制可在通用存储桶中使用的服务器端加密类型,您可以选择更新存储桶的默认加密配置,以此来阻止 SSE-C 写入请求。此存储桶级别的配置将阻止请求上传指定了 SSE-C 的对象。当存储桶阻止 SSE-C 时,任何指定了 SSE-C 加密的 PutObjectCopyObjectPostObject、分段上传或复制请求都将被拒绝,并返回 HTTP 403 AccessDenied 错误。

此设置是 PutBucketEncryption API 上的一个参数,如果您有 s3:PutEncryptionConfiguration 权限,也可以使用 S3 控制台、AWS CLI 和AWS SDK 更新此设置。

有效值为 SSE-C(在通用存储桶上阻止 SSE-C 加密)和 NONE(允许在写入存储桶时使用 SSE-C)。

重要

从 2026 年 4 月开始,AWS 将对所有新存储桶禁用具有客户提供密钥的服务器端加密(SSE-C)。此外,对于 AWS 账户中没有任何 SSE-C 加密数据的所有现有存储桶,都将禁用 SSE-C 加密。通过这些更改,少数需要 SSE-C 加密的应用程序必须在创建存储桶后,专门通过 PutBucketEncryption API 启用 SSE-C。在这些情况下,您可能需要更新自动化脚本、CloudFormation 模板或其他基础设施配置工具来配置这些设置。有关更多信息,请参阅 AWS Storage 博客文章

权限

对于通用存储桶,使用 PutBucketEncryption API、S3 控制台、AWS SDK 或 AWS CLI 来阻止或取消阻止加密类型。您必须拥有以下权限:

  • s3:PutEncryptionConfiguration

对于通用存储桶,使用 GetBucketEncryption API、S3 控制台、AWS SDK 或 AWS CLI 来查看阻止的加密类型。您必须拥有以下权限:

  • s3:GetEncryptionConfiguration

阻止 SSE-C 加密之前的注意事项

在为所有存储桶阻止 SSE-C 后,将应用以下加密行为:

  • 对于在您阻止 SSE-C 加密之前存储桶中已有的对象,其加密没有变化。

  • 阻止 SSE-C 加密后,只要您在请求中提供所需的 SSE-C 标头,就可以继续对之前已有的 SSE-C 加密对象发出 GetObject 和 HeadObject 请求。

  • 为存储桶阻止 SSE-C 之后,任何指定 SSE-C 加密的 PutObjectCopyObjectPostObject 或分段上传请求都将被拒绝,并返回 HTTP 403 AccessDenied 错误。

  • 如果用于复制的目标存储桶已阻止 SSE-C,并且所复制的源对象使用 SSE-C 加密,则复制将失败并返回 HTTP 403 AccessDenied 错误。

如果您要在阻止 SSE-C 加密类型之前检查是否有任何存储桶使用了此加密类型,可以使用 AWS CloudTrail 等工具来监控对数据的访问权限。这篇博客文章说明如何实时审计对象上传的加密方法。您也可以参考这篇 re:Post 文章,文中指导您通过查询 S3 清单报告来查看是否有任何 SSE-C 加密对象。

Steps

对于通用存储桶,您可以使用 Amazon S3 控制台、AWS Command Line Interface(AWS CLI)、Amazon S3 REST API 和 AWS SDK,阻止或取消阻止具有客户提供密钥的服务器端加密(SSE-C)。

要使用 Amazon S3 控制台为存储桶阻止或取消阻止 SSE-C 加密,请执行以下操作:

  1. 登录 AWS 管理控制台并在 https://console.aws.amazon.com/s3/ 中打开 Amazon S3 控制台。

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

  3. 选择您要阻止 SSE-C 加密的存储桶。

  4. 选择存储桶的属性选项卡。

  5. 导航到存储桶的默认加密属性面板,然后选择编辑

  6. 阻止的加密类型部分中,选中具有客户提供密钥的服务器端加密(SSE-C)旁边的复选框可阻止 SSE-C 加密,取消选中此框则表示允许 SSE-C。

  7. 选择保存更改

要安装 AWS CLI,请参阅《AWS Command Line Interface 用户指南》中的安装 AWS CLI

以下 CLI 示例说明如何使用 AWS CLI,为通用存储桶阻止或取消阻止 SSE-C 加密。要使用该命令,请将用户输入占位符 替换为您自己的信息。

请求为通用存储桶阻止 SSE-C 加密:

aws s3api put-bucket-encryption \ --bucket amzn-s3-demo-bucket \ --server-side-encryption-configuration '{ "Rules": [{ "BlockEncryptionTypes": { "EncryptionType": "SSE-C" } }] }'

请求在通用存储桶上启用 SSE-C 加密:

aws s3api put-bucket-encryption \ --bucket amzn-s3-demo-bucket \ --server-side-encryption-configuration '{ "Rules": [{ "BlockEncryptionTypes": { "EncryptionType": "NONE" } }] }'
SDK for Java 2.x

以下示例说明如何使用 AWS SDK,为通用存储桶阻止或取消阻止 SSE-C 加密写入。

示例:PutBucketEncryption 请求将默认加密配置设置为 SSE-S3 并阻止 SSE-C

S3Client s3Client = ...; ServerSideEncryptionByDefault defaultSse = ServerSideEncryptionByDefault .builder() .sseAlgorithm(ServerSideEncryption.AES256) .build(); BlockedEncryptionTypes blockedEncryptionTypes = BlockedEncryptionTypes .builder() .encryptionType(EncryptionType.SSE_C) .build(); ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder() .applyServerSideEncryptionByDefault(defaultSse) .blockedEncryptionTypes(blockedEncryptionTypes) .build(); s3Client.putBucketEncryption(be -> be .bucket(bucketName) .serverSideEncryptionConfiguration(c -> c.rules(rule)));

示例:PutBucketEncryption 请求将默认加密配置设置为 SSE-S3 并取消阻止 SSE-C

S3Client s3Client = ...; ServerSideEncryptionByDefault defaultSse = ServerSideEncryptionByDefault .builder() .sseAlgorithm(ServerSideEncryption.AES256) .build(); BlockedEncryptionTypes blockedEncryptionTypes = BlockedEncryptionTypes .builder() .encryptionType(EncryptionType.NONE) .build(); ServerSideEncryptionRule rule = ServerSideEncryptionRule.builder() .applyServerSideEncryptionByDefault(defaultSse) .blockedEncryptionTypes(blockedEncryptionTypes) .build(); s3Client.putBucketEncryption(be -> be .bucket(bucketName) .serverSideEncryptionConfiguration(c -> c.rules(rule)));
SDK for Python Boto3

示例:PutBucketEncryption 请求将默认加密配置设置为 SSE-S3 并阻止 SSE-C

s3 = boto3.client("s3") s3.put_bucket_encryption( Bucket="amzn-s3-demo-bucket", ServerSideEncryptionConfiguration={ "Rules":[{ "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" }, "BlockedEncryptionTypes": { "EncryptionType": ["SSE-C"] } }] } )

示例:PutBucketEncryption 请求将默认加密配置设置为 SSE-S3 并取消阻止 SSE-C

s3 = boto3.client("s3") s3.put_bucket_encryption( Bucket="amzn-s3-demo-bucket", ServerSideEncryptionConfiguration={ "Rules":[{ "ApplyServerSideEncryptionByDefault": { "SSEAlgorithm": "AES256" }, "BlockedEncryptionTypes": { "EncryptionType": ["NONE"] } }] } )

有关 Amazon S3 REST API 支持为通用存储桶阻止或取消阻止 SSE-C 加密的相关信息,请参阅《Amazon Simple Storage Service API 参考》中的以下部分: