はじめに
AWSの勉強中に「セキュリティグループはステートフル」という説明があったが、
このステートフルとは何なのだろうか。
ステートフルの意味は「保持する」という意味で、
セキュリティグループでは行きの通信を設定すると、戻りの通信も自動的に許可される。
ここではEC2を例に挙げるが、EC2への通信(インバウンド)を設定すれば、
EC2からの通信(アウトバウンド)を設定しなくてもいいのではないかと考えていたが、
ここは大きな間違い。
EC2から通信をしに行く場合はアウトバウンドの設定が必要になる。
試してみる
概要図
サブネット内に2台のEC2を用意しAサーバからBサーバへ通信を行う。
アウトバウンドに何も設定しない場合
今回はpingで試すがping送信元Aサーバのアウトバウンドは何も設定していない状態で、
ping送信先Bサーバのインバウンドにはping送信元セキュリティグループからの通信を、
すべて許可する設定を行っている。
ping送信元(Aサーバ)
ping送信先(Bサーバ)
その状態でAサーバからBサーバへpingを実行すると以下のように通信が通らない状態となる。
[ec2-user@ip-10-100-192-35 ~]$ ping 10.100.192.14
PING 10.100.192.14 (10.100.192.14) 56(84) bytes of data.
^C
--- 10.100.192.14 ping statistics ---
16 packets transmitted, 0 received, 100% packet loss, time 15342ms
[ec2-user@ip-10-100-192-35 ~]$
アウトバウンドにICMPの許可設定を行った場合
今度はAサーバのアウトバウンドにBサーバのセキュリティグループへ、
ICMPの通信を許可する設定を行う。
その状態でAサーバからBサーバへpingを実行すると以下のように、
先ほどと違い通信が通ることを確認できた。
[ec2-user@ip-10-100-192-35 ~]$ ping 10.100.192.14
PING 10.100.192.14 (10.100.192.14) 56(84) bytes of data.
64 bytes from 10.100.192.14: icmp_seq=1 ttl=255 time=0.855 ms
64 bytes from 10.100.192.14: icmp_seq=2 ttl=255 time=0.537 ms
64 bytes from 10.100.192.14: icmp_seq=3 ttl=255 time=0.417 ms
64 bytes from 10.100.192.14: icmp_seq=4 ttl=255 time=0.416 ms
64 bytes from 10.100.192.14: icmp_seq=5 ttl=255 time=0.481 ms
64 bytes from 10.100.192.14: icmp_seq=6 ttl=255 time=0.427 ms
^C
--- 10.100.192.14 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5099ms
rtt min/avg/max/mdev = 0.416/0.522/0.855/0.155 ms
[ec2-user@ip-10-100-192-35 ~]$
まとめ
セキュリティグループはステートフルな「ファイアウォール」ということで、
Windowsで考えるならばアウトバウンドは送信の規則を設定しているということになるのだろうか。
デフォルトでは0.0.0.0/0が設定されていたが、業務ですべてを許可するのは中々考えづらいため、
インバウンドだけでなくアウトバウンドの設計も考える必要があるということに気づけた。