我使用IAM角色遇到了问题。
我使用CloudFormation模板启动了实例,在其中指定了我的角色和策略以访问S3存储桶和其他亚马逊资源。启动脚本成功地从S3获取所需的资源。
但是,我已经启动了下载的脚本,该脚本将BOTO3用作SDK,并且我遇到了一个错误。Boto failed to load credentials
(据我了解,它可以从AWS凭据文件或IAM角色加载凭据。
然后我运行aws s3 ls
检查问题并遇到了同样的问题。另外,我使用policysim
(S3ListAllMyBucketsnot
,S3ListAllMyBucketsnot
)测试了自己的角色,并确定一切都可以。
Amazon S3ListBucketnot required * allowed 1 matching statements.
Amazon S3ListAllMyBucketsnot required * allowed 1 matching statements.
应该指出的是,我整天都在玩Cloudformation,并启动了很漂亮的实例(但要关闭它们)。这可能是一个限制问题吗?
有什么解决方案?
确认角色正确地为Amazon EC2实例提供凭据,请在实例上运行此命令:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
它应该显示分配给实例的角色的名称。
然后尝试一下,插入角色名称:
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<ROLE-NAME>/
您应该获得与此类似的临时凭证:
{
"Code" : "Success",
"LastUpdated" : "2017-04-26T16:39:16Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"Token" : "token",
"Expiration" : "2017-04-27T22:39:16Z"
}
如果是这样,则boto
将能够自动访问这些凭据。
每当boto
发生奇怪的事情时,确保将其更新到最新版本总是一个好主意。这将更新BOTO,BOTO3和AWS命令行接口(CLI):
sudo /usr/local/bin/pip install boto --upgrade
sudo /usr/local/bin/pip install boto3 --upgrade
sudo /usr/local/bin/pip install awscli --upgrade