Skip to main content

Agent reference

Docker image

patryk2402/guardmap-agent:latest

Public image on Docker Hub. Built from gcr.io/distroless/static-debian12:nonroot — no shell, no package manager, minimal attack surface.

Environment variables

VariableRequiredDescription
GUARDMAP_API_KEYAPI key generated in the Integrations page
SUPABASE_URLGuardMap Supabase endpoint
SUPABASE_ANON_KEYGuardMap Supabase anon key
CLUSTER_NAMEMust match the cluster name in the dashboard exactly
KUBECONFIGPath to kubeconfig. Leave empty for in-cluster config (recommended)
GUARDMAP_URLDashboard URL (e.g. https://app.guardmap.io). When set, Slack notifications include a View in GuardMap button linking to the Findings page.

Required RBAC permissions

The agent needs read-only access to:

rules:
- apiGroups: [""]
resources: [pods, serviceaccounts, services, nodes, namespaces, secrets, configmaps]
verbs: [get, list, watch]
- apiGroups: ["apps"]
resources: [deployments, statefulsets, daemonsets, replicasets]
verbs: [get, list, watch]
- apiGroups: ["networking.k8s.io"]
resources: [ingresses, networkpolicies]
verbs: [get, list, watch]
- apiGroups: ["batch"]
resources: [jobs, cronjobs]
verbs: [get, list, watch]
- apiGroups: ["rbac.authorization.k8s.io"]
resources: [roles, clusterroles, rolebindings, clusterrolebindings]
verbs: [get, list, watch]

The agent never writes to your cluster.

Schedule

Default: every 6 hours (0 */6 * * *). To change:

kubectl patch cronjob guardmap-scanner -n guardmap \
-p '{"spec":{"schedule":"0 */12 * * *"}}'

Manual trigger

kubectl create job -n guardmap \
--from=cronjob/guardmap-scanner \
guardmap-manual-$(date +%s)

What the agent sends

FieldDescription
graph_dataFull node/edge graph (K8s topology + IRSA chains)
findingsArray of {type, severity, resource, description}
security_score0–100 computed score
critical_countNumber of critical findings
high_countNumber of high findings
medium_countNumber of medium findings
low_countNumber of low findings
duration_msScan duration in milliseconds
k8s_versionKubernetes version from node info
node_countNumber of nodes in the cluster
regionAWS/cloud region from node labels

Server-side limits

  • Max 10 scans per cluster per hour
  • graph_data max 8 MB
  • findings max 2 MB
  • security_score must be 0–100