NATゲートウェイを使わずにプライベートサブネットをインターネットにつなぐ
概要
AWSを日々活用の皆様、セキュリティには苦労されていることと思います。
特に、プライベートサブネットの管理については頭を悩ませていることと思います。
私も、いろいろ悩んだ結果、↓のような工夫していたりします。
https://qiita.com/SSMU3/items/23c533066ff9456c3bd1
話を戻しますが、ご存じの通り、プライベートサブネットを作ることによるメリットデメリットは以下の通りです。
方向 | メリット | デメリット | 備考 |
---|---|---|---|
IN | インターネットからアクセスされない為セキュアである。 | インターネットからSSHやRDPで接続できない。 | |
OUT | インターネットに余計なデータを出力しない為、情報漏洩の危険が少ない。 | インターネット経由のアップデートが出来ないため、インストールやアップデートが悩ましい。 |
INに関しては、踏み台を立てる。もしくはSSH経由の接続などでカバーできますので、あまり問題になることはないかと思います。
https://qiita.com/1Kano/items/1496d58b1293ff70c5ec
ただし、OUTに関してはインターネットに出ていく為にはNatゲートウェイ/インスタンスが必要|Natゲートウェイはサブネット事に必要かつ、1つにつき月2,000円程度の費用が必要(2020年1月時点)となります。しかも、それで役に立つのはアップデートや監視くらいです。
というわけで、やり方を考えました。
このやり方なら、メリットは以下のように変わります。
方向 | メリット | デメリット | 備考 |
---|---|---|---|
IN | インターネットからアクセスされない為セキュアである。 | インターネットからSSHやRDPで接続できない。 | |
OUT | インターネットに余計なデータを出力しない為、情報漏洩の危険が少ない。 | Natゲートウェイ/インスタンスがなくてもインターネット経由のアップデータができる。必要であれば、通信制限もできる。 | ここが違う |
というわけで、わりとデメリットなく問題が解決します。
その方法とは・・・・
プライベートサブネットをインターネットGWにつなぎ、ネットワークACLで制御する。
以上です。
なんだ、それだけか、という話なんですが、そもそも要件が満たせるならインターネットゲートウェイを使わない理由はありません。
なんですが、世の中**「プライベートサブネットはインターネットゲートウェイを使わないサブネットである」**という認識が根深いようで、話すとわりと「ええー」といった反応が返ってきます。
面白いですね。
ただ、デメリットかどうかはわかりませんが、1点だけ、
インスタンスにグローバルIPを設定する必要がある
という点が問題になる場合があります。
ただそれも、ACLとセキュリティグループの2重防御で守られているので、あまり問題ではないと思います。
やり方
プライベートサブネットの所属するルートテーブルにインターネットゲートウェイを設定
ルートテーブルの設定
Before
After
ネットワークACLの設定
(1) 新しいネットワークACLを作成
(2) 作成したネットワークACLのアウトバウンドのルールを編集
単純な方法はアウトバウンドのすべてのトラフィックをPERMITにすることです。
ただ、アウトバウンドも最小限にしたい、ということであれば、以下のサイトの中で割り当てられたグローバルIPの属するレンジを許可してあげればアップデートは可能でしょう。
数が多いので、「ap-northeast」などで検索するとわかりやすくなります。
尚、EC2分だけでもいいですが、Route53なども許可してあげればヘルスチェックも可能になります。
https://qiita.com/uchidake/items/46309bf5f6919b3906c0#12-ap-northeast-1--2264752-ips-
(3) 作成したネットワークACLをサブネットに割り当て
雑感
単純にこれだけですべてが解決するわけではありませんが、セキュリティを保護しつつ、費用や工数を抑えるための一つの方法だと思えば、ありかなと思います。
必要な出口は作りつつ、ネットワークACLとセキュリティグループの2重の鍵で守る、というわけですね。
もちろん、ルートテーブル0.0.0.0/0ではなく、ネットワークACL同様に通信したい個所を限定して絞る手段もあると思います。
とはいえ、出口は作っちゃうわけなので、DBなどが置かれるサブネットにはこの方法は使わない方がいいと思います。
あくまで、アップデートなどが必要なサーバのみが対象、ということで。
画期的ではないですが、コロンブスの卵的な方法ではあると思います。