环境是这样的:
AWS 中的多个账户列表(实际上,这些都是数字):
账户1
账户2
账户3
一个 id 已在所有帐户中承担角色能力
成功生成假定角色列表(包括 arn、session_token、session_name)
Ansible 自动化平台(AAP 又名 Tower)
库存存在“dyn_aws_inventory”
目标:
迭代所有假设的角色
为每个名称为“
帐户中的所有服务器都显示在“dyn_aws_inventory/Hosts”下
能够刷新每个库存来源
尝试过:
- name: Create an AWS EC2 inventory source
ansible.controller.inventory_source:
controller_oauthtoken: "{{ controller_oauthtoken }}"
name: "{{ vpc_session.invocation.module_args.role_session_name }}_src"
source: "ec2"
'# credential: ### this worked for a single account, not the list
inventory: "{{ inv_out.id }}"
overwrite: true
overwrite_vars: true
source_vars:
plugin: amazon.aws.aws_ec2
session_token: "{{ vpc_session.sts_creds.session_token }}" # <== tried with and without
assume_role_arn: "{{ vpc_session.invocation.module_args.role_arn }}_src" <== tried with and without
regions:
- us-east-1
- us-east-2
filters:
instance-state-name: running
compose:
ansible_hostname:
- "tag:Name"
ignore_errors: true
loop: "{{ aws_assumed_roles.results }}"
loop_control:
label: "{{ vpc_session.invocation.module_args.role_session_name }}"
loop_var: vpc_session
register: inv_source_out
实际结果:
在正确的清单中创建了清单源,但没有导入服务器
任何清单源刷新都会失败并出现以下错误:
[警告]:* 无法使用自动插件解析 /runner/inventory/aws_ec2.yml: 调用AssumeRole操作时发生错误(InvalidClientTokenId): 请求中包含的安全令牌无效。
我没有答案,发帖只是为了说我有一个非常相似的问题。
在我的场景中,我有一个有权在另一个 AWS 账户上担任角色的 ID。我可以通过 CLI 在 AWS 账户上执行代入角色,没有任何问题。我的 AAP 控制器(又名 Tower)仅配置了有权承担角色的账户的 AWS 访问密钥 ID 和秘密访问密钥凭证(我没有输入 STS 令牌,因为我目前没有)。然后,我通过将源变量“iam_role_arn”设置为账户的 ARN,为我想要承担角色的账户配置动态清单插件。我也提供地区。但是,当我运行同步时,我遇到了与您相同的错误。
对我有用的方法(但在我看来,这违背了自动化的目的),是通过 CLI 承担角色,然后将假设命令生成的访问密钥 ID、秘密访问密钥和会话令牌输入到 AWS 凭证中美国联合总会。然后从源变量中删除“iam_role_arn”。同步成功了。我不喜欢这个的原因是我每次都必须手动生成凭据,如果您尝试运行事件驱动的自动化,这将达不到目的。
我希望有人知道解决方案或知道社区插件是否有问题。