【发布时间】:2018-01-01 03:35:06
【问题描述】:
我有一个 Ansible 角色来处理 RDS 实例和该实例上的数据库的创建。该角色允许为数据库指定安全组。我希望能够在角色开始时向安全组添加一条规则,允许从当前主机访问,以便 Ansible 可以运行一些数据库创建/维护任务。然后,我想从安全组中删除此规则,同时保留现有组。
到目前为止,我所做的是使用ec2_group_facts 模块来获取有关我保存在security_group 变量中的给定安全组的信息。然后我添加了一个类似于以下任务的规则:
- name: Add hole to security group
local_action:
module: ec2_group
name: "{{ security_group.group_name }}"
purge_rules: no
rules:
- proto: tcp
from_port: "{{ db_port }}"
to_port: "{{ db_port }}"
cidr_ip: 0.0.0.0/0
这一切正常。问题是在角色结束时,当我想恢复现有规则时,ec2_group_facts 返回的规则格式不被ec2_group 模块接受。保存的关于security_group的信息格式如下:
{
"group_id": "sg-1234abcd",
"group_name": "security-group",
"ip_permissions": [
{
"from_port": 1234,
"ip_protocol": "tcp",
"ip_ranges": [
{
"cidr_ip": "0.0.0.0/0"
}
],
"ipv6_ranges": [],
"prefix_list_ids": [],
"to_port": 1234,
"user_id_group_pairs": []
}
],
"ip_permissions_egress": [],
"owner_id": "123456789012",
"tags": {
"Name": ""
},
"vpc_id": "vpc-1234abcd"
}
ec2_group 模块的rules 参数需要具有proto、from_port、to_port 和cidr_ip 属性的对象列表,那么我如何将上面的数据映射到所需的格式?
编辑:我想一种解决方案是添加一个允许从当前主机访问的临时安全组。如果我对 EC2 安全组的理解是正确的,那么将应用与实例关联的安全组的最宽松规则,这样就可以实现我想要的。但是,这需要编辑附加到现有 RDS 实例的安全组,因此我希望尽可能编辑现有安全组的规则。
编辑 2: Travis CI publishes the IP addresses 用于运行构建。我可以将这些永久添加到安全组中,尽管我不确定这会带来什么安全隐患。
【问题讨论】:
标签: amazon-ec2 ansible