Ansible 动态清单:检索 ec2 清单时的身份验证错误

Posted

技术标签:

【中文标题】Ansible 动态清单:检索 ec2 清单时的身份验证错误【英文标题】:Ansible dynamic inventory: Authentication error retrieving ec2 inventory 【发布时间】:2017-07-15 12:09:57 【问题描述】:

我正在使用 Ansible 的动态清单功能连接到 AWS 账户中的 ec2 实例,方法如下:

AWS_PROFILE=personal ansible-playbook cifarm.yml -C

我已将https://raw.github.com/ansible/ansible/devel/contrib/inventory/ec2.py 复制到库存目录下的https://raw.github.com/ansible/ansible/devel/contrib/inventory/ec2.ini 文件中。

在运行AWS_PROFILE=personal ansible-playbook cifarm.yml -C 时,它会抛出以下错误:

输出: 错误:库存脚本 (inventory/ec2.py) 有一个执行错误:错误:“检索 ec2 库存的身份验证错误。 - 发现 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 环境变量,但可能不正确 - 在 '~/.boto, ~/.aws/credentials' 中找到 Boto 配置,但包含的凭据可能不正确”,同时:获取 EC2 实例

我正在从 MAC 操作系统运行剧本。请注意,我可以在下面成功运行:

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

这证明凭证是正确的,并且我已经导出了 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY。

我尝试如下执行inventory/ec2.py文件:

./ec2.py --list

它返回相同的错误。我看到一个帖子建议更新机器上的时间,我正在运行剧本。所以我跑了 ntpdate -u

但问题仍然存在。我不知道是什么原因。 非常感谢任何帮助/建议。

【问题讨论】:

【参考方案1】:

我设法解决了这个问题。在这里解释一下,让其他人受益。当我为 AWS_PROFILE= 个人生成 aws 凭证时,我在 ~/.aws/credentials 中有以下环境变量的值:

    aws_access_key_id aws_secret_access_key aws_session_token。

但是,如果您查看 ec2.py,它需要名为 aws_security_token 的变量值。所以我所做的只是将 ~/.aws/credentials 中的变量名从 aws_session_token 更改为 aws_security_token。

然后瞧。工作正常。

【讨论】:

谢谢,遇到了同样的问题。搜索了一段时间,这也为我解决了问题。 创建了一个 PR 来修复它:github.com/ansible/ansible/pull/36742

以上是关于Ansible 动态清单:检索 ec2 清单时的身份验证错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Ansible 动态清单中,如何按标签过滤主机?

Ansible AWS 动态清单实例过滤器不起作用

仅具有私有 IP 的 Azure VM 的 Ansible 动态清单

Ansible 五(inventory文件 主机清单)

Ansible 清单可以包含另一个清单吗?

ansible的主机清单,yml语法,playbook详解+操作