いつも混乱するのでメモ。
やりたいこと
- ロードバランサーは特定のIPアドレス(xx.xx.xx.xx/xx)からのHTTPSアクセスのみ受け入れる。
- ロードバランサーはHTTPSアクセスを配下のインスタンスのHTTPポートに転送する。
- EC2インスタンスはロードバランサーからのHTTPアクセスのみ受け入れる。
設定
ロードバランサー
項目 | 値 |
---|---|
名前 | foo-lb |
DNS名 | foo-lb-xxxxxxxxx.ap-northeast-1.elb.amazonaws.com |
ポート構成 | 443(HTTPS) を 80(HTTP)に転送 |
ソースセキュリティグループ | sg-aaaaaaaa, sg-xxxxxxxx |
EC2インスタンス
項目 | 値 |
---|---|
名前 | foo-server |
IPv4パブリックIP | nnn.nnn.nnn.nnn |
セキュリティグループ | sg-bbbbbbbb |
セキュリティグループ
sg-aaaaaaaa
(設定なし)
sg-bbbbbbbb
方向 | プロトコル(ポート) | ソース/送信先 |
---|---|---|
インバウンド | HTTP(80) | sg-aaaaaaaa |
アウトバウンド | すべて | 0.0.0.0/0 |
sg-xxxxxxxx
方向 | プロトコル(ポート) | ソース/送信先 |
---|---|---|
インバウンド | HTTPS(443) | xx.xx.xx.xx/xx |
アウトバウンド | すべて | 0.0.0.0/0 |
補足・注意点
- sg-aaaaaaaaのインバウンド(HTTPS)にxx.xx.xx.xx/xxを入れてもいいです。ここでは他でも同様のIP許可設定を行うことを想定し、IP許可用のセキュリティグループとしてsg-xxxxxxxxを作って流用できるようにしました。
- sg-xxxxxxxxのインバウンドの設定を増やせば複数のIPアドレス帯域にも対応できます。
- 誤ってロードバランサーからsg-aaaaaaaaを外すと、EC2インスタンスに設定されているsg-bbbbbbbbのインバウンドにsg-aaaaaaaaしか無いため、ロードバランサーからEC2インスタンスへのHTTPデータ転送ができなくなります。
- sg-aaaaaaaaのインバウンドのソースにsg-xxxxxxxxを入れてもxx.xx.xx.xx/xxからのアクセスは許可されません。ソースにセキュリティグループ自体を指定した場合は、ソースがそのセキュリティグループが指定されているインスタンスになるだけだからです。
- アクセス制限しない場合はsg-aaaaaaaaのインバウンド(HTTPS)に0.0.0.0/0を入れ、、ロードバランサーのソースセキュリティグループはsg-aaaaaaaaのみにします。