Fastly Ngwaf

fastly/fastly-agent-toolkit/skills/fastly-ngwaf

作者 fastly6db70eaf54ba885d56091861224987d6cf06c429無授權條款收錄於 2026年10月9日更新於 2026年10月9日

Performs an internal audit of Fastly Next-Gen WAF (NGWAF) workspaces to audit that critical templated protection rules are configured and enabled. Use when auditing NGWAF workspace security posture, checking for missing or disabled login protection rules (LOGINDISCOVERY, LOGINATTEMPT, LOGINSUCCESS, LOGINFAILURE), auditing credit card validation rules (CC-VAL-ATTEMPT, CC-VAL-FAILURE, CC-VAL-SUCCESS), auditing gift card protection rules (GC-VAL-ATTEMPT, GC-VAL-FAILURE, GC-VAL-SUCCESS), identifying potential login endpoints not covered by NGWAF rules, or comparing attack traffic against blocked traffic to confirm enabled rules are actually blocking.

包含腳本Security
AI 產生的概覽

稽核 Fastly 次世代 WAF 工作區,確認關鍵範本化防護規則已設定並啟用。

功能
此技能透過列出工作區、取得其規則集,並檢查登入防護、信用卡驗證與禮品卡驗證所需的範本化規則是否存在且已啟用,來稽核 Fastly 次世代 WAF(NGWAF)工作區。它會標記缺少或停用的規則,搜尋近期請求記錄中未被規則涵蓋的類登入端點,並比對攻擊流量與已封鎖流量,以確認已啟用的規則確實正在封鎖。它會產出依工作區劃分的規則狀態與缺口報告,並附帶一個 Bash 評估指令碼以及手動 CLI 工作流程。
適用情境
適用於稽核 NGWAF 工作區安全態勢、檢查登入、信用卡或禮品卡防護規則是否缺少或停用,或找出未被 NGWAF 規則涵蓋的登入端點。它也用于確認已啟用的規則確實正在封鎖攻擊流量。
執行需求
需要 Bash、curl、jq、對 api.fastly.com 的網路存取,以及本機設定且具備 NGWAF 讀取權限的 FASTLY_API_KEY;手動工作流程還需要 fastly CLI。它附帶一個可執行指令碼 scripts/assess_ngwaf_rules.sh。

Fastly NGWAF Workspace Audit

Audits NGWAF workspaces to verify critical templated rules are configured and enabled. Use the fastly-cli skill to configure rules; this skill identifies gaps.

Quick Start

The bundled assessment requires Bash, curl, jq, network access to api.fastly.com, and a locally configured FASTLY_API_KEY with NGWAF read access. The manual workflow also requires the fastly CLI. Configure credentials in the user's local environment or CLI configuration. Never ask the user to paste an API key into chat or print it in command output.

Set NGWAF_SKILL_DIR to the absolute directory containing this SKILL.md, using the installed skill location supplied by the client. This is a variable you assign, not a client-provided environment variable. Run the helper from the user's working directory:

bash
NGWAF_SKILL_DIR=/absolute/path/to/fastly-ngwafbash "$NGWAF_SKILL_DIR/scripts/assess_ngwaf_rules.sh"

For manual inspection or partial audits, work through the steps below with the fastly CLI.

The CLI ignores FASTLY_API_KEY. Its precedence is --token > FASTLY_API_TOKEN > fastly.toml profile > default stored token. To reuse the script's credential:

bash
export FASTLY_API_TOKEN="$FASTLY_API_KEY"

Audit Workflow

  1. List workspaces — verify the account has NGWAF workspaces
  2. Fetch rules per workspace — retrieve each workspace's rule set
  3. Validate critical signals — confirm required rules exist and are enabled
  4. Flag gaps and search for uncovered endpoints — report missing/disabled rules
  5. Check attack traffic against blocked traffic — confirm enabled rules are actually blocking

Step 1: List Workspaces

bash
fastly ngwaf workspace list --json | jq -r '.data[].id'

If empty, NGWAF is not configured for this account.

Step 2: Fetch Rules for a Workspace

bash
fastly ngwaf workspace rule list --workspace-id "$WORKSPACE_ID" --json

Both list commands return {"data": [...], "meta": {...}} and cap at 100 items with no flag to raise it. Check .meta.total; above 100, fall back to GET /ngwaf/v1/workspaces?limit=200 or .../rules?limit=200.

rule list also takes --enabled and --action to filter server-side.

Step 3: Validate Critical Signals

For each workspace, verify these templated rules exist and enabled is true:

CategoryRequired Signals
Login ProtectionLOGINDISCOVERY, LOGINATTEMPT, LOGINSUCCESS, LOGINFAILURE
Credit Card ValidationCC-VAL-ATTEMPT, CC-VAL-FAILURE, CC-VAL-SUCCESS
Gift Card ValidationGC-VAL-ATTEMPT, GC-VAL-FAILURE, GC-VAL-SUCCESS

