daniel-rhoades.aws-security-groups

[![Circle CI](https://circleci.com/gh/daniel-rhoades/aws-security-groups-role.svg?style=svg&circle-token=9e73196b1138c36a3ec90938a2ebae505408ecc1)](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)
O projekcie

Ansible role for simplifying the provisioning and decommissioning of a EC2 Security Groups within an AWS account

Zainstaluj
ansible-galaxy install daniel-rhoades.aws-security-groups
Licencja
mit
Pobrania
146
Właściciel
Strategist, Technologist and Engineer