我正在使用Docker在一次性机器(AWS-ECS)中部署我的应用程序,拆分在Node.js中开发的微服务中 . 查看API以获取签名令牌以访问Cloudfront资源:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront/Signer.html,似乎是强制传递密钥对作为构造函数中的参数(initilization) .
我不想包含任何CloudFront密钥对,因为这些机器可能会死掉并存储任何文件,没有任何意义 . 有没有办法获得签名令牌,只是通过IAM策略授予这些机器的权限,比如CloudFrontFullAccess?我已经部署了一个服务来获取S3签名的URL,并且不需要使用密钥对,只需要IAM策略 .
1 回答
不,如所述,这是不可能的 .
它适用于S3,因为实例角色导致临时IAM凭证可供实例使用,而S3签名URL使用IAM凭证 .
CloudFront 's private key isn'是IAM的一部分,所以IAM策略(如
CloudFrontFullAccess
)在这里没有帮助 . (该策略主要允许您配置CloudFront分配 . )您必须有权访问CloudFront RSA密钥才能生成CloudFront签名URL或签名cookie - 除此之外别无选择 .
但是,一种直接存储密钥但直接将其用于实例的方法是将其放入EC2 Systems Manager Parameter Store .
这是一个键/值存储,可以通过其IAM角色访问实例,除非您需要,否则您需要使用EC2 Systems Manager的任何其他部分 - 参数存储在没有任何其他设置的情况下可用 .
单个参数值is 4096 characters的最大大小,足以容纳整个私钥 .
您的代码很可能希望在启动时加载密钥,只需保留在内存中以便根据需要使用,或者可以将其写入临时文件 .