daniel-rhoades.aws-security-groups
[](https://circleci.com/gh/daniel-rhoades/aws-security-groups-role)
aws-security-group-role
=======================
Rola Ansible do uproszczenia tworzenia i usuwania grup zabezpieczeń EC2 w ramach konta AWS.
Aby uzyskać więcej informacji na temat tworzenia grup zabezpieczeń EC2 za pomocą Ansible, zapoznaj się z oficjalną dokumentacją tego modułu: http://docs.ansible.com/ansible/ec2_group_module.html.
Wymagania
------------
Wymaga najnowszych modułów wsparcia EC2 Ansible oraz Boto.
Musisz również skonfigurować swoje środowisko Ansible do użycia z AWS, zobacz http://docs.ansible.com/ansible/guide_aws.html.
Zmienne roli
--------------
Domyślne:
* security_group_resource_tags: Domyślnie jest to nazwa grupy zabezpieczeń;
* ec2_inbound_group_state: Stan listy grup zabezpieczeń jako "przychodzące", domyślnie `obecna`;
* ec2_internal_inbound_group_state: Stan listy grup zabezpieczeń jako "wewnętrzne przychodzące", domyślnie `obecna`;
* ec2_outbound_group_state: Stan listy grup zabezpieczeń jako "wychodzące", domyślnie `obecna`.
Wymagane zmienne:
* vpc_region: Musisz określić region, w którym utworzyłeś VPC, np. eu-west-1;
* vpc_id: Musisz określić ID VPC, w którym chcesz utworzyć grupy zabezpieczeń, np. vpc-xxxxxxxx;
* ec2_group_inbound_sg: Musisz podać listę przychodzących grup zabezpieczeń do utworzenia, zobacz sekcję przykładowego playbooka poniżej dla dalszych informacji;
* ec2_group_internal_inbound_sg_file: Musisz określić listę wewnętrznych przychodzących grup zabezpieczeń do utworzenia, zobacz sekcję przykładowego playbooka poniżej dla dalszych informacji. Uwaga, musi to być plik, ponieważ będzie dynamicznie dołączany po utworzeniu grup przychodzących;
* ec2_group_outbound_sg: Musisz podać listę wychodzących grup zabezpieczeń do utworzenia, zobacz sekcję przykładowego playbooka poniżej dla dalszych informacji.
Oczekuje się, że przychodzące grupy zabezpieczeń będą stosowane do publicznych usług, np. do balancera obciążenia. Wewnętrzne przychodzące grupy zabezpieczeń są przeznaczone dla instancji znajdujących się za balancerem obciążenia lub wewnątrz VPC. Wychodzące grupy zabezpieczeń to porty, które usługi mogą używać z wnętrza sieci.
Wyniki:
* ec2_group_inbound_sg: Obiekt grupy AWS EC2 utworzony w wyniku uruchomienia `ec2_group_module` z dostarczonymi zmiennymi "przychodzącymi";
* ec2_group_internal_inbound_sg: Obiekt grupy AWS EC2 utworzony w wyniku uruchomienia `ec2_group_module` z dostarczonymi zmiennymi "wewnętrznie przychodzącymi";
* ec2_group_outbound_sg: Obiekt grupy AWS EC2 utworzony w wyniku uruchomienia `ec2_group_module` z dostarczonymi zmiennymi "wychodzącymi".
Rola przetwarza grupy zabezpieczeń w kolejności:
* przychodzące;
* wewnętrznie przychodzące;
* wychodzące.
Oznacza to, że możesz odwoływać się do grup zabezpieczeń, które będą tworzone w liście "przychodzących" w liście "wewnętrznie przychodzących", co jest szczególnie przydatne, gdy chcesz kierować ruch tylko między grupami przychodzącymi i wewnętrznymi, np. jak w przypadku balancera obciążenia i serwera WWW.
Zależności
------------
Brak zależności od innych ról, ale VPC musi już istnieć lub być utworzone przed zastosowaniem tej roli.
Przykładowy playbook
----------------
Przed użyciem tej roli musisz ją zainstalować, najprostszym sposobem jest: `ansible-galaxy install daniel-rhoades.aws-security-group-role`.
Przykładowy playbook poniżej zapewnia, że w AWS jest tworzona grupa zabezpieczeń EC2, zgodnie z określeniami, np. jeśli już istnieje, rola nic nie robi, w przeciwnym razie ją tworzy. Dla pełności przykłady tworzą również VPC, w którym będą znajdować się grupy zabezpieczeń EC2, z wykorzystaniem roli: `daniel-rhoades.aws-vpc`.
name: Mój System | Tworzenie całej wymaganej infrastruktury hosts: localhost connection: local gather_facts: no vars: my_vpc_name: "my_example_vpc" my_vpc_region: "eu-west-1" my_vpc_cidr: "172.40.0.0/16" everywhere_cidr: "0.0.0.0/0"
Podsieci w 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"
Umożliwienie podsieciom routowania do świata zewnętrznego
my_public_subnet_routes: - subnets: - "{{ my_vpc_subnets[0].cidr }}" - "{{ my_vpc_subnets[1].cidr }}" routes: - dest: "{{ everywhere_cidr }}" gw: igw
Przychodzące grupy zabezpieczeń, np. usługi publiczne, takie jak balancer obciążenia
my_inbound_security_groups: - sg_name: inbound-web sg_description: zezwól na dostęp http i https (publiczny) 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 }}" # Zezwól na dostęp SSH tylko z wnętrza VPC, aby uzyskać dostęp do dowolnych usług wewnątrz VPC, musisz utworzyć # tymczasowy serwer bastionowy - sg_name: inbound-ssh sg_description: zezwól na dostęp ssh sg_rules: - proto: tcp from_port: 22 to_port: 22 cidr_ip: "{{ my_vpc_cidr }}"
Wewnętrzne przychodzące grupy zabezpieczeń, np. usługi, które nie powinny być bezpośrednio dostępne spoza VPC, takie jak
serwery WWW za balanserem obciążenia.
To musi być plik, ponieważ musi być dynamicznie dołączone po utworzeniu grup przychodzących
my_internal_inbound_security_groups_file: "internal-securitygroups.yml"
Zasady wychodzące, np. które usługi mogą mieć dostęp do serwerów WWW same
my_outbound_security_groups: - sg_name: outbound-all sg_description: zezwala na ruch wychodzący do każdego adresu IP sg_rules: - proto: all cidr_ip: "{{ everywhere_cidr }}" roles:
Tworzenie sieci
- { 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 }}" }
Tworzenie grup zabezpieczeń
- { 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 }}" }
Przykład pliku `internal-securitygroups.yml` wygląda następująco:
ec2_group_internal_inbound_sg:
- sg_name: inbound-web-internal
sg_description: zezwól na dostęp http i https (tylko z balancera obciążenia)
sg_rules:
- proto: tcp from_port: 80 to_port: 80 group_id: "{{ ec2_group_inbound_sg.results[0].group_id }}"
Aby zlikwidować grupy:
name: Mój System | Zlikwiduj całą wymaganą infrastrukturę hosts: localhost connection: local gather_facts: no vars: my_vpc_name: "my_example_vpc" my_vpc_region: "eu-west-1" my_vpc_cidr: "172.40.0.0/16" everywhere_cidr: "0.0.0.0/0"
Podsieci w 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"
Umożliwienie podsieciom routowania do świata zewnętrznego
my_public_subnet_routes: - subnets: - "{{ my_vpc_subnets[0].cidr }}" - "{{ my_vpc_subnets[1].cidr }}" routes: - dest: "{{ everywhere_cidr }}" gw: igw
Przychodzące grupy zabezpieczeń, np. usługi publiczne, takie jak balancer obciążenia
my_inbound_security_groups: - sg_name: inbound-web sg_description: zezwól na dostęp http i https (publiczny) 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 }}" # Zezwól na dostęp SSH tylko z wnętrza VPC - sg_name: inbound-ssh sg_description: zezwól na dostęp ssh sg_rules: - proto: tcp from_port: 22 to_port: 22 cidr_ip: "{{ my_vpc_cidr }}"
Wewnętrzne przychodzące grupy zabezpieczeń
my_internal_inbound_security_groups_file: "internal-securitygroups.yml"
Zasady wychodzące
my_outbound_security_groups: - sg_name: outbound-all sg_description: zezwala na ruch wychodzący do każdego adresu IP sg_rules: - proto: all cidr_ip: "{{ everywhere_cidr }}" roles:
Tworzenie sieci
- { 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 }}" }
Zlikwidowanie grup zabezpieczeń
{ 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: "nieobecna", ec2_internal_inbound_group_state: "nieobecna", ec2_outbound_group_state: "nieobecna" }
Licencja
-------
MIT
Informacje o autorze
------------------
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