提前检查将要执行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を管理する
广告
将在 10 秒后关闭
bannerAds