概要
前回&前々回と、CloudFrontに関する記事でしたが、今回もCloudFrontです。
今回は前々回に触れられなかった、WAF Web ACL(※)の作成について。
※Web Application Firewall - Web Access Control Listの略。WAFと同じもの...という認識でOK。
やること
Webの前提条件作成
「AWS WAF and AWS Shield」から「AWS WAF」を選択し、「Configure Web ACL」を選択します。
※「Concepts overview」では、条件(Condition)・ルール(Rules)・Web ACLについての説明があるので、読んでおくとよいかも。
「Next」ボタンをクリックすると「Name web ACL」画面でWeb ACLの前提条件を設定します。
項目は以下の通り。
項目名 | 説明 |
---|---|
Web ACL name(必須) | Web ACL nameの名前 |
CloudWatch metric name(必須) | Web ACLのCloudWatch上でのメトリクス名。(Web ACL Nameを設定すると自動で設定されます。任意設定も可能) |
Region(必須) | Web ACL nameを設定するWeb ACLのリージョン(下記参照) |
AWS resource to associate | Web ACLを関連付けするAWSリソース。(後から設定することも可能) |
【Regionについて】
条件(Condition)の作成
「Create conditions」で、Web ACLに適用する条件(=フィルタ)を設定します。
設定可能なのは、下記の通り。
項目名 | 説明 |
---|---|
Cross-site scripting match conditions | XSS攻撃に対応するフィルタ |
Geo match conditions | アクセスされた地域(国)でのフィルタ |
IP match conditions | アクセス元のIPアドレスに対応するフィルタ |
Size constraint conditions | リクエストデータのデータ量でのフィルタ |
SQL injection match conditions | SQLインジェクション攻撃に対応するフィルタ |
String and regex match conditions | リクエストデータに含まれる文字列に対応するフィルタ |
個々項目の詳細設定については、公式サイトを参考。
(項目名を見ればわかるようなものばかりだけど)
とりあえず、ちょっと分かりにくそうなものだけ抜粋。
項目名 | 説明 |
---|---|
Part of the request to filter on | フィルタ対象の項目(ヘッダ、クエリ文字列、など) |
Transformation | チェック前にフィルタ対象項目の値に実施させる処理。 (「Simplify Command Line」は、コマンドラインと思われる文字列を無効化する処理。OSコマンドインジェクション対応用です) |
Comparison operator | データ量比較の不等号の設定(=、<=、< など) |
Match type | 文字列比較のパターン(部分一致、完全一致、など) |
ルール(Rule)の作成
「Create rules」でルールを作成します。
「条件とルールって、何が違うの?」と思うかもしれませんが、Web ACLでの「ルール」は、「1つ以上の条件をまとめて管理する入れもの」となります。
「Create Rule」ボタンをクリック後、ルールの内容、及び「Add Conditions」で関連付けする条件を設定します。
- 「Add Conditions」は、「Geo Match」及び「IP Address」が「指定した条件と一致」、それ以外は「指定した条件と少なくとも1つが一致」です。
- 「Rule Type」は、下記の通り。
項目名 | 説明 |
---|---|
Regular Rule | 「Add Conditions」で設定した内容を満たしたとき、ルールを適用する |
Rate-Based Rule | 「Add Conditions」で設定した内容を満たし、かつ5分間のリクエスト回数が「Rate Limit」以上のとき、ルールを適用する |
「Add rules to a web ACL」で作成したルールを選んで、「Add Rule to web ACL」をクリックすると、そのルールをWeb ACLへ採用できます(複数選択可能です)。
その後、以下の2項目&その際の動作を設定します。
項目名 | 説明 |
---|---|
If a request matches all of the conditions in a rule | 個々のルールについて、設定した条件をすべて満たした場合の動作(上から順に評価) |
If a request doesn't match any rules | どのルールも、ルールに設定したどの条件も満たさなかった場合(=デフォルトの動作) |
最後に「Review And Create」をクリックします。
Web ACLの作成
最後の「Web ACLの作成」ですが、これは「Review and create」で「Confirm and Create」ボタンをクリックするだけです。
また各項目の「Edit」ボタンをクリックすると、その項目の再設定ができます。
CloudFrontへの適用
最後にCloudFrontへの適用ですが、これはCloudFrontの[Distribution Settings] - [AWS WAF Web ACL]で、作成したWeb ACLを選択するだけです。
CloudFromationでWeb ACLを作成する際の注意
ここからは、CloudFormationでWeb ACLを作成する際の注意になります。
※CloudFormationの詳細はここでは説明しないので「CloudFormation?よくわからないし、関係ないな」って人は、スルーでOKです。
WAFリソースの違い
CloudFormationのWAFリソースには、下記2種類があります。
これの違いですが、WAFのリージョンになります。(下表参照)
リソース名 | リージョン |
---|---|
AWS::WAF | Global(CloudFront) |
AWS::WAFRegional | Regional WAF Resource(リージョン別WAF) |
- CloudFrontに適用するWAFは「AWS::WAF」で定義しなければなりません。
- AWS::WAFRegionalで定義すると、デプロイした際のCloudFrontとの紐づけ時に「指定されたリソースにアクセスできない(「アクセス権限がない」だったかも)」というエラーが発生します。
「Geo match conditions」設定時の注意
条件の「Geo match conditions」(=地域(国)でのフィルタ条件)ですが、CloudFromationの場合、下記の事項があるので注意しましょう。
- AWS::WAFRegionalでのみ設定可能。(AWS::WAFでは設定不可)
- AWS::WAFで作成すると、ルールとの紐づけ時に「指定されたIDのリソースがありません」というエラーが発生します。
- 公式の「AWS WAF Regional リソースタイプのリファレンス」ページを表示しても、表示言語を「日本語」にしていると「AWS::WAFRegional::GeoMatchSet」へのリンクが表示されない。
- 表示言語を「English」にすれば表示されます。
- 今のところ、CloudFrontに「Geo match conditions」を適用する場合、コンソールで行うしかない?
まとめ
と、またちょっと長くなりましたが、今回はここまで。
最近、Cognito&AWS Amplifyを使った認証コードをガッツリ書いてたので、次のネタはそれにしようかな?
てか、Azureは...