amazon-web-services - Cloudfront 如何分发 AWS KMS 密钥以获取静态加密的 S3 图像?
问题描述
我想使用AWS 的服务器端加密 (SSE)和AWS 密钥管理服务 (KMS)来加密 S3 中的静态数据。(请参阅此AWS 博客文章,详细介绍 SSE-KMS。)
但是,我也有使用 Cloudfront 预签名 URL 的要求。
如何设置 Cloudfront 分配以使用 AWS KMS 中的密钥来解密和使用静态加密的 S3 对象?
(这个 Boto3 问题似乎来自与我寻找相同答案的人,但没有结果)。
解决方案
这在以前是不可能的,因为 CloudFront 不支持它,并且因为(正如我在对 John 的回答的评论中提到的那样——这是在正确的轨道上)没有办法使用 Lambda@Edge 推出自己的解决方案,因为X-Amz-Cf-Id
请求标头——在 CloudFront 的背面生成并且仅对 S3 可见,对触发器调用不可见——将使您尝试添加到 Lambda@Edge 触发器内的请求的任何签名无效,因为所有X-Amz-*
标头的签名都是强制性的。
但是X-Amz-Cf-Id
标头值现在暴露给事件结构中的 Lambda@Edge 触发器函数——不是与其他请求标头一起,而是作为一个简单的字符串属性——在event.Records[0].cf.config.requestId
.
有了这个值,您可以在 Lambda@Edge 环境中使用执行角色凭证和内置 SDK 来生成签名并添加必要的标头(包括Authorization
带有派生凭证标识符和新生成签名的标头)到请求。
此设置不使用源访问标识符 (OAI),因为使用 Lambda@Edge 触发器的 IAM 执行角色而不是 OAI 来说服 S3 请求已获得授权。
Achraf Souk 发布了一篇官方 AWS 博客文章,从头到尾解释了该解决方案。
推荐阅读
- delphi - 如何为 IdTCPServer 分配 IP 地址?
- c++ - C++ MEX 和 C MEX 的区别
- html - 为 imacro 编写宏脚本
- java - 在 .classpath 文件 eclipse 中设置 jar 文件的相对路径
- c++ - Box2D OpenGL 错误
- vue.js - 如何在模块中使用 nuxt 挂钩?
- npm - 安装一个“匹配”项目依赖项的依赖项
- javascript - 与 Office UI Fabric 反应 - InputChildren 未触发 onSubmit/onClick
- c++ - 在 C++ 中创建类型向量
- c# - 没有从 api 控制器引用业务逻辑?