🛡️

Netowork Load BalancerでSecurityGroupがサポートされたのでCloudFormationでも確認してみた

2023/08/11に公開

Netowork Load BalancerでSecurityGroupのサポートが発表

2023年8月10日 Netowork Load BalancerでSecurityGroupのサポートが発表されました。
https://aws.amazon.com/jp/about-aws/whats-new/2023/08/network-load-balancer-supports-security-groups/

今回も発表から光の速度でUpされたクラスメソッド様の記事。
https://dev.classmethod.jp/articles/nlb-security-group/

当記事では念の為CloudFormation側の設定を試してみます。
恐らく難しい事はないのではと思います。


先に結果から

ALBと同じで以下のように紐づけたいSecurityGroupを指定するだけです。

  LoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties: 
      SecurityGroups:
        - !Ref LoadBalancerSecurityGroup
      #以下略

ドキュメント

CloudFormationのelbv2ドキュメントも以下のように記載がありました。

NLBを立ててみた経験がお試し程度、且つ変更前のドキュメントを残している訳ではない為見比べる事はできませんが、恐らく発表前まではこの項目をNLBの時に設定するとエラー文が出ていたのではと想像します。


お試しテンプレ

sample.yml

※listener,tg以下リソースは省いてます。

sample.yml
# ------------------------------------------------------------#
# Metadata
# ------------------------------------------------------------#
Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - 
        Label:
          default: Stack(CloudFormation)
        Parameters:
          - PJPrefix
          - Environment
      - 
        Label:
          default: VPC
        Parameters:
          - VPCCidrBlock
      - 
        Label:
          default: PublicSubnet
        Parameters:
          - PublicSubnet1CidrBlock
# ------------------------------------------------------------#
# Parameters
# ------------------------------------------------------------#
Parameters:
  PJPrefix:
    Type: String

  Environment:
    Type: String
    Default: prd

  VPCCidrBlock:
    Type: String
    Default: 10.1.0.0/16

  PublicSubnet1CidrBlock:
    Type: String
    Default: 10.1.0.0/24
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
Resources:
  # ------------------------------------------------------------#
  # VPC
  # ------------------------------------------------------------#
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !Ref VPCCidrBlock
      InstanceTenancy: default
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
        - Key: Name
          Value: !Sub ${PJPrefix}-${Environment}-VPC
  # ------------------------------------------------------------#
  # InternetGateway
  # ------------------------------------------------------------#
  InternetGateway:
    Type: AWS::EC2::InternetGateway
    Properties: 
      Tags:
        - Key: Name
          Value: !Sub ${PJPrefix}-${Environment}-InternetGateway
  # ------------------------------------------------------------#
  # VPCGatewayAttachment
  # ------------------------------------------------------------#
# アタッチメント
  VPCGatewayAttachment:
    Type: AWS::EC2::VPCGatewayAttachment
    Properties: 
      InternetGatewayId: !Ref InternetGateway
      VpcId: !Ref VPC
  # ------------------------------------------------------------#
  # Subnet
  # ------------------------------------------------------------#
# Public
  PublicSubnet1:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: !Ref PublicSubnet1CidrBlock
      VpcId: !Ref VPC
      AvailabilityZone: !Select [ 0, !GetAZs ]
      MapPublicIpOnLaunch: true
      Tags:
        - Key: Name
          Value: !Sub ${PJPrefix}-${Environment}-PublicSubnet1
  # ------------------------------------------------------------#
  # RouteTable
  # ------------------------------------------------------------#
# Public
  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
        - Key: Name
          Value: !Sub ${PJPrefix}-${Environment}-PublicRouteTable
  # ------------------------------------------------------------#
  # Route
  # ------------------------------------------------------------#
# Public
  PublicRoute:
    DependsOn: 
      - InternetGateway
      - VPCGatewayAttachment
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway
  # ------------------------------------------------------------#
  # SubnetRouteTableAssociation
  # ------------------------------------------------------------#
# Public
  PublicSubnet1Assoc:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet1
      RouteTableId: !Ref PublicRouteTable
  # ------------------------------------------------------------#
  # NatGateway
  # ------------------------------------------------------------#
  NATGateway1:
    Type: AWS::EC2::NatGateway
    Properties:
      AllocationId: !GetAtt EIPforNATGAteway1.AllocationId 
      SubnetId: !Ref PublicSubnet1
      Tags: 
        - Key: Name
          Value: !Sub ${PJPrefix}-${Environment}-NATGateway1
  # ------------------------------------------------------------#
  # EIP
  # ------------------------------------------------------------#
  EIPforNATGAteway1:
    Type: AWS::EC2::EIP
    Properties:
      Domain: vpc
      Tags:
        - Key: Name
          Value: !Sub ${PJPrefix}-${Environment}-EIPforNATGAteway1
  # ------------------------------------------------------------#
  # LoadBalancer
  # ------------------------------------------------------------#
  LoadBalancer:
    DependsOn: 
      - InternetGateway
      - VPCGatewayAttachment
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties: 
      Name: !Sub ${PJPrefix}-${Environment}-LoadBalancer
      Scheme: internet-facing
      Type: network
      LoadBalancerAttributes: 
        - Key: deletion_protection.enabled
          Value: false
      SecurityGroups:
        - !Ref LoadBalancerSecurityGroup
      Subnets: 
        - !Ref PublicSubnet1
      Tags: 
        - Key: Name
          Value: !Sub ${PJPrefix}-${Environment}-LoadBalancer
  # ------------------------------------------------------------#
  # SecurityGroup
  # ------------------------------------------------------------#
  LoadBalancerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      VpcId: !Ref VPC
      GroupName: !Sub ${PJPrefix}-${Environment}-SecurityGroup-LoadBalancer
      GroupDescription: for LoadBalancer
      Tags: 
        - Key: Name
          Value: !Sub ${PJPrefix}-${Environment}-SecurityGroup-LoadBalancer

# Ingress
  LoadBalancerSecurityGroupIngressfromInternet80:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      Description: Allow port 80 access from Any.
      FromPort: 80
      ToPort: 80
      IpProtocol: tcp
      CidrIp: 0.0.0.0/0
      GroupId: !GetAtt LoadBalancerSecurityGroup.GroupId

結果

無事「セキュリティ」タブで以下表示が確認出来ました。

また、以下チェックボックスはデフォルトではOnになっているようでした。

私の見落としの可能性を否定しませんが、目を皿にしてドキュメントを往復した結果、ここを明示的にoffにする為の設定は見当たりませんでした。(LoadBalancerAttributeリスト含む)


以上でした

有難うございました。

Discussion