Installation
Add the Formal Helm repository:formalAPIKey in a Secret, so the key is also in the Helm release. To keep the key out of Helm, create the Secret yourself and reference it with formalAPIKeySecret. The chart does not create or change that Secret, so External Secrets or another controller can manage it.
- Install the CRDs (FormalResource, FormalListener, FormalNativeUser, FormalPolicy)
- Create a ServiceAccount with the necessary RBAC permissions
- Deploy the operator
formalAPIKey, formalAPIKeySecret, or oidc.
Configuration
Default resource requests and limits:
Upgrading
Each chart release pins a compatible operator image.helm upgrade does not update CRDs, so apply them from the new chart version first:
Image pull credentials
Azure AKS
On AKS, installazure-gar-cred before the operator.
First complete the AKS identity setup.
ECR outside AWS
Installecr-cred before the operator when the cluster lacks native ECR access.
Set pullWithCredentials=true on the operator chart.
Do not install ecr-cred and azure-gar-cred in the same namespace.
Configuration file
The chart mounts a ConfigMap at/etc/formal/config.yaml and sets FORMAL_CONFIG. The file holds non-secret settings:
FORMAL_API_KEY comes from the chart Secret or from the Secret in formalAPIKeySecret. Helm adds a checksum/config annotation so ConfigMap changes roll the pod.
Verify: The pod has FORMAL_CONFIG=/etc/formal/config.yaml and the mounted file matches your values.
Authentication
Use an API key or OIDC. Do not set both.AWS OIDC
FORMAL_API_KEY.
Azure OIDC
Use theazure token source on AKS with Workload Identity or on Azure compute with managed identity. Set the integration ID to the ID of your Formal OIDC integration.
oidc.azure labels the pod with azure.workload.identity/use=true.
This token source does not support Azure DevOps Pipelines.
Verify: The operator pod starts and reconciles without FORMAL_API_KEY.
Kubernetes ServiceAccount OIDC
Useoidc.serviceAccountToken when Formal can reach your cluster’s ServiceAccount issuer over public HTTPS. Amazon EKS hosts this issuer publicly, even for clusters with a private API endpoint.
Find the issuer:
oidc.formal.ai/<integration_id> at /var/run/secrets/formal/token. Kubernetes rotates the token, and the operator reads it on every request.
The chart configures the operator’s file token source in the ConfigMap:
FORMAL_API_KEY.