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

时间:2017-07-31 13:50:13

标签: node.js amazon-web-services amazon-s3 amazon-cloudfront amazon-ecs

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

我不想包含任何CloudFront密钥对,因为这些机器可以存储并存储任何文件,没有任何意义。有没有办法获得签名令牌,只是通过IAM策略授予这些机器的权限,比如CloudFrontFullAccess?我已经部署了一个服务来获取S3签名的URL,并且不需要使用密钥对,只需要IAM策略。

1 个答案:

答案 0 :(得分: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参数存储为配置数据(如密码,数据库字符串和许可证代码)提供安全存储。您可以将参数存储为纯文本或加密对象。

     

[...]

     

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

     

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

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

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