【AWS】セキュリティグループの概要と設定確認

前回は、VPC の中にサブネットを置き、インターネットゲートウェイとルートテーブルを設定しました。今回は、VPC の中に置くサーバなどのリソースを外部からのアクセスから守るセキュリティグループを確かめます。セキュリティグループの考え方を整理したあと、Web サーバ用のセキュリティグループを1つ作ります。

この記事でわかること
  1. セキュリティグループの役割と、ステートフルなファイアウォールの動き
  2. インバウンドルールの書き方(タイプ、プロトコル、ポート範囲、ソース)
  3. アウトバウンドルールの初期値と、作成後の確認
  4. セキュリティグループとネットワーク ACL の違い

前提条件

次の記事で作った VPC(MyVPC)に、セキュリティグループを作ります。先に読んでおくと、この記事の構成がわかりやすくなります。

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

セキュリティグループは、VPC の中のリソースに適用するステートフルなファイアウォール(フィルタ)です。インターネットのユーザーが、AWS の中の Web サーバ(EC2 インスタンス)にアクセスする場合を考えます。セキュリティグループは、次の図のように Web サーバを守るファイアウォールとして働きます。

セキュリティグループ(WebSV-SG)インターネットのユーザーWeb サーバ(EC2)HTTP(TCP 80)インバウンドルールでHTTP を許可
図1 セキュリティグループの役割

セキュリティグループは、守る対象のリソース(ここでは Web サーバのインスタンス)に関連付け(アタッチ)します。ルールは IP アドレス(またはセキュリティグループ)とプロトコル、ポート番号で書き、通信の向きによってインバウンドルールとアウトバウンドルールの2種類があります。

外部からの Web アクセスを通すには、Web サーバに関連付けたセキュリティグループのインバウンドルールで、HTTP(TCP 80)を許可します。これで、外部から Web サーバへの HTTP の接続が通るようになります。

ステートフルな動き

セキュリティグループはステートフルです。インバウンドルールで許可した通信に対する応答(Web サーバからのレスポンス)は、アウトバウンドルールに関係なく、自動で通過できます。そのため、レスポンスのためにアウトバウンドルールを書く必要はありません。

ユーザーWebSV-SGWeb サーバリクエストインバウンドルールで許可レスポンス戻りの通信として自動で許可ステートフル:許可した通信の応答は、アウトバウンドルールに関係なく通過するインバウンドルールに HTTP を書くだけで、Web サーバからの応答も返せる
図2 ステートフルなので、レスポンスは自動で許可される

逆向きも同じです。インスタンスから外に出した通信が許可されていれば、その応答は、インバウンドルールに関係なくインスタンスまで戻ります。

ルールの評価のしかた

セキュリティグループに書けるのは「許可」のルールだけで、「拒否」のルールは書けません。リソースに複数のセキュリティグループを関連付けた場合は、すべてのセキュリティグループのルールがまとめられ、1つのルールの集まりとして評価されます。どれか1つのルールに合えば、その通信は許可されます。

項目セキュリティグループネットワーク ACL
適用する単位インスタンスなどのリソースサブネット
ルールの種類許可のみ許可と拒否
評価のしかたすべてのルールを見てから判断するルール番号の小さい順に見て、最初に合ったルールで決める
戻りの通信自動で許可(ステートフル)明示的に許可が必要(ステートレス)

VPC には、サブネット単位で効くネットワーク ACL というフィルタもあります。この記事ではリソースに直接効くセキュリティグループを使います。

セキュリティグループの設定

ここからは、外部から HTTP(TCP 80)と SSH(TCP 22)だけを許可するセキュリティグループを作ります。セキュリティグループは VPC のコンソールで設定します。VPC ›› セキュリティ ›› セキュリティグループ を開き、「セキュリティグループを作成」をクリックします。

基本的な詳細を入れる

セキュリティグループの名前と説明を入れ、適用する VPC を選びます。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時(2021年)の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。AWS のコンソールは画面の構成や表記がよく変わるので、今の画面とは違うことがあります。セキュリティグループや VPC の ID は省いています。

