今回はAWS WAFを利用し、ログインの制御を行います。
具体的な要件としては特定のユーザ名(今回は「admin」)でログインを行おうとする場合は、 特定のIP以外からのログインは拒否する設定を試してみようと思います。
目次
AWS WAF 条件の作成 ルールの作成 Web ACLの作成 動作確認
AWS WAF
AWS WAFは名前の通り、アプリケーションを様々な攻撃から守る AWSのウェブアプリケーションファイヤーウォールのサービスです。
WAFなのでSQLインジェクションからクロスサイトスクリプティング等から リソースを守るルールを作成出来ますが、今回はIP一致条件、 及び文字列一致条件を設定します。
また、AWS WAFはApplication Load Balancer、もしくはCloudFrontと紐づける事が出来ます。
今回はCloudFront経由でWordPressサイトにアクセスする環境で試してみましょう。
条件の作成
まずはAWS WAFで下記条件を作成します。
・特定のIPからのアクセス
AWS WAFのコンソールからIP addresses→Create conditionから自社IPの条件を登録
・特定のURIへのアクセス(ログインページ)
AWS WAFのコンソールからString and regex matching→Create conditionからログインURIをフィルタ
・特定のリクエストボディの文字列(ログインユーザー名)
AWS WAFのコンソールからString and regex matching→Create conditionからリクエストボディのユーザ名をフィルタ
今回はテストでWordpressのログイン画面を使うのでURIは/wp-login.php、リクエストボディはlog=adminを指定しました。 また、regexでもフィルタする事も可能です。
ルールの作成
次にこれらの条件を含めたルールを作ります。 ルールはAWS WAFコンソールのRules→Create ruleから作成します。
先程作成した条件を追加していきましょう。
条件で記載したIPアドレス以外からのアクセスを拒否したいのでIP制限の条件はWhen a request "does not" 他二つはWhen a request "does"で追加します。
Web ACLの作成
ルールを作成したらCloudFrontに紐づけるWeb ACLを作成しましょう。 AWS WAF コンソールよりWeb ACLs→Create web ACLで作成です。
AWS resource to associateに紐づけたいCloudFrontを選びます。
後は先程作成したルールを追加し、ルールにマッチしない場合は許可(Allow all requests that don't match any rules) を選択し作成します。
動作確認
設定し終わりましたら、実際にブロックされるか確認してみましょう。 まずは自社IPからadminユーザーでログインしてみます。
ログイン出来ますね。 では自社IP以外で試してみますと……
拒否されましたね!admin以外のユーザーでログインを試した場合は無事ログイン出来ます。
今回は試しにAWS WAFで簡単にルールを使いログインの制限を行いましたが、 制御するリソースやルールを増やしたり、大手セキュリティー会社が提供している マネージドルール等の付与も安価で行えるので、是非一度お試しください!