alibabacloud-waf-checkresponse-intercept-query について
Aliyun CLIでAlibaba Cloud WAFのブロックログとルール詳細を調べ、分析レポートにまとめるスキルです。リクエストが遮断された理由を調査する運用担当者向けです。
主な機能
- 01Request IDによるブロックログ検索
- 02WAFインスタンスとSLS設定の自動検出
- 03ログサービスの状態確認と同意後の有効化
- 04該当ルールの詳細取得とレポート作成
活用シーン
- 01ブラウザーの405ブロックページの調査
- 02traceidからWAFイベントを特定
- 03該当ルールと設定の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ aliyun/ alibabacloud-aiops-skills --skill alibabacloud-waf-checkresponse-intercept-queryインストール後、Claude Code で/alibabacloud-waf-checkresponse-intercept-queryを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/common-block-reasons.mdram-policies.mdrule-config-details.mdrule-operations.mdscripts/get_waf_logs.py詳細
WAF CheckResponse インターセプトクエリ
前提条件
事前確認:Aliyun CLI >= 3.3.3 が必要です
aliyun versionを実行して、バージョンが 3.3.3 以上であることを確認してください。未インストール、またはバージョンが古い場合は、 インストール手順について https://help.aliyun.com/document_detail/139508.html を参照してください。
事前確認:Aliyun CLI プラグインの更新が必要です
[MUST]
aliyun configure set --auto-plugin-install trueを実行して、自動プラグインインストールを有効にしてください。 [MUST]aliyun plugin updateを実行して、既存のプラグインを常に最新の状態にしてください。
オブザーバビリティ
UA テンプレート — aliyun CLI コマンドを呼び出す際は、すべて次の形式で --user-agent を指定する必要があります。
AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/{session-id}
session-id の生成ルール:
- 各スキルセッションの開始時に(最初の CLI コマンドを実行する前に)一度だけ生成します
- 形式:32 文字の小文字の 16 進数文字列(例:
a1b2c3d4e5f67890abcdef1234567890) - 生成方法:
python3 -c "import uuid; print(uuid.uuid4().hex)" - 同じセッション内のすべての CLI コマンドで、同じ session-id を再利用します
例:
# Generate session-id once at the beginning
SESSION_ID=$(python3 -c "import uuid; print(uuid.uuid4().hex)")
# Use in every CLI command
aliyun waf-openapi describe-instance --region cn-hangzhou \
--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
実行前に、ユーザーから次の情報を必ず収集してください。
| パラメーター | 説明 | 必須 |
|---|---|---|
| Request ID | WAF のブロック(インターセプト)レスポンスの HTML 本文から取得した traceid、またはブラウザーに表示された 405 ブロックページに表示される Request ID | はい |
任意:WAF インスタンス ID、SLS プロジェクト名、SLS Logstore 名(指定されていない場合は自動検出されます)
注記:
- Request ID(traceid)は、WAF のブロックレスポンスの HTML 本文、またはブラウザーに表示された 405 ブロックページから取得します
- 認証には Alibaba Cloud のデフォルト認証情報チェーン(ECS RAM ロール、~/.alibabacloud/config など)を使用します
リージョン情報
| RegionId の値 | リージョン | 説明 |
|---|---|---|
cn-hangzhou | 中国本土 | 中国本土内の WAF インスタンス |
ap-southeast-1 | 中国本土以外 | 海外および香港/マカオ/台湾地域の WAF インスタンス |
クエリのワークフロー
ステップ 1:情報収集
ユーザーに Request ID(traceid)を確認します。ユーザーから提供されていない場合は、次の方法で取得するよう案内してください。
- ブラウザーに表示される 405 ブロックページには、Request ID が直接表示されます
- WAF のブロック(インターセプト)レスポンスの HTML 本文には、traceid が含まれています
ステップ 2:WAF インスタンスの自動検出とログサービスの確認
ユーザーが WAF インスタンス ID と SLS の設定を指定していない場合は、自動検出を実行します。
ステップ 2a:WAF インスタンスの検出
# Query WAF instances in both regions in parallel
aliyun waf-openapi describe-instance --region cn-hangzhou --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
aliyun waf-openapi describe-instance --region ap-southeast-1 --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
ステップ 2b:ログサービスのステータス確認(ログをクエリする前に必須)
SLS の設定を取得する前に、describe-sls-log-store-status を呼び出して、WAF インスタンスでログサービスが有効になっていることを必ず確認してください。
aliyun waf-openapi describe-sls-log-store-status --region <region-id> --instance-id '<instance-id>' --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
- レスポンスでログサービスがすでに有効(
SlsLogStoreStatusが true/有効)と示された場合は、有効化操作をスキップし、ステップ 2c に直接進みます(冪等性:冗長な書き込みは行いません)。 - ログサービスが有効でない場合は、ログクエリを実行する前に WAF ログサービスを有効化する必要があることをユーザーに伝えます。ユーザーの同意を得たうえで、
modify-user-waf-log-statusを呼び出して有効化します。
aliyun waf-openapi modify-user-waf-log-status \
--region <region-id> \
--instance-id '<instance-id>' \
--log-status 1 \
--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
制約:このスキルでサポートされるのはログサービスの有効化(
--log-status 1)のみです。ログサービスの無効化は許可されていません。この API を--log-status 0を指定して呼び出さないでください。
有効化後、少し待ってから describe-sls-log-store-status で再確認し、有効化されたことを確認してください。
ステップ 2c:SLS の設定を取得する(ログサービスが有効であることを確認した後、必ず実行)
describe-sls-log-store-status でログサービスが有効であることを確認したら、WAF ログの Project と Logstore の情報を取得するため、必ず直ちに describe-sls-log-store を呼び出してください。
aliyun waf-openapi describe-sls-log-store --region <region-id> --instance-id '<instance-id>' --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
describe-sls-log-store のレスポンスに含まれる主なフィールド:
| フィールド | 説明 |
|---|---|
ProjectName | WAF インスタンスに関連付けられた SLS Project 名 |
LogStoreName | WAF ログ用の SLS Logstore 名 |
Ttl | ログの保持期間(日数) |
リージョンをまたぐ場合の注意:SLS ログの保存先リージョンは、WAF インスタンスのリージョンと異なる場合があります(例:WAF は ap-southeast-1、SLS ログは ap-southeast-5 に保存)。ステップ 3 で SLS をクエリする際は、WAF インスタンスのリージョンではなく、SLS Project が配置されているリージョンを必ず使用してください。
注:
describe-instanceコマンドでは、--regionを指定している場合、--biz-region-idは不要です。--regionフラグによってエンドポイントへのルーティングが決まります。エンドポイントとは別にビジネスリージョンを上書きする必要がある場合にのみ、--biz-region-idを指定してください。
ステップ 3:SLS ログをクエリする
ステップ 2 で取得した ProjectName、LogStoreName、および SLS リージョンを使用して、ブロックログをクエリします(Python スクリプトの使用を推奨します)。
# Query using script (recommended, supports automatic time range expansion)
python3 scripts/get_waf_logs.py \
--project <project-name> \
--logstore <logstore-name> \
--request-id <request-id> \
--region <sls-region>
または、CLI を直接使用します。
TO_TIME=$(python3 -c "import time; print(int(time.time()))")
FROM_TIME=$((TO_TIME - 86400))
aliyun sls get-logs \
--project <project-name> \
--logstore <logstore-name> \
--from $FROM_TIME \
--to $TO_TIME \
--query "<request-id>" \
--region <sls-region> \
--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
重要:ここでの --region は SLS ログの保存先リージョンである必要があります。このリージョンは WAF インスタンスのリージョンと異なる場合があります。正しい SLS リージョンを確認するには、ステップ 2 の describe-sls-log-store のレスポンスを確認してください。
ステップ 4:ルールの詳細をクエリする
ログから rule_id と final_plugin を抽出し、ルール設定をクエリします。
注:TemplateId が分からない場合は、まず describe-defense-templates を使用して、そのルールを含むテンプレートを見つけてください。describe-defense-templates API では、--defense-scene を使用してシナリオを絞り込みます。
| final_plugin | DefenseScene |
|---|---|
| customrule | custom_acl または custom_cc |
| waf | waf_group |
| scanner_behavior | antiscan |
| dlp | dlp |
| tamperproof | tamperproof |
# Step 4a: Find the template containing the rule (use --defense-scene to filter)
aliyun waf-openapi describe-defense-templates \
--region <region-id> \
--instance-id '<instance-id>' \
--defense-scene '<defense-scene>' \
--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
# Step 4b: Query rule details (describe-defense-rule does NOT use --defense-scene)
aliyun waf-openapi describe-defense-rule \
--region <region-id> \
--instance-id '<instance-id>' \
--template-id <template-id> \
--rule-id <rule-id> \
--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
ステップ 5:分析レポートを出力する
次のテンプレートを使用して出力します。
## WAF Block Analysis Report
### Request Information
- Request ID: {request_id}
- Block Time: {time}
- Client IP: {real_client_ip (masked, e.g. 192.***.***.***)}
- Request URL: {host}{request_path}?{masked_query_params}
### Block Details
- Rule ID: {rule_id}
- Rule Name: {rule_name}
- Action: {action}
### Recommendations
{Provide recommendations based on rule type, refer to references/common-block-reasons.md}
トラブルシューティング
ログが見つからない
-
グローバルログサービスのステータスを再確認する(ステップ 2b で確認済みのはずですが、改めて確認してください)。
aliyun waf-openapi describe-sls-log-store-status --region <region-id> --instance-id '<instance-id>' --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"有効になっていない場合は、ユーザーにその旨を伝え、
modify-user-waf-log-statusで有効にしてください(ステップ 2b を参照)。有効化(--log-status 1)のみ実行できます。 -
保護対象オブジェクトを一覧表示する(次のステップで使用するリソース名を取得します)。
aliyun waf-openapi describe-defense-resources --region <region-id> --instance-id '<instance-id>' --query '{"PageNumber":1,"PageSize":20}' --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"レスポンス内の各項目から
Resourceフィールドを抽出します(例:ddddingdang.xyz-waf、alb-xxx-alb)。 -
保護対象オブジェクトのログスイッチを確認する:
aliyun waf-openapi describe-resource-log-status --region <region-id> --instance-id '<instance-id>' --resources '<resource-name-1>,<resource-name-2>' --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"--resourcesの値には、上記のdescribe-defense-resourcesで取得したリソース名をカンマ区切りで指定します。 -
保護対象オブジェクトのログ収集を有効にする(確認してから実行します。対象リソースのログ収集が無効であることを
describe-resource-log-statusで確認できた場合にのみ実行し、すでに有効な場合はスキップします)。aliyun waf-openapi modify-resource-log-status \ --region <region-id> \ --instance-id '<instance-id>' \ --resource '<resource-name>' \ --status true \ --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
保護対象オブジェクトの命名規則については、references/common-block-reasons.md を参照してください。
権限拒否エラー
権限エラーが発生した場合は、次の項目を確認してください。
-
CLI プロファイルの設定を確認する:
aliyun configure list -
RAM ポリシーの権限を確認する: 必要な権限:
waf-openapi:DescribeInstancewaf-openapi:DescribeSlsLogStoreStatuswaf-openapi:DescribeSlsLogStorewaf-openapi:ModifyUserWafLogStatus(ログサービスを有効にする場合は任意)waf-openapi:DescribeDefenseRule(ルールの詳細用)sls:GetLogs(ログのクエリ用)
-
別のプロファイルを指定して試す:
aliyun waf-openapi describe-instance --profile <profile-name> --region <region-id> --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
リクエスト ID が見つからない場合
ログにリクエスト ID が見つからない場合:
- リクエスト ID の形式を確認する:ハイフンなしの 32 文字である必要があります
- 時間範囲を確認する:スクリプトは検索範囲を最大 90 日まで自動的に拡張します
- 正しいリージョンを確認する:
cn-hangzhouとap-southeast-1の両方を試します - ログの保持期間(TTL)を確認する:デフォルトは 180 日です。異なる場合は
--ttlパラメーターを使用します
複数インスタンスのシナリオ
中国本土と中国本土以外のインスタンスが両方存在する場合は、クエリ結果に基づいて判断します:
- ログが片方のリージョンでのみ見つかった場合 → そのリージョンをそのまま使用します
- ログが両方のリージョンで見つかった場合 → ユーザーに確認します
- どちらのリージョンでもログが見つからない場合 → 予想されるリージョンをユーザーに確認し、保護対象のログスイッチを確認します
注:ステップ 2 と同じ検出コマンドを使用し、リクエスト ID が見つかるまで、検出されたすべての SLS プロジェクトでログをクエリします。
ルール操作の制約
警告:ルールの無効化ポリシー
ユーザーがルールの無効化を要求した場合:
- まずルールの現在のステータスを確認します —
describe-defense-ruleを呼び出してルールの現在のステータスをクエリします。ルールがすでに目標の状態(例:すでに無効)である場合、書き込み操作をスキップし、ユーザーに伝えます(冪等性を考慮した確認後実行のパターン) - 無効化操作のみを実行します(
--rule-status 0を指定したmodify-defense-rule-status) - ルールを削除しないでください
- ルールの内容を変更しないでください
- 実行前にユーザーの確認が必要です
# Disable a rule (only after confirming it is currently enabled)
aliyun waf-openapi modify-defense-rule-status \
--region <region-id> \
--instance-id '<instance-id>' \
--rule-id <rule-id> \
--rule-status 0 \
--user-agent "AlibabaCloud-Agent-Skills/alibabacloud-waf-checkresponse-intercept-query/${SESSION_ID}"
詳しい手順については、references/rule-operations.md を参照してください。