現在のビジネスにおいて企業のWebサイトは、「会社の顔」と言っても過言ではありません。そのようなWebサービスを守るセキュリティ対策のひとつとして、WAF(Web Application Firewall)があります。今回は、AWSが提供するWAFサービス「AWS WAF」を構築する際の事前準備について、手順を交えながら解説します。
- ※ なお、本記事では最新バージョン(執筆時)のAWS WAF(AWS WAF v2)を前提としており、前バージョン AWS WAF Classic(AWS WAF v1)については記事の対象外です。
目次
AWS WAFとは?
基本的な仕組み
AWS WAFは、Amazon CloudFront、Application Load Balancer(ALB)、Amazon API Gatewayなどへのアクセスを制御することができるサービスです。指定したルール (リクエスト元のIPアドレス、クエリ文字列) などに基づいてアクセスを制御することが可能です。
AWS WAFは図のような仕組みになっています。
各項目の意味は、以下のようになっています。
項目 | 意味 |
---|---|
AWS WAF | AWS が提供する ウェブアプリケーションファイアウォールで、ウェブアプリケーションの脆弱性をついた攻撃からソフト・ハードを守ることができる機能を持ったサービスのこと。 |
Web ACL | リクエストの制限を行うルールのリストのこと。 |
ルール | 記載されたリクエストを制限するためのルールのこと。 ご自身の目的に合わせて細かくルールの設定が可能。 |
リクエスト | HTTPリクエストのこと。 |
AWS WAFの概要、特長・メリットは、こちらの記事でご紹介していますので参考にしてください。
利用料金の例
AWS WAFは、3点の項目で料金が決定します。
料金決定項目 | 基本料金 |
---|---|
作成したWeb ACL数 | $5.00/月 |
作成したルール数 | $1.00/月 |
AWS WAFへのリクエスト数 | 100万リクエストごとに$0.60 |
具体的な利用料金例
今回はウェブサイト用のシステムを構築すると仮定し、下記構築図のようにAWS WAFを追加したケースで試算します。(ALBにWeb ACLを1つ紐づけ、ルールを13個作成、リクエスト数が60万リクエストの場合)
- Web ACL 1×$$.00=$5.00
- ルール 13×$1.00=$13.00
- リクエスト(100万未満は繰り上げ)1×$0.60=$0.60
合計 $18.60(¥2,046)
- ※ $1=¥110としています。
AWS WAFを構築するための事前準備とは?
AWS WAFは、ALBやCloudFrontのアクセス制御が可能です。そのため、AWS WAFを構築する前の準備として、下記の構成図のようにALBを利用し仮想サーバを構築しておく必要があります。
構築の手順
今回は、Amazon EC2(Amazon Linux 2)まで作成してあると仮定し、Webサーバを構築、ALBを作成する手順をご紹介します。
まだAmazon EC2まで作成していない方は、参考記事①・②を参照いただき、環境構築をしてください。
- ①
VPCの中にInternet gatewayを作成する手順
プロが教えるAmazon EC2立ち上げ前の事前準備 | AWS活用法 - ②
Amazon EC2を立ち上げる手順
プロが教えるAmazon EC2インスタンスを立ち上げる方法とは? | AWS活用法
1. SSHクライアントソフトをインストール(Windowsのみ)
WindowsからWebサーバを構築する場合は、SSH接続を行える環境を構築する必要があります。本手順では、クライアントソフトをインストールします。
※MacからWebサーバ構築をする場合は、SSH接続ができるターミナルが用意されているため、クライアントソフトの追加インストールは不要です。
事前に収集しておく情報
SSH接続しLinuxにログインする際、下記情報が必要になります。
- 接続先Amazon EC2のグローバルIPアドレス
- ユーザ名(Amazon Linuxの場合デフォルトはec2-userです)
- 秘密鍵(デフォルトでは****.pemという形式です)
- (1)
Tera Termにアクセスし、ファイルのインストールを行います。
Tera Termの日本語化プロジェクト公式サイト へアクセスし、ご自身の環境に合ったファイルを選択してください。ダウンロード後は、ファイルを実行します。
- (2)
Tera Termを起動し、接続設定を行います。
ホスト名、変更があればTCPポートの番号を変更し、「OK」をクリックしてください。
パラメータ項目 入力事項 ホスト グローバルIPもしくはDNS名を入力する。 TCPポート ポート番号を変更している場合は、変更を行う。 - (3)
セキュリティ警告を確認し、「続行」をクリックしてください。
初めて接続するEC2インスタンスの場合、セキュリティ警告が表示されます。指定したホストの裏側のサーバが、本当に正しいものなのか判別するための表示です。
AWSの場合、Elastic IP(EIP)をEC2インスタンスに付け替えることが可能です。EIPを使いまわす場合は「このホストをknown hostsリストに追加する」のチェックを外してください。 - (4)
ユーザ認証画面へ遷移し、各種項目を入力・選択後、「OK」をクリックしてください。
下記の項目を入力・選択してください。
パラメータ項目 入力事項 ユーザ名 アクセスするユーザ名を入力する。 パスフレーズ デフォルトキーであれば、空欄で可。 秘密鍵 事前に用意していた秘密鍵を選択する。 - ※ ユーザ認証画面へ遷移しない場合、セキュリティグループの設定が要因のケースがあります。サーバ管理者に連絡をしてください。
- (5)
EC2インスタンスへSSH接続ができました。
下記図が表示されると、EC2インスタンスへ接続が完了したことになります。
2. Webサーバを構築する
- (1)
Amazon EC2にSSH接続を行い、下記コマンドを実行します。
# Root へユーザ切替
sudo su root
# 最新状態へアップデータ
yum -y update
# Apacheのインストール
yum -y install httpd
# Apacheの起動
systemctl start httpd
# 再起動した際にApacheも自動起動するように設定
systemctl enable httpd
# Apacheの起動確認
systemctl status httpd最後のコマンド実施後、「active」と表示されていれば問題ありません。
このままでもサンプル画面を表示できますが、ALBのヘルスチェックでエラーになってしまうため、HTMLファイルを作成し公開設定を行います。
- (2)
HTMLファイルを作成し、公開設定を行います。
下記コマンドを実行してください。実行後、Webサーバが構築されます。「Hello world!」を表示するHTMLの作成とWeb上での公開が完了します。
# /var/www/htmlへ移動
cd /var/www/html
#index.htmlの作成 cat << EOF > index.html
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>test_page</title>
</head>
<body>
Hello world!
</body>
</html>
EOF
3. Webサーバの稼働確認をする
作成したWebサーバにアクセスし、Webページがきちんと表示されるか、確認を行います。
セキュリティグループ「http 80番ポートが空いているか」を確認した後、Webサーバへアクセスします。
- (1)
IAMユーザでAWSにサインインを行い、Amazon EC2 を開きます。
左ペインより「インスタンス」を選択後、Webサーバ構築時のインスタンスを選択します。
選択したインスタンスの詳細情報が表示されています。「セキュリティ」タブを選択し、セキュリティグループのIDをクリックしてください。 - (2)
セキュリティグループのインバウンドルールを確認します。
Port range、Sourceを確認します。「80番ポート含んだアクセスが自分の環境から許可されているか」を確認してください。許可されている場合は(5)の手順まで進んでください。
- (3)
セキュリティグループにインバウンドルールを追加します。
「Edit inbound rules」をクリックしてください。
- (4)
「ルールを追加」をクリックして新たなルールを作成します。
各パラメータ項目を選択後、「ルールを保存」をクリックしセキュリティグループを更新します。
パラメータ項目 選択事項 タイプ 「HTTP」をタブより選択する。
TCPプロトコルの80番ポート通信を許可する。ソース 「マイIP」を選択する。
操作しているPCのグローバルIP通信のみを許可する。- ※ 使用するネットワークによっては、グローバルIP値か変動する可能性があります。その場合は、ソース「Anywhere-IPv4」を選択してください。これでIPアドレス制限を解除し、どこからでもアクセスできるようになります。
- (5)
ブラウザを立ち上げ、パブリックIPにアクセスしWebページが表示されていることを確認します。
事前に作成しているEC2インスタンスより、パブリックIPアドレスを確認してください。
http://パブリックIPにアクセスし、Webページが表示されていることを確認してください。
下記のように表示されていたら、Webサーバが稼働しています。- ※ パブリックIPアドレスの確認方法は、下記手順を参考にしてください。
- パブリックIPアドレス確認手順
- ①
AWSマネジメントコンソール へIAMユーザでサインインを行う。
- ②
「Amazon EC2」を開く。
- ③
左ペインより「インスタンス」を選択する。
- ④
作成済みのインスタンスを選択する。
- ⑤
パブリックIPアドレスが確認できる。
- ①
4. ALBを構築する
次に、Application Load Balancer(ALB)を構築します。ロードバランサーとは、ウェブサイトへのアクセスなど、外部からの通信によるサーバにかかる負荷を、均等に振り分けるための装置のことです。ALBは、AWSが提供するElastic Load Balancer(ELB)サービスの一種です。
ALBについて詳しく知りたい方は、下記参考記事を確認してください。
パブリックサブネットの事前準備
ALBを作成するためには、パブリックサブネットを2つ準備してください。この2つのパブリックサブネットは、別のアベイラビリティゾーン(AZ)にそれぞれ作成しておく必要があります。
下記手順を参考に作成してください。
- パブリックサブネット作成手順
- ①
【参考記事】プロが教えるAmazon EC2立ち上げ前の事前準備 | 「サブネットの作成」 を実施する。この際、既存のサブネットとは別のAZを選択する。
- ②
- ※ パブリックサブネットを作成していない方は、別AZに2つパブリックサブネットを作成してください。
- ※ 既にパブリックサブネットを1つ作成済みの方は、別AZに1つパブリックサブネットを作成してください。
- ①
- (1)
- (2)
ロードバランサーの種類を選択します。
Application Load Balancer の「作成」をクリックしてください。
- (3)
ロードバランサーの設定を行います。
各種パラメータを入力し、入力完了後「次の手順:セキュリティ設定の構成」をクリックしてください。
パラメータ項目 入力・選択事項 名前 ALBの名前を入力する。 スキーム 「インターネット向け」を選択する。 IPアドレスタイプ 「IPv4」を選択する。 ロードバランサーのプロトコル 「HTTP」を選択する。 ロードバランサーのポート 「80」番ポートを選択する。 VPC Amazon EC2構築時のVPCを選択する。 アベイラビリティゾーン パブリックサブネットがあるAZにチェックをいれ、タブよりパブリックサブネットを選択する。 アドオンサービス デフォルト設定のまま使用する。 - (4)
セキュリティ設定の構成は、設定する項目がないため「次の手順:セキュリティグループの設定」をクリックしてください。
- (5)
ALBに付与するセキュリティグループの設定を行います。
各パラメータ項目を入力し、完了後「次の手順:ルーティング設定」をクリックしてください。
パラメータ項目 入力・選択事項 セキュリティグループの割り当て 「新しいセキュリティグループを作成する」を選択する。 セキュリティグループ名 ALBに付与するセキュリティグループ名を設定する。 - ※ 今回は「load-balancer-wizard-1」と入力
説明 ALBに付与するセキュリティグループの説明を記載する。 - ※ 今回は「load-balancer-wizard-1 created on 2021-08-31T15:19:33:276+09:00」と入力
タイプ 「カスタムTCP」を選択する。 - ※ 今回は公開するWebサーバのため、このように設定
プロトコル 「TCP」と入力する。 ポート範囲 「80」と入力する。 ソース 「任意の場所」を選択する。 - (6)
ルーティングの設定を行います。
ターゲットグループの作成を行い、各パラメータ項目を入力します。入力完了後「次の手順:ターゲットの登録」をクリックしてください。
パラメータ項目 入力・選択事項 ターゲットグループ 「新しいターゲットグループ」を選択する。 名前 ターゲットグループの名前を設定する。 ターゲットの種類 「インスタンス」を選択する。 - ※ 今回は「EC2インスタンス」にルーティングしたいのでインスタンスを選択
プロトコル 「HTTP」を選択する。 - ※ ALBからインスタンスへの通信を行うプロトコルを設定
ポート 「80」と入力する。 - ※ ALBからインスタンスへの通信を行うポートを設定
プロトコルバージョン 「HTTP1」を選択する。 - ※ HTTPプロトコルの場合、HTTP1のみ選択可
プロトコル 「HTTP」を選択する。 - ※ ヘルスチェックを行うプロトコルを設定
パス 「:/」と入力する。 - ※ ヘルスチェックを行うパスを設定
- (7)
ターゲットの登録を行います。
下段インスタンス一覧より、Webサーバに設定したインスタンスを選択してください。選択後、「登録済みに追加」をクリックします。
「登録済みターゲット」にインスタンスが追加されていることを確認し、「次の手順:確認」をクリックしてください。 - (8)
設定内容を確認し問題が無ければ、「作成」をクリックしてください。
これで、ALBを構築することができました。
5. ALBの稼働確認をする
ALB経由でWebサーバへアクセスを行い、Webページが表示されるか確認を行います。セキュリティグループを使用した稼働確認の方法で確認を行います。
- (1)
Amazon EC2 を開き、左ペインより「インスタンス」を選択してください。
「Webサーバ を構築したインスタンス」を選択し、インスタンスの詳細から「セキュリティ」タブを選択、「セキュリティグループのID」をクリックします。
- (2)
セキュリティグループのインバウンドルールを確認します。
「Port range」「Source」より、"80番ポート含んだアクセスがALBから許可されているか"を確認します。ALBのIPアドレスは、ALB作成時に選択したサブネットのCIDRの中から自動選択されます。許可されている場合は(5)の手順まで進んでください。
- (3)
セキュリティグループにインバウンドルールを追加します。
「Edit inbound rules」をクリックしてください。
- (4)
「ルールを追加」をクリックして新たなルールを作成します。
各パラメータ項目を選択し、選択完了後「ルールを保存」をクリックしてセキュリティグループを更新します。
パラメータ項目 選択事項 タイプ 「HTTP」を選択する。 - ※ TCPプロトコルの80番ポートの通信を許可するため。
ソース 「カスタム」を選択し、「ALBのセキュリティグループ」を選択する。 - (5)
ターゲットの状態を確認します。
Amazon EC2 を開き、左ペインより「ターゲットグループ」を選択してください。ALB作成時のターゲットグループを選択し、詳細よりターゲットの状態がすべて正常であることを確認します。
- (6)
ALBからDNS名を確認します。
Amazon EC2 を開き、左ペインより「ロードバランサー」を選択してください。作成したALBを選択し、詳細から「DNS名」赤枠部分をクリックして、DNS名をコピーしてください。
- (7)
ALBからWebサーバへアクセスを行います。
ブラウザを立ち上げ、URL欄にコピーしたDNS名を貼り付けてください。下記のようにWebページが正常に表示されることを確認できたら、ALBの稼働確認は完了です。
それでは、WAFを構築しましょう
ここまで準備が出来ましたら、次はいよいよWAFの構築・運用になります。 こちらにつきましては下記の記事で詳細を掲載しております。ぜひご覧ください。
AWS活用法|会社の顔「Webサイト」を守れ!AWS WAFとは? ~構築・運用編~
まとめ
今回は、AWS WAF構築前の事前準備について手順を交えながら解説をしてみました。次の記事では、実際にAWS WAFを構築し、運用方法もご紹介します。興味のある方は、是非次の記事もご確認ください。
構築や運用にお悩みの方、当記事を読んでAWS WAFに興味がある方など、是非弊社までお問い合わせ ください。
関連サービス
おすすめ記事
-
2020.06.23
Amazon Connectで在宅勤務でも対応できる問合せ窓口を立ち上げてみた
-
2020.08.17
Datadogで実現するモニタリングとオペレーションのオートメーション化
-
2020.04.27
Amazon FSx for Windows ファイルサーバーへの移行と活用方法
-
2020.06.11
Amazon WorkSpacesとは?その特長をまとめてみた
-
2020.06.23
AWSのDevOpsサービスと当社マネージドサービスを活用したDevOpsの実装①~概念編~