AWS WAF + WafCharmトライアルの導入方法
概要
はじめに
- 今回は、AWS WAF + WafCharm をトライアルで導入する方法を手順にまとめました。なお、WafCharm の契約プランには、30日間まで無償で試せる"トライアル"、有償の"エントリー"、"ビジネス"、"エンタープライズ" の4種類があります。次に担当する案件の事前学習のため、WafCharm をトライアルで導入してみます!
AWS WAF とは
- WAF(Web Application Firewall)は、脆弱性を悪用した攻撃などからウェブアプリケーションを保護することが目的です。WAFは通信内容を検査し、不正なアクセスを遮断するルールセットを持ちます。
- AWS WAF は、AWSが提供するWAFのクラウドサービスです。SQLインジェクションやクロスサイトスクリプティングなど悪意のあるリクエストのブロックや、Rate-based rulesやIP & Geo-IP filtersなどカスタムルールに基づいたWebトラフィックのフィルタが可能です。
- AWS WAF は、CloudFront, ALB あるいはAPI Gateway に Web ACL を関連付けして利用します。
- AWS WAF の詳細は、AWSのBlackbelt 、WafCharmが発行するこちらのブログをご覧ください。
WafCharm とは
- WafCharm は、サイバーセキュリティクラウドが提供しているAWS WAFの運用支援サービスです。WafCharmはWAFではなく、AWS環境でAWS WAF を利用している場合に組み合わせて利用するサービスとなります。
- 本来、AWS WAFの運用はセルフサービスであり、ユーザ側での運用が必要です。しかし、WAFの防御ルール作成には専門家の知識が必要であり、かつWebアプリケーションの脆弱性などに追従したチューニングも不可欠です。AWS WAFにWafCharm を導入することによって、防御ルールのチューニングが自動化されるため、運用が楽になります。
AWS WAF + WafCharmトライアルの導入方法
前提条件
- CloudFront で提供するWebサービスに、AWS WAF、WafCharmを導入する手順を記載します。CloudFront には、事前にアクセスログ取得の設定を行います。未設定の場合は、下記記事を参考にしてください。
- AWS WAF は、CloudFront以外にALB あるいはAPI Gatewayでも使用可能です。構成に合わせて、選択してください。
AWS WAF 構築
Web ACLの作成
- AWS WAFのコンソールを開きます。
- [Creare web ACL]を選択します。
- Web ACL detailsにおいて、Web ACLのName を入力し、CloudFront distributionsを選択します。(ALB, API Gatewayの場合はRegional resourcesを選択します)
- 次に、Associated AWS resourcesにおいて、[Add AWS resources]を押します。
- Add AWS resourcesにおいて、対象のCloudFront のリソースを追加します。
- [Next]を押して、進みます。
- Add rules and rule groups は特に追加せず、[Next]を押します。「Default web ACL action for requests that don’t match any rules」は、"Allow" とします。
- Set rule priorityは特に追加せず、[Next]を押します。
- Configure metricsは特に追加せず、[Next]を押します。
- Review and create web ACLにおいて、設定に問題がなければ、[Create web ACL]を押します。
- 下記画面の通り、Web ACLが作成できました。WafCharmの設定に使用するため、Web ACL ID を控えておきます。
- CloudFront のディストリビューション設定から、Web ACL と関連付けが完了したことが確認できます。なお、CloudFront側はディストリビューションのStateが一時的にIn Progress となりますので、僅かな遅延などあるかもしれません。ご注意ください。
- 念のため、Web ACL作成後、ブラウザやcurlなどを使用してWebサービスにアクセスができること(ブロックされていないこと)を確認します。
WafCharm 構築
WafCharm用のIAM作成
- WafCharm がWeb ACLを更新するためのIAM を作成します。なお、このIAM は、CloudFront のアクセスログが格納されたS3 バケットをread するための役割も兼ねます。(Web ACLと、S3 バケットへのアクセス権限を分けて、IAMを作成することも可能です)
- アクセスの種類は、「プログラムによるアクセス」のみチェックし、「AWS マネジメントコンソールへのアクセス」は不要です。今回必要なポリシーは、「AWSWAFFullAccess」と「AmazonS3ReadOnlyAccess」の2つとなります。WafCharmの設定に使用するため、作成したIAMのアクセスキーとシークレットアクセスキーを控えます。
WafCharmアカウントの作成
- 下記ウェブより、WadCharmアカウントを作成します。アイレットなどWafCharm の代理店に依頼する場合は、WadCharmアカウントの手順は不必要です。
- 上記アカウント登録フォームにアクセスします。下記画面が表示されるため、メールアドレスとパスワードでアカウント登録を実施します。
- メールアドレス確認のメールから、"確認する"のリンクをクリックします。
- アカウント情報として、「名前」、「会社名」、「住所」、「電話番号」の入力が必要です。[アカウントを登録してすすむ]を押します。
- 契約プランに、"トライアルプラン"を選択します。
- “トライアルプラン"の場合もクレジットカードの入力が必須です。なお、トライアル目的で使用する場合は、WafCharmの利用期間(30日間)に注意してください。
- ビジネスプランとエンタープライズプランの場合は、請求書払いが選択可能になります。
- 契約内容を確認して、[プラン契約に申込む]を押します。
- 下記の画面が表示され、アカウント作成とプラン契約の申し込みが完了しました。
Web ACL & Web Site の登録
- 次に、Web ACL を登録します。[Web ACL Config]を選択し、[Add] を押します。
- 先にAWSコンソール側で設定した内容を元に、必須の項目を入力します。(次に詳細を説明します)
- Web ACL ID、Web ACL Name、IAMのアクセスキー、シークレットアクセスキー(“AWSWAFFullAccess” の権限が付与されていること)を入力します。
- Rule limitは、デフォルト値で構いません。(AWS WAF Classicの場合に使用する設定)
- Web ACLをアタッチしているリソースを選択します。今回は、CloudFront を選択します。AWS regionは、ALB or API Gatewayのリソース使用時のみ選択可です。
- 必要に応じて、Blacklist、Whitelistを設定します。後からでも設定可です。
- WafCharmが対象Web ACLにルールを適用する際のデフォルトアクションを設定できます。今回は、最初に様子見のため、"COUNT" とします。
- 続いて、Web Site を登録します。対象のWeb ACL を選択、対象のWebアプリケーションのFQDN を入力します。
- CloudFront アクセスログの出力先のパスを設定します。ALB の場合は、ALB アクセスログのパスを設定します。(CloudFrontの例:s3://bucket-name.s3.amazonaws.com/cf-logs/)
- S3 バケットをread するためのIAMのアクセスキー、シークレットアクセスキーを設定します。今回はAWS WAF と同じIAM を使用しますので、チェックを付けます。(“AmazonS3ReadOnlyAccess” が付与されていること)
【アクセスログの補足】
- CloudFront, ALB のどちらを使用するかで、アクセスログのパス指定が異なります。ご注意ください。なお、API Gatewayの場合は、アクセスログに対応しておりません。(2021/1/13 現在)
CloudFrontの場合
→ S3://bucket-name.s3.amazonaws.com/optional-prefix/
ALBの場合
→ S3://bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/
API Gatewayの場合
→ アクセスログはNot Support
- Web ACLとWeb Site の登録が完了しました。
Web ACLのルール更新を確認する
- WafCharmの設定後、AWS WAF のコンソールを確認しますが、Web ACLのルールは未だ更新されていません。
※なお、CloudFront のリソースに関連付けたWeb ACLを確認する際、Regionに"US East (N. Virginia)"ではなく、"Global (CloudFront)" を選択し直します。
- WafCharm管理画面より「Account」をクリックし、ログ集計の“今月”の数値がカウントアップされたことを確認します。なお、API Gatewayの場合はアクセスログに対応していないため、ログ集計はカウントアップされません。
- 翌日、AWS WAF のコンソールにおいてリクエストが検出されており、ルールが更新されていることが確認できました。なお、ルールの更新は1日に1度になります。
- ”wafcharm-“から始まるルール名のルールが存在しています。これで、WafCharmによる運用が開始されました。
WafCharmレポート機能/通知機能について
- 今回ご紹介した構築に続き、下記記事でご紹介する追加構築を行うことで、WafCharm のレポート機能/通知機能が利用可能です。ただし、KinesisおよびLambda を利用するため、追加で料金が発生します。ご承知おきください。
トライアル期間の終了について
- WafCharmのトライアル期間が終了間近になると、管理画面で下記の通知が確認できます。WafCharmを継続する場合はプランをアップグレードします。
- WafCharmのトライアル期間が終了後、管理画面で下記の通知が確認できます。WafCharmを再開する場合はプランをアップグレードします。
参考資料
AWS WAFドキュメント
AWS WAFの制限
WafCharmドキュメント
- AWS WAF 解説
https://www.wafcharm.com/blog/aws-waf-basic-structure/ - WAFとWafCharmの違い
https://www.wafcharm.com/blog/waf-vs-wafcharm-for-beginners/ - WafCharmのお申込み方法について
https://www.wafcharm.com/blog/wafcharm-application-contract-jp/ - WafCharmご利用手順
https://www.wafcharm.com/blog/check-wafcharm-setting-jp/