🐺

AWS WAFV2 の IP Set を CLI で実行する

2024/07/02に公開

はじめに

CloudFrontにIP制限を設けるタイミングがあったので、cliでIPSet周り触ってみた。

AWS WAFV2 について

公式確認

Creates an IPSet, which you use to identify web requests that originate from specific IP addresses or ranges of IP addresses. For example, if you're receiving a lot of requests from a ranges of IP addresses, you can configure AWS WAF to block them using an IPSet that lists those IP addresses.

https://docs.aws.amazon.com/ja_jp/waf/latest/APIReference/API_CreateIPSet.html

特定の IP アドレスまたは IP アドレスの範囲をリストアップしたIPSetを使用して、それらをブロックしたり許可したりをAWS WAFで設定できる。

CreateIPSet

まずは、IPアドレスのリストを作成する

https://docs.aws.amazon.com/cli/latest/reference/wafv2/create-ip-set.html

exapmle

aws wafv2 create-ip-set \
    --name testip \
    --scope CLOUDFRONT \
    --region=us-east-1 \
    --ip-address-version IPV4 \
    --addresses 198.51.100.0/32

ListIpSets

作成したIPSetを一覧で確認できる

https://docs.aws.amazon.com/cli/latest/reference/wafv2/list-ip-sets.html

aws wafv2 list-ip-sets \
    --scope CLOUDFRONT \
    --region us-east-1

UpdateIpSet

UpdateIpSetでIPの情報を更新する

https://docs.aws.amazon.com/cli/latest/reference/wafv2/update-ip-set.html#examples

aws wafv2 update-ip-set \
    --name testip \
    --scope CLOUDFRONT \
    --id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
    --addresses 198.52.100.0/32 \
    --lock-token 447e55ac-2396-4c6d-b9f9-86b67c17f8b5 \
    --region us-east-1

更新する場合、既存のデータを上書きする仕様
→既存で登録されている情報を上書きする

DeleteIpSet

作成したIpSetは削除する。

https://docs.aws.amazon.com/cli/latest/reference/wafv2/delete-ip-set.html#

aws wafv2 delete-ip-set \
    --name testip \
    --scope CLOUDFRONT \
    --region us-east-1 \
    --id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
    --lock-token 46851772-db6f-459d-9385-49428812e357

CreateWebAcl

次にACLの作成を行う

A web ACL defines a collection of rules to use to inspect and control web requests.

https://docs.aws.amazon.com/waf/latest/APIReference/API_WebACL.html

Web ACL は、Web リクエストの検査と制御に使用するルールのコレクションを定義する

https://docs.aws.amazon.com/cli/latest/reference/wafv2/create-web-acl.html

example

aws wafv2 create-web-acl \
    --name TestWebAcl \
    --scope CLOUDFRONT \
    --default-action Allow={} \
    --visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=TestWebAclMetrics \
    --rules file://waf-rule.json \
    --region us-east-1

Contents of file://waf-rule.json:

[
    {
        "Name": "hoge-waf",
        "Priority": 0,
        "Statement": {
            "IPSetReferenceStatement": {
                "ARN": "" // IP set の ARN が入ります
            }
        },
        "Action": {
            "Allow": {}
        },
        "VisibilityConfig": {
            "SampledRequestsEnabled": true,
            "CloudWatchMetricsEnabled": true,
            "MetricName": "hoge-waf-ip-set"
        }
    }
]

ListWebAcls

作成したACLを一覧で確認する

https://docs.aws.amazon.com/cli/latest/reference/wafv2/list-web-acls.html

aws wafv2 list-web-acls \
    --scope CLOUDFRONT \
    --region us-east-1

GetWebAcl

作成したACLを取得する

https://docs.aws.amazon.com/cli/latest/reference/wafv2/get-web-acl.html#

example

aws wafv2 get-web-acl \
    --name TestWebAcl \
    --scope CLOUDFRONT \
    --region us-east-1 \
    --id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111

DeleteWebAcl

作成したACLを削除する

https://docs.aws.amazon.com/cli/latest/reference/wafv2/delete-web-acl.html#

aws wafv2 delete-web-acl \
    --name TestWebAcl \
    --scope CLOUDFRONT \
    --region us-east-1 \
    --id a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 \
    --lock-token ebab4ed2-155e-4c9a-9efb-e4c45665b1f5

実際にCloudFrontへの適応などはysmtegsrさんの内容など参考になりました。
https://zenn.dev/ysmtegsr/articles/0110fc69cb935c0726f2

CLOUDFRONTに対してWAFの設定を行いたい場合は、問答無用でregionus-east-1に設定する必要がありそうなので気を付ける

Discussion