Gérez les groupes de sécurité avec AWS CloudFormation - AWS CloudFormation

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gérez les groupes de sécurité avec AWS CloudFormation

Les extraits suivants montrent comment gérer les groupes de sécurité et les instances Amazon EC2 AWS CloudFormation afin de contrôler l'accès à vos ressources. AWS

Associer une instance Amazon EC2 à un groupe de sécurité

Les exemples d'extraits suivants montrent comment associer une instance Amazon EC2 à un groupe de sécurité Amazon VPC par défaut à l'aide d' AWS CloudFormation.

Associer une instance Amazon EC2 à un groupe de sécurité VPC par défaut

L'extrait suivant crée un Amazon VPC, un sous-réseau au sein du VPC et une instance Amazon EC2. Le VPC est créé à l'aide d'une ressource AWS::EC2::VPC. La plage d'adresses IP du VPC est définie dans le modèle plus large et est référencée par le paramètre MyVPCCIDRRange.

Un sous-réseau est créé au sein du VPC à l'aide d'une ressource AWS::EC2::Subnet. Le sous-réseau est associé au VPC, qui est référencé comme MyVPC.

Une instance EC2 est lancée au sein du VPC et du sous-réseau à l'aide d'une ressource. AWS::EC2::Instance Cette ressource indique l'Amazon Machine Image (AMI) à utiliser pour lancer l'instance, le sous-réseau sur lequel l'instance sera exécutée et le groupe de sécurité à associer à l'instance. La Fn::FindInMap fonction est utilisée pour récupérer des valeurs à partir du AWSRegionToAMI mappage défini dans le modèle afin de déterminer ImageId les valeurs de la AWS::EC2::Instanceressource.

L'ID du groupe de sécurité est obtenu à l'aide de la fonction Fn::GetAtt, qui extrait le groupe de sécurité par défaut de la ressource MyVPC.

L'instance est placée dans la ressource MySubnet définie dans l'extrait.

Lorsque vous créez un VPC à l'aide de AWS CloudFormation, crée AWS automatiquement des ressources par défaut au sein du VPC, y compris un groupe de sécurité par défaut. Toutefois, lorsque vous définissez un VPC dans un AWS CloudFormation modèle, il est possible que vous n'ayez pas accès aux ID de ces ressources par défaut lors de la création du modèle. Pour accéder aux ressources par défaut spécifiées dans le modèle et les utiliser, vous pouvez utiliser des fonctions intrinsèques telles que Fn::GetAtt. Cette fonction vous permet de travailler avec les ressources par défaut créées automatiquement par AWS CloudFormation.

JSON

"MyVPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": { "Ref": "MyVPCCIDRRange" }, "EnableDnsSupport": false, "EnableDnsHostnames": false, "InstanceTenancy": "default" } }, "MySubnet": { "Type": "AWS::EC2::Subnet", "Properties": { "CidrBlock": { "Ref": "MyVPCCIDRRange" }, "VpcId": { "Ref": "MyVPC" } } }, "MyInstance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Fn::FindInMap": [ "AWSRegionToAMI", { "Ref": "AWS::Region" }, "64" ] }, "SecurityGroupIds": [ { "Fn::GetAtt": [ "MyVPC", "DefaultSecurityGroup" ] } ], "SubnetId": { "Ref": "MySubnet" } } }

YAML

MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: Ref: MyVPCCIDRRange EnableDnsSupport: false EnableDnsHostnames: false InstanceTenancy: default MySubnet: Type: AWS::EC2::Subnet Properties: CidrBlock: Ref: MyVPCCIDRRange VpcId: Ref: MyVPC MyInstance: Type: AWS::EC2::Instance Properties: ImageId: Fn::FindInMap: - AWSRegionToAMI - Ref: AWS::Region - "64" SecurityGroupIds: - Fn::GetAtt: - MyVPC - DefaultSecurityGroup SubnetId: Ref: MySubnet

Créer une instance Amazon EC2 avec un volume et un groupe de sécurité attachés

L'extrait suivant crée une instance Amazon EC2 à l'aide d'AWS::EC2::Instanceune ressource, qui est lancée à partir d'une AMI désignée. L'instance est associée à un groupe de sécurité qui autorise le trafic SSH entrant sur le port 22 à partir d'une adresse IP spécifiée, à l'aide d'une AWS::EC2::SecurityGroupressource. Il crée un volume Amazon EBS de 100 Go à l'aide d'une AWS::EC2::Volumeressource. Le volume est créé dans la même zone de disponibilité que l'instance, telle que spécifiée par la fonction GetAtt, et est monté sur l'instance sur le périphérique /dev/sdh.

Pour plus d'informations sur la création d'es volumes Amazon EBS, consultez Créer un volume Amazon EBS.

JSON

