0

我正在寻找一种在 Ansible 中显示或列出安全组的好方法

目前我正在使用 Ansible 模块ec2_group,它默默地更改安全组以匹配 Ansible 中定义的内容,但不显示更改的内容。

更改:[localhost -> 127.0.0.1] => {“更改”:true,“group_id”:“sg-8649adee”}

我担心有人可能会在 Web 控制台中添加一些内容,这些内容会在执行 Ansible 的ec2_group任务时被删除。只要我能获得有关先前状态的一些信息(在输出中),就可以了,所以在删除一些重要但“未记录”的修改的情况下,它可以快速恢复。

目前我知道的唯一方法是将其作为本地命令模块运行:

aws ec2 describe-security-groups [some pattern]

有没有更好的方法来做到这一点,希望完全在 Ansible 中?

4

2 回答 2

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 账户中发生了什么变化。

于 2016-04-13T06:30:01.757 回答
0

我将只添加一个更新:

--group-names YourGroupName 

仅适用于默认 VPC

对于非默认 VPC,请使用过滤器,例如:

aws ec2 --region YourRegion describe-security-groups --filters Name=group-name,Values=YourGroupName

http://docs.aws.amazon.com/cli/latest/reference/ec2/describe-security-groups.html

于 2016-04-13T09:44:13.597 回答