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

Posted

技术标签:

【中文标题】没有密钥对(RSA 私钥)的 aws cloudfront 中的签名 cookie【英文标题】:Signed cookies in aws cloudfront without Key Pair (RSA private key) 【发布时间】:2018-01-07 03:17:25 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

不,这是不可能的。

它适用于 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

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

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

【讨论】:

以上是关于没有密钥对(RSA 私钥)的 aws cloudfront 中的签名 cookie的主要内容,如果未能解决你的问题,请参考以下文章

RSA的公钥、私钥

RSA 密钥的生成

使用AES密钥包装RSA私钥然后解包

在 powershell 中生成 RSA 密钥对

如何计算 RSA 私钥 (D) 的公钥 (E)? [复制]

RSA+AES请求组合加密