はじめに
最近、Finatextの夏季インターンに参加させていただきました。AWSを自由に触れる環境を提供していただき、最初は「AWSナニモワカラナイ」状態だった私も、セキュリティグループやIAMと喧嘩できるぐらいには理解度が向上しました。
今回は、学習していく中でセキュリティグループに関する大きな誤解があったため、備忘録として書き残しておきます。
セキュリティグループとは
セキュリティグループは、関連付けられたリソースに到達するトラフィックおよびリソースから離れるトラフィックを制御します。例えば、セキュリティグループを EC2 インスタンスに関連付けると、インスタンスのインバウンドトラフィックとアウトバウンドトラフィックが制御されます。
セキュリティグループを使用して AWS リソースへのトラフィックを制御する
要するに、セキュリティグループとは、AWS内のリソース間で通信を行う際の入出力ルールを定めるものです。ルールでは、送信先/元、ポート範囲、プロトコルを指定できます。これにより、外部からの機密データへのアクセスを遮断し、セキュリティを高めることが可能です。
送信先/元はIPアドレスだけでなく、セキュリティグループも設定することができます。
セキュリティの観点から非常に重要なものである一方、その厳格さゆえに作業を妨げられることもたびたびありました。
今回直面したのは、セキュリティグループAからセキュリティグループAへのインバウンド通信を許可するルールを設定する状況でした。
誤解について
「セキュリティグループ」という名前から、私はそのグループからのトラフィックの出入りが規定されていると考えていました。よって、同じグループ内ではわざわざルールを記載する必要はないと思っていました。しかし、実際にはこれは誤解で、「グループ」とは、同じ入出力ルールを共有するリソースの集まりを指していたのです。
この誤解を図を使って説明していきます。
セキュリティグループ | インバウンド | アウトバウンド |
---|---|---|
A | 許可しない | すべて許可 |
B | A | すべて許可 |
上記のルールの時を考えます。
グループからのトラフィックの出入りが規定されていると考えていました
しかし、この図は誤りで、正しいトラフィックは以下のようになります。
このように、同一セキュリティグループ内での通信はデフォルトでは許可されません。
では、セキュリティグループAのリソース同士で通信したい場合はどうすればよいでしょうか。
答えは自分自身からのインバウンドを許可することです。
セキュリティグループ | インバウンド | アウトバウンド |
---|---|---|
A | A | すべて許可 |
B | A | すべて許可 |
こうすることでセキュリティグループAに属するリソース同士で通信することができます。
まとめ
例え同じセキュリティグループでも、無条件にインバウンドが許されるというわけではありません。
同一セキュリティグループ内で通信したい場合は、必ず自分自身からのインバウンドを許可しましょう。
また、今回はグループ単位でのルールを考えましたが、セキュリティグループはIPアドレス単位で設定することもできます。最小権限の原則に従って必要な分だけ権限を許可するようにしましょう。