はじめに
ファイアウォールという言葉をご存じでしょうか。 「セキュリティに関わるものとは知っているけど、実際に触ったことはない」という方もいらっしゃるのではないかと思います。 しかしファイアウォールは、ネットワークのセキュリティを確立するうえで無くてはならない重要な技術です。
このようなインフラの土台部分は業務では既に構築済みであることが多く、自分で設定する機会がなかなかありませんでした。
そこで、リソース単位のファイアウォールであるSecurity Groupを実際に設定し、その挙動を確かめてみようと考えたのが、本記事を執筆したきっかけです。
目的
本記事の目的は以下の2つです。
EC2インスタンスをインターネットからアクセス可能にするための、Security Groupの設定方法を学ぶ。
Security Groupの許可ルールの有無によってping応答が変わることを確認し、ファイアウォールの効果を実感する。
概要
Security Groupとは
Security Group(以下SG)とは、AWS上のリソースに適用する仮想ファイアウォールであり、代表的な用途としてEC2インスタンスのアクセス制御が挙げられます。
SGの他にAWSネットワークのアクセス制御に用いるサービスとしてネットワークACLがありますが、こちらはサブネット単位で指定する等の用途となります。それぞれの機能の主な特徴は以下の通りです。
| 項目 | SG | ネットワークACL |
|---|---|---|
| 主な用途 | EC2インスタンス等、個々のリソースに適用 | サブネット単位で適用 |
| 制御 | 許可のみ(ホワイトリスト) | 許可・拒否どちらも設定可能 |
| 動作 | ステートフル(許可されたインバウンド通信の戻りパケットは自動で許可される) | ステートレス(インバウンド・アウトバウンド両方の設定が必要) |
具体的なユースケースとしては、サブネット全体をまず自社内IPからのアクセスに制限(ネットワークACL)し、 管理用のEC2インスタンスにはIT部門のIPアドレスからのみアクセス可能にする(SG)といった例が挙げられます。

利用するAWSサービス
EC2インスタンス
AWS上で稼働する仮想サーバーです。今回SGを適用するターゲットとして使用します。
VPC(Virtual Private Cloud)
AWS上の仮想ネットワーク空間であり、AWSアカウント毎に隔離されています。
後述のサブネットやインターネットゲートウェイ、その他様々なリソースをデプロイすることが可能で、
AWSでシステムを構成する上での基盤となります。サブネット
VPCの中をIPアドレスの範囲で区切ったもので、EC2インスタンスは必ずこのサブネット上にデプロイする必要があります。
つまり、VPCを作成してサブネットを設定しなければ、EC2インスタンスは起動できません。インターネットゲートウェイ
VPCとインターネットを接続するための出入り口の役割を果たします。
これをVPCにアタッチすることで、VPC内のリソースが外部と通信可能になります。
実装
実装の手順は以下の通りです。
- EC2インスタンスをデプロイするためにVPCを作成する。
- VPC上にサブネットを作成する。
- インターネットゲートウェイを作成し、VPCにアタッチする。
- サブネットに関連付けられたルートテーブルを編集し、インターネットゲートウェイへの経路を追加する。
- EC2インスタンスを起動し、サブネットにデプロイする。
- SGに許可ルールが無い状態でEC2インスタンスへpingを送り、アクセス拒否を確認する。
- SGに許可ルールを設定して再度pingを送り、ping応答が返るのを確認する。

VPCの作成
前述の通り、EC2インスタンスはVPC上のサブネットが無ければ起動できないため、まずはVPCを作成します。

VPCの作成画面でVPCのみを選択し、わかりやすい名前を付け、CIDRブロックを設定します。
ここでは、VPC名handson-vpc、CIDRブロック10.0.0.0/24としました。
その他の設定はデフォルトのままでVPCの作成をクリックすると、これだけでVPCが作成されます。
サブネットの作成
次に、サブネットを作成していきます。

VPCのダッシュボード画面左側のメニューからサブネットを選択し、表示されたサブネット一覧画面右上のサブネットを作成をクリックします。

まず、サブネットを作成するVPCを選択します。ここでは先ほど作成したhandson-vpcを使用します。

サブネットにもわかりやすい名前を付け、VPCのCIDRブロックの範囲内でサブネットのCIDRブロックを設定します。 ここでは、サブネット名handson-subnet、CIDRブロック10.0.0.0/28としました。
以上の設定を完了したらサブネットを作成をクリックすると、VPC上にサブネットが作成されます。
インターネットゲートウェイの作成
VPC・サブネットが作成できたので、インターネットゲートウェイを作りインターネットからの通信を可能にします。

VPCのダッシュボード画面左側のメニューからインターネットゲートウェイを選択し、表示されたインターネットゲートウェイ一覧画面右上のインターネットゲートウェイの作成をクリックします。

インターネットゲートウェイの作成自体は、名前を付けてインターネットゲートウェイの作成をクリックするだけで完了します。ここではhandson-gatewayとします。

作成が完了するとダッシュボードに戻り、このような表示がされるため、VPCへアタッチをクリックします。

先ほど作成したhandson-vpcを選択した状態で、インターネットゲートウェイのアタッチをクリックします。 これで、VPCからインターネットに接続するための準備ができました。
ルートテーブルの設定
インターネットゲートウェイを作成しましたが、このままではまだサブネットからはインターネットに到達できません。 サブネットに関連付けられたルートテーブルに、インターネットゲートウェイへの経路(ルート)を追加する必要があります。

まず、サブネットのダッシュボードを開きhandson-subnetにチェックを入れます。

すると、このようなサブネットの情報が表示されるので、ルートテーブルの項にあるrtbから始まる文字列をクリックします。

ルートテーブルのダッシュボードが開くので、再びチェックを入れたのち、アクション→ルートを編集をクリックします。

