2021.09.28 会社の顔「Webサイト」を守れ!AWS WAFとは? ~構築前の事前準備編~

現在のビジネスにおいて企業の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 WAF AWS が提供する ウェブアプリケーションファイアウォールで、ウェブアプリケーションの脆弱性をついた攻撃からソフト・ハードを守ることができる機能を持ったサービスのこと。
Web ACL リクエストの制限を行うルールのリストのこと。
ルール 記載されたリクエストを制限するためのルールのこと。
ご自身の目的に合わせて細かくルールの設定が可能。
リクエスト HTTPリクエストのこと。

AWS WAFの概要、特長・メリットは、こちらの記事でご紹介していますので参考にしてください。

参考記事

AWSでセキュリティを強化! 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を利用し仮想サーバを構築しておく必要があります。

ALBを利用し仮想サーバを構築した図

構築の手順

今回は、Amazon EC2(Amazon Linux 2)まで作成してあると仮定し、Webサーバを構築、ALBを作成する手順をご紹介します。
まだAmazon EC2まで作成していない方は、参考記事①・②を参照いただき、環境構築をしてください。

1. SSHクライアントソフトをインストール(Windowsのみ)

WindowsからWebサーバを構築する場合は、SSH接続を行える環境を構築する必要があります。本手順では、クライアントソフトをインストールします。
※MacからWebサーバ構築をする場合は、SSH接続ができるターミナルが用意されているため、クライアントソフトの追加インストールは不要です。

事前に収集しておく情報

SSH接続しLinuxにログインする際、下記情報が必要になります。

  • 接続先Amazon EC2のグローバルIPアドレス
  • ユーザ名(Amazon Linuxの場合デフォルトはec2-userです)
  • 秘密鍵(デフォルトでは****.pemという形式です)
  1. (1)

    Tera Termにアクセスし、ファイルのインストールを行います。

    Tera Termの日本語化プロジェクト公式サイト 新規ウィンドウで開くへアクセスし、ご自身の環境に合ったファイルを選択してください。ダウンロード後は、ファイルを実行します。

  2. (2)

    Tera Termを起動し、接続設定を行います。

    ホスト名、変更があればTCPポートの番号を変更し、「OK」をクリックしてください。

    パラメータ項目 入力事項
    ホスト グローバルIPもしくはDNS名を入力する。
    TCPポート ポート番号を変更している場合は、変更を行う。
  3. (3)

    セキュリティ警告を確認し、「続行」をクリックしてください。

    初めて接続するEC2インスタンスの場合、セキュリティ警告が表示されます。指定したホストの裏側のサーバが、本当に正しいものなのか判別するための表示です。
    AWSの場合、Elastic IP(EIP)をEC2インスタンスに付け替えることが可能です。EIPを使いまわす場合は「このホストをknown hostsリストに追加する」のチェックを外してください。

  4. (4)

    ユーザ認証画面へ遷移し、各種項目を入力・選択後、「OK」をクリックしてください。

    下記の項目を入力・選択してください。

    パラメータ項目 入力事項
    ユーザ名 アクセスするユーザ名を入力する。
    パスフレーズ デフォルトキーであれば、空欄で可。
    秘密鍵 事前に用意していた秘密鍵を選択する。
    • ユーザ認証画面へ遷移しない場合、セキュリティグループの設定が要因のケースがあります。サーバ管理者に連絡をしてください。
  5. (5)

    EC2インスタンスへSSH接続ができました。

    下記図が表示されると、EC2インスタンスへ接続が完了したことになります。

