Ansible无法读取~/.aws/credentials中的凭证

4

我正在使用动态清单运行ansible。当使用aws configure命令设置aws cli时,动态清单的ansible命令可以正常运行。但是我希望动态清单使用多个配置文件,因此我已在~/.aws/credentials中添加了配置文件。

[personal]
aws_access_key_id = XXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXX

[default]
aws_access_key_id = XXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXX

Ansible无法获取这些凭据,运行./ec2.py --list时会出现错误:

Looks like AWS is down again:
EC2ResponseError: 401 Unauthorized
<?xml version="1.0" encoding="UTF-8"?>
<Response><Errors><Error><Code>AuthFailure</Code><Message>Authorization header or parameters are not formatted correctly.</Message></Error></Errors><RequestID>349d5311-54db-4e79-9bbc-2d60b9f15da5</RequestID></Response>
3个回答

1

我也遇到了这个问题,并最终解决了它;问题在于我的机器时钟已经偏移了几分钟。将时间设置正确后就可以解决问题。

在此过程中,我了解到aws cli使用boto3,而ec2.py使用boto。似乎boto3在认证方面的工作方式略有不同,因为像@drishti一样,即使ec2.py无法工作,CLI对我来说仍然可以正常工作。


0

你尝试过在ec2.py中添加--profile PROFILE开关吗?

./ec2.py --list --profile personal

它正在给出错误 - usage: hosts [-h] [--list] [--host HOST] [--refresh-cache] hosts: error: unrecognized arguments: --profile personal - drishti ahuja
你能确保你拥有最新的ec2.py文件吗?我手头的这个文件有--profile选项。./ec2.py --help 用法:ec2.py [-h] [--list] [--host HOST] [--refresh-cache] [--profile BOTO_PROFILE] - uptime365
ec2.py链接粘贴。 - uptime365
是的,你说得对。现在我有最新的ec2.py,但仍然出现错误 - “错误:检索ec2清单时出现身份验证错误。
  • 找到AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量,但可能不正确
  • 在“〜/ .boto,〜/ .aws /凭据”处找到Boto配置,但包含的凭据可能不正确”,同时:获取EC2实例。
- drishti ahuja

0

在 @uptime365 的回答之后,这很可能不是 Ansible/ec2.py 的问题。以下是我的故障排除步骤:

您能使用这些凭据使用 awscli 吗?

aws ec2 describe-instances --page-size 5
aws ec2 describe-instances --page-size 5 --profile personal

您可以手动包含凭据来使用awscli吗?

请注意,由于您正在指定密钥,因此无需使用profile

AWS_ACCESS_KEY_ID="AKIA.." AWS_SECRET_ACCESS_KEY=".."  aws ec2 describe-instances --page-size 5

如果出现区域错误,请添加AWS_DEFAULT_REGION="us-east-1"或您选择的区域。

这两个都不起作用

您的访问密钥或秘密有问题。每个密钥应为20个字符,全部大写字母和数字。秘密是40个字符,包括大小写字母、数字和标点符号。


它可以使用aws ec2 describe-instances --page-size 5 --profile personal正常工作,但是当我运行./ec2.py --list --profile personal时,它会给出以下错误 - `ERROR: "Authentication error retrieving ec2 inventory.
  • AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment vars found but may not be correct
  • Boto configs found at '~/.boto, ~/.aws/credentials', but the credentials contained may not be correct", while: getting EC2 instances`
- drishti ahuja
在ec2.py之前添加个人配置文件,格式如下:AWS_PROFILE=personal ./ec2.py - tedder42
将整个ec2.py粘贴到gist中。有一些你没有分享的东西导致它失败了。也许你可以附上你的屏幕截图,显示文件、运行方式、用户名、主机等信息。 - tedder42
这里是要点 - https://gist.github.com/anonymous/bdd30431d32323282c0496f087b45776 - drishti ahuja
1
aws-cli 的凭证已经正常工作,只是 Ansible 动态清单没有获取到这些凭证。 - drishti ahuja
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接