在 aws cloudfront 中签名 cookie,无需密钥对(RSA 私钥)

tlu*_*tal 2 amazon-s3 amazon-web-services amazon-ecs node.js amazon-cloudfront

我正在使用 Docker 在一次性机器 (AWS-ECS) 中部署我的应用程序,将其拆分为用 Node.js 开发的微服务。查看用于获取签名令牌以访问cloudfront资源的API:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront/Signer.html,似乎必须强制将密钥对作为构造函数中的参数传递(初始化)。

我不想包含任何 CloudFront 密钥对,因为这些机器可能会死掉,并且在其中存储任何文件是没有意义的。有没有什么方法可以通过 IAM 策略(例如 CloudFrontFullAccess)向这些计算机授予权限来获取签名令牌?我已经部署了一项服务来获取 S3 签名的 URL,并且不需要使用密钥对,只需使用 IAM 策略即可。

Mic*_*bot 5

不,正如所描述的那样,这是不可能的。

它适用于 S3,因为实例角色会导致临时 IAM 凭证可供实例使用,并且 S3 签名 URL 使用 IAM 凭证。

CloudFront 的私钥不是 IAM 的一部分,因此 IAM 策略(如CloudFrontFullAccess)在这里没有帮助。(该策略主要允许您配置 CloudFront 发行版。)

您必须有权访问 CloudFront RSA 密钥才能生成 CloudFront 签名 URL 或签名 cookie - 没有其他选择。

然而,安全存储密钥并使其可供实例使用的一种简单方法是将其放入EC2 Systems Manager Parameter Store中。

这是一个键/值存储,实例可以通过其 IAM 角色进行访问,并且您不需要使用EC2 Systems Manager 的任何其他部分,除非您愿意 - 参数存储无需任何其他设置即可使用。

Amazon EC2 Systems Manager Parameter Store 为密码、数据库字符串和许可证代码等配置数据提供安全存储。您可以将参数存储为纯文本或加密对象。

[...]

Parameter Store 还通过将数据存储在一个安全的位置而不是存储在整个车队的配置文件中,简化了管理配置数据的过程。

http://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html

单个参数值的最大长度为 4096 个字符,足以容纳整个私钥。

您的代码很可能希望在启动时加载密钥并保留在内存中以供需要时使用,或者可以将其写入临时文件。