Verwalten Sie Sicherheitsgruppen mit CloudFormation - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwalten Sie Sicherheitsgruppen mit CloudFormation

Die folgenden Schnipsel zeigen, wie Sie mit CloudFormation Sicherheitsgruppen und Amazon EC2-Instances verwalten, um den Zugriff auf Ihre AWS-Ressourcen zu kontrollieren.

Verknüpfen einer Amazon-EC2-Instance mit einer Sicherheitsgruppe

Die folgenden Beispielschnipsel zeigen, wie Sie eine Amazon EC2-Instance mit Hilfe von CloudFormation einer Standard-Amazon VPC-Sicherheitsgruppe zuordnen können.

Verknüpfen einer Amazon-EC2-Instance mit einer standardmäßigen VPC-Sicherheitsgruppe

Mit dem folgenden Ausschnitt wird eine Amazon-VPC, ein Subnetz in der VPC und eine Amazon-EC2-Instance erstellt. Die VPC wird mithilfe einer AWS::EC2::VPC-Ressource erstellt. Der IP-Adressbereich für die VPC wird in der größeren Vorlage definiert und durch den Parameter MyVPCCIDRRange referenziert.

Ein Subnetz wird in der VPC mithilfe einer AWS::EC2:: Subnet-Ressource erstellt. Das Subnetz wird mit der VPC verknüpft, die als MyVPC referenziert wird.

Eine EC2-Instance wird in der VPC und im Subnetz mithilfe einer AWS::EC2::Instance-Ressource gestartet. Diese Ressource gibt das Amazon Machine Image (AMI) an, das zum Starten der Instance verwendet werden soll, das Subnetz, in dem die Instance ausgeführt wird, und die mit der Instance zu verknüpfende Sicherheitsgruppe. Der ImageId verwendet einen Systems Manager-Parameter, um dynamisch das neueste Amazon Linux 2 AMI abzurufen.

Die ID der Sicherheitsgruppe wird mit der Funktion Fn::GetAtt abgerufen, die die Standardsicherheitsgruppe aus der Ressource MyVPC abruft.

Die Instance wird in der im Ausschnitt definierten Ressource MySubnet platziert.

Wenn Sie eine VPC mit CloudFormation erstellen, erstellt AWS automatisch Standardressourcen innerhalb der VPC, einschließlich einer Standard-Sicherheitsgruppe. Wenn Sie jedoch eine VPC innerhalb einer CloudFormation-Vorlage definieren, haben Sie möglicherweise keinen Zugriff auf die IDs dieser Standardressourcen, wenn Sie die Vorlage erstellen. Um auf die in der Vorlage angegebenen Standardressourcen zuzugreifen und diese zu nutzen, können Sie intrinsische Funktionen wie etwa verwenden Fn::GetAtt. Mit dieser Funktion können Sie mit den Standardressourcen arbeiten, die automatisch von CloudFormation erstellt werden.

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": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "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: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}' SecurityGroupIds: - Fn::GetAtt: - MyVPC - DefaultSecurityGroup SubnetId: Ref: MySubnet

Erstellen einer Amazon-EC2-Instance mit einem angefügten Volume und einer Sicherheitsgruppe

Mit dem folgenden Ausschnitt wird eine Amazon-EC2-Instance mithilfe einer AWS::EC2::Instance-Ressource erstellt, die über ein angegebenes AMI gestartet wird. Mithilfe einer AWS::EC2::SecurityGroup-Ressource wird die Instance mit einer Sicherheitsgruppe verknüpft, die eingehenden SSH-Verkehr an Port 22 von einer angegebenen IP-Adresse zulässt. Dabei wird mit einer AWS::EC2::Volume-Ressource ein 100 GB großes Amazon-EBS-Volume erstellt. Das Volume wird in derselben Availability Zone wie die Instance erstellt (wie in der Funktion GetAtt angegeben) und in der Instance auf dem Gerät /dev/sdh gemountet.

Weitere Informationen zum Erstellen von Amazon-EBS-Volumes finden Sie unter Erstellen eines Amazon-EBS-Volumes.

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

Erstellen von Sicherheitsgruppen mit Regeln für eingehenden Datenverkehr

Die folgenden Beispielschnipsel zeigen, wie Sie mit CloudFormation Sicherheitsgruppen mit spezifischen Ingress-Regeln konfigurieren.

Erstellen einer Sicherheitsgruppe mit Regeln für eingehenden Datenverkehr für SSH- und HTTP-Zugriff

Dieser Ausschnitt zeigt die Regeln für eingehenden Datenverkehr zweier Sicherheitsgruppen, bei denen eine AWS::EC2::SecurityGroup-Ressource verwendet wird. Die erste Regel erlaubt den SSH-Zugriff (Port 22) aus einer vorhandenen Sicherheitsgruppe mit dem Namen MyAdminSecurityGroup, die dem Konto AWS mit der Kontonummer 1111-2222-3333 gehört. Die zweite Regel für eingehenden Datenverkehr erlaubt den HTTP-Zugriff (Port 80) aus einer anderen Sicherheitsgruppe namens MySecurityGroupCreatedInCFN, die in derselben Vorlage erstellt wurde. Mithilfe der Funktion Ref wird der logische Name der Sicherheitsgruppe referenziert, die in derselben Vorlage erstellt wurde.

