Skip to content

Assurance profiles

An assurance profile is what your security officer chooses for one cluster: compliance baseline, who holds the root keys, how nodes prove what they are, disk encryption, human sign-in strength, audit, how task records are signed, network posture, data residency and which agent tasks may run. It is data, not code: the portal form is rendered from a JSON Schema (draft 2020-12), the schema rejects impossible combinations, and the values become configuration of your cluster (Helm values and OpenTofu variables).

Status: In development. Schema version v1alpha1; it will change. Choosing a baseline selects the controls we map to; it is not a certification or authorization.

Preset Summary
commercial-standard NIST 800-53 Rev 5 Moderate, keys held by our management OpenBao (transit), cloud attestation
fedramp-high-like GovCloud, your cloud KMS, TPM attestation, AAL3 sign-in
airgapped-dod-like DoD IL6 overlay, your HSM, your hardware, no internet

The names describe intent (“like”): no preset is authorized by FedRAMP or DoD.

  • Keys held by us (platform-transit) only for NIST Low or Moderate, never High, any FedRAMP baseline, CJIS, CMMC or DoD IL.
  • Your KMS, HSM or Shamir custody each require their settings block.
  • FIPS 140-3 required: custody must be your KMS or HSM, and Keycloak runs in FIPS strict mode.
  • High baseline or FIPS: disk keys not static or node-derived; AAL2 or higher; immutable audit kept at least 365 days.
  • TPM required: tpm_devid attestation with an approved TPM vendor list; not on Hetzner Cloud.
  • AAL3: no synced passkeys; authenticator attestation direct or enterprise. CAC/PIV needs trust anchors.
  • Air-gapped: no tunnel, no egress, your own registry, HSM or Shamir custody, no cloud attestors, no public Rekor, your hardware only.
  • DoD IL5/IL6: US persons only; AWS GovCloud, Azure Government or your hardware only.

Profiles created through the portal form are checked against all of these; a subset is also enforced by the cluster API itself (Kubernetes CEL rules).

Generated at build time from a vendored copy of assurance/schema.json in the portal repository (source commit recorded in vendor/portal-assurance/SOURCE of this site’s repository).

Schema https://zeta-reticuli.ai/schemas/assurance-profile/v1alpha1/schema.json: 115 fields.

FieldType / allowed valuesRequiredDefaultDescription
apiVersionconst "assurance.zeta-reticuli.ai/v1alpha1"yes
kindconst "AssuranceProfile"yes
metadataobjectyes
metadata.namestring (pattern ^[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?$)yes
metadata.tenantstring (pattern ^[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?$)yesSPIFFE trust domain becomes {tenant}.reti-infra.com
metadata.approvedBystringSecurity officer who approved this profile (name or email)
metadata.approvedAtstring (date-time)
complianceobjectyes
compliance.baseline"nist-800-53-rev5-low" | "nist-800-53-rev5-moderate" | "nist-800-53-rev5-high" | "fedramp-low" | "fedramp-moderate" | "fedramp-high" | "fedramp-li-saas"yesSelects the OSCAL profile in /data/src/compliance/profiles/
compliance.overlaysarray of "cmmc-l1" | "cmmc-l2" | "cmmc-l3" | "cjis" | "hipaa" | "pci-dss-4" | "dod-il4" | "dod-il5" | "dod-il6"
compliance.fips140_3RequiredbooleanfalseEvery crypto module on the key path must be FIPS 140-3 validated
keyCustodyobjectyesRoot of trust for OpenBao seal, Flux sops decryption and OpenTofu state encryption
keyCustody.mode"platform-transit" | "customer-kms" | "customer-hsm" | "shamir"yesplatform-transit: our management OpenBao transit. customer-kms: customer's cloud KMS (BYOK/HYOK). customer-hsm: pkcs11 or kmip HSM the customer owns. shamir: no auto-unseal, customer custodians.
keyCustody.kmsobject
keyCustody.kms.provider"awskms" | "gcpckms" | "azurekeyvault" | "ocikms" | "alicloudkms" | "ovhcloud" | "tcloudpublic"yes
keyCustody.kms.keyRefstringyesKey ARN / resource id / vault+key name. Not a secret.
keyCustody.kms.regionstring
keyCustody.kms.endpointstring (uri)e.g. a FIPS or GovCloud endpoint
keyCustody.kms.hsmBackedbooleanKey lives in the provider's HSM tier (CloudHSM-backed, Managed HSM, Cloud HSM)
keyCustody.kms.keyOrigin"provider-generated" | "byok-imported" | "hyok-external"
keyCustody.hsmobject
keyCustody.hsm.protocol"pkcs11" | "kmip"yes
keyCustody.hsm.modelstringVendor and model, e.g. YubiHSM 2, Thales Luna 7
keyCustody.hsm.fipsCertificatestring (pattern ^[0-9]+$)CMVP certificate number
keyCustody.hsm.fipsLevel1 | 2 | 3 | 4
keyCustody.hsm.keyLabelstring
keyCustody.hsm.mechanismstringPKCS#11 mechanism, e.g. CKM_AES_GCM
keyCustody.shamirobject
keyCustody.shamir.sharesinteger [1..10]yes
keyCustody.shamir.thresholdinteger [1..10]yes
keyCustody.shamir.custodiansarray of objectsyes
keyCustody.shamir.custodians[].namestringyes
keyCustody.shamir.custodians[].pgpKeyFingerprintstring (pattern ^[0-9A-F]{40}$)yes
keyCustody.shamir.unsealDrillDaysinteger [1..]90
keyCustody.recoverySharesobjectAuto-unseal recovery key split (operator init -recovery-shares). Ignored for shamir.
keyCustody.recoveryShares.sharesinteger [1..10]
keyCustody.recoveryShares.thresholdinteger [1..10]
keyCustody.recoveryShares.heldBy"customer" | "platform" | "split"
keyCustody.rotationDaysinteger [1..730]365
openbaoobjectyes
openbao.voters3 | 5yesRaft voters; each on a distinct physical host / failure domain
openbao.nonVotersinteger [0..4]0
openbao.spreadAcross"hosts" | "zones" | "regions""zones"
openbao.zonesarray of string
openbao.snapshotobject
openbao.snapshot.intervalHoursinteger [1..]24
openbao.snapshot.retainDaysinteger [1..]30
openbao.snapshot.destinationstringBucket URI in an allowed residency region
nodeAttestationobjectyes
nodeAttestation.methodsarray of "tpm_devid" | "aws_iid" | "azure_msi" | "azure_imds" | "gcp_iit" | "k8s_psat" | "x509pop" | "join_token"yesSPIRE server node attestors allowed for this cluster
nodeAttestation.tpmRequiredbooleanfalse
nodeAttestation.approvedTpmVendorsarray of string (pattern ^[A-Z0-9 ]{2,4}$)TPM manufacturer IDs (TPM_PT_MANUFACTURER, 4-char) whose endorsement CA goes into tpm_devid endorsement_ca_path
nodeAttestation.secureBootRequiredbooleantrue
nodeAttestation.allowSoftwareTpmbooleanfalseswtpm/vTPM without a manufacturer EK cert (lab only)
diskEncryptionobjectyes
diskEncryption.keySource"tpm" | "kms" | "tpm+kms" | "nodeID" | "static"yesTalos volume encryption key provider for STATE and EPHEMERAL (luks2)
diskEncryption.kmsEndpointstring (uri)gRPC KMS (siderolabs/kms-client protocol), not a cloud KMS API
diskEncryption.tpmPcrsarray of integer [0..23][7]
diskEncryption.lockToStatebooleantrue
diskEncryption.providerDiskEncryptionbooleantrueAlso require the cloud's volume encryption (CMK where supported)
identityobjectyes
identity.federationarray of objects
identity.federation[].protocol"saml" | "oidc"yes
identity.federation[].aliasstring (pattern ^[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?$)yes
identity.federation[].metadataUrlstring (uri)yes
identity.federation[].requireSignedAssertionsbooleantrue
identity.aal"AAL1" | "AAL2" | "AAL3"yesNIST SP 800-63B-4 authenticator assurance level
identity.cacPivRequiredbooleanfalse
identity.x509TrustAnchorsarray of "dod-pki" | "fpki-common-policy" | "customer-ca"
identity.webauthnobject
identity.webauthn.acceptableAaguidsarray of string (pattern ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$)Empty = any authenticator
identity.webauthn.allowSyncedPasskeysbooleantrue
identity.webauthn.attestation"none" | "indirect" | "direct" | "enterprise""direct"
identity.cibaobject
identity.ciba.enabledbooleantrue
identity.ciba.expiresInSecondsinteger [30..600]120
identity.sessionobject
identity.session.idleMinutesinteger [1..1440]30
identity.session.maxHoursinteger [1..720]12
identity.session.reauthForPrivilegedMinutesinteger [1..1440]15
identity.keycloakFipsMode"off" | "non-strict" | "strict""off"
auditobjectyes
audit.sinksarray of objectsyes
audit.sinks[].type"in-cluster-loki" | "s3-object-lock" | "syslog-tls" | "splunk-hec" | "customer-siem-otlp"yes
audit.sinks[].endpointstring
audit.retentionDaysinteger [30..3650]yes
audit.immutablebooleantrueWORM / object lock in compliance mode
audit.sourcesarray of "kube-apiserver" | "openbao" | "keycloak" | "spire" | "talos" | "flux" | "agent-tasks"
evidenceSigningobjectyes
evidenceSigning.mode"platform-key" | "customer-kms" | "keyless-spiffe"yescosign signer for in-toto/DSSE task records
evidenceSigning.kmsUristring (pattern ^(awskms|gcpkms|azurekms|hashivault)://)cosign --key URI
evidenceSigning.rekor"public" | "private" | "none""private"
evidenceSigning.fulcioUrlstring (uri)
networkobjectyes
network.airGappedbooleanyes
network.cloudflareTunnelAllowedbooleantrue
network.egressAllowListarray of string
network.registry"platform-mirror" | "customer-harbor" | "customer-zot""platform-mirror"
network.platformSupportAccess"none" | "break-glass" | "standing""break-glass"
residencyobjectyes
residency.placementsarray of objectsyes
residency.placements[].provider"aws" | "aws-govcloud" | "azure" | "azure-government" | "gcp" | "oci" | "alibaba" | "tencent" | "ovh" | "hetzner-cloud" | "hetzner-dedicated" | "cherry" | "vultr" | "customer-metal"yes
residency.placements[].regionstringyes
residency.usPersonsOnlybooleanfalse
agentPolicyobjectyes
agentPolicy.digitalTasksbooleanyes
agentPolicy.licensedTasks"deny" | "with-human-approval" | "with-licensed-supervisor"yes
agentPolicy.physicalTasks"deny" | "with-human-approval" | "allowed"yes
agentPolicy.allowedSocCodesarray of string (pattern ^[0-9]{2}-[0-9]{4}\.[0-9]{2}$)
agentPolicy.approvalobject
agentPolicy.approval.spendUsdAbovenumber [0..]
agentPolicy.approval.externalCommunication"never" | "first-contact" | "always""first-contact"
agentPolicy.approval.dataExport"never" | "always""always"
agentPolicy.approval.approversinteger [1..3]1Distinct CIBA approvals (two-person rule = 2)
agentPolicy.modelsarray of stringAllowed model endpoints/families behind the gateway