loading…
Search for a command to run...
loading…
Defensive credential-exposure auditor for GKE that inventories workload identity, service account tokens, and RBAC posture, exposing findings via an MCP server
Defensive credential-exposure auditor for GKE that inventories workload identity, service account tokens, and RBAC posture, exposing findings via an MCP server at /mcp.
Defensive credential-exposure auditor for GKE. Deployed in-cluster as a single
Pod (Deployment + Service); fronted by Natoma at /mcp.
The server uses its own ServiceAccount to:
SelfSubjectRulesReview and a curated SelfSubjectAccessReview matrix./openapi.json (Swagger UI at /docs, ReDoc at /redoc)./mcp (per MCP spec rev 2025-03-26).Both surfaces share the same redacted pydantic models. Raw bearer tokens, JWT signatures, PEM
private keys, and Secret values are never returned. The break-glass RAW_REVEAL flag exists for
debugging individual tokens; it never extends to namespace Secret values.
Natoma is the auth boundary for /mcp. The server itself has no native auth; this is intentional
and surfaced in /version, audit://server-info, and the OpenAPI spec via x-auth=none (gateway-managed).
This repo has a root Dockerfile. Point Natoma at this repo and it will build and run the
container. The server reads $PORT (default 8080) and binds 0.0.0.0. uvicorn is configured
with --proxy-headers --forwarded-allow-ips="*" so X-Forwarded-* from the gateway is honored.
kubectl apply -f manifests/rbac.yaml
kubectl apply -f manifests/deployment.yaml
kubectl apply -f manifests/service.yaml
kubectl apply -f manifests/networkpolicy.yaml
Then point Natoma's gateway at http://gke-cred-audit.<namespace>.svc:8080/mcp.
The bundled NetworkPolicy only permits ingress from namespaces labeled natoma-gateway: "true";
adjust to match your installation. Egress is restricted to the Kubernetes API server and the GCE
metadata IP.
AUDIT_ENABLE_SECRET_LISTING=true opts in to namespace Secret enumeration. Even when enabled, the
server returns metadata only -- name, type, key names, per-key size, per-key SHA-256 prefix.
Values are never returned. A property-based test (tests/test_redaction_invariant.py)
runs against mocked Secrets containing real-looking base64 data to enforce this.
The trade-off: granting secrets:list to the audit ServiceAccount makes the audit pod a high-trust
target. Default is OFF. When enabling, prefer:
resourceNames: [...] to specific Secret names.NS-SECRETS-LIST-GRANTED finding will appear in /findings to make this visible.pip install -e '.[dev]'
gke-cred-audit --bind 127.0.0.1 --port 8080
Then:
curl http://127.0.0.1:8080/openapi.json -- OpenAPI 3.1 documentcurl http://127.0.0.1:8080/findings?severity=HIGH -- JSON findingscurl http://127.0.0.1:8080/server-info -- capability manifesthttp://127.0.0.1:8080/mcpdata/stringData under any flag.Выполни в терминале:
claude mcp add gke-cred-audit -- npx PRs, issues, code search, CI status
автор: GitHubDatabase, auth and storage
автор: SupabaseSecure file operations with configurable access controls.
Reference / test server with prompts, resources, and tools.
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development