0

我正在寻找一个很好的方式Ansible获取从ec2_group Ansible模块

目前我使用的Ansible模块ec2_group是悄无声息改变安全组相匹配的是,以显示或列表安全组输出改变在Ansible中定义,但不显示更改内容。

改变:[本地主机 - > 127.0.0.1] => { “改变”:真实的, “GROUP_ID”: “SG-8649adee”}

我担心,有人可能会增加在执行Ansible的ec2_group任务时,Web控制台中的某些内容会被擦除。没关系,只要我能得到一些关于之前状态的信息(在输出中),所以如果擦除了一些重要但“无证”的修改,它可以很快恢复。

目前我知道的唯一方法是运行这个本地命令模块:

aws ec2 describe-security-groups [some pattern] 

是否有更好的方法来内Ansible做到这一点,完全有希望?

+0

还不清楚。你想用安全的方式描述安全组? – helloV

回答

2

Ansible是一种在环境上执行更改以对其进行配置以使其看起来像已定义的工具。因此,它所做的几乎所有事情纯粹是为了制定所述更改的目的,并且只有极少数模块不进行更改,而是进行事实收集以使其他模块进行更改。

因此,我会说,如果你使用Ansible来控制你的遗产,那么你应该完全支持它。如果有人在Ansible之外进行更改,那么Ansible将其改回应该是件好事。如果有人需要进行手动更改,那么该人员应该有一些机制来防止Ansible运行,直到将更改反馈到自动化代码中(在我的公司,我们使用Jenkins驱动所有的我们的自动化,以便他们可以简单地禁用相关的工作)。

如果这不是您的选择,那么您可以在更改之前总是提出并描述该组,然后有任务检查ec2_group模块是否更改了任何内容,如果是,则输出安全组以前的样子:

- hosts: localhost 
    connection: local 
    vars: 
    security_group_name: testing 
    tasks: 
    - name: describe ec2 security group before change 
     shell: "aws ec2 describe-security-groups --group-names {{ security_group_name }}" 
     register: before 
     changed_when: false 

    - name: create ec2 security group 
     ec2_group: 
     name: "{{ security_group_name }}" 
     description: "{{ security_group_name }}" 
     rules: 
      - proto: tcp 
      from_port: 22 
      to_port: 22 
      cidr_ip: 0.0.0.0/0 
      - proto: udp 
      from_port: 123 
      to_port: 123 
      cidr_ip: 10.0.0.0/8 
     rules_egress: 
      - proto: all 
      cidr_ip: 0.0.0.0/0 
     register: ec2_group 

    - name: security group changed 
     debug: var=before 
     when: ec2_group.changed 

另一种选择可能是简单地使用CloudTrail,看看是什么在您的AWS账户被改变。

+0

谢谢@ydaetskcoR 我看到我们有共同的想法:) 我确实将CloudTrail作为“最后的手段”。 – sirkubax