VPC コンソール(セキュリティグループを作成:基本的な詳細)画面イメージ
1セキュリティグループ名WebSV-SG
作成後に名前を編集することはできません。
2説明WebServer
3VPCMyVPC
図3 基本的な詳細(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1セキュリティグループ名WebSV-SG。名前は作成後に変えられないので、用途がわかる名前にします。
2説明WebServer。説明も作成後には変えられません。
3VPCMyVPC。セキュリティグループは、ここで選んだ VPC のリソースに関連付けて使います。

インバウンドルールを設定する

作ったばかりのセキュリティグループには、インバウンドルールが1つもありません。セキュリティグループには許可のルールしか書けないので、この状態ではインバウンドの通信はすべて通りません。通したい通信を、ルールとして1つずつ足していきます。

「ルールを追加」をクリックすると、ポート番号や送信元のアドレスを指定する行が追加されます。

VPC コンソール(インバウンドルール:ルールを追加した直後)画面イメージ
タイププロトコルポート範囲ソース
1カスタム TCP2TCP03カスタム
図4 インバウンドルールの行(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.項目設定内容
1タイプ通信の種類を選びます。HTTP や SSH のような決まったタイプを選ぶと、プロトコルとポート範囲は自動で入ります。
2プロトコル/ポート範囲タイプで決まります。カスタム TCP などのカスタムのタイプを選んだときだけ、ポート範囲を自分で入れます。
3ソース通信を許可する送信元です。次の「送信元を指定する」で説明します。

プロトコル(ポート番号)を指定する

HTTP の通信を許可するには、タイプで HTTP を選びます。プロトコルは TCP、ポート範囲は 80 が自動で入ります。

タイプは HTTP のほかにも、次のようなものを選べます。一覧にないポート番号を使いたいときは、カスタム TCP や カスタム UDP を選んでポート範囲を入れます。

分類検証時の画面で選べたタイプ
カスタムカスタム TCP、カスタム UDP、カスタム ICMP – IPv4、カスタム ICMP – IPv6、カスタムプロトコル
すべてすべての TCP、すべての UDP、すべての ICMP – IPv4、すべての ICMP – IPv6、すべてのトラフィック
よく使うサービスSSH、SMTP、DNS (UDP)、DNS (TCP)、HTTP、POP3、IMAP、LDAP、HTTPS、SMB、SMTPS、IMAPS、POP3S、NFS、RDP、WinRM-HTTP、WinRM-HTTPS など
データベースMSSQL、MYSQL/Aurora、PostgreSQL、Oracle-RDS、Redshift

送信元(ソース)を指定する

ソースは、次の4つから選びます。

VPC コンソール(インバウンドルール:ソースの選択)画面イメージ
1ソース
カスタムAnywhere-IPv4
Anywhere-IPv6
マイ IP
CIDR ブロック0.0.0.0/0
0.0.0.0/8
0.0.0.0/16
::/0
⋮セキュリティグループdefault | sg-…
⋮
図5 ソースの選択肢(実際の画面ではなく、設定項目のポイントを示したイメージです)
ソース登録される値使いどころ
カスタム入力した CIDR ブロック、またはセキュリティグループ特定のネットワークや、特定のセキュリティグループを付けたリソースからだけ許可する
Anywhere-IPv40.0.0.0/0すべての IPv4 アドレスから許可する(公開 Web サーバの HTTP など)
Anywhere-IPv6::/0すべての IPv6 アドレスから許可する
マイ IPいまコンソールを操作している PC のパブリック IPv4 アドレス作業 PC からの SSH など、自分だけに許可する

カスタムでは、検索欄に 111.111. のようにアドレスの一部を入れると、111.111.0.0/16 や 111.111.0.0/24 のような CIDR ブロックの候補が出ます。候補から選ぶか、CIDR ブロックをそのまま入れます。

カスタムでセキュリティグループを指定すると、そのセキュリティグループを関連付けたリソースが送信元になります。たとえば、DB サーバのセキュリティグループのソースに Web サーバのセキュリティグループを指定すると、Web サーバのインスタンスからだけ(プライベート IP アドレスでの通信を)許可できます。IP アドレスを書かずに済むので、インスタンスを増やしてもルールを書き換える必要がありません。

今回のインバウンドルール

今回は、すべての IPv4 アドレスからの HTTP と SSH を許可します。

VPC コンソール(インバウンドルール)画面イメージ
タイププロトコルポート範囲ソース
1HTTPTCP80Anywh… 0.0.0.0/0
2SSHTCP22Anywh… 0.0.0.0/0
図6 今回のインバウンドルール(実際の画面ではなく、設定項目のポイントを示したイメージです)
No.タイプ設定内容
1HTTPTCP 80 を、すべての IPv4 アドレス(Anywhere-IPv4、0.0.0.0/0)から許可します。
2SSHTCP 22 を、すべての IPv4 アドレスから許可します。
SSH のソースは絞る

この検証では SSH もすべての IPv4 アドレスから許可していますが、実際に使うときは、SSH(TCP 22)や RDP(TCP 3389)のソースを特定の IP アドレスや範囲に絞ります。作業 PC からだけ入れればよい場合は、ソースに「マイ IP」を選ぶのが手軽です。

アウトバウンドルールを確かめる

アウトバウンドルールには、作成時から「すべてのトラフィックを、すべての送信先(0.0.0.0/0)に許可する」ルールが1つ入っています。外向きの通信を絞りたいときは、このルールを消して、許可したい通信だけをルールにします。今回は外向きの通信は制限しないので、そのままにします。

VPC コンソール(アウトバウンドルール)画面イメージ
タイププロトコルポート範囲送信先
1すべてのトラフィックすべてすべてカスタム 0.0.0.0/0
図7 アウトバウンドルールの初期値(実際の画面ではなく、設定項目のポイントを示したイメージです)

アウトバウンドルールを全部消すと、外向きの通信は通らなくなります。ただし、インバウンドルールで許可した通信の応答は、ステートフルなので、アウトバウンドルールがなくても返せます。

作成して確かめる

設定が終わったら、画面の下の「セキュリティグループを作成」をクリックします。作成が終わると、次のようなメッセージが表示されます。

VPC コンソール(作成後)画面イメージ
1 セキュリティグループ (sg-… | WebSV-SG) が正常に作成されました
セキュリティグループ IDセキュリティグループ名VPC ID説明
2sg-…WebSV-SGvpc-…WebServer
図8 作成のメッセージとセキュリティグループの一覧(実際の画面ではなく、確認のポイントを示したイメージです)
No.表示意味
1正常に作成されました(緑)セキュリティグループができました。sg- で始まる ID が割り当てられます。
2一覧の WebSV-SG の行VPC ›› セキュリティ ›› セキュリティグループ の一覧にも追加されています。VPC ID が MyVPC のものになっているかを確かめます。
補足

セキュリティグループは、作った VPC のリソースに関連付けて使います。現在は「Security Group VPC Association」の機能で、同じリージョンのほかの VPC にセキュリティグループを関連付けることもできます。

リソースへの適用

作ったセキュリティグループは、EC2 インスタンスやロードバランサなどのリソースに関連付けて使います。EC2 インスタンスの作成時にセキュリティグループを選ぶ手順は、次の記事で確かめています。

まとめ

項目この記事の設定ポイント
名前/説明WebSV-SG/WebServer作成後に変えられない
VPCMyVPCこの VPC のリソースに関連付ける
インバウンドルールHTTP(TCP 80)と SSH(TCP 22)を 0.0.0.0/0 から許可初期値はルールなし。SSH のソースは絞る
アウトバウンドルール初期値のまま(すべてのトラフィックを許可)応答の通信はステートフルで自動で許可される

セキュリティグループは、許可のルールだけを書くステートフルなファイアウォールです。通したい通信をインバウンドルールに書けば、その応答は自動で返ります。つながらないときは、タイプ(ポート番号)とソースが合っているか、そのセキュリティグループがリソースに関連付けられているかを確かめます。

コメント