In der ersten Regel für eingehenden Datenverkehr müssen Sie sowohl für die Eigenschaft SourceSecurityGroupName als auch für die Eigenschaft SourceSecurityGroupOwnerId einen Wert hinzufügen. In der zweiten Regel für eingehenden Datenverkehr referenziert MySecurityGroupCreatedInCFNTemplate eine andere Sicherheitsgruppe, die in derselben Vorlage erstellt wurde. Vergewissern Sie sich, dass der logische Name MySecurityGroupCreatedInCFNTemplate mit dem tatsächlichen logischen Namen der Sicherheitsgruppe übereinstimmt, die Sie in der größeren Vorlage angeben.

Weitere Informationen über Sicherheitsgruppen finden Sie unter Amazon EC2-Sicherheitsgruppen für Ihre Amazon EC2-Instances im Amazon EC2-Benutzerhandbuch.

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

Erstellen einer Sicherheitsgruppe mit Regeln für eingehenden Datenverkehr für SSH- und HTTP-Zugriff aus angegebenen CIDR-Bereichen

Mit dem folgenden Ausschnitt wird eine Sicherheitsgruppe für eine Amazon-EC2-Instance mit zwei Regeln für eingehenden Datenverkehr erstellt. Diese Regeln erlauben eingehenden TCP-Verkehr an den angegebenen Ports aus den festgelegten CIDR-Bereichen. Die Regeln werden mithilfe einer AWS::EC2::SecurityGroup-Ressource spezifiziert. Für jede Regel müssen Sie ein Protokoll angeben. Für TCP müssen Sie einen Port oder Portbereich angeben. Wenn Sie weder eine Quellsicherheitsgruppe noch einen CIDR-Bereich angeben, wird der Stack zwar gestartet, die Regel aber nicht auf die Sicherheitsgruppe angewendet.

Weitere Informationen über Sicherheitsgruppen finden Sie unter Amazon EC2-Sicherheitsgruppen für Ihre Amazon EC2-Instances im Amazon EC2-Benutzerhandbuch.

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

Erstellen von miteinander kommunizierenden Sicherheitsgruppen mit Regeln für eingehenden Datenverkehr

Im folgenden Ausschnitt werden mithilfe der Ressource AWS::EC2::SecurityGroup zwei Amazon-EC2-Sicherheitsgruppen erstellt: SGroup1 und SGroup2. Regeln für den eingehenden Datenverkehr, die die Kommunikation zwischen den beiden Sicherheitsgruppen erlauben, werden mithilfe der Ressource AWS::EC2::SecurityGroupIngress erstellt. SGroup1Ingress erstellt eine Regel für SGroup1, die eingehenden TCP-Verkehr an Port 80 aus der Quellsicherheitsgruppe SGroup2 erlaubt. SGroup2Ingress erstellt eine Regel für SGroup2, die eingehenden TCP-Verkehr an Port 80 von der Quellsicherheitsgruppe SGroup1 erlaubt.

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

Erstellen eines Elastic Load Balancers mit einer Regel für eingehenden Datenverkehr für eine Sicherheitsgruppe

Mit der folgende Vorlage wird eine AWS::ElasticLoadBalancing::LoadBalancer-Ressource in der angegebenen Availability Zone erstellt. Die Ressource AWS::ElasticLoadBalancing::LoadBalancer ist so konfiguriert, dass sie an Port 80 auf HTTP-Verkehr wartet und Anfragen an Instances ebenfalls an Port 80 weiterleitet. Der Elastic Load Balancer übernimmt den Lastenausgleich des eingehenden HTTP-Datenverkehrs unter den Instances.

Darüber hinaus wird mit dieser Vorlage eine AWS::EC2::SecurityGroup-Ressource generiert, die mit dem Load Balancer verknüpft ist. Diese Sicherheitsgruppe wird mit einer einzigen Regel für eingehenden Datenverkehr erstellt, die als ELB ingress group bezeichnet wird. Sie erlaubt eingehenden TCP-Verkehr an Port 80. Die Quelle für diese Regel wird mithilfe der Funktion Fn::GetAtt definiert, um Attribute aus der Load-Balancer-Ressource abzurufen. SourceSecurityGroupOwnerId ruft mit Fn::GetAtt den OwnerAlias der Quellsicherheitsgruppe des Load Balancers ab. SourceSecurityGroupName ruft mit Fn::Getatt den GroupName der Quellsicherheitsgruppe des ELB ab.

Diese Konfiguration gewährleistet eine sichere Kommunikation zwischen dem ELB und den Instances.

Weitere Informationen zu Elastic Load Balancing finden Sie im Elastic Load Balancing-Entwicklerhandbuch.

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