提前检查将要执行Ansible的AWS账户,以预防事故发生
首先
在使用Ansible操作AWS资源时,需要注意的是要避免选择错误的目标账户。
这个问题在aws cli中也是一样的,在进行操作之前只能通过aws configure list进行确认,容易发生人为错误。
因此,我们可以使用Ansible来比较当前有效的配置文件和执行目标的AWS帐户。如果它们不同,我们将使任务失败,并阻止对意外帐户的Ansible执行。
前提 – Qian2 ti2
-
- aws cliがインストールされている必要があります。
- credential情報は環境変数かaws configureでセットしてある必要があります。
范例
文件夹结构
site.yml
roles/
|--account_check/
| |--tasks/
| | |--main.yml
hosts/aws #inventory
host_vars/
|--localhost.yml
库存
本次我们将在本地主机上执行aws cli命令,因此需要准备以下类似的清单文件。
[aws]
localhost
变量
以下是对变量的定义方式。这次我们选择了使用host_vars进行定义。
---
my_vars:
aws:
common:
account_id: 'XXXXXXXXXXXX'
角色
使用shell模块通过aws cli获取当前配置文件中设置的AWS账户ID,并与设置的账户ID(执行目标)进行比较,如果不同,则触发失败。
虽然可以使用 “failed_when” 来导致失败,但为了更加易于理解,我们将使用 “fail” 模块并输出自定义消息。
---
- name: AWSアカウントID取得
shell: >-
aws sts get-caller-identity \
--query 'Account' \
--output text
check_mode: no
changed_when: false
register: aws_id
- name: AWSアカウントIDチェック
fail:
msg: "Target AWS account is wrong!!"
check_mode: no
when: aws_id.stdout != my_vars.aws.common.account_id
网站.yml
通过在tags中指定always,即使在指定标签运行时,也将始终执行。
---
- name: account_check
hosts: localhost
connection: local
roles:
- role: account_check
tags:
- always
- account_check
执行
$ ansible-playbook -i hosts/aws -l localhost site.yml
总结
如果这个Role被首先执行,万一目标账号和配置文件的账号不一致,后续任务就不会执行,这样是安全的。
请参考。
用Ansible管理AWS资源的系列
-
- VPCをAnsibleで作成する
-
- IAMユーザをAnsibleで管理する
-
- AWSのセキュリティグループをAnsibleで管理する
-
- EC2をAnsibleで管理する
-
- ec2_group_factsモジュールをAnsible2.2で使えるようにする
-
- RDSをAnsibleで管理する
- AnsibleでRoute53を管理する