我有一個Ansible角色來處理創建RDS實例和該實例上的數據庫。該角色允許爲數據庫指定安全組。我希望能夠在允許從當前主機訪問的角色開始時將安全組添加到安全組,以便Ansible可以運行一些數據庫創建/維護任務。然後我想在保持現有組的同時從安全組中刪除此規則。如何使用Ansible向EC2安全組添加臨時規則
我到目前爲止所做的工作是使用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用於運行構建。我可以將這些永久添加到安全組,但我不確定這是什麼安全隱患。
ec2_group
docs
ec2_group_facts
docs
感謝您的迴應。這個角色將主要在CI/CD設置中運行,最有可能來自Travis CI。這意味着我不能僅僅添加一條規則來允許主機訪問數據庫,因爲我無法控制作業運行在哪臺機器(以及相關的IP)上。另外,我還沒有考慮過劇本可能同時運行,所以我很感謝你指出了這一點。 –
您是否考慮通過'delegate_to' http://docs.ansible.com/ansible/latest/playbooks_delegation.html#delegation更改特定任務的目標主機。這樣你永遠不會要求應用程序主機擁有該訪問權限。 – Hammett
我不確定'delegate_to'在這種情況下會有用。說實話,雖然我會指出所有的數據庫任務都是用'local_action'執行的,我認爲它相當於'delegate_to:127.0.0.1',但我並沒有真正理解它的用途。 –