【初心者向け】AWS CLIでAWS WAFのWeb ACLをJSON出力する方法
こんにちは、コンサルティング部のやまぽよです。
AWS WAFのWeb ACLに数十件規模のルールを設定している場合、マネジメントコンソール上でルールを一つ一つクリックして確認することは非常に手間になるかと思います。
そこで、今回、AWS CLIを使ってWeb ACLの情報をJSONファイルに一括で出力してみたので、その手順を以下に記します。
前提
本記事では、以下の環境で実行しています。
| 項目 | 内容 |
|---|---|
| OS | macOS 26.4 |
| AWS CLI | 2.34.46 |
| 対象リージョン | ap-northeast-1 |
| WAFのスコープ | REGIONAL |
また、AWS CLIで対象アカウントにアクセスできる状態であることを前提としています。
接続中のAWSアカウントを確認する
Macのターミナル(zsh)で以下のコマンドを実行します。
aws sts get-caller-identity
すると、以下の画像のように、現在使用しているユーザーIDや接続先のAWSアカウントIDが表示されるので、現在の設定が想定通りか確認しておきましょう。

Web ACLの一覧を取得する
まずは、対象となるWeb ACLの一覧を出力します。
aws wafv2 list-web-acls --scope REGIONAL --region ap-northeast-1 --output json > webacl_list.json
※「webacl_list.json」というファイル名称で、カレントディレクトリに出力されます。
Web ACLの詳細を取得する
上記で出力したファイルをテキストエディタ等で開き、対象のWeb ACLの「Name」と「Id」の値を確認します。
確認した値を利用して、以下のようなコマンドを実行します。
すると、AWS WAFのルール一覧を含むWeb ACLの詳細設定がJSONファイルに出力されます。
aws wafv2 get-web-acl --name "<上記でJSONに出力したWeb ACL名>" --id "<上記でJSONに出力したリソースID>" --scope REGIONAL --region ap-northeast-1 --output json > webacl_detail.json
出力されるJSONのイメージは以下の通りです。
なお、以下は説明用に作成したサンプルです。実際の出力では、設定内容に応じてRules等の内容が異なります。
{
"WebACL": {
"Name": "Example-WAF",
"Id": "00000000-0000-0000-0000-000000000000",
"ARN": "arn:aws:wafv2:ap-northeast-1:123456789012:regional/webacl/Example-WAF/00000000-0000-0000-0000-000000000000",
"DefaultAction": {
"Allow": {}
},
"Description": "",
"Rules": [],
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "WAF-Example"
},
"Capacity": 0,
"ManagedByFirewallManager": false,
"LabelNamespace": "awswaf:123456789012:webacl:Example-WAF:",
"CustomResponseBodies": {
"example": {
"ContentType": "TEXT_HTML",
"Content": "<html><body>Access denied.</body></html>"
}
},
"RetrofittedByFirewallManager": false
},
"LockToken": "00000000-0000-0000-0000-000000000000"
}
実際の出力では、Rules 配下にWeb ACLに設定されているルール情報が出力されます。上記例では簡略化のため空配列にしています。
ログ保存設定を取得する
次に、ログの保存設定も確認したい場合は、上記でJSONに出力した「ARN」の値を引数にして以下のコマンドを実行します。
aws wafv2 get-logging-configuration --resource-arn "<上記でJSONに出力したARN>" --region ap-northeast-1 --output json > waf_logging.json
なお、対象のWeb ACLでログ保存設定が有効化されていない場合は、設定情報を取得できずエラーになる場合があります。
出力されるJSONのイメージは以下の通りです。
なお、以下は説明用に作成したサンプルです。実際の出力では、設定内容に応じてLoggingConfiguration等の内容が異なります。
{
"LoggingConfiguration": {
"ResourceArn": "arn:aws:wafv2:ap-northeast-1:123456789012:regional/webacl/Example-WAF/00000000-0000-0000-0000-000000000000",
"LogDestinationConfigs": [
"arn:aws:logs:ap-northeast-1:123456789012:log-group:aws-waf-logs-example"
],
"ManagedByFirewallManager": false,
"LoggingFilter": {
"Filters": [
{
"Behavior": "KEEP",
"Requirement": "MEETS_ANY",
"Conditions": [
{ "ActionCondition": { "Action": "BLOCK" } },
{ "ActionCondition": { "Action": "COUNT" } }
]
}
],
"DefaultBehavior": "DROP"
},
"LogType": "WAF_LOGS",
"LogScope": "CUSTOMER"
}
}
CloudFrontに紐づくWAFを確認する場合
list-web-aclsおよびget-web-aclコマンドを実行する際に、--scope CLOUDFRONT --region us-east-1を指定してください。
また、get-logging-configurationコマンドを実行する際に、--region us-east-1を指定してください。
例えば、CloudFrontに紐づくWAFのWeb ACL一覧を取得する場合は、以下のコマンドになります。
aws wafv2 list-web-acls --scope CLOUDFRONT --region us-east-1 --output json > cloudfront_webacl_list.json
Web ACL詳細を取得する場合は、以下のコマンドになります。
aws wafv2 get-web-acl --name "<上記でJSONに出力したWeb ACL名>" --id "<上記でJSONに出力したリソースID>" --scope CLOUDFRONT --region us-east-1 --output json > cloudfront_webacl_detail.json
ログ保存設定を取得する場合は、以下のコマンドになります。
aws wafv2 get-logging-configuration --resource-arn "<上記でJSONに出力したARN>" --region us-east-1 --output json > cloudfront_waf_logging.json
終わりに
今回、自身の備忘や知識の定着も兼ねて記事を作成しましたが、どなたかの役に立てば幸いです。
最後までご覧いただきありがとうございました。



