はじめに
以下のサンプル構成を作成して負荷分散を試した際、VPCのデフォルトセキュリティグループを使用したことで不要な混乱を招いてしまいました。セキュリティグループ(以下、SG)関連で躓くことが多いので備忘もかねて記載いたします。
・サンプル構成
NLB (Network Load Balancer)
→ ALB (Application Load Balancer)
→ EC2
実体験を踏まえ、「デフォルトのセキュリティグループは使わないようにしよう!」というのが本記事の主題になります。
※以下、サンプル構成を作った際の記事です。
【前提】
EC2のセキュリティグループでは、すべて(0.0.0.0/0)からのHTTP
アクセスが許可されている状態です。
事象発覚と調査
発覚
異変に気付いたのは記事を読んでくれた同僚からの言葉でした。
「NLB → ALBのアクセスが明示的に許可されていない状態だけど、なんでアクセスできてるの?」
確かに。。混乱したので状況を整理しながら調査してみました。
調査
- 現状整理
発覚当時のデフォルトSGは以下であり、NLB, ALBのSGとして使用していました。そのため、NLB → ALBのアクセスOK
、ALB → NLBのアクセスOK
の状態になっています。
ルール種別 | ソース | プロトコルタイプ |
---|---|---|
インバウンドルール | ローカルのグローバルIPアドレス | HTTP |
〃 | デフォルトSG(自分自身) | すべてのトラフィック |
アウトバウンドルール | 0.0.0.0/0 | すべてのトラフィック |
【気になる点!】
・デフォルトインバウンドルールを削除すると、アクセス不可になる?
・NLB, ALBのどちらかのSGを別のものへ変えると、アクセス不可になる?
※NLB, ALBのSGをそれぞれ用意し、適切なルールを付与すればアクセス可能となるのは自明ですが、ベストプラクティスの提示もかねて、以下「推奨」で解説します。
検証
仮説1. デフォルトインバウンドルールを削除すると、Webページへのアクセス不可?
-
[結果]
変わらずアクセスできています。(F5更新しても同様にアクセス可能)
IPアドレスで試しても、アクセスできています。
-
[考察]
デフォルトインバウンドルール(自身へのアクセス許可)があり、それがALB, NLBにアタッチされているため、アクセスできていると考えていましたが、そうではなさそうです。
※ちなみに、NLB, ALBのリソースマップに異常はありませんでした。
-
デフォルトインバウンドルールを削除すると、アクセス不可になる?
→できる - ALB, NLBのどちらかのSGを別のものへ変えると、アクセス不可になる?
仮説2. NLBのSGを別のものに変えると、アクセスできなくなる
※以下、仮説1. にて修正した箇所は元に戻したうえで実施します。
-
[実施]
以下、新たなSG(*1)を作成しアタッチした後、再度NLBのDNS名でアクセスしてみます。(アウトバウンドは、0.0.0.0/0
/すべて
を許可)
-
[考察]
NLBのSGを新たなもの(*1)へ変更したことにより、NLB → ALBのアクセスが許可されていない状態となりましたが、Webサイトへはアクセスできていました。もしかしたら、ALBがみていたのはクライアントIPだったのかな?(クライアントIPからのアクセスは許可している)
※両者のセキュリティルールは以下のような状態です。
-
デフォルトインバウンドルールを削除したらアクセスできなくなる?
→できる -
ALB, NLBのどちかを別のSGへ変えると、アクセスできなくなる?
→できる
推奨
ベストプラクティスとして、ALBへのアクセスは、NLBからのみ受け入れることが賢明です。以下、ALBのSGを新規作成しトライしてみます。この時、インバウンドルールのソースはNLBのSGを選択してください!
結果はもちろん、成功です!(IPアドレスでのアクセスもOK!)
まとめ
検証の結果、NLB, ALBにデフォルトSGを紐づけても、Webサイトへのアクセス自体に問題はありませんでした。しかし、混乱を招いたり、ALBへのアクセス制御を精緻にできないことから、推奨されないと実感しました。
最後に
※以下記事にて、デフォルトSGを使用し、混乱を招いてしまい申し訳ありませんでした。推奨のSG設定を実施いただければと存じます。何卒よろしくお願いいたします。