セキュリティグループ構築


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

今回、セキュリティグループを理解するために以下の項目を実施してみました。

  • AmazonLinux2で疎通確認に使用するEC2を作成

  • 作成したTargeEC2内でapacheを起動し、HelloEC2!ページの表示

  • セキュリティグループのインバウンドルールを変更して、pingとcurlコマンドでセキュリティグループで許可している時のみ通信できることの確認

  • 疎通確認用EC2のセキュリティグループのアウトバウンドルールを変更して、pingとcurlコマンドでセキュリティグループで許可している時のみ通信できることの確認

セキュリティグループとは

セキュリティグループは、関連付けられたリソースに到達するトラフィックおよびリソースから離れるトラフィックを制御します。例えば、セキュリティグループを EC2 インスタンスに関連付けると、インスタンスのインバウンドトラフィックとアウトバウンドトラフィックが制御されます。

VPC を作成すると、デフォルトのセキュリティグループが使用されます。VPC ごとに追加のセキュリティグループを作成できます。セキュリティグループは、作成された VPC 内のリソースにのみ関連付けることができます。

セキュリティグループごとに、プロトコルとポート番号に基づいてトラフィックを制御するルールを追加します。インバウンドトラフィックとアウトバウンドトラフィックには、個別のルールセットがあります。

引用 Amazon公式サイト

セキュリティグループ作成

  1. 「セキュリティグループを作成」をクリックしてセキュリティグループ名と説明に「test_target_SG」と入力

  1. インバウンドルールをクリック、「ルールを追加」を以下の通りに設定します。

HTTPの許可する設定はEC2インスタンスをWebサーバとして利用するため。SSHの許可する設定は後に行うApacheのインストールのためです。

セキュリティグループ インバウンドルール
test_target_SG SSH (0.0.0.0/0)
HTTP (0.0.0.0/0)
  1. 追加したら「ルールを保存」をクリック

後に使う、「test_linux_SG」も作成 

EC2インスタンス作成

  1. AMIの選択
    無料利用枠の対象の「Amazon Linux」を選択

  2. インスタンスタイプの選択
    「t2.micro」を選択

  3. キーペアの作成
    「新しいキーペアの作成」を選択して、キーペア名に「test_key」と入力し
    キーペア作成をクリック「test_key.pem」がダウンロードできたら完了

  4. セキュリティグループの設定
    「既存のセキュリティグループを選択」をクリック
    先ほど作成した「test_target_SG」を選択

  5. インスタンスの起動
    「インスタンスを起動」をクリック
    「test_target」というインスタンスが追加され、インスタンスの状態が「実行中」になっていればOKです。

後に使う、「test_linux」も作成

SSHで接続する

  1. Tera Termを使って接続します
    ホストに「test_target」のパブリック IPv4アドレスを入力

ユーザー名に「ec2-user」入力し、秘密鍵に先ほど作成したキーペアを選択

  1. OKを押して以下の画面が表示されていれば接続成功です。

Apacheをインストール

  1. 以下のコマンドを順番に実行
    (apacheをインストールする時は一時的にルートテーブルにインターネットゲートウェイを追加してインターネットに接続してください)
パッケージの更新
$ sudo yum update -y

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

htmlファイルの追加
$ sudo vi /var/www/html/index.html

index.html
Hello EC2!

Apacheの起動

$ sudo service httpd start
Starting httpd:                                            [  OK  ]
  1. ブラウザでパブリック IPv4アドレスにアクセス

Hello EC2!と表示されれば完了です

疎通確認の実施(成功例と失敗例)

以下の内容のセキュリティグループを設定します。

インスタンス セキュリティグループ インバウンドルール
test_target test_target_SG すべてのICMP – IPv4(0.0.0.0/0)
test_linux test_linux_SG SSH(マイIP)
  1. 「test_linux」から「test_target」への疎通確認
    「test_linux」にログインし【curl -v -m 5 telnet://10.0.3.4:80】を使って「test_target」に対する疎通確認を実施していきます。
  • -v :詳細を出力する
  • -m :タイムアウト時間を指定する
  • telnet:// :プロトコル
  • 172.31.9.163:80「test_target」 IP:ポート

結果はインバウンドルールで許可していませんのでタイムアウトになりました。
疎通失敗。

[ec2-user@ip-172-31-3-208 ~]$ curl -v -m 5 telnet://172.31.9.163:80
*   Trying 172.31.9.163:80...
* Connection timed out after 5000 milliseconds
* Closing connection 0
curl: (28) Connection timed out after 5000 milliseconds

pingも確認します。

[ec2-user@ip-172-31-3-208 ~]$ ping -c 4 172.31.9.163
PING 172.31.9.163 (172.31.9.163) 56(84) bytes of data.
64 bytes from 172.31.9.163: icmp_seq=1 ttl=255 time=0.610 ms
64 bytes from 172.31.9.163: icmp_seq=2 ttl=255 time=0.414 ms
64 bytes from 172.31.9.163: icmp_seq=3 ttl=255 time=0.497 ms
64 bytes from 172.31.9.163: icmp_seq=4 ttl=255 time=0.426 ms

こちらは許可しているので通っています。

  1. 「test_target_SG」のインバウンドルールに「test_linux」からの通信設定を追加する「test_target_SG」 のインバウンドルールに「test_linux_SG」からの80番ポート(HTTP)への通信を許可します。
対象インスタンス アタッチしたセキュリティグループ インバウンドルール
test_target test_target_SG すべてのICMP – IPv4(0.0.0.0/0)HTTP(test_linux_SG)

これで「test_linux」からの疎通が可能なはずです

  1. 「test_linux」から「test_target」への疎通確認
    「test_linux」からの疎通確認

「test_linux」から疎通確認を実施

[ec2-user@ip172-31-3-208~]$ curl -v -m 5 telnet://172.31.9.163:80
*   Trying 10.0.3.4:80...
* Connected to 10.0.3.4 (10.0.3.4) port 80 (#0)

Connectedになっているので成功です

次はアウトバウンドルールを変更してみます。

  1. 疎通確認用EC2のセキュリティグループのアウトバウンドルールを変更して、pingとcurl
    コマンドでセキュリティグループで許可している時のみ通信できることの確認  

アウトバウンドルールを削除し以下のように設定します

インスタンス セキュリティグループ アウトバウンドルール
test_linux test_linux_SG なし
  1. curlコマンドで確認してみます
[ec2-user@ip-172-31-3-208 ~]$ curl -v -m 5 telnet://172.31.9.163:80
*   Trying 172.31.9.163:80...
* Connected to 172.31.9.163 (172.31.9.163) port 80 (#0)

アウトバウンドルールがすべて許可になっていないのでタイムアウトになり疎通失敗です。

pingも確認します

[ec2-user@ip-172-31-3-208 ~]$ ping -c 4 172.31.9.163
PING 172.31.9.163 (172.31.9.163) 56(84) bytes of data.

--- 172.31.9.163 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3056ms

こちらも通信できない事を確認、疎通失敗です。

まとめ

セキュリティグループ構築ハンズオンを実施してみましたが、Tera Termにログインする際にインバウンドルールを設定しておらずログインできなかったり、すべての項目で手間取りました。セキュリティグループを作成する際はインバウンド、アウトバウンドルールを設定しっかり確認、設定していきたいと思います。

Last modified: 2024-02-07

Author