Check a specific signal:

bash
fastly ngwaf workspace rule list --workspace-id "$WORKSPACE_ID" --json \  | jq '[.data[] | select(.actions[].signal == "LOGINDISCOVERY") | {enabled, id}]'

Step 4: Search for Uncovered Login Endpoints

When LOGINATTEMPT is missing or disabled, search recent request logs for login-like traffic the WAF isn't protecting. No CLI equivalent exists (there is no fastly ngwaf workspace requests), so use the API:

bash
curl -s -H "Fastly-Key: $FASTLY_API_KEY" \  "https://api.fastly.com/ngwaf/v1/workspaces/$WORKSPACE_ID/requests?limit=100&page=1&q=from%3A-30min%20method%3APOST%20path%3A~%22%2Alogin%2A%22" \  | jq -r '.data[].path' | sort | uniq -c

Step 5: Check Attack Traffic Against Blocked Traffic

A rule can be present and enabled and still block nothing when the workspace mode overrides it. requests_attack is what NGWAF flagged; requests_total_blocked is what it stopped. Attacks above zero with nothing blocked means the workspace is in log or off mode. Report it even when every rule checks out.

bash
fastly ngwaf workspace time-series get --workspace-id "$WORKSPACE_ID" \  --from=2026-08-01T00:00:00Z --to=2026-08-08T00:00:00Z \  --metrics=requests_total,requests_attack,requests_total_blocked \  --granularity=86400 --json \  | jq -r '.data[] | "\(.timestamp)  total=\(.requests_total)  attack=\(.requests_attack)  blocked=\(.requests_total_blocked)"'

Across every workspace at once, grouped by workspace:

bash
fastly ngwaf time-series list \  --from=2026-08-01T00:00:00Z --to=2026-08-08T00:00:00Z \  --metrics=requests_total,requests_attack \  --granularity=86400 --dimensions=workspaces --json \  | jq -r '.data[] | "\(.dimensions.workspace)  \(.dimensions.time)  \(.values | add)"'

The workspace-level subcommand is get, the account-level one is list. They differ in three ways that break audit scripts:

  • Output shape. get returns flat objects keyed by metric with a timestamp. list nests them under dimensions and a values array, hence .values | add.
  • Bucket size. The CLI only sends --granularity when passed; get then buckets hourly and list daily. Always pass it.
  • Zeroes. get reports a quiet metric as 0. list drops it from values, and returns {"data":[],"meta":{"total":0}} when nothing recorded. A missing key means zero, not an error.

Read requests_total_blocked through get. A workspace that blocked nothing is the case this audit is looking for, and list reports it as an absence.

--from and --metrics are required on both. Timestamps are RFC 3339, not the YYYY-MM-DD that fastly stats takes.

--metrics also accepts XSS, SQLI, HTTP404 and any custom signal name on the workspace, so a rule verified in step 3 can be checked for real traffic by signal name. Query those through get.

Expected Output

Healthy workspace — all signals present and enabled:

text
### Workspace: abc123  [LOGIN Rules]  - LOGINDISCOVERY: ENABLED  - LOGINATTEMPT: ENABLED  - LOGINSUCCESS: ENABLED  - LOGINFAILURE: ENABLED  [CC Rules]  - CC-VAL-ATTEMPT: ENABLED  - CC-VAL-FAILURE: ENABLED  - CC-VAL-SUCCESS: ENABLED  [GC Rules]  - GC-VAL-ATTEMPT: ENABLED  - GC-VAL-FAILURE: ENABLED  - GC-VAL-SUCCESS: ENABLED

Unhealthy workspace — missing or disabled rules require remediation:

text
### Workspace: def456  [LOGIN Rules]  - LOGINDISCOVERY: NOT CONFIGURED (Recommended: CRITICAL: Configure and enable this rule to discover unknown login endpoints)  - LOGINATTEMPT: IS DISABLED (Recommended: Enable this rule)  - LOGINSUCCESS: ENABLED  - LOGINFAILURE: ENABLED  -> LOGINATTEMPT is not enabled. Searching recent request logs for potential login paths...  -> Found potential login paths in last 30 minutes:       3 /api/v1/login       1 /auth/signin

Error Handling

ErrorCauseFix
FASTLY_API_KEY not setEnvironment variable missingConfigure the key locally, outside chat
API call failed with status 403Token lacks NGWAF scopeVerify token has global:read permission
No workspaces foundNGWAF not provisionedEnable NGWAF on the account first
jq is not installedMissing dependencybrew install jq or apt-get install -y jq
curl is not installedMissing dependencyInstall curl with the system package manager

API References

來源與署名

來源:fastly/fastly-agent-toolkit位於skills/fastly-ngwaf提交6db70ea

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架