【小ネタ】複数のセキュリティグループを付与したENIからの通信を許可するとき、受信側のセキュリティグループは送信側のENIに付与したセキュリティグループを全て許可する必要がありますか?
こんにちはAWS事業本部コンサルティング部のこーへいです。
検証内容
※この記事においてENI(Elastic Network Interface)は、EC2インスタンスにアタッチされているものを前提に記載します。
たとえば上図のように複数のSGがアタッチされているEC2-aがあるとします。
一般的に、EC2-aからEC2-bに通信を送るためにはEC2-bにアタッチしているSGのインバウンドルールにて、EC2-aにアタッチされているSGからの通信を許可するように設定することが多いです。
しかしEC2-aに複数のSGがアタッチされている場合、EC2-b側のインバウンドルールにて全てのSGを許可する必要があるのか、それともいずれか1つのSGを許可するだけで良いのか意外と分からなかったので検証してみました。
結論
送信側にアタッチされているSGのいずれか1つのみ許可すれば良く、全てのSGを許可する必要はなかったです。
各種SGの設定
EC2-aにはSG「sg1-for-EC2-a」「sg2-for-EC2-a」の2種類のSGをアタッチしており、EC2-bにはSG「sg1-for-EC2-b」のSGをアタッチしました
- 「sg1-for-EC2-a」
# ルールの種類 タイプ(ポート) ソース 1 インバウンド なし なし 2 アウトバウンド 全てのトラフィック(全て) 0.0.0.0/0 -
「sg2-for-EC2-a」
# ルールの種類 タイプ(ポート) ソース 1 インバウンド なし なし 2 アウトバウンド 全てのトラフィック(全て) 0.0.0.0/0 -
「sg1-for-EC2-b」
# ルールの種類 タイプ(ポート) ソース 1 インバウンド ICMP(全て) sg1-for-EC2-a 2 アウトバウンド 全てのトラフィック(全て) 0.0.0.0/0
結果
上記のように「sg1-for-EC2-b」のインバウンドルールにてEC2-aにアタッチされているSGのうち片方のみ(sg1-for-EC2-a)許可する設定で、EC2-aからEC2-bに向けてpingを叩いたところ下記の通り問題なく通信が通りました。
念の為、以下のように許可するSGの全ての組み合わせでも確認しましたが、いずれの場合でも通信が通ったので許可するSGはいずれか1つのみで良さそうです!
# | 「sg1-for-EC2-b」のインバウンドルールにて通信許可するSG | 結果 |
---|---|---|
1 | sg1-for-EC2-a のみ | OK |
2 | sg2-for-EC2-a のみ | OK |
3 | sg1-for-EC2-a sg2-for-EC2-a |
OK |