daniel-rhoades.aws-security-groups
aws-security-group-role
Rôle Ansible pour simplifier la création et la suppression de groupes de sécurité EC2 dans un compte AWS.
Pour plus d'informations détaillées sur la création de groupes de sécurité EC2 avec Ansible, consultez la documentation officielle pour ce module : http://docs.ansible.com/ansible/ec2_group_module.html.
Exigences
Nécessite les derniers modules de support EC2 d'Ansible ainsi que Boto.
Vous devrez également configurer votre environnement Ansible pour l'utiliser avec AWS, voir http://docs.ansible.com/ansible/guide_aws.html.
Variables du Rôle
Valeurs par défaut :
- security_group_resource_tags : Par défaut au nom du groupe de sécurité ;
- ec2_inbound_group_state : État de la liste de groupes de sécurité en tant que "inbound", par défaut à
present
; - ec2_internal_inbound_group_state : État de la liste de groupes de sécurité en tant que "inbound interne", par défaut à
present
; - ec2_outbound_group_state : État de la liste de groupes de sécurité en tant que "outbound", par défaut à
present
.
Variables requises :
- vpc_region : Vous devez spécifier la région dans laquelle vous avez créé le VPC, par exemple eu-west-1 ;
- vpc_id : Vous devez spécifier l'ID du VPC dans lequel vous souhaitez créer les groupes de sécurité, par exemple vpc-xxxxxxxx ;
- ec2_group_inbound_sg : Vous devez spécifier une liste de groupes de sécurité inbound à créer, voir la section exemple de playbook ci-dessous pour plus d'informations ;
- ec2_group_internal_inbound_sg_file : Vous devez spécifier une liste de groupes de sécurité internes inbound à créer, voir la section exemple de playbook ci-dessous pour plus d'informations. Notez que cela doit être un fichier car il sera inclus de manière dynamique après la création des groupes inbound ;
- ec2_group_outbound_sg : Vous devez spécifier une liste de groupes de sécurité outbound à créer, voir la section exemple de playbook ci-dessous pour plus d'informations.
Les groupes de sécurité inbound sont censés être ceux que vous appliqueriez aux services exposés au public, par exemple, un équilibre de charge. Les groupes de sécurité internes inbound sont censés être attribués aux instances derrière un équilibrage de charge ou à l'intérieur du VPC. Les groupes de sécurité outbound sont les ports que les services peuvent appeler depuis l'intérieur du réseau.
Sorties :
- ec2_group_inbound_sg : L'objet de groupe AWS EC2 créé à la suite de l'exécution du
ec2_group_module
avec les variables "inbound" fournies ; - ec2_group_internal_inbound_sg : L'objet de groupe AWS EC2 créé à la suite de l'exécution du
ec2_group_module
avec les variables "inbound interne" fournies ; - ec2_group_outbound_sg : L'objet de groupe AWS EC2 créé à la suite de l'exécution du
ec2_group_module
avec les variables "outbound" fournies.
Le rôle traite les groupes de sécurité dans l'ordre suivant :
- inbound ;
- inbound interne ;
- outbound.
Cela signifie que vous pouvez faire référence aux groupes de sécurité qui seront créés dans la liste "inbound" dans la liste "inbound interne", ce qui est particulièrement utile lorsque vous souhaitez acheminer le trafic uniquement entre les groupes inbound et inbound internes, par exemple, comme un équilibre de charge et un serveur web.
Dépendances
Aucune dépendance à d'autres rôles, mais un VPC doit déjà exister ou être créé avant d'appliquer ce rôle.
Exemple de Playbook
Avant d'utiliser ce rôle, vous devrez l'installer, la façon la plus simple de le faire est : ansible-galaxy install daniel-rhoades.aws-security-group-role
.
Le playbook d'exemple ci-dessous garantit qu'un groupe de sécurité EC2 est provisionné dans AWS comme spécifié, par exemple, si un groupe correspond déjà, le rôle ne fait rien, sinon il est créé. Pour être complet, les exemples créent également un VPC dans lequel résident les groupes de sécurité EC2 en utilisant le rôle : daniel-rhoades.aws-vpc
.
- name: Mon Système | Provisionner toute l'infrastructure nécessaire
hosts: localhost
connection: local
gather_facts: no
vars:
my_vpc_name: "mon_exemple_vpc"
my_vpc_region: "eu-west-1"
my_vpc_cidr: "172.40.0.0/16"
everywhere_cidr: "0.0.0.0/0"
# Sous-réseaux dans le 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"
# Permettre aux sous-réseaux d'accéder au monde extérieur
my_public_subnet_routes:
- subnets:
- "{{ my_vpc_subnets[0].cidr }}"
- "{{ my_vpc_subnets[1].cidr }}"
routes:
- dest: "{{ everywhere_cidr }}"
gw: igw
# Groupes de sécurité inbound, par exemple, services exposés au public comme un équilibre de charge
my_inbound_security_groups:
- sg_name: inbound-web
sg_description: permettre l'accès http et https (public)
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 }}"
# Autoriser l'accès SSH uniquement depuis l'intérieur du VPC
- sg_name: inbound-ssh
sg_description: permettre l'accès ssh
sg_rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: "{{ my_vpc_cidr }}"
# Groupes de sécurité internes inbound, par exemple, services qui ne doivent pas être directement accessibles
my_internal_inbound_security_groups_file: "internal-securitygroups.yml"
# Règles outbound, par exemple, quels services les serveurs web peuvent accéder par eux-mêmes
my_outbound_security_groups:
- sg_name: outbound-all
sg_description: permet le trafic sortant vers n'importe quelle adresse IP
sg_rules:
- proto: all
cidr_ip: "{{ everywhere_cidr }}"
roles:
# Provisionner le réseau
- {
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 }}"
}
# Provisionner les groupes de sécurité
- {
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 }}"
}
L'exemple internal-securitygroups.yml
ressemble à ceci :
ec2_group_internal_inbound_sg:
- sg_name: inbound-web-internal
sg_description: permettre l'accès http et https (uniquement depuis l'équilibre de charge)
sg_rules:
- proto: tcp
from_port: 80
to_port: 80
group_id: "{{ ec2_group_inbound_sg.results[0].group_id }}"
Pour supprimer les groupes :
- name: Mon Système | Supprimer toute l'infrastructure nécessaire
hosts: localhost
connection: local
gather_facts: no
vars:
my_vpc_name: "mon_exemple_vpc"
my_vpc_region: "eu-west-1"
my_vpc_cidr: "172.40.0.0/16"
everywhere_cidr: "0.0.0.0/0"
# Sous-réseaux dans le 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"
# Autoriser les sous-réseaux à accéder au monde extérieur
my_public_subnet_routes:
- subnets:
- "{{ my_vpc_subnets[0].cidr }}"
- "{{ my_vpc_subnets[1].cidr }}"
routes:
- dest: "{{ everywhere_cidr }}"
gw: igw
# Groupes de sécurité inbound, par exemple, services exposés au public comme un équilibre de charge
my_inbound_security_groups:
- sg_name: inbound-web
sg_description: permettre l'accès http et https (public)
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 }}"
- sg_name: inbound-ssh
sg_description: permettre l'accès ssh
sg_rules:
- proto: tcp
from_port: 22
to_port: 22
cidr_ip: "{{ my_vpc_cidr }}"
my_internal_inbound_security_groups_file: "internal-securitygroups.yml"
# Règles outbound
my_outbound_security_groups:
- sg_name: outbound-all
sg_description: permet le trafic sortant vers n'importe quelle adresse IP
sg_rules:
- proto: all
cidr_ip: "{{ everywhere_cidr }}"
roles:
# Provisionner le réseau
- {
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 }}"
}
# Supprimer les groupes de sécurité
- {
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"
}
Licence
MIT
Informations sur l'auteur
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