同一セキュリティグループに属するインスタンス間の通信について調べてみた
こんにちは、つくぼし(tsukuboshi0755)です!
本記事では、セキュリティグループ(以下SG)に関する一見勘違いしやすい仕様について、クイズ形式で共有してみたいと思います!
クイズ
以下のように、同一セキュリティグループに属するEC2が2台存在します。
それぞれインスタンスA、インスタンスBとします。
EC2が属するSGのルールは、以下の通りです。
- インバウンドルール:なし
- アウトバウンドルール:全ての通信を許可
この場合、インスタンスAからインスタンスBにSSH接続する事は可能でしょうか。
答え
SSH接続できません!
同一セキュリティ内のリソース同士で通信をする場合、SGのルールをきちんと定義する必要があります。
図だけを見ると同じSG内でやりとりしているように見えてしまうので、SGのルールがなくても通信できると勘違いしやすいですよね。
なお、AWS公式ドキュメントにも、同じSG内での通信の仕様についてきちんと明記されております。
同じセキュリティグループに関連付けられたインスタンスが相互に通信できるようにするには、そのためのルールを明示的に追加する必要があります。
対処方法
今回の場合、同一SGに属するインスタンス間のSSH接続を実現したい場合は、インスタンスが属するSGに対してSSHインバウンドルールを追加する必要があります。
どのパターンのSSH接続を許可したいかにより、SSHインバウンドルールに指定するべきソースが以下のようになります。
SSH接続のパターン | SSHインバウンドルールのソース |
---|---|
インスタンスA→インスタンスBのみ | インスタンスAのIPアドレス |
インスタンスA→インスタンスB、及びインスタンスB→インスタンスA | インスタンスA及びインスタンスBのIPアドレス |
同一SGに属するインスタンス全て→同一SGに属するインスタンス全て | インスタンスが属するSGのID |
最後に
同じSG内であれば、インスタンスは何もせずとも通信可能であると勘違いしやすいですよね。(私も調査前までは勘違いしてました...)
地味ですが、EC2間の通信を実現したい場面は割と遭遇すると思いますので、その場合はインバウンドルールの追加が必要であると覚えておいて損はないと思います。
以上、つくぼしでした!