Runbook: secret access denied spike
Alert source: packages/testkit/alerts/security.rules.yaml
Canonical markdown: docs/runbooks/secret-access-denied-spike.md
Severity: critical.
Symptom
Tenant {{ tenant_id }} is seeing > 0.1 denials/s on secret-access
requests for 5 minutes. Downstream adapters that need the secret will
fail on every invocation.
Likely cause
- Misconfigured secret ref in a recently-deployed skill — retry loop is hammering the denial path.
- Secret path violates the tenant's configured scope (Phase-6 isolation check).
- Someone is probing the secret-scope boundary for reconnaissance.
Immediate mitigation
If a specific ref is the hot one, block it at the secret-provider layer:
# There is no secrets-block verb — revoke the credential at the
# provider (Vault policy / IAM), rotate, and restart:
declaragent secrets rotate <ref>
declaragent down && declaragent up -d
Revoking at the provider short-circuits the denial loop at its source.
Root-cause investigation
# Top denied refs and requesters:
declaragent audit query --tenant <tenant_id> --kind secret_access --outcome denied --since -30m --json
# Verify tenant scope config:
declaragent tenants show <tenant_id>
If the requester is a skill / plugin, inspect its manifest — a config change may have introduced an out-of-scope ref.
Post-incident
- Capture: top 5 denied refs, requesters, scope config at time of incident.
- Close when: denial rate < 0.01/s for 30 minutes.
- If reconnaissance is suspected, file a security review ticket with the platform team.