2
1

セキュリティグループIDを指定してEC2同士の接続制御をする時のポート番号の指定は必要?

Last updated at Posted at 2024-07-17

こんにちは、ふくちと申します。

今回は友人からふと言われた、
「セキュリティグループIDを指定してEC2同士の接続制御をする時に、ポート番号の指定って必要なんやっけ?」
という疑問について検証してみました!

そもそもEC2の接続制御って何を使うべき?

これはセキュリティグループを用いるのがベストプラクティスです。ネットワークACLでも接続制御はできますが、ベストプラクティスはセキュリティグループの利用です。
下記の公式ドキュメントに明記されています。

image.png

ベストプラクティスに従い、セキュリティグループを用いて接続制御を行っていきます。

EC2同士で接続する際、セキュリティグループ(以下SG)をどのように設定するべき?

大きく分けて3つの手段があります。

1.通信相手となるEC2インスタンスのIPアドレスを指定する

1つ目は通信相手となるEC2インスタンスのIPアドレスを指定する方法です。
わかりやすくオーソドックスである反面、通信相手のIPアドレスが変化するケースや、膨大な通信相手がいるケースに対応するのが難しいです。
image.png

2.通信先VPCやサブネットのIPアドレス・CIDRブロックを指定する

2つ目はVPCやサブネットのIPアドレスもしくはCIDRブロックを指定する方法です。
VPCピアリングをしている時などに使えそうです。
また、1つ以上のCIDRブロックのセットから成る、プレフィックスリストを用いることもできます。
image.png

3.通信相手となるEC2インスタンスのセキュリティグループIDを指定する

そして3つ目は通信相手のSGを指定する方法です。
SGの設定において、別のSGを指定できる、という形になります。
複数のEC2インスタンスに同一SGをアタッチしていた場合、そのSGを指定するだけで該当するすべてのEC2と通信することができるようになります。1.と比べると、設定の手間が大きく減らせます。
また、同じSGがアタッチされたEC2を後から増やしたとしても、そのEC2にはすぐさま通信可能になります。すなわち、運用の手間が大きく省けるということです。
以上より、通信相手のSGを指定することで、設定・運用の手間を大きく無くすことができます。
今回はこの3.を用いて接続制御した際のお話です。
image.png

検証してみた!

疑問に基づき、大きく2パターンで検証します。
①ポートを全開放した状態での接続制御パターン
②ポートを指定した状態での接続制御パターン
※どちらも同一VPC内での通信を想定しています。VPCピアリングでの検証は下記の記事をご参照ください。

1.VPCを作成する

今回はプライベートサブネットのEC2インスタンスから、プライベートサブネットのEC2インスタンスへ接続を試みます。
image.png

2.セキュリティグループ(以下SG)を作成する

ここでは、接続元SGのアウトバウンドルールを0.0.0.0/0にしておきます。
image.png

一方で接続先SGのインバウンドルールを無しにしておきます(アウトバウンドルールはデフォルトのまま)。
image.png

3.EC2を2つ作成し、それぞれに先ほど作成したSGをアタッチする

接続元EC2を作成する。
image.png

続いて接続先EC2を作成する。
image.png

※接続先EC2に、Apacheをインストールしておきます。下記のようにコマンドを実行します。

パッケージを最新に更新する
sudo yum update -y

Apacheのインストール
sudo yum install httpd -y

Apacheの起動
sudo systemctl start httpd.service

Apacheが起動されていることを確認
sudo systemctl status httpd.service

image.png
image.png

4.接続元EC2から接続先EC2にアクセスができないことを確認する。

接続元EC2から、接続先EC2のプライベートIPアドレス宛にcurlコマンドを投げます。
しかし、現在は接続先EC2のインバウンドルールが存在しないため、一切のアクセスが許可されていません。したがって、接続元EC2から発信したcurlコマンドは、接続先EC2に届かず、返ってくることもありません。
また、pingコマンドを投げても届きません。
現在は一切接続できない状況だとわかります。
image.png

5.接続先SGのインバウンドルールに、接続元SGを指定する

接続元SGからのhttp通信を許可し、ソースに接続元SGを指定します。この時、httpのポート80を指定します。
また、pingはICMPプロトコルを使用するので、接続元SGからのICMP通信も許可しておきます。この時、ポート範囲を「すべて」としています。
image.png

6.接続元EC2から接続先EC2にアクセスできることを確認する。

再び接続元EC2から、接続先EC2のプライベートIPアドレス宛にcurlコマンドとpingコマンドを投げます。
すると今度は応答が確認され、無事EC2インスタンス同士の接続が確認できました!
また、この検証によって、ポート番号の指定があってもなくても問題ないことも確認できました!
image.png

結論

通信相手のセキュリティグループIDを指定してEC2同士の通信制御をする場合、ポート番号の指定はあってもなくても大丈夫!

どなたかのお役に立てば幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1