🛡️
Netowork Load BalancerでSecurityGroupがサポートされたのでCloudFormationでも確認してみた
Netowork Load BalancerでSecurityGroupのサポートが発表
2023年8月10日 Netowork Load BalancerでSecurityGroupのサポートが発表されました。
今回も発表から光の速度でUpされたクラスメソッド様の記事。
当記事では念の為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