将对象上传到 AWS S3 时使用 SSE(服务器端加密)标头

Use of SSE (server side encryption) header while uploading object to AWS S3

提问人:Pavan Kumar 提问时间:5/30/2023 最后编辑:Peter CordesPavan Kumar 更新时间:5/30/2023 访问量:315

问:

我正在尝试为 S3 中的对象启用服务器端加密 (SSE)。

我浏览了 AWS S3 文档,了解到当您在存储桶属性下配置存储桶以启用 SSE(在本例中为 KMS CMK)时,上传的任何对象都将使用所选的静态加密密钥进行加密。我的工作在这里完成。

但是,我无法理解为什么在将任何对象上传到 S3 时需要传递 SSE 标头 (--sse-kms-key-id {{kms-key}} --sse=aws:kms)。这将对存储桶本身启用 SSE 有什么不同。

为什么最好在存储桶策略中强制添加 SSE 标头,而我的 SSE 目的已经通过在存储桶级别启用 SSE 加密(这是存储桶属性下的一次性配置)来实现。

amazon-web-services amazon-s3 加密 服务器端 amazon-kms

评论

0赞 Arpit Jain 5/30/2023
您绝对应该阅读此 aws 文档:- 使用 AWS KMS (SSE-KMS) 指定服务器端加密 - 使用 REST API
0赞 gusto2 5/30/2023
区别在于使用预定义/默认 S3 加密密钥或特定 KMS(可能不同)。
0赞 Pavan Kumar 5/30/2023
谢谢Arpit和Gusto。得到了我的答案。

答:

1赞 Abraam Magued 5/30/2023 #1

我想你有 2 个问题

为什么我们需要传递 SSE 标头?

我认为你不需要。在官方文件中,它说

  • 启用默认加密后上传对象时:

如果您的 PUT 请求标头不包含加密信息,则 Amazon S3 将使用存储桶的默认加密设置来加密对象。

如果您的 PUT 请求标头包含加密信息,则 Amazon S3 会先使用 PUT 请求中的加密信息对对象进行加密,然后再将其存储在 Amazon S3 中。

这就是你说的。如果您未定义标头,并且为 KMS-SSE 设置了默认加密,则将使用它而不是默认的 KMS-S3。

您的第二个问题

为什么首选在存储桶策略中强制添加 SSE 标头?

因为如上所述,当在 PUT 请求参数中传递加密选项时,S3 上的默认加密可能会被覆盖;因此,您可能希望拒绝除要使用的加密方法以外的任何其他加密方法。