多分同じこと書いているエントリ多数だと思うが、自分メモ
やりたいこと
インスタンスで立ち上がっている Git サーバーに、同一ホスト名で SSH も HTTPS アクセスもできるようにしたい
ここに至る過程
CLB の時はリスナーに HTTP/S も TCP も設定できたので、単純に両方を書いて A/AAAA レコードにその CLB をエイリアスすれば良かった
しかし、NLB/ALB 世代になって、NLB は HTTP を解さず、ALB は HTTP/S 以外を受け付けなくなった
両方を1つのホスト名に割り当てることはできないので、何らか工夫する必要がある
なんでこんな事始めたかというと、大昔に作成した CLB のセキュリティポリシーが TLS 1.3 とか受け付けないことに今更に気付いたから(周回遅れにも程がある)
結論
NLB の下に ALB を置けばいいじゃない
簡単な話だった
※ ここでは SSH のポートを 10022 にしているが、当然どのポートでもいい
注意点
- ターゲットグループは HTTP と HTTPS で別々に作成する必要がある、ALB のターゲットポートが異なる為
- 通常、ALB からインスタンスの接続は HTTP で行うだろうからヘルスチェックも HTTP にすると思うが、NLB → ALB の HTTPS ポートのヘルスチェックは HTTPS に設定する必要がある
- ターゲットグループは dualstack に対応していない
- ALB のリクエスト元は NLB になるらしい。アクセス元に応じたセキュリティグループでのアクセス制御は NLB でやればよいが、X-Forwarded-For に影響するかも(未確認)