"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "SecurityGroups": [ { "Ref": "InstanceSecurityGroup" } ], "ImageId": "ami-1234567890abcdef0" } }, "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "22", "ToPort": "22", "CidrIp": "192.0.2.0/24" } ] } }, "NewVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": "100", "AvailabilityZone": { "Fn::GetAtt": [ "Ec2Instance", "AvailabilityZone" ] } } }, "MountPoint": { "Type": "AWS::EC2::VolumeAttachment", "Properties": { "InstanceId": { "Ref": "Ec2Instance" }, "VolumeId": { "Ref": "NewVolume" }, "Device": "/dev/sdh" } }

YAML

Ec2Instance: Type: AWS::EC2::Instance Properties: SecurityGroups: - !Ref InstanceSecurityGroup ImageId: ami-1234567890abcdef0 InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 192.0.2.0/24 NewVolume: Type: AWS::EC2::Volume Properties: Size: 100 AvailabilityZone: !GetAtt [Ec2Instance, AvailabilityZone] MountPoint: Type: AWS::EC2::VolumeAttachment Properties: InstanceId: !Ref Ec2Instance VolumeId: !Ref NewVolume Device: /dev/sdh

Créer des groupes de sécurité avec des règles d'entrée

Les exemples d'extraits suivants montrent comment configurer des groupes de sécurité avec des règles d'entrée spécifiques à l'aide d' AWS CloudFormation.

Créer un groupe de sécurité avec des règles d'entrée pour l'accès SSH et HTTP

L'extrait suivant décrit deux règles d'entrée de groupes de sécurité utilisant une ressource. AWS::EC2::SecurityGroup La première règle d'entrée autorise l'accès SSH (port 22) à partir d'un groupe de sécurité existant nomméMyAdminSecurityGroup, qui appartient au AWS compte ayant le numéro de compte. 1111-2222-3333 La deuxième règle d'entrée autorise l'accès HTTP (port 80) à partir d'un groupe de sécurité différent nommé MySecurityGroupCreatedInCFN, créé dans le même modèle. La fonction Ref est utilisée pour référencer le nom logique du groupe de sécurité créé dans le même modèle.

Dans la première règle d'entrée, vous devez ajouter une valeur à la fois pour les propriétés SourceSecurityGroupName et SourceSecurityGroupOwnerId. Dans la deuxième règle d'entrée, MySecurityGroupCreatedInCFNTemplate fait référence à un autre groupe de sécurité créé dans le même modèle. Vérifiez que le nom logique MySecurityGroupCreatedInCFNTemplate correspond au nom logique réel de la ressource de groupe de sécurité que vous spécifiez dans le modèle plus large.

Pour plus d'informations sur les groupes de sécurité, consultez Groupes de sécurité Amazon EC2 pour les instances Linux ou Groupes de sécurité Amazon EC2 pour les instances Windows.

JSON

"SecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Allow connections from specified source security group", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "22", "ToPort": "22", "SourceSecurityGroupName": "MyAdminSecurityGroup", "SourceSecurityGroupOwnerId": "1111-2222-3333" }, { "IpProtocol": "tcp", "FromPort": "80", "ToPort": "80", "SourceSecurityGroupName": { "Ref": "MySecurityGroupCreatedInCFNTemplate" } } ] } }

YAML

SecurityGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: Allow connections from specified source security group SecurityGroupIngress: - IpProtocol: tcp FromPort: '22' ToPort: '22' SourceSecurityGroupName: MyAdminSecurityGroup SourceSecurityGroupOwnerId: '1111-2222-3333' - IpProtocol: tcp FromPort: '80' ToPort: '80' SourceSecurityGroupName: Ref: MySecurityGroupCreatedInCFNTemplate

Créer un groupe de sécurité avec des règles d'entrée pour l'accès HTTP et SSH à partir des plages d'adresses CIDR spécifiées

L'extrait suivant crée un groupe de sécurité pour une instance Amazon EC2 avec deux règles entrantes. Les règles entrantes autorisent le trafic TCP entrant sur les ports spécifiés à partir des plages d'adresses CIDR désignées. Une AWS::EC2::SecurityGroupressource est utilisée pour définir les règles. Vous devez spécifier un protocole pour chaque règle. Pour TCP, vous devez spécifier un port ou la plage de ports. Si vous ne spécifiez ni le groupe de sécurité source ni de plage d'adresses CIDR, la pile est lancée avec succès, mais la règle n'est pas appliquée au groupe de sécurité.

Pour plus d'informations sur les groupes de sécurité, consultez Groupes de sécurité Amazon EC2 pour les instances Linux ou Groupes de sécurité Amazon EC2 pour les instances Windows.

JSON

"ServerSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Allow connections from specified CIDR ranges", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": "80", "ToPort": "80", "CidrIp": "192.0.2.0/24" }, { "IpProtocol": "tcp", "FromPort": "22", "ToPort": "22", "CidrIp": "192.0.2.0/24" } ] } }

