amazon-web-services - 使用自定义文件夹而不是 ~/.aws
问题描述
我想找到一种不必指定aws_access_key
以及aws_secret_key
何时使用 aws 模块的方法。
是aws默认尝试使用凭据~/.aws
来针对剧本运行吗?
如果是,如何指示 ansible 在您想要的任何文件夹下使用 aws 凭据,例如:~/my_ansible_folder
.
我问这个是因为我真的想使用 ansible 创建一个保险库:cd ~/my_ansible_folder; ansible-vault create aws_keys.yml
然后~/my_ansible_folder
运行 playbook ansible-playbook -i ./inventory --ask-vault-pass site.yml
,它将在我不必指定的保险库aws_access_key
和aws_secret_key
需要使用 aws 凭证的任务中使用 aws 凭证。
解决方案
boto3 配置选项列表会让您感兴趣,最值得注意的是$AWS_SHARED_CREDENTIALS_FILE
环境变量。
我希望您可以使用传统创建该共享凭据文件copy: content="[default]\naws_access_key_id=whatever\netc\netc\n"
,然后将ansible_python_interpreter
事实设置env AWS_SHARED_CREDENTIALS_FILE=/path/to/that/credential-file /the/original/ansible_python_interpreter
为导致实际的 python 调用携带该环境变量。对于非 boto 模块,这样做只会花费你的运行成本env
,python
但老实说,ansible 所做的奇怪的模块序列化和反序列化会导致额外的二进制运行时在事物方案中不可见。
您可能必须以相同的方式覆盖$AWS_CONFIG_FILE
,$BOTO_CONFIG
甚至将它们指向/dev/null
以强制 boto 不查看您的$HOME/.aws
目录
因此,为了清楚起见:
- name: create our boto config
copy:
content: |
[default]
aws_access_key_id={{ access_key_from_vault }}
aws_secret_access_key={{ secret_key_from_vault }}
dest: /somewhere/sekrit
mode: '0600'
no_log: yes
register: my_aws_config
- name: grab existing python interp
set_fact:
backup_a_py_i: '{{ ansible_python_interpreter | default(ansible_playbook_python) }}'
- name: patch in our env-vars
set_fact:
ansible_python_interpreter: >-
env AWS_SHARED_CREDENTIALS_FILE={{ my_aws_config.path }}
{{ backup_a_py_i }}
# and away you go!
- ec2_instance_facts:
# optionally put this in a "rescue:" or whatever you think is reasonable
- file: path={{ my_aws_config.path }} state=absent
推荐阅读
- android - 安卓应用程序中的贝宝集成,应用程序可以将付款转回用户帐户
- json - Angular 5 *ngFor 对象数组
- html - 增加 html 中 td 单元格的宽度和高度
- powerbi - Power BI - Power BI Embedded 和主机页面之间的通信
- abap - 在 SAP GUI 或 Eclipse ADT 中测试 OpenSQL 语句?
- java - 升级到 Finchley.RELEASE 和 Springboot 2.0.5.RELEASE 时出现“无法确定合适的驱动程序类”
- yaml - 将列表作为第二个参数传递时,Fn::Sub 的阶梯函数云形成问题
- json - FlatList 没有呈现我的 json 数组数据
- eclipse - 为什么eclipse运行后shell中会显示警告?
- php - Clickatell 获得平衡