aws cloudfront 中没有密钥对(RSA 私钥)的签名 cookie

Signed cookies in aws cloudfront without Key Pair (RSA private key)

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

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

不,这是不可能的。

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

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

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

但是,安全存储密钥并使其可供实例使用的一种直接方法是将其放在 EC2 Systems Manager Parameter Store 中。

这是一个 key/value 存储,实例可以通过其 IAM 角色访问该存储,并且您 不需要 使用 EC2 系统的任何其他部分管理器,除非您愿意 -- 参数存储无需任何其他设置即可使用。

Amazon EC2 Systems Manager Parameter Store provides secure storage for configuration data such as passwords, database strings, and license codes. You can store parameters as plain text or as encrypted objects.

[...]

Parameter Store also simplifies the process of managing configuration data by storing the data in one, secure location instead of in configuration files across your fleet.

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

单个参数值的最大大小is 4096 characters,足以容纳整个私钥。

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