【发布时间】:2018-03-04 23:43:38
【问题描述】:
我有一个 CloudFormation 脚本,它使用 AWS::CloudFormation::Init 部分从 S3 存储桶下载文件,该文件因访问被拒绝 (403) 而失败。
我使用AWS::IAM::InstanceProfile 向机器添加了一个名为s3access 的IAM 角色。使用aws s3 下载文件有效:
[ec2-user@ip-172-31-26-26 ~]$ aws s3 cp s3://my-bucket/test-file
.download: s3://my-bucket/test-file to ./test-file
但是cfn-init 失败了:
[ec2-user@ip-172-31-26-26 ~]$ sudo /opt/aws/bin/cfn-init -v --stack test --resource EC2 --region us-east-2 构建期间发生错误:无法检索 https://s3.us-east-2.amazonaws.com/my-bucket/test-file:HTTP 错误 403:
我尝试明确设置 IAM 角色,但也失败了:
[ec2-user@ip-172-31-26-26 ~]$ sudo /opt/aws/bin/cfn-init -v --stack test --resource EC2 --region us-east-2 - -角色=s3access AccessDenied:用户:arn:aws:sts::196375698259:assumed-role/s3access/i-044499612c92b50f5 无权执行:cloudformation:DescribeStackResource on resource:arn:aws:cloudformation:us-east-2:196375698259:stack/测试/*
我正在考虑直接从用户数据中使用 aws s3 cp s3://my-bucket/test-file ./,但我想知道为什么 AWS::CloudFormation::Init 无法承担分配给 EC2 实例的角色。
我只发现了一个类似的问题 - How can I access protected S3 files in a CFN script?,但解决方案是应用 IAM 角色,我已经这样做了,cfn-init 仍然失败。
【问题讨论】:
-
如果您向我们展示您的模板会更容易
-
我发现使用 cfn-init 没什么优势。您可以轻松地将您的 aws s3 复制逻辑放入 CloudFormation 的 userData 中,并为您的 EC2 实例提供与 s3 读取访问权限相关的角色/策略权限,这样就可以正常工作。
标签: amazon-web-services amazon-cloudformation amazon-iam