Skip to content

Secrets Operator Configuration Reference

This page provides the Custom Resource Definition (CRD) specifications, environment variables, and host attestation reference for Aembit Secrets Operator: Aembit Secrets Operator is a Kubernetes operator that authenticates to the Aembit platform and synchronizes credentials into Kubernetes Secrets for applications to consume directly.Learn more (ASO). For Helm chart configuration, see Helm chart values.

Secrets Operator uses two CRDs: AembitEdgeApiClient defines the connection to Aembit, and AembitSecretRefreshSchedule defines which credentials to retrieve and how often to refresh them.

Defines the connection to the Aembit platform, including authentication and host attestation configuration. You typically create one per cluster. Short name: aeac.

apiVersion: aembit.io/v1
kind: AembitEdgeApiClient
metadata:
name: aembit-connection
spec:
tenantId: "<your-tenant-id>"
clientId: "<your-edge-sdk-client-id>"
# stackDomain: "useast2.aembit.io" # Optional: hostname suffix; URL is https://{tenantId}.ec.{stackDomain}
# resourceSetId: "<your-resource-set-id>" # Optional
attestations:
oidc: # Option 1: OIDC symmetric key (HS256)
source: generated
signingSecretRef:
name: aembit-oidc-signing-key
secretField: key
# claimsConfigMapRef: # Optional: OIDC claims
# name: aembit-oidc-claims
# kubernetesServiceAccount: {} # Option 2: default SA token path
# kubernetesServiceAccount: # Option 2: custom projected-volume path
# tokenPath: /var/run/secrets/custom/token
# host: # Optional: host attestation passthrough
# passthroughPath: /run/aembit/host_attestations.json
FieldTypeRequiredDescription
tenantIdstringYesYour Aembit tenant ID.
clientIdstringYesThe Edge SDK Client ID from your Aembit tenant. Find this on the Trust Provider details page in the Aembit UI.
stackDomainstringNoHostname suffix used to construct the Aembit Edge API URL. Defaults to useast2.aembit.io. The full URL is https://{tenantId}.ec.{stackDomain}.
resourceSetIdstringNoResource Set ID for scoped access. Omit to use the default resource set.
attestations.oidc.sourcestringNoOIDC token source. Only generated is supported.
attestations.oidc.signingSecretRef.namestringNoName of the Kubernetes Secret containing the OIDC symmetric signing key.
attestations.oidc.signingSecretRef.namespacestringNoNamespace of the signing key Secret. Defaults to the same namespace as this resource. Must be the same namespace—cross-namespace references cause errors.
attestations.oidc.signingSecretRef.secretFieldstringNoKey within the Secret that holds the signing key value.
attestations.oidc.claimsConfigMapRef.namestringNoName of a ConfigMap containing OIDC claims as key-value pairs. Can include standard claims like iss and sub or application-specific claims.
attestations.oidc.claimsConfigMapRef.namespacestringNoNamespace of the claims ConfigMap. Defaults to the same namespace as this resource. Must be the same namespace—cross-namespace references cause errors.
attestations.kubernetesServiceAccountobjectNoEnable Kubernetes Service Account token authentication. Set to {} to use the default SA token path, or provide tokenPath to use a custom projected-volume path. Use alone or alongside attestations.oidc. See Kubernetes Service Account Trust Provider for tenant-side configuration.
attestations.kubernetesServiceAccount.tokenPathstringNoPath to the projected ServiceAccount token file. Defaults to /var/run/secrets/kubernetes.io/serviceaccount/token. Set this when using a custom projected volume with a specific audience.
attestations.host.passthroughPathstringNoPath within the Secrets Operator pod where Secrets Operator mounts the host attestations file. Required when using host attestation Access Conditions.
FieldTypeDescription
phasestringCurrent state: Ready or Error.
conditions[]ConditionStandard Kubernetes conditions. The Ready condition indicates the resource is usable.

Defines which credential to retrieve, where to store it, and how often to refresh. Create one resource for each credential Secrets Operator should manage. Short name: asrs.