YAML

ServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow connections from specified CIDR ranges SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 192.0.2.0/24 - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 192.0.2.0/24

Créer des groupes de sécurité à référencement croisé avec des règles d'entrée

L'extrait de code suivant utilise la AWS::EC2::SecurityGroupressource pour créer deux groupes de sécurité Amazon EC2, et. SGroup1 SGroup2 Les règles d'entrée qui autorisent la communication entre les deux groupes de sécurité sont créées à l'aide de la ressource AWS::EC2::SecurityGroupIngress. SGroup1Ingressétablit une règle d'entrée SGroup1 qui autorise le trafic TCP entrant sur le port 80 en provenance du groupe de sécurité source,. SGroup2 SGroup2Ingressétablit une règle d'entrée SGroup2 qui autorise le trafic TCP entrant sur le port 80 en provenance du groupe de sécurité source,. SGroup1

JSON

"SGroup1": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "EC2 instance access" } }, "SGroup2": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "EC2 instance access" } }, "SGroup1Ingress": { "Type": "AWS::EC2::SecurityGroupIngress", "Properties": { "GroupName": { "Ref": "SGroup1" }, "IpProtocol": "tcp", "ToPort": "80", "FromPort": "80", "SourceSecurityGroupName": { "Ref": "SGroup2" } } }, "SGroup2Ingress": { "Type": "AWS::EC2::SecurityGroupIngress", "Properties": { "GroupName": { "Ref": "SGroup2" }, "IpProtocol": "tcp", "ToPort": "80", "FromPort": "80", "SourceSecurityGroupName": { "Ref": "SGroup1" } } }

YAML

SGroup1: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: EC2 Instance access SGroup2: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: EC2 Instance access SGroup1Ingress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupName: !Ref SGroup1 IpProtocol: tcp ToPort: 80 FromPort: 80 SourceSecurityGroupName: !Ref SGroup2 SGroup2Ingress: Type: AWS::EC2::SecurityGroupIngress Properties: GroupName: !Ref SGroup2 IpProtocol: tcp ToPort: 80 FromPort: 80 SourceSecurityGroupName: !Ref SGroup1

Créer un Elastic Load Balancer avec une règle d'entrée de groupe de sécurité

Le modèle suivant crée une AWS::ElasticLoadBalancing::LoadBalancerressource dans la zone de disponibilité spécifiée. La AWS::ElasticLoadBalancing::LoadBalancerressource est configurée pour écouter le trafic HTTP sur le port 80 et pour diriger les demandes vers les instances également sur le port 80. L'Elastic Load Balancer est chargé d'équilibrer la charge du trafic HTTP entrant entre les instances.

En outre, ce modèle génère une AWS::EC2::SecurityGroupressource associée à l'équilibreur de charge. Ce groupe de sécurité est créé avec une règle d'entrée unique, décrite comme ELB ingress group, qui autorise le trafic TCP entrant sur le port 80. La source de cette règle d'entrée est définie à l'aide de la fonction Fn::GetAtt de récupération des attributs de la ressource d'équilibrage de charge. SourceSecurityGroupOwnerId utilise Fn::GetAtt pour obtenir le OwnerAlias du groupe de sécurité source de l'équilibreur de charge. SourceSecurityGroupName utilise Fn::Getatt pour obtenir le GroupName du groupe de sécurité source de l'ELB.

Cette configuration garantit une communication sécurisée entre l'ELB et les instances.

Pour plus d'informations sur l'équilibrage de charge, consultez Guide de l'utilisateur Elastic Load Balancing.

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MyELB": { "Type": "AWS::ElasticLoadBalancing::LoadBalancer", "Properties": { "AvailabilityZones": [ "aa-example-1a" ], "Listeners": [ { "LoadBalancerPort": "80", "InstancePort": "80", "Protocol": "HTTP" } ] } }, "MyELBIngressGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "ELB ingress group", "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "SourceSecurityGroupOwnerId": { "Fn::GetAtt": [ "MyELB", "SourceSecurityGroup.OwnerAlias" ] }, "SourceSecurityGroupName": { "Fn::GetAtt": [ "MyELB", "SourceSecurityGroup.GroupName" ] } } ] } } } }

YAML

AWSTemplateFormatVersion: '2010-09-09' Resources: MyELB: Type: 'AWS::ElasticLoadBalancing::LoadBalancer' Properties: AvailabilityZones: - aa-example-1a Listeners: - LoadBalancerPort: '80' InstancePort: '80' Protocol: HTTP MyELBIngressGroup: Type: 'AWS::EC2::SecurityGroup' Properties: GroupDescription: ELB ingress group SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' SourceSecurityGroupOwnerId: Fn::GetAtt: - MyELB - SourceSecurityGroup.OwnerAlias SourceSecurityGroupName: Fn::GetAtt: - MyELB - SourceSecurityGroup.GroupName