ALBのSecurityGroupにCloudFront用のManagedPrefixListを複数設定して上限にひっかかっちゃった話
上限に関するエラーメッセージが発生
こんにちわ!
DevelopersIO BASECAMP参加者の加藤です!
先ほどいつものようにCloudFormationでスタック作成に臨んだ所、
以下のようなエラ-メッセージに遭遇しました。
The maximum number of rules per security group has been reached.
記事を書き終えた今振り返ると「そりゃそうです」な私の謎のミスが原因なのですが、せっかくなので備忘録として記事にする事にしました。
先に結論から
- セキュリティグループのIngressルールの上限はデフォルトで60になっている。(2023年3月16日時点)
- CloudFront用のManagedPrefixListのエントリ数は確認してみた所45だった(同上)
- 今回のエラーは当該PrefixListを異なるIngressルールにひとつずつ=2つ設定した事で起きた(私の理解不足から発生したが通常は起きえない)
という事で、以降詳細になります。
どうしてこうなった
まずエラー発生の経緯です。
この時、作成していたリソースの中にFargateのBlue/Green Deployを行うCodeDeployが存在した為、ALBにGreen用の8080番のリスナーを追加作成しました。
そして、関連リソースのどこにポート8080を反映させるべきかを全く理解出来ていなかった私は、ALBのセキュリティグループのIngressに、愚かにも以下のように設定し当該エラーは起きました。
ALBSG:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VPC
GroupName: !Sub ${PJPrefix}-sg-alb
GroupDescription: for ALB.
Tags:
- Key: Name
Value: !Sub ${PJPrefix}-sg-alb
# Ingress
ALBSGIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
FromPort: 80
ToPort: 80
IpProtocol: tcp
SourcePrefixListId: pl-58a04531
GroupId: !GetAtt ALBSG.GroupId
ALBSGIngress8080:
Type: AWS::EC2::SecurityGroupIngress
Properties:
FromPort: 8080
ToPort: 8080
IpProtocol: tcp
SourcePrefixListId: pl-58a04531
GroupId: !GetAtt ALBSG.GroupId
※補足として現在の私の理解では、リスナー自体とタスク定義のPortMappingsには必要/上記のようなセキュリティグループは勿論、ターゲットグループのportやHealthCheckportには不要の認識です。(ここは100%の確信ではない為、認識にずれや不足がある場合是非ご指摘いただけたら幸いです)
ともあれ、上記のようにSourcePrefixListIdにCloudFront用のManagedPrefixListである「com.amazonaws.global.cloudfront.origin-facing」を設定したIngressルールを用意しており、
80番単独だった時は問題なかったのですが、
冒頭の経緯から「もう一つおまけに」と8080番用を追加した時にそれは起きました。
「訳:セキュリティグループごとのルール数が上限に達しました。」との事です。
ドキュメントを確認するとセキュリティグループ当たりのインバウンドルール、またはアウトバウンドルールのクオータ(上限数)はデフォルトで60との事です。
これを受け、コンソールに当該PrefixListを確認しに行ってみると、以下のように2023年3月16日現在エントリ数は45となっています。
つまりこれを2つ設定している訳ですからm合計90でエラーメッセージが登場するという事でした。
このあたりは以下の記事を見て状況の把握に至りました。
解決までの数歩
これを超えるルールを設定したい場合、上限緩和申請が必要との事。
「なるほど・・!上限緩和申請ですね!」となる手前で強烈な違和感がブレーキをかけました。
そもそもこんな事は起きえるか
Blue/Greenを目的に8080用のリスナーを用意した事で、CloudFrontからALBへのインバウンド8080を開ける必要性は全くない。
という当たり前のことに気がつきます。
つまりALBのセキュリティグループのIngressルールにCloudFront用のManagedPlefixListが複数つく事はないという理解に落ち着きました。
結論
先ほどALB側に追加した謎のIngressルールを削除し当該エラーとはさようならしました。
最後に
不毛な時間を過ごした虚しさが襲ってきましたが、「こんな事でもないと出会えなさそうなエラーと遭遇出来たので」と無理やり気持ちに蓋をした次第です。
まだまだ理解の足りない事が多い為日々精進いたします。
お付き合いいただき有難うございました。
Discussion