为了动态构建配置文件,我需要从实例中查询EC2以检索有关现有实例的信息。我使用带有标志的aws
CLI 。ec2 describe-instances
我从中运行命令的实例附加到允许此类查询的角色:
{ “版本”:“2012-10-17”, “陈述”: [ { “行动”: [ "ec2:DescribeAvailabilityZones", "ec2:DescribeInstances", "ec2:DescribeRegions", "ec2:DescribeSecurityGroups", “ec2:描述标签” ], “资源”:“*”, “效果”:“允许” } ] }
当实例启动时,这工作得很好,但是当我尝试从user-data
文件中获取数据时,我得到:
调用 DescribeInstances 操作时发生客户端错误 (AuthFailure):AWS 无法验证提供的访问凭证
我读到这可能是由非时间同步的实例引起的,所以我在调用之前添加openntpd
到文件中,但仍然得到相同的错误。在 中,我成功访问和使用:user-data
awscli
userdata
s3
route53
awscli
aws s3 cp s3://s3test/foobar.yml playbook.yml
为了确保IAM政策没问题,我还尝试了AWS的EC2ReadOnly
政策,并得到了相同的结果。
查询是这样完成的:
region="eu-central-1" 对于 $(aws ec2 describe-instances --debug --filters 'Name=tag:Name,Values=rabbitmq' --region "$region"|jq -r '.Reservations[].Instances[].NetworkInterfaces[ ].PrivateIpAddresses[].PrivateIpAddress') 做 # [要做的事情] 完毕
请注意,这不是身份验证失败,我使用角色来允许实例查询EC2。
周围有人使用awscli
EC2访问并愿意分享经验吗?