0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS WAFを使ってアプリ閉塞(メンテナンスモード)を実現する

0
Posted at

はじめに

本番リリース時、

  • 一般利用者からのアクセスを停止したい
  • リリース担当者のみアクセスしたい
  • メンテナンス画面を表示したい

といった要件はよくあります。

アプリケーション改修で実現する方法もありますが、AWS WAF を利用するとアプリケーションを変更することなく実現できます。

本記事では以下について紹介します。

  • WAF閉塞の仕組み
  • CloudFront閉塞との比較
  • AWS WAFを利用した実装手順
  • 実運用での注意点

アプリ閉塞とは

アプリ閉塞とは、一時的に利用者アクセスを制御する運用です。

代表的な利用シーンは以下です。

  • 本番リリース
  • 緊急メンテナンス
  • 障害対応
  • データメンテナンス

AWS WAFで実現する閉塞方式

AWS WAFではIPアドレスを条件にアクセス制御を行うことができます。

例えば、

  • リリース担当者のIPは許可
  • 一般利用者のIPは遮断

という制御が可能です。

利用者
 ↓
CloudFront
 ↓
AWS WAF
 ↓
ALB
 ↓
Application

運用モード

全開局

通常運用状態です。

すべてのアクセスを許可します。

Internet
 ↓
Application

制限開局

リリース担当者など必要な通信のみ許可します。

会社IP
 ↓
Allow

その他
 ↓
Block

全閉局

すべてのアクセスを遮断します。

すべてのアクセス
 ↓
Block

CloudFront閉塞との比較

アプリ閉塞は大きく以下の2方式があります。

AWS WAF方式

メリット

  • IP単位で柔軟な制御が可能
  • 一部利用者のみ許可できる
  • 設定変更だけで迅速な切り替え可能

デメリット

  • シンプルなHTML/JSONのメンテ画面しかサポートしない

CloudFront方式

CloudFront FunctionやLambda@Edgeを利用してメンテナンスページを返却します。

メリット

  • リッチなメンテナンスページを作りやすい
  • 完全に静的ページ化できる

デメリット

  • 特定利用者のみ許可が難しい
  • リリース担当者だけアクセスさせる設計が複雑
  • 閉塞が反映まで時間かかる

どちらを選ぶべきか

用途 おすすめ
リリース担当者のみ利用したい AWS WAF
素早くアクセス制限の切り替えを実現したい AWS WAF
リッチなメンテナンスページ表示 CloudFront

構成イメージ

Internet
 ↓
CloudFront
 ↓
AWS WAF
 ↓
ALB
 ↓
Application

ハンズオン

Step1. IPSet作成

AWS WAF

IP Sets

Create IP Set

項目 設定値
Name maintenance-allow-ipset
Addresses xxx.xxx.xxx.xxx/32

リリース担当者のグローバルIPを登録します。


Step2. カスタムレスポンス作成

Web ACL

Custom response bodies

Create

Name

maintenance-page

Content Type

HTML

Response Body

<!DOCTYPE html>
<html>
<head>
<title>Maintenance</title>
</head>
<body>
<h1>メンテナンス中</h1>
<p>現在システムメンテナンスを実施しています。</p>
</body>
</html>

Step3. 閉塞ルール作成

条件

NOT
  ↓
IPSet Match

対象IPSet

maintenance-allow-ipset

Action

Block

Custom Response

HTTP Status : 403

Response Body :
maintenance-page

Step4. 動作確認

許可IP

アクセス可能

許可以外

403 Forbidden
↓
メンテナンス画面表示

になれば成功です。


なぜ403を使うのか

閉塞中は

  • システムは存在する
  • ただしアクセスは許可しない

状態です。

そのため、

403 Forbidden

が最も適切です。

404(Not Found)ではありません。


まとめ

AWS WAFを利用することで、

  • 全開局
  • 制限開局
  • 全閉局

を簡単に実現できます。

特に本番リリースでは、

  • リリース担当者だけアクセス
  • 利用者にはメンテナンス画面表示
  • アプリ改修不要

という構成を容易に実現できます。

CloudFrontを利用したメンテナンス画面配信も有効ですが、

「特定IPのみ許可したい」場合はAWS WAFによる閉塞がシンプルで運用しやすい構成です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?