apiVersion: aembit.io/v1
kind: AembitSecretRefreshSchedule
metadata:
name: vault-token-schedule
spec:
aembitEdgeApiClientRef:
name: aembit-connection
targetSecretName: vault-token
server:
host: vault.example.com
port: 8200
# refreshInterval: "4h"
FieldTypeRequiredDescription
aembitEdgeApiClientRef.namestringYesName of the AembitEdgeApiClient resource to use for authentication.
aembitEdgeApiClientRef.namespacestringNoNamespace of the AembitEdgeApiClient. Defaults to the same namespace as this resource. Must be the same namespace—cross-namespace references cause errors.
targetSecretNamestringYesName of the Kubernetes Secret where Secrets Operator stores the credential. Secrets Operator creates this Secret if it doesn’t exist. Must be a valid DNS subdomain name (lowercase alphanumeric, - or .).
server.hoststringYesHostname or IP address of the target server (for example, your Vault instance).
server.portintegerYesPort of the target server (1–65535).
server.transportProtocolstringNoTransport protocol. TCP (default) or UDP.
refreshIntervaldurationNoHow often Secrets Operator proactively refreshes the credential. Accepts Go duration format (for example, 4h, 30m, 168h for 7 days). If not set, Secrets Operator refreshes at 80% of the credential’s expiry time, or defaults to 1h if no expiry appears in the response.

Secrets Operator reports status on each AembitSecretRefreshSchedule resource. Inspect with:

Terminal window
kubectl describe aembitsecretrefreshschedule <name>
FieldTypeDescription
phasestringCurrent state: Ready or Error.
lastSyncTimetimestampWhen Secrets Operator last successfully retrieved and wrote credentials to the target Secret.
nextRefreshTimetimestampWhen Secrets Operator next attempts to refresh the credential.
credentialExpiresAttimestampWhen the current credential expires.
consecutiveFailuresintegerNumber of consecutive failed retrieval attempts. Used for exponential backoff. Resets to 0 on success.
errorBackoffExpiresAttimestampWhen Secrets Operator next retries after a failure. Set while in the Error phase; reconciliation waits until this time before the next attempt. Cleared on success.
lastErrorDescstringHuman-readable description of the most recent error that caused the schedule to enter the Error phase. Inspect this first when troubleshooting a failing schedule.
syncedSecret.namestringName of the Kubernetes Secret containing the credential.
syncedSecret.namespacestringNamespace of the Kubernetes Secret containing the credential.

The kubectl get output includes these print columns for quick status checks:

Terminal window
kubectl get aembitsecretrefreshschedule --namespace aembit-system
NAME EDGE API CLIENT TARGET PHASE LAST SYNC NEXT REFRESH AGE
vault-token-schedule aembit-connection vault-token Ready 2026-03-19T10:00:00Z 2026-03-19T14:00:00Z 2d

Secrets Operator also emits Kubernetes events for state changes. View them with:

Terminal window
kubectl get events --namespace <namespace> --field-selector involvedObject.name=<schedule-name>

The following environment variables override default Secrets Operator configuration when set.

Default info

Logging verbosity. One of: off, debug, info, warn, error.


Default :8081

Address and port for health probes.


Default 1m

Wait time after the first reconciliation error.


Default 15m

Maximum wait time after repeated errors (exponential backoff cap).


Default - not set

Secrets Operator namespace. The Helm chart sets this automatically via the Downward API. Falls back to reading the service account namespace file.

When your Access Policy: Access Policies define, enforce, and audit access between Client and Server Workloads by cryptographically verifying workload identity and contextual factors rather than relying on static secrets.Learn more includes Access Condition: Access Conditions add dynamic, context-aware constraints to authorization by evaluating circumstances like time, location, or security posture to determine whether to grant access.Learn more that validate device posture, Secrets Operator can pass host-level attributes from the Kubernetes node to Aembit. For example, you can forward CrowdStrike device identity data for verification.

A JSON file on each node collects host attestation data. The file mounts into the Secrets Operator pod via a hostPath volume. Secrets Operator reads this file and includes the data in authentication requests.

  1. Prepare the host attestations file on each node. The file must contain a JSON object that satisfies the host field of the Edge API authentication schema. Place the file at the configured path (default: /run/aembit/host_attestations.json).

    /run/aembit/host_attestations.json
    {
    "hostname": "node-01.example.com",
    "domainName": "example.com",
    "systemSerialNumber": "ABC123DEF456",
    "sensors": {
    "crowdStrike": {
    "agentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
    }
    }
    }
  2. Enable host attestations in the Helm chart:

    values.yaml
    hostAttestations:
    enabled: true
    hostPath: /run/aembit/host_attestations.json
    mountPath: /run/aembit/host_attestations.json
  3. Reference the mount path in your AembitEdgeApiClient resource:

    spec:
    attestations:
    host:
    passthroughPath: /run/aembit/host_attestations.json
  • Host attestations use read-only hostPath mounts. Secrets Operator doesn’t write to the host filesystem.
  • Enabling host attestations requires a Pod Security Admission profile of baseline or privileged. The restricted profile doesn’t allow hostPath volumes.
  • Aembit validates all claimed attributes against the configured backend (for example, CrowdStrike). A compromised node can’t forge another node’s hardware identity.