[小ネタ] AWS WAFv2が設定されている/いない CloudFront ディストリビューションの一覧を取得する(AWS CLI)

2020.08.27

AWS事業本部@福岡オフィスの梶原です。WAFv1まではlist-distributions-by-web-acl-id を使えばいいじゃないと思ってました。

こんな感じです。

WebACLId="XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX"
aws cloudfront list-distributions-by-web-acl-id --web-acl-id $WebACLId

https://docs.aws.amazon.com/cli/latest/reference/cloudfront/list-distributions-by-web-acl-id.html

WAF v1であれば、このコマンドで問題なかったのですが、WAFv2に移行した際に、現時点(2020/08/27)ではWAFv2は対応していないようで取得できませんでした。 すでに、Issueが上がっていましたので、近いうちに対応されるのではないかなと思います。

'cloudfront list-distributions-by-web-acl-id' only works for wafv1 acls #5418 https://github.com/aws/aws-cli/issues/5418

対応されるまでのつなぎとなってしまいますが、以下のコマンドで同じような結果が得られますので、必要な方はご活用いただければと思います。

WAFv2が設定されているCloudFrontディストリビューション(JSON)

WebACLId="XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX"
aws cloudfront list-distributions \
    --query "DistributionList.Items[?contains(WebACLId,'$WebACLId')]" \
    --output json
[
    {
        "Id": "XXXXXXXXXXX",
        "ARN": "arn:aws:cloudfront::123456789012:distribution/XXXXXXXXXXX",
        "Status": "Deployed",
    <<省略>>
         },
        "WebACLId": "arn:aws:wafv2:us-east-1:123456789012:global/webacl/wafv2-webacl/XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX",

    <<省略>>

WAFv2が設定されているCloudFrontディストリビューション(TABLE形式(出力項目絞り込みあり))

WebACLId="XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX"
aws cloudfront list-distributions \
    --query "DistributionList.Items[?contains(WebACLId,'$WebACLId')].[Id, Aliases.Items|[0], WebACLId]" \
    --output table
------------------------------------------------------------------------------------------------------------------------------------------------------+
|   ListDistributions     |
+----------------+---------------------------+--------------------------------------------------------------------------------------------------------+
|  AAAAAAAAAAAAA |  www.exsample.com           |  arn:aws:wafv2:us-east-1:123456789012:global/webacl/wafv2-webacl/XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX   |

    <<省略>>

WAFv2が設定されていないCloudFrontディストリビューションのリスト(JSON)

aws cloudfront list-distributions \
    --query "DistributionList.Items[?WebACLId=='']"

WAFv2が設定されていないCloudFrontディストリビューションのリスト(TABLE形式(出力項目絞り込みあり))

aws cloudfront list-distributions \
    --query "DistributionList.Items[?WebACLId==''].[Id, Aliases.Items|[0], WebACLId]" \
    --output table
---------------------------------------------------------------
|                      ListDistributions                      |
+-----------------+---------------------------------------+---+
|  XXXXXXXXXXX |  www.hogehoge.com |   |
+-----------------+---------------------------------------+---+

CloudFront用のWAFv2 ACL一覧

ちなみに、絞り込みに必要なAWS WAFのACL ID は以下で取得できますので合わせてご活用ください

aws wafv2 list-web-acls --scope=CLOUDFRONT --region=us-east-1 \
    --query "WebACLs[].[Name, Id]" \
    --output table
-------------------------------------------------------------------------
|                              ListWebACLs                              |
+------------------------------+----------------------------------------+
|  wafv2-webacl-prd |  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  |
|  wafv2-webacl-dev |  XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  |
+------------------------------+----------------------------------------+

参考情報

https://docs.aws.amazon.com/cli/latest/reference/cloudfront/list-distributions-by-web-acl-id.html

'cloudfront list-distributions-by-web-acl-id' only works for wafv1 acls #5418 https://github.com/aws/aws-cli/issues/5418