Blog

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

Mark van Holsteijn

Aktualisiert Oktober 21, 2025
2 Minuten

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.

Contact

Let’s discuss how we can support your journey.