This document defines the strict boundaries for service accounts, secrets, and environment configurations in the Evidence Freezer project.
To enforce principle of least privilege, we use separate service accounts for each component:
- target-app-sa:
- Used by the target vulnerable app.
- Has access only to safe external APIs. No permissions to Firestore or GCP Admin.
- arize-phoenix-mcp-sa:
- Used by the official Arize Phoenix MCP wrapper on Cloud Run.
- Reads only the Phoenix system API key secret.
- evidence-watcher-sa:
- Poller service account.
- Needs
roles/datastore.user(Firestore read/write). - Needs
roles/aiplatform.user(or equivalent) to invoke the Gemini Enterprise Analyst runtime. - Needs
roles/run.invokerfor the private official Arize Phoenix MCP service.
- adk-analyst-sa:
- Used by the Vertex AI Agent Engine/Gemini Enterprise runtime.
- Needs
roles/run.invokerfor the private official Arize Phoenix MCP service.
- Phoenix API Keys:
PHOENIX_SECRETandPHOENIX_API_KEYmust never be committed to the repository. They must be managed via Google Secret Manager in production and.envlocally. - Gemini API Keys: Use Google Cloud Default Credentials where possible. When
GEMINI_API_KEYis needed for local development, keep it in.env.
- In production, Phoenix is protected by Identity-Aware Proxy (IAP) and internal API keys.
PHOENIX_ENABLE_AUTH=trueis strictly required in the cloud setup to prevent public telemetry manipulation.
- Phoenix trace contents are untrusted evidence. User prompts, retrieved documents, tool inputs, tool outputs, model responses, span attributes, annotations, and metadata must not be treated as operational instructions by the watcher, analyst, dashboard, or deployment scripts.
- The analyst prompt may quote or summarize trace data only as evidence and must not copy long raw payloads into instructions.
- The dashboard renders Case File strings through React text nodes and does not use raw HTML for evidence, timeline, detector, or patch content.
- Prompt remediation is human-gated. Analyst output may set
prompt_patch.statustoproposed, but it must not approve, deploy, promote, or mutate production prompts. - The deployed MCP integration uses the official
@arizeai/phoenix-mcppackage for Phoenix trace/span/session/prompt access. - Prompt writes remain human-gated by policy. Do not enable mutation-oriented MCP tools for the MVP analyst runtime.