Set up Secrets Operator
This page walks you through installing 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 in your Kubernetes cluster and configuring it to retrieve credentials from the Aembit platform.
Secrets Operator supports two authentication paths to the Aembit platform:
- OIDC symmetric key (HS256): Secrets Operator signs tokens with a shared secret you generate and configure. Choose this when you need custom claims (for example, a store number), non-Kubernetes identity, or want to keep an existing prototype configuration. The following steps use this path.
- Kubernetes Service Account: Secrets Operator authenticates using its in-cluster ServiceAccount token, validated by your cluster’s OIDC endpoint. No signing key required. Choose this for Kubernetes-native identity and tighter match rules (namespace, pod name, ServiceAccount name). See Kubernetes Service Account authentication.
Prerequisites
Section titled “Prerequisites”Before you begin, ensure you have:
- A Kubernetes cluster (verified on Amazon EKS and K3s)
kubectlconfigured for your target cluster- Helm v3.x installed
If you plan to use CrowdStrike 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, you also need:
- CrowdStrike Falcon agent installed on cluster nodes
- CrowdStrike Agent ID written to
/etc/aembit/crowdstrike-aidon each node
Create the OIDC signing key
Section titled “Create the OIDC signing key”Secrets Operator authenticates to Aembit using OpenID Connect (OIDC): An identity layer built on top of OAuth 2.0 that lets applications verify the identity of a user or workload and obtain basic profile information using JSON Web Tokens (JWTs).Learn more(opens in new tab) tokens signed with a symmetric key. Generate a cryptographically random key and store it as a Kubernetes Secret. You need the base64-encoded value from this Secret when you configure the Trust Provider: Trust Providers validate Client Workload identities through workload attestation, verifying identity claims from the workload's runtime environment rather than relying on pre-shared secrets.Learn more in your Aembit tenant.
-
Generate the key and create the Secret:
Terminal window # Generate a 32-byte random key and create the Secretopenssl rand 32 | kubectl create secret generic aembit-oidc-signing-key \--from-file=key=/dev/stdin \--namespace <your-namespace> -
Retrieve the base64-encoded key value for use in your Trust Provider:
Terminal window kubectl get secret aembit-oidc-signing-key \--namespace <your-namespace> \-o jsonpath='{.data.key}'Copy this value—you paste it into the Trust Provider’s symmetric key field in the next section.
Create the claims ConfigMap
Section titled “Create the claims ConfigMap”Create a ConfigMap that defines the OIDC claims included in Secrets Operator’s identity tokens.
The iss (issuer) and sub (subject) claims control how the Trust Provider identifies Secrets Operator.
You can also add claims for per-cluster access policies.
kubectl create configmap aembit-oidc-claims \ --namespace <your-namespace> \ --from-literal=iss=https://aembit-secrets-operator.example.com \ --from-literal=sub=aembit-secrets-operatorYou reference this ConfigMap in the AembitEdgeApiClient custom resource
when you create custom resources.
Configure your Aembit tenant
Section titled “Configure your Aembit tenant”Set up the required Aembit resources to define the access policy for Secrets Operator. Secrets Operator authenticates using OIDC tokens signed with a symmetric key, so the Trust Provider and Client Workload: Client Workloads represent software applications, scripts, or automated processes that initiate access requests to Server Workloads, operating autonomously without direct user interaction.Learn more both use the OIDC ID Token type.
-
Log in to your Aembit tenant and create a Client Workload:
- Set the identification method to OIDC ID Token.
- Configure the subject match value to match the
subvalue you set in the claims ConfigMap (for example,aembit-secrets-operator).
-
Create a Trust Provider:
- Set the type to OIDC ID Token.
- Select Symmetric Key as the attestation method.
- Paste the base64-encoded key value you copied in Create the OIDC signing key.
- Configure match rules for
iss(issuer) andsub(subject) to match the values you set in the claims ConfigMap. - Note the Edge SDK Client ID—you need this for the
clientIdfield in theAembitEdgeApiClientCustom Resource Definition (CRD).
-
Create a Server Workload: Server Workloads represent target services, APIs, databases, or applications that receive and respond to access requests from Client Workloads.Learn more pointing to your HashiCorp Vault instance:
- Configure the host and port to match the values you plan to set in the
AembitSecretRefreshScheduleCRD (server.hostandserver.port).
- Configure the host and port to match the values you plan to set in the
-
Create a Credential Provider: Credential Providers obtain the specific access credentials—such as API keys, OAuth tokens, or temporary cloud credentials—that Client Workloads need to authenticate to Server Workloads.Learn more:
- Select Vault Client Token as the credential type.
- Configure the JWT subject, custom claims, and Vault authentication details.
- See Configure a HashiCorp Vault Client Token Credential Provider for detailed instructions.
-
(Optional) Create an Access Condition for CrowdStrike device posture validation. If enabled, Secrets Operator passes host attestation data (hostname, serial number, CrowdStrike Agent ID) with every authentication request. See Prepare host attestations to configure the host attestation file.
-
Create an 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 linking the Client Workload, Trust Provider, Server Workload, Credential Provider, and any Access Conditions.
-
Note the following values from your tenant configuration. You need these for the CRD configuration:
Value Where to find it Used in Tenant ID Tenant settings AembitEdgeApiClientspec.tenantIdEdge SDK Client ID Trust Provider details page AembitEdgeApiClientspec.clientIdResource Set ID (if applicable) Resource Set settings AembitEdgeApiClientspec.resourceSetIdServer Workload host and port Server Workload configuration AembitSecretRefreshSchedulespec.server
Prepare host attestations (optional)
Section titled “Prepare host attestations (optional)”If your Access Policy includes Access Conditions that validate device posture (for example, CrowdStrike device identity), prepare a host attestations file on each cluster node before deploying Secrets Operator.
Secrets Operator reads host attestation data from a file mounted into the pod via a hostPath volume.
The file must be available at the configured path (default: /run/aembit/host_attestations.json) on each node.
The file must contain a JSON object that satisfies the host field of the
Edge API authentication schema.
For example:
{ "hostname": "node-01.example.com", "domainName": "example.com", "systemSerialNumber": "ABC123DEF456", "sensors": { "crowdStrike": { "agentId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" } }}For more details on configuring host attestations, see the host attestations reference.
Install the Helm chart
Section titled “Install the Helm chart”-
Add the Aembit Helm repository:
Terminal window helm repo add aembit https://helm.aembit.iohelm repo update -
(Optional) Create a
values.yamlfile to override default chart values. For the complete list of configurable values, see the Helm chart values reference. -
Install Secrets Operator:
Terminal window helm install aembit-secrets-operator aembit/aembit-secrets-operator \--namespace aembit-system \--create-namespaceIf you created a
values.yaml, add--values values.yamlto the command. -
Verify the Secrets Operator pod is running:
Terminal window kubectl get pods --namespace aembit-systemExpected output:
NAME READY STATUS RESTARTS AGEaembit-secrets-operator-<id> 1/1 Running 0 30s
Create custom resources
Section titled “Create custom resources”Create the custom resources that tell Secrets Operator what credentials to manage.
-
Save the following manifest as
aembit-connection.yaml, replacing the placeholder values with the tenant ID and Edge SDK Client ID from your Aembit tenant:aembit-connection.yaml apiVersion: aembit.io/v1kind: AembitEdgeApiClientmetadata:name: aembit-connectionnamespace: aembit-systemspec:tenantId: "<your-tenant-id>"clientId: "<your-edge-sdk-client-id>"# resourceSetId: "<your-resource-set-id>" # Optionalattestations:oidc:source: generatedsigningSecretRef:name: aembit-oidc-signing-keysecretField: keyclaimsConfigMapRef:name: aembit-oidc-claims -
Apply the manifest to create the
AembitEdgeApiClientresource:Terminal window kubectl apply -f aembit-connection.yaml -
Save the following manifest as
vault-token-schedule.yaml, replacing theserver.hostandserver.portvalues with your Vault instance details. Create oneAembitSecretRefreshSchedulefor each credential you need managed:vault-token-schedule.yaml apiVersion: aembit.io/v1kind: AembitSecretRefreshSchedulemetadata:name: vault-token-schedulenamespace: aembit-systemspec:aembitEdgeApiClientRef:name: aembit-connectiontargetSecretName: vault-tokenserver:host: vault.example.comport: 8200# refreshInterval: "4h" # Optional: omit to use the credential's natural lifetime -
Apply the manifest to create the schedule:
Terminal window kubectl apply -f vault-token-schedule.yaml
Verify the installation
Section titled “Verify the installation”Confirm Secrets Operator is managing credentials successfully.
-
Check the status of your custom resources:
Terminal window kubectl get aembitedgeapiclient --namespace aembit-systemkubectl get aembitsecretrefreshschedule --namespace aembit-system -
Inspect the credential schedule status for details:
Terminal window kubectl describe aembitsecretrefreshschedule vault-token-schedule --namespace aembit-systemLook for
phase: Readyand a recentlastSyncTimeindicating successful credential retrieval. See the status fields reference for details. -
Verify that the target Secret exists:
Terminal window kubectl get secret vault-token --namespace aembit-systemThe Secret should exist and contain the credential data.
Kubernetes Service Account authentication
Section titled “Kubernetes Service Account authentication”Kubernetes Service Account authentication is an alternative to the OIDC symmetric key path above. Secrets Operator authenticates using its in-cluster ServiceAccount token — no signing key or claims ConfigMap required.
Skip the Create the OIDC signing key and Create the claims ConfigMap sections. All other steps (install the Helm chart, create custom resources, verify) are the same.
Configure your Aembit tenant for Kubernetes Service Account authentication
Section titled “Configure your Aembit tenant for Kubernetes Service Account authentication”In the Configure your Aembit tenant steps, make these changes:
-
Create a Client Workload:
- Set the identification method to Kubernetes Service Account.
- Configure match rules to identify the Secrets Operator pod (for example, namespace and ServiceAccount name).
-
Create a Trust Provider:
- Set the type to Kubernetes Service Account.
- Provide your cluster’s OIDC issuer URL. See Kubernetes Service Account Trust Provider for instructions by cluster type (EKS and K3s).
- Configure match rules (namespace, pod name, ServiceAccount name, or subject).
- Note the Edge SDK Client ID — you need this for the
clientIdfield.
-
Complete the remaining tenant steps (Server Workload, Credential Provider, Access Policy) the same way.
Create the AembitEdgeApiClient for Kubernetes Service Account authentication
Section titled “Create the AembitEdgeApiClient for Kubernetes Service Account authentication”Use kubernetesServiceAccount: {} instead of oidc: in the attestations field:
apiVersion: aembit.io/v1kind: AembitEdgeApiClientmetadata: name: aembit-connection namespace: aembit-systemspec: tenantId: "<your-tenant-id>" clientId: "<your-edge-sdk-client-id>" attestations: kubernetesServiceAccount: {} # uses default SA token path # kubernetesServiceAccount: # or use a custom projected-volume path: # tokenPath: /var/run/secrets/custom/tokenApply the manifest and then create the AembitSecretRefreshSchedule as described in
Create custom resources.
The credential retrieval flow is identical regardless of auth path.
Next steps
Section titled “Next steps”- Configuration Reference: CRD specifications, environment variables, and host attestations.
- Helm chart values: All configurable Helm chart values.
- Vault Client Token Credential Provider: Configure the Aembit Credential Provider for HashiCorp Vault.