同一VPCのインターネット向けIPv4 ALBでHTTPS 443を受け、プライベートIPv4のEC2ターゲットへHTTP 8080を転送する。ヘルスチェックは別のTCPポート8081を使う。ルートとNACLは必要な通信を許可している。
ALBにはsg-alb、ターゲットにはsg-webだけを関連付け、両SGの既存の入出力ルールは空にしている。sg-albはこのALB以外へ関連付けない。ターゲットはパブリックIPを持たない。
ALB経由のアプリ通信とヘルスチェックを通し、同一VPCの他のインスタンスからターゲットへの新規アプリ接続も拒否する。
組み合わせて設定すべきルールを2つ選べ。
ターゲットの8080/8081受信元をsg-albへ限定し、ALBでは公開443受信とsg-webへの8080/8081送信を許可する。公開リスナーとターゲット・ヘルスチェックのポートを区別する。
詳細解説
ALBからのアプリ通信とヘルスチェックを許可し、別SGのクライアントからの新規接続は許可しない。
すべての到達可能なIPv4送信元を許可し、同VPCの他インスタンスからの接続も許可してしまう。プライベートIP自体は送信元制限の代わりにならない。
公開HTTPSの入口と、ターゲットの実際のアプリ・ヘルスチェックポートへの送信を両方許可する。
ターゲットのポートは8080と8081である。クライアント側の443と混同すると転送とヘルスチェックが通らない。
NACLはSGを送信元として参照できず、SGの空の受信ルールを補うこともできない。
公式資料で確認する
以下の項目を公式資料の記述と照合して確認します。
公式資料とSGの関連付け、ALBの443リスナー、ターゲット8080、ヘルスチェック8081を照合する。承認済み環境でALB経由の応答とtarget healthを確認し、別SGの同VPCクライアントからターゲット8080への新規接続は拒否されることを比較する。SGだけでなくルートとNACLも確認する。
参考にした公式資料
確認できる内容
ALB経由の要求と8081ヘルスチェックは成功し、別SGの同VPCクライアントからターゲットへの新規8080接続は拒否される。プライベートIPだからSGの0.0.0.0/0許可も安全だとは判断しない。
理解のポイント
- ALB
- Security Group参照
- 0.0.0.0/0
確認時の注意
- 確認環境: 公式AWS資料の確認。必要に応じ承認済み検証環境で設定と動作を照合する。
- AWS公式SAA-C03 Domain 1と各サービスの公式ドキュメントを確認する。
基礎のおさらい
フロントとバックのポートを分ける
公開リスナー443、アプリ8080、ヘルスチェック8081は別の接続である。ALBの送信とターゲットの受信で実際の宛先ポートを許可する。SGはステートフルなので、許可済み接続の応答を新規着信と同じ扱いにしない。
SG参照の関連付け範囲も確認する
送信元SGの参照は、そのSGが関連付いたリソースを対象にする。本問でALB以外へsg-albを付けないのは、他のリソースまで許可元へ広げないためである。複数SGを付けると許可ルールは合成されるため、ほかの広いAllowも確認する。
非公開配置と送信元制限は別である
0.0.0.0/0はインターネットだけではなくすべてのIPv4を表し、ルートのある同VPCのクライアントも含む。パブリックIPがなくてもALB以外からの直接接続はSGで制限する。NACLの許可がSGの不許可を上書きすることはない。