概要
クライアントのDNSキャッシュ対策としてALBのIPを外部へ向けて固定する必要が発生しました。(ALBはBlue/Greenデプロイ対応)
ALBの前段にGlobalAccelerator(GA) or NLBを配置する事で実現可能ですが、今回のケースでは下記構成図のようにGAを配置する方法を採用しました。
GA配置後の環境で、アクセス制御に使用するセキュリティグループ(SG)の設定箇所に迷ったので、得られた知見を記載しておきます。
<構成図>
詳細
セキュリティグループを設定すべき箇所
結論としては下記の通りです。
・ALBへセキュリティグループを設定する
GAの後段に配置しているALBでSGを設定します。
GlobalAcceleratorの通信料金
アクセラレーターを使用して AWS ネットワーク経由で転送される月間のデータ量が 10,000 GB の場合、トラフィックの 60% はアプリケーションからインターネットのユーザーへのアウトバウンドトラフィックであり、残りの 40% はインターネットのユーザーから AWS リージョンのアプリケーションへのインバウンドトラフィックです。1 時間毎に、トラフィックの主要な方向である、ユーザーへのアウトバウンドトラフィックに対してのみ課金されます。したがって、1 か月に 10,000 GB ではなく 6,000 GB 分の料金がかかります。
公式のリファレンスへ上記の通り記載されており、今回のケースではリクエストがSGを通過してALBやECSのアプリケーションが応答したアウトバウンドトラフィックのみが課金の対象となります。
<公式のリファレンス>
間違っているパターン
間違っているパターンは下記の通りです。
・GlobalAcceleratorのENIにデフォルトで付与されているセキュリティグループを編集する
・GlobalAcceleratorのENIへ追加でセキュリティグループを付与する
GAのアクセラレータを作成し、ALBなどのエンドポイントを紐づけると裏でENIが作成されます。
ENIへはAWSがこっそり自動で作成した”Global Accelerator”という名称のSGが紐づけられます。
GlobalAcceleratorのENIにデフォルトで付与されているセキュリティグループを編集する
Important
Global Accelerator creates security groups that are associated with its elastic network interfaces. Although the system doesn’t prevent you from doing so, you shouldn’t edit any of the security group settings for these groups.
上記の通り、この“Global Accelerator”という名称のSGは編集すべきではありません。
編集してしまうと予期せぬ不具合を招く可能性があるようです。
<公式のリファレンス>
GlobalAcceleratorのENIへ追加でセキュリティグループを付与する
デフォルトのSGには触らず、新規SGを作成してENIへ追加する形で設定しても、そのSGは無視されます。
試しにやってみましたが、新規で作成した特定のIPのみ許可するSGは無視され、許可外のIPからのリクエストがALBへ到達しました。
あとがき
調査中にGAのENIにSGを付与可能ですよ!という記事をネット上で見かけ、余計なトラフィックをGAで遮断出来るならそうするべきだよなぁと思ってやってみましたが、実際はENIにSGを付与しても無視されたため何が正解か迷ってしまいました。(その記事が誤りでした。💦)
いくつかの構築例とGAの料金体系から、ALBのSGでIP制御する形が正解という判断に至りました。
コメント