daniel-rhoades.aws-security-groups
aws-security-group-role
Ansible-Rolle zur Vereinfachung der Bereitstellung und Außerbetriebnahme von EC2-Sicherheitsgruppen innerhalb eines AWS-Kontos.
Für detailliertere Informationen zur Erstellung von EC2-Sicherheitsgruppen mit Ansible siehe die offizielle Dokumentation zu diesem Modul: http://docs.ansible.com/ansible/ec2_group_module.html.
Anforderungen
Erfordert die neuesten Ansible-EC2-Unterstützungs-Module sowie Boto.
Sie müssen auch Ihre Ansible-Umgebung für die Verwendung mit AWS konfigurieren. Weitere Informationen finden Sie hier: http://docs.ansible.com/ansible/guide_aws.html.
Rollen-Variablen
Standardeinstellungen:
- security_group_resource_tags: Standardmäßig der Name der Sicherheitsgruppe;
- ec2_inbound_group_state: Status der Sicherheitsgruppenliste als "Inbound", standardmäßig
present
; - ec2_internal_inbound_group_state: Status der Sicherheitsgruppenliste als "intern inbound", standardmäßig
present
; - ec2_outbound_group_state: Status der Sicherheitsgruppenliste als "Outbound", standardmäßig
present
.
Erforderliche Variablen:
- vpc_region: Sie müssen die Region angeben, in der Sie das VPC erstellt haben, z. B. eu-west-1;
- vpc_id: Sie müssen die VPC-ID angeben, innerhalb derer Sie die Sicherheitsgruppen erstellen möchten, z. B. vpc-xxxxxxxx;
- ec2_group_inbound_sg: Sie müssen eine Liste von Eingangs-Sicherheitsgruppen angeben, siehe Abschnitt mit Beispielen weiter unten für weitere Informationen;
- ec2_group_internal_inbound_sg_file: Sie müssen eine Liste interner Eingangs-Sicherheitsgruppen angeben, siehe Abschnitt mit Beispielen weiter unten für weitere Informationen. Hinweis: Dies muss eine Datei sein, da sie dynamisch eingebunden wird, nachdem die Eingangsgruppen erstellt wurden;
- ec2_group_outbound_sg: Sie müssen eine Liste von Ausgangs-Sicherheitsgruppen angeben, siehe Abschnitt mit Beispielen weiter unten für weitere Informationen.
Eingangssicherheitsgruppen sind diejenigen, die auf öffentliche Dienstleistungen angewendet werden, z. B. ein Load Balancer. Die internen Eingangssicherheitsgruppen sind für Instanzen vorgesehen, die hinter einem Load Balancer oder intern im VPC stehen. Ausgangssicherheitsgruppen sind die Ports, auf die Dienste innerhalb des Netzwerks zugreifen können.
Ausgaben:
- ec2_group_inbound_sg: Das AWS EC2-Gruppenobjekt, das durch Ausführen des
ec2_group_module
mit den bereitgestellten "Inbound"-Variablen erstellt wurde; - ec2_group_internal_inbound_sg: Das AWS EC2-Gruppenobjekt, das durch Ausführen des
ec2_group_module
mit den bereitgestellten "internen Inbound"-Variablen erstellt wurde; - ec2_group_outbound_sg: Das AWS EC2-Gruppenobjekt, das durch Ausführen des
ec2_group_module
mit den bereitgestellten "Outbound"-Variablen erstellt wurde.
Die Rolle verarbeitet die Sicherheitsgruppen in der Reihenfolge:
- inbound;
- internal inbound;
- outbound.
Das bedeutet, dass Sie Sicherheitsgruppen, die in der "Inbound"-Liste erstellt werden, in der "Internal Inbound"-Liste referenzieren können. Dies ist besonders nützlich, wenn Sie den Verkehr nur zwischen den "Inbound"- und "Internal Inbound"-Gruppen leiten möchten, z. B. zwischen einem Load Balancer und einem Webserver.
Abhängigkeiten
Keine Abhängigkeiten zu anderen Rollen, aber ein VPC muss bereits vorhanden sein oder erstellt werden, bevor Sie diese Rolle anwenden.
Beispiel-Playbook
Bevor Sie diese Rolle verwenden, müssen Sie die Rolle installieren. Der einfachste Weg, dies zu tun, ist: ansible-galaxy install daniel-rhoades.aws-security-group-role
.
Das folgende Beispiel-Playbook stellt sicher, dass eine EC2-Sicherheitsgruppe in AWS bereitgestellt wird, wie angegeben. Wenn bereits eine Sicherheitsgruppe vorhanden ist, wird die Rolle nichts unternehmen; andernfalls wird sie erstellt. Der Vollständigkeit halber erstellt das Beispiel auch ein VPC, in dem die EC2-Sicherheitsgruppen wohnen, unter Verwendung der Rolle: daniel-rhoades.aws-vpc
.
- name: Mein System | Bereitstellung der gesamten erforderlichen Infrastruktur
hosts: localhost
connection: local
gather_facts: no
vars:
my_vpc_name: "mein_beispiel_vpc"
my_vpc_region: "eu-west-1"
my_vpc_cidr: "172.40.0.0/16"
everywhere_cidr: "0.0.0.0/0"
# Subnetz innerhalb des VPC
my_vpc_subnets:
- cidr: "172.40.10.0/24"
az: "{{ my_vpc_region }}a"
- cidr: "172.40.20.0/24"
az: "{{ my_vpc_region }}b"
# Ermöglichen Sie den Subnetzen, mit der Außenwelt zu kommunizieren
my_public_subnet_routes:
- subnets:
- "{{ my_vpc_subnets[0].cidr }}"
- "{{ my_vpc_subnets[1].cidr }}"
routes:
- dest: "{{ everywhere_cidr }}"
gw: igw
# Eingangs-Sicherheitsgruppen, z. B. öffentliche Dienstleistungen wie einen Load Balancer
my_inbound_security_groups:
- sg_name: inbound-web
sg_description: http- und https-Zugriff erlauben (öffentlich)
sg_rules:
- proto: tcp
from_port: 80
to_port: 80
cidr_ip: "{{ everywhere_cidr }}"
- proto: tcp
from_port: 443
to_port: 443
cidr_ip: "{{ everywhere_cidr }}"
# SSH-Zugriff nur innerhalb des VPC erlauben. Um auf Dienste innerhalb des VPC zuzugreifen, müssen Sie einen
# temporären Bastion-Host erstellen
- sg_name: inbound-ssh
sg_description: ssh-Zugriff erlauben
sg_rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: "{{ my_vpc_cidr }}"
# Interne Eingangssicherheitsgruppen, z. B. Dienste, die nicht direkt von außerhalb des VPC, wie
# die Webserver hinter dem Load Balancer, ausgeführt werden sollten.
#
# Dies muss eine Datei sein, da sie dynamisch eingebunden wird, nachdem die Eingangssicherheitsgruppen erstellt wurden
my_internal_inbound_security_groups_file: "internal-securitygroups.yml"
# Ausgangsregeln, z. B. welche Dienste die Webserver selbstständig zugreifen können
my_outbound_security_groups:
- sg_name: outbound-all
sg_description: erlaubt ausgehenden Datenverkehr zu jeder IP-Adresse
sg_rules:
- proto: all
cidr_ip: "{{ everywhere_cidr }}"
roles:
# Netzwerk bereitstellen
- {
role: daniel-rhoades.aws-vpc,
vpc_name: "{{ my_vpc_name }}",
vpc_region: "{{ my_vpc_region }}",
vpc_cidr_block: "{{ my_vpc_cidr }}",
vpc_subnets: "{{ my_vpc_subnets }}",
public_subnet_routes: "{{ my_public_subnet_routes }}"
}
# Sicherheitsgruppen bereitstellen
- {
role: daniel-rhoades.aws-security-groups,
vpc_region: "{{ my_vpc_region }}",
vpc_id: "{{ vpc.vpc_id }}",
ec2_group_inbound_sg: "{{ my_inbound_security_groups }}",
ec2_group_internal_inbound_sg_file: "{{ my_internal_inbound_security_groups_file }}",
ec2_group_outbound_sg: "{{ my_outbound_security_groups }}"
}
Das Beispiel internal-securitygroups.yml
sieht wie folgt aus:
ec2_group_internal_inbound_sg:
- sg_name: inbound-web-internal
sg_description: http- und https-Zugriff erlauben (nur vom Load Balancer)
sg_rules:
- proto: tcp
from_port: 80
to_port: 80
group_id: "{{ ec2_group_inbound_sg.results[0].group_id }}"
Um die Gruppen außer Betrieb zu nehmen:
- name: Mein System | Außerbetriebnahme aller erforderlichen Infrastruktur
hosts: localhost
connection: local
gather_facts: no
vars:
my_vpc_name: "mein_beispiel_vpc"
my_vpc_region: "eu-west-1"
my_vpc_cidr: "172.40.0.0/16"
everywhere_cidr: "0.0.0.0/0"
# Subnetz innerhalb des VPC
my_vpc_subnets:
- cidr: "172.40.10.0/24"
az: "{{ my_vpc_region }}a"
- cidr: "172.40.20.0/24"
az: "{{ my_vpc_region }}b"
# Ermöglichen Sie den Subnetzen, mit der Außenwelt zu kommunizieren
my_public_subnet_routes:
- subnets:
- "{{ my_vpc_subnets[0].cidr }}"
- "{{ my_vpc_subnets[1].cidr }}"
routes:
- dest: "{{ everywhere_cidr }}"
gw: igw
# Eingangs-Sicherheitsgruppen, z. B. öffentliche Dienstleistungen wie einen Load Balancer
my_inbound_security_groups:
- sg_name: inbound-web
sg_description: http- und https-Zugriff erlauben (öffentlich)
sg_rules:
- proto: tcp
from_port: 80
to_port: 80
cidr_ip: "{{ everywhere_cidr }}"
- proto: tcp
from_port: 443
to_port: 443
cidr_ip: "{{ everywhere_cidr }}"
# SSH-Zugriff nur innerhalb des VPC erlauben. Um auf Dienste innerhalb des VPC zuzugreifen, müssen Sie einen
# temporären Bastion-Host erstellen
- sg_name: inbound-ssh
sg_description: ssh-Zugriff erlauben
sg_rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: "{{ my_vpc_cidr }}"
# Interne Eingangssicherheitsgruppen, z. B. Dienste, die nicht direkt von außerhalb des VPC, wie
# die Webserver hinter dem Load Balancer, ausgeführt werden sollten.
#
# Dies muss eine Datei sein, da sie dynamisch eingebunden wird, nachdem die Eingangssicherheitsgruppen erstellt wurden
my_internal_inbound_security_groups_file: "internal-securitygroups.yml"
# Ausgangsregeln, z. B. welche Dienste die Webserver selbstständig zugreifen können
my_outbound_security_groups:
- sg_name: outbound-all
sg_description: erlaubt ausgehenden Datenverkehr zu jeder IP-Adresse
sg_rules:
- proto: all
cidr_ip: "{{ everywhere_cidr }}"
roles:
# Netzwerk bereitstellen
- {
role: daniel-rhoades.aws-vpc,
vpc_name: "{{ my_vpc_name }}",
vpc_region: "{{ my_vpc_region }}",
vpc_cidr_block: "{{ my_vpc_cidr }}",
vpc_subnets: "{{ my_vpc_subnets }}",
public_subnet_routes: "{{ my_public_subnet_routes }}"
}
# Sicherheitsgruppen außer Betrieb nehmen
- {
role: daniel-rhoades.aws-security-groups,
vpc_region: "{{ my_vpc_region }}",
vpc_id: "{{ vpc.vpc_id }}",
ec2_group_inbound_sg: "{{ my_inbound_security_groups }}",
ec2_group_internal_inbound_sg_file: "{{ my_internal_inbound_security_groups_file }}",
ec2_group_outbound_sg: "{{ my_outbound_security_groups }}",
ec2_inbound_group_state: "absent",
ec2_internal_inbound_group_state: "absent",
ec2_outbound_group_state: "absent"
}
Lizenz
MIT
Autoreninformation
Daniel Rhoades (https://github.com/daniel-rhoades)
Ansible role for simplifying the provisioning and decommissioning of a EC2 Security Groups within an AWS account
ansible-galaxy install daniel-rhoades.aws-security-groups