Blog
So erhalten Sie die IP-Adressen eines Network Load Balancer in CloudFormation

Damit der Netzwerk-Loadbalancer einen Health Check durchführen kann, müssen Sie eine Sicherheitsgruppe mit den IP-Adressen des Load Balancers erstellen. Leider können Sie die IP-Adressen der Load Balancer nicht in CloudFormation abrufen. Dadurch sind Sie gezwungen, den Zugriff auf die gesamte VPC CIDR oder die entsprechenden Subnetz-CIDRs zu gewähren, in denen der Load Balancer eingesetzt wird. Mit diesem benutzerdefinierten CloudFormation Provider können Sie die tatsächlichen privaten IP-Adressen der Load Balancer erhalten, so dass Sie eine Sicherheitsgruppe erstellen können, um explizit den Zugriff auf einen bestimmten Load Balancer zu gewähren.
Wie erhalte ich die IP-Adressen eines Load Balancers?
Es ist ganz einfach: Sie geben eine CloudFormation-Ressource der Kategorie Custom::LBIpAddresses an, wie folgt:
LBIpAddresses:
Type: Custom::LBIpAddress
Properties:
LoadBalancerArn: !Ref NetworkLoadBalancer
ServiceToken: !Sub 'arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:binxio-cfn-lb-ip-address-provider'
Outputs:
PrivateIpAddresses:
Type: String
Value: !Ref LBIpAddresses.PrivateIpAddresses
Die IP-Adressen des Load Balancers werden als Attribut PrivateIpAddresses zurückgegeben. Es handelt sich um ein Array von IP-Adressen in /32 CIDR-Notation. Sie können diese Werte verwenden, um eine Sicherheitsgruppe wie unten gezeigt zu erstellen:
LoadBalancerHealthCheckSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
Groupcontent: !Sub 'load balancer'
VpcId: !Ref 'VPC'
SecurityGroupIngress:
- content: lb health check
IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: !Select [ 0, !GetAtt 'Ips.PrivateIpAddresses']
- content: lb health check
IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: !Select [ 1, !GetAtt 'Ips.PrivateIpAddresses']
- content: lb health check
IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: !Select [ 2, !GetAtt 'Ips.PrivateIpAddresses']
Tags:
- Key: Name
Value: !Sub 'load balancer health checks'
Vorbehalte
Diese Ressource hängt von der informellen Verbindung zwischen dem Load Balancer und der Netzwerkschnittstelle ab, die auf dem Namen des Inhalts in der Netzwerkschnittstelle basiert. Wenn AWS dies ändert, wird dieser Anbieter unterbrochen.
Installation
Um diese benutzerdefinierte Ressource zu installieren, geben Sie ein:
aws cloudformation create-stack
--capabilities CAPABILITY_IAM
--stack-name cfn-lb-ip-address-provider
--template-body file://cloudformation/cfn-lb-ip-address-provider.json
aws cloudformation wait stack-create-complete --stack-name cfn-lb-ip-address-provider
Diese CloudFormation-Vorlage verwendet unseren vorgefertigten Provider von s3://binxio-public-${AWS_REGION}/lambdas/cfn-lb-ip-address-provider-0.2.5.zip.
Demo
Um das einfache Beispiel für die benutzerdefinierte Ressource zu installieren, geben Sie ein:
VPC_ID=$(aws ec2 --output text --query 'Vpcs[?IsDefault].VpcId' describe-vpcs)
SUBNET_IDS=$(aws ec2 --output text --query 'RouteTables[?Routes[?GatewayId == null]].Associations[].SubnetId' describe-route-tables --filters Name=vpc-id,Values=$VPC_ID | tr 't' ',')
aws cloudformation create-stack --stack-name cfn-lb-ip-address-demo
--template-body file://cloudformation/demo-stack.yaml
--parameters "ParameterKey=VPC,ParameterValue=$VPC_ID"
"ParameterKey=Subnets,ParameterValue="$SUBNET_IDS""
aws cloudformation wait stack-create-complete --stack-name cfn-lb-ip-address-demo
Fazit
Mit diesem benutzerdefinierten CloudFormation Provider können Sie Sicherheitsgruppen erstellen, die es dem Network Load Balancer ermöglichen, die Gesundheitsprüfungen durchzuführen, ohne den Port für das gesamte CIDR der VPC zu öffnen. Sie können die genauen IP-Adressen dieses Load Balancers verwenden.
Verfasst von

Mark van Holsteijn
Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.
Unsere Ideen
Weitere Blogs
Contact



