mcpField
A
alibabacloud-waf-checkresponse-intercept-query

alibabacloud-waf-checkresponse-intercept-query

github.com/aliyunセキュリティ281167 回インストール1 日前に更新
リポジトリ

alibabacloud-waf-checkresponse-intercept-query について

Aliyun CLIでAlibaba Cloud WAFのブロックログとルール詳細を調べ、分析レポートにまとめるスキルです。リクエストが遮断された理由を調査する運用担当者向けです。

主な機能

  1. 01Request IDによるブロックログ検索
  2. 02WAFインスタンスとSLS設定の自動検出
  3. 03ログサービスの状態確認と同意後の有効化
  4. 04該当ルールの詳細取得とレポート作成

活用シーン

  1. 01ブラウザーの405ブロックページの調査
  2. 02traceidからWAFイベントを特定
  3. 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.md
ram-policies.md
rule-config-details.md
rule-operations.md
scripts/
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 IDWAF のブロック(インターセプト)レスポンスの 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)を確認します。ユーザーから提供されていない場合は、次の方法で取得するよう案内してください。

  1. ブラウザーに表示される 405 ブロックページには、Request ID が直接表示されます
  2. 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 のレスポンスに含まれる主なフィールド:

フィールド説明
ProjectNameWAF インスタンスに関連付けられた SLS Project 名
LogStoreNameWAF ログ用の 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_pluginDefenseScene
customrulecustom_acl または custom_cc
wafwaf_group
scanner_behaviorantiscan
dlpdlp
tamperprooftamperproof
# 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}

トラブルシューティング

ログが見つからない
  1. グローバルログサービスのステータスを再確認する(ステップ 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)のみ実行できます。

  2. 保護対象オブジェクトを一覧表示する(次のステップで使用するリソース名を取得します)。

    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)。

  3. 保護対象オブジェクトのログスイッチを確認する:

    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 で取得したリソース名をカンマ区切りで指定します。

  4. 保護対象オブジェクトのログ収集を有効にする(確認してから実行します。対象リソースのログ収集が無効であることを 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 を参照してください。

権限拒否エラー

権限エラーが発生した場合は、次の項目を確認してください。

  1. CLI プロファイルの設定を確認する:

    aliyun configure list
    
  2. RAM ポリシーの権限を確認する: 必要な権限:

    • waf-openapi:DescribeInstance
    • waf-openapi:DescribeSlsLogStoreStatus
    • waf-openapi:DescribeSlsLogStore
    • waf-openapi:ModifyUserWafLogStatus(ログサービスを有効にする場合は任意)
    • waf-openapi:DescribeDefenseRule(ルールの詳細用)
    • sls:GetLogs(ログのクエリ用)
  3. 別のプロファイルを指定して試す:

    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 が見つからない場合:

  1. リクエスト ID の形式を確認する:ハイフンなしの 32 文字である必要があります
  2. 時間範囲を確認する:スクリプトは検索範囲を最大 90 日まで自動的に拡張します
  3. 正しいリージョンを確認する:cn-hangzhou と ap-southeast-1 の両方を試します
  4. ログの保持期間(TTL)を確認する:デフォルトは 180 日です。異なる場合は --ttl パラメーターを使用します
複数インスタンスのシナリオ

中国本土と中国本土以外のインスタンスが両方存在する場合は、クエリ結果に基づいて判断します:

  • ログが片方のリージョンでのみ見つかった場合 → そのリージョンをそのまま使用します
  • ログが両方のリージョンで見つかった場合 → ユーザーに確認します
  • どちらのリージョンでもログが見つからない場合 → 予想されるリージョンをユーザーに確認し、保護対象のログスイッチを確認します

注:ステップ 2 と同じ検出コマンドを使用し、リクエスト ID が見つかるまで、検出されたすべての SLS プロジェクトでログをクエリします。

ルール操作の制約

警告:ルールの無効化ポリシー

ユーザーがルールの無効化を要求した場合:

  1. まずルールの現在のステータスを確認します — describe-defense-rule を呼び出してルールの現在のステータスをクエリします。ルールがすでに目標の状態(例:すでに無効)である場合、書き込み操作をスキップし、ユーザーに伝えます(冪等性を考慮した確認後実行のパターン)
  2. 無効化操作のみを実行します(--rule-status 0 を指定した modify-defense-rule-status)
  3. ルールを削除しないでください
  4. ルールの内容を変更しないでください
  5. 実行前にユーザーの確認が必要です
# 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 を参照してください。

参考資料

コメント