ルートを追加をクリックすると新しいルートの設定ができるので、送信先:0.0.0.0/0、ターゲット:インターネットゲートウェイとし、 インターネットゲートウェイには先ほど作成したhandson-gatewayを選択します。
最後に変更を保存をクリックすると、サブネットからインターネットゲートウェイへの経路が設定されます。これにより、サブネット内のリソースはインターネットへ到達可能となりました。
ここで設定した
0.0.0.0/0はデフォルトルートと呼ばれ、他に経路が設定されていない宛先を転送する経路となります。初期状態のルートテーブルにはVPC内の通信を許可するルート以外存在しないため、デフォルトルートのターゲットにインターネットゲートウェイを設定することで、VPC外部へ向かうトラフィックを全てインターネットへ転送するという設定を実現できます。
EC2インスタンスの起動
ここまでの設定が終わったら、次はEC2インスタンスを起動・デプロイします。
EC2のコンソール画面に移動し、インスタンスを起動をクリックします。

すると設定画面に入るので、まずはわかりやすい名前を設定します。AMIやインスタンスタイプはデフォルトで問題ありません。

その次の設定項目としてキーペアの設定がありますが、今回はキーペアなしで続行を選択します。 この選択肢には「推奨されません」と表示がありますが、今回はping応答を検証するだけであり、キーペアを使用するSSH接続は不要のためこちらの選択肢で問題ありません。


ネットワーク設定はAWS側でデフォルト値が設定されていますが、ここでは編集をクリックして設定を変更します。
先ほど作成したVPCとサブネットを割り当て、パブリックIPの自動割り当てを有効化します。

SGにはデフォルトでSSHの接続許可設定が含まれていますが、前述の通り今回はSSH接続を使用しないため一旦削除します。
以上の設定が完了したら、その他の設定はデフォルトのまま、EC2インスタンスを起動します。 この状態で起動されたEC2インスタンスには、許可ルールが一切設定されていないSGが適用されています。
許可ルールがない状態のSGは全てのインバウンド通信を拒否するため、このEC2インスタンスは現時点であらゆるインバウンド通信を受け付けません。
許可ルール設定前のping送信

EC2インスタンスを起動してダッシュボードに戻ると、割り当てられたパブリックIPアドレスを確認できます。 試しに、このIPアドレスへpingを送信します。

SGによってインバウンド通信が拒否されているため、pingはタイムアウトしてしまいました。
許可ルール設定後のping送信

pingを通すために、改めてSGの設定を行います。 EC2インスタンスのダッシュボード画面でチェックボックスにチェックを入れると詳細画面が開くので、セキュリティのタブからアタッチされているSG名をクリックします。



インバウンドのルールを編集からルールを追加をクリックし、タイプすべてのICMP - IPv4、ソースマイIPを選択し、ルールを保存します。

この状態でもう一度pingを送信すると、先ほどと違い応答が返ってくることが確認できます。SGの設定によりICMPを許可したことでpingのインバウンド通信が通り、ステートフルな性質上、戻りパケットも自動的に許可されたためです。
ハンズオン後の作業
EC2インスタンスは起動しているだけで料金が発生するため、今後も使用する予定が無い場合、ハンズオン後は削除してください。
削除でなく停止することでもEC2インスタンス自体の料金は発生しなくなりますが、デフォルトでEC2インスタンスにアタッチされているAmazon EBSの料金が引き続き発生します。
VPCやサブネット、インターネットゲートウェイについては存在するだけでは料金が発生しないため、料金面では必ずしも削除する必要はありません。ただし、今後使用予定が無く、不要なリソースを残したくない場合は削除しても構いません。
なお、EC2インスタンスがデプロイされているVPCは削除できないため、VPCを削除する場合は先にEC2インスタンスを削除してください。VPCを削除すれば、そこに付随するサブネットやインターネットゲートウェイは同時に削除されます。
考察
今回のハンズオンを通して、AWSネットワークを守る手段の一つであるSGを設定し、その効果を実感することができました。
インフラ系の業務に携わらない場合、ネットワークを1から構築したり、そこにルーティングやファイアウォールの設定を行う機会は少ないのではないかと思います。
AWSではVPCを利用することでネットワークの構築を小規模から行うことができるため、今回のハンズオンのように普段触れない技術を体験することが可能です。
実際に手を動かすことで、SGの設定方法に留まらず、インターネットゲートウェイを作っただけではインターネットには接続できず、ルーティングを設定して初めて接続可能になるというような、ネットワーク設定の見落としがちなポイントを認識することもできました。
まとめ
今回はSGを用いてアクセス制御を実施しましたが、他にも冒頭で触れたネットワークACLや、AWS WAFやAWS Network Firewall等、用途や規模に応じた複数のファイアウォールが提供されています。
インターネットが普及している現代では、それに伴ってサイバー攻撃の頻度や被害も大きくなっています。 ファイアウォールは、悪意あるアクセスからネットワークを守るための重要な仕組みです。
今回のハンズオンを通して、AWSへの理解と関心を深めていただければ幸いです。
We Are Hiring!
セキュリティが大事なのは分かるけど、なかなか学べる機会が無い…。 そんな悩みを抱えている方はいませんか?
FindConsultingでは、入社後も継続的に学べる充実した研修制度を整えています。 座学・ハンズオン形式の技術研修から、研修の中でAWS最難関資格の取得支援まで、成長をしっかりバックアップする環境があります。
「技術を学び続けたい」「仕事を通じてスキルアップしたい」と感じているエンジニアの方、ぜひ一緒に成長しませんか?
現在、FindConsultingでは学ぶ意欲のある仲間を募集しています。 転職を迷っている段階でも構いません。まずはカジュアル面談で気軽に相談してみてください!