2. Webサーバを構築する

  1. (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. (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. (1)

    IAMユーザでAWSにサインインを行い、Amazon EC2 新規ウィンドウで開くを開きます。

    左ペインより「インスタンス」を選択後、Webサーバ構築時のインスタンスを選択します。
    選択したインスタンスの詳細情報が表示されています。「セキュリティ」タブを選択し、セキュリティグループのIDをクリックしてください。

  2. (2)

    セキュリティグループのインバウンドルールを確認します。

    Port range、Sourceを確認します。「80番ポート含んだアクセスが自分の環境から許可されているか」を確認してください。許可されている場合は(5)の手順まで進んでください。

  3. (3)

    セキュリティグループにインバウンドルールを追加します。

    「Edit inbound rules」をクリックしてください。

  4. (4)

    「ルールを追加」をクリックして新たなルールを作成します。

    各パラメータ項目を選択後、「ルールを保存」をクリックしセキュリティグループを更新します。

    パラメータ項目 選択事項
    タイプ 「HTTP」をタブより選択する。
    TCPプロトコルの80番ポート通信を許可する。
    ソース 「マイIP」を選択する。
    操作しているPCのグローバルIP通信のみを許可する。
    • 使用するネットワークによっては、グローバルIP値か変動する可能性があります。その場合は、ソース「Anywhere-IPv4」を選択してください。これでIPアドレス制限を解除し、どこからでもアクセスできるようになります。
  5. (5)

    ブラウザを立ち上げ、パブリックIPにアクセスしWebページが表示されていることを確認します。

    事前に作成しているEC2インスタンスより、パブリックIPアドレスを確認してください。
    http://パブリックIPにアクセスし、Webページが表示されていることを確認してください。
    下記のように表示されていたら、Webサーバが稼働しています。

    Hello world!
    • パブリックIPアドレスの確認方法は、下記手順を参考にしてください。
    パブリックIPアドレス確認手順
    • AWSマネジメントコンソール 新規ウィンドウで開くへIAMユーザでサインインを行う。
    • 「Amazon EC2」を開く。
    • 左ペインより「インスタンス」を選択する。
    • 作成済みのインスタンスを選択する。
    • パブリックIPアドレスが確認できる。

4. ALBを構築する

次に、Application Load Balancer(ALB)を構築します。ロードバランサーとは、ウェブサイトへのアクセスなど、外部からの通信によるサーバにかかる負荷を、均等に振り分けるための装置のことです。ALBは、AWSが提供するElastic Load Balancer(ELB)サービスの一種です。
ALBについて詳しく知りたい方は、下記参考記事を確認してください。

参考記事

AWSのロードバランサーとは? その役割・種類と料金について | AWS活用法

パブリックサブネットの事前準備

ALBを作成するためには、パブリックサブネットを2つ準備してください。この2つのパブリックサブネットは、別のアベイラビリティゾーン(AZ)にそれぞれ作成しておく必要があります。
下記手順を参考に作成してください。

パブリックサブネット作成手順
  • パブリックサブネットを作成していない方は、別AZに2つパブリックサブネットを作成してください。
  • 既にパブリックサブネットを1つ作成済みの方は、別AZに1つパブリックサブネットを作成してください。
  1. (1)

    ロードバランサーを作成します。

    Amazon EC2 新規ウィンドウで開くを開き、「ロードバランサー」を選択してください。「ロードバランサーの作成」をクリックします。

  2. (2)

    ロードバランサーの種類を選択します。

    Application Load Balancer の「作成」をクリックしてください。

  3. (3)

    ロードバランサーの設定を行います。

    各種パラメータを入力し、入力完了後「次の手順:セキュリティ設定の構成」をクリックしてください。

    パラメータ項目 入力・選択事項
    名前 ALBの名前を入力する。
    スキーム 「インターネット向け」を選択する。
    IPアドレスタイプ 「IPv4」を選択する。
    ロードバランサーのプロトコル 「HTTP」を選択する。
    ロードバランサーのポート 「80」番ポートを選択する。
    VPC Amazon EC2構築時のVPCを選択する。
    アベイラビリティゾーン パブリックサブネットがあるAZにチェックをいれ、タブよりパブリックサブネットを選択する。
    アドオンサービス デフォルト設定のまま使用する。
  4. (4)

    セキュリティ設定の構成は、設定する項目がないため「次の手順:セキュリティグループの設定」をクリックしてください。

  5. (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. (6)

    ルーティングの設定を行います。

    ターゲットグループの作成を行い、各パラメータ項目を入力します。入力完了後「次の手順:ターゲットの登録」をクリックしてください。

    パラメータ項目 入力・選択事項
    ターゲットグループ 「新しいターゲットグループ」を選択する。
    名前 ターゲットグループの名前を設定する。
    ターゲットの種類 「インスタンス」を選択する。
    • 今回は「EC2インスタンス」にルーティングしたいのでインスタンスを選択
    プロトコル 「HTTP」を選択する。
    • ALBからインスタンスへの通信を行うプロトコルを設定
    ポート 「80」と入力する。
    • ALBからインスタンスへの通信を行うポートを設定
    プロトコルバージョン 「HTTP1」を選択する。
    • HTTPプロトコルの場合、HTTP1のみ選択可
    プロトコル 「HTTP」を選択する。
    • ヘルスチェックを行うプロトコルを設定
    パス 「:/」と入力する。
    • ヘルスチェックを行うパスを設定
  7. (7)

    ターゲットの登録を行います。

    下段インスタンス一覧より、Webサーバに設定したインスタンスを選択してください。選択後、「登録済みに追加」をクリックします。
    「登録済みターゲット」にインスタンスが追加されていることを確認し、「次の手順:確認」をクリックしてください。

  8. (8)

    設定内容を確認し問題が無ければ、「作成」をクリックしてください。

    これで、ALBを構築することができました。

5. ALBの稼働確認をする

ALB経由でWebサーバへアクセスを行い、Webページが表示されるか確認を行います。セキュリティグループを使用した稼働確認の方法で確認を行います。

  1. (1)

    Amazon EC2 新規ウィンドウで開くを開き、左ペインより「インスタンス」を選択してください。

    「Webサーバ を構築したインスタンス」を選択し、インスタンスの詳細から「セキュリティ」タブを選択、「セキュリティグループのID」をクリックします。

  2. (2)

    セキュリティグループのインバウンドルールを確認します。

    「Port range」「Source」より、"80番ポート含んだアクセスがALBから許可されているか"を確認します。ALBのIPアドレスは、ALB作成時に選択したサブネットのCIDRの中から自動選択されます。許可されている場合は(5)の手順まで進んでください。

  3. (3)

    セキュリティグループにインバウンドルールを追加します。

    「Edit inbound rules」をクリックしてください。

  4. (4)

    「ルールを追加」をクリックして新たなルールを作成します。

    各パラメータ項目を選択し、選択完了後「ルールを保存」をクリックしてセキュリティグループを更新します。

    パラメータ項目 選択事項
    タイプ 「HTTP」を選択する。
    • TCPプロトコルの80番ポートの通信を許可するため。
    ソース 「カスタム」を選択し、「ALBのセキュリティグループ」を選択する。
  5. (5)

    ターゲットの状態を確認します。

    Amazon EC2 新規ウィンドウで開くを開き、左ペインより「ターゲットグループ」を選択してください。ALB作成時のターゲットグループを選択し、詳細よりターゲットの状態がすべて正常であることを確認します。

  6. (6)

    ALBからDNS名を確認します。

    Amazon EC2 新規ウィンドウで開くを開き、左ペインより「ロードバランサー」を選択してください。作成したALBを選択し、詳細から「DNS名」赤枠部分をクリックして、DNS名をコピーしてください。

  7. (7)

    ALBからWebサーバへアクセスを行います。

    ブラウザを立ち上げ、URL欄にコピーしたDNS名を貼り付けてください。下記のようにWebページが正常に表示されることを確認できたら、ALBの稼働確認は完了です。

    Hello world!

まとめ

今回は、AWS WAF構築前の事前準備について手順を交えながら解説をしてみました。次の記事では、実際にAWS WAFを構築し、運用方法もご紹介します。興味のある方は、是非次の記事もご確認ください。
構築や運用にお悩みの方、当記事を読んでAWS WAFに興味がある方など、是非弊社までお問い合わせ 新規ウィンドウで開くください。

関連サービス

おすすめ記事

導入のお問い合わせはこちら

AWSやAmazon WorkSpacesの導入から接続回線、運用・保守まで何でもお任せください。

お問い合わせ・資料請求