Unreleased documentation. These pages follow the main branch and can change before the next release. For supported guidance, use v0.44.0.
Use this checklist after product configuration is valid and before exposing a deployment to callers.
Before you start
Section titled “Before you start”- Record the exact source revision, package digest, runtime configuration, and operator approval.
- Use the product’s production check and keep the report with the deployment record.
- Identify every secret owner, source owner, audit owner, and recovery owner.
- Test recovery with non-production data.
- Have
evidence check --require-runtime-dependenciesrunnable on the target host against the exact revision you intend to serve. Registry Evidence has no posture endpoint or admin surface. Startup, readiness, and offline checks expose invalid deployment inputs.
Keys and custody
Section titled “Keys and custody”- Configure one active ES256 P-256 Registry Evidence public JWK with a derived RFC 7638 thumbprint
kid, plus only the overlap keys needed to verify current assertions.evidence checkrefuses a revoked or malformed active public JWK, andevidence check --require-runtime-dependencieson the target host refuses a configured signer that does not match it. - Supply local-assurance private JWKs, HMAC keys, and source credentials through
secret:file/<name>references belowsecretProviders.file.root. The file provider accepts only regular, non-symlink files owned by the service identity at mode0400or0600, and checks owner, mode, link count, no-follow behavior, and open-file identity. Keep the secret root operator-only. - Prefer the file provider with a secret root dedicated to the deployment. Enable
secretProviders.environment: {}only for a dedicated, curated process environment. Review each bundlesecret:env/<NAME>reference because an enabled environment provider can resolve any named variable in that environment. Onlyruntime.yamlcan enable a provider. - Give the Registry Evidence audit hash key and subject-binding key independently generated raw key material of at least 32 bytes each. The file provider does not base64-decode them.
- Rotate a Registry Evidence signing key by publishing the next public JWK first, then changing the active JWK and pinned Transit key version. Retain the old public key for at least the maximum assertion validity plus allowed clock skew. Follow Rotate Registry Evidence signing keys.
- Use a workload-local Vault or OpenBao Transit proxy over a Unix socket for production Evidence Gateway signing. Require P-256, signing enabled, non-exportable key material, plaintext backup disabled, and an exact governed public-key match. Local JWK signing is for local assurance. See Configure Transit signing.
- Escrow the Base Registry Engine (BReg) Transit key before the first encrypted field goes live. The runtime stores only the wrapped data-encryption key, so losing the Transit key irrecoverably loses every value sealed with it. A health check does not certify escrow.
- Keep the BReg base64 local-file DEK out of production. Startup permits it only when
identity.databaseInitializationEnvironmentislocal, andbregctl doctorreports the same refusal. - Retire or encrypt every backup taken before a BReg field was encrypted. A pre-flip backup holds plaintext for as long as it is retained. See Field encryption for restricted fields.
Check BReg and Casework authority
Section titled “Check BReg and Casework authority”- Use separate migration and runtime database roles with TLS. Run the product’s doctor against the deployed runtime configuration and confirm the serving credential cannot activate packages.
- Bind the service behind your controlled TLS edge. Verify the exact issuer, audience, admitted clients, scopes, and selected access profiles with both permitted and refused synthetic calls.
- For BReg, verify the installed package, required package signatures, and current database activation before serving. Test row and field disclosure with a least-privilege caller as well as the administrator.
- For Casework, bootstrap only the intended teams and queues. Test requester, reviewer, and supervisor separation, initiator exclusion, distinct approvals, and a revoked Directory member. Resolve the doctor’s distinct-approver warning before relying on a multi-approval stage.
- Keep current-source human display on the caller’s own token and source profile. Give the service status credential only its declared read purpose. Deploy BReg and Casework at matching versions, and verify that Casework approval alone cannot apply a producer mutation.
- Exercise an unavailable audit destination and reconcile a mutation whose response was lost. Archive service and operator audit streams, and test the separate database restore and payload retention procedures with synthetic data.
Treat a failed negative test as an authorization or deployment defect. Correct the responsible policy, grants, or credentials and rerun it before exposing traffic.
Freeze the Registry Evidence package and target
Section titled “Freeze the Registry Evidence package and target”-
Mount the installed package and its artifacts, the deployment target’s
runtime.yaml, and each named CA bundle read-only and non-writable to the service process. Keep the secret root at mode0700or tighter. Keep every bound source extract non-writable too. Registry Evidence refuses writable deployment inputs before serving. -
Freeze the package and target before proving or serving them, then prove the frozen bytes on the target host:
Terminal window chmod -R a-w "<installed-package>" && chmod 444 "<deployment-target>/runtime.yaml"evidence check --runtime-config "<deployment-target>/runtime.yaml" \--require-runtime-dependencies --require-audit-under "<audit-root>"evidence evaluate --runtime-config "<deployment-target>/runtime.yaml" \--fixture "fixtures/<cases>.yaml" -
Review the complete simultaneously enabled bundle as one disclosure surface, including threshold ladders, overlapping categories, more precise regions, jurisdiction variants, coexisting revisions, and relationship combinations. A declared
disclosureGuardfamily is an operator attestation, not a semantic classifier. -
Confirm that no two authority paths cover the same requirement, purpose, and subject tuple. Startup does not detect that overlap; request-time evaluation denies the ambiguous request.
-
Keep
responseFormatsat the signed default unless a reviewed decision widens it. Unsigned output is transport-authenticated convenience and is never later-verifiable evidence.
Audit destination and retention
Section titled “Audit destination and retention”- Registry Evidence and Render use the shared audit writer. Its
auditblock selectsfileorstdout; a file destination also setspath,rotateBytes(100 MiB by default), andretentionDays(90 by default). Put the path on durable storage in a directory owned by the service user and not writable by group or others. - Audit is fail-closed. Registry Evidence durably accepts an access-attempt entry before every source stage and a disclosure-release entry before returning the response. Render accepts its request entry before work and response entry before release. A full or unwritable disk stops those operations instead of degrading to best-effort logging.
- Run one process per audit path. The writer holds an exclusive
<path>.lockfor its lifetime. Give each replica a separate path, or usestdoutand collect every stream centrally. - After any failed write, the writer refuses later entries until restart. Readiness rechecks the active file, so renaming, truncating, or replacing it under a running process revokes readiness.
- Rotation renames the active file to
<path>.<sequence>and removes sealed files older thanretentionDays. Ship each sealed file before local retention deletes it. - The log has no hash chain or signature. Ship sealed files or
stdoutto append-only storage the service account cannot change. The products do not prove remote receipt. - Before first use of the shared writer, archive older chained audit segments and start with a fresh path so the new retention policy cannot delete the old format unexpectedly.
- Every Registry Evidence pseudonym carries
audit.hashKeyVersion. Raise that version when rotating the audit master, and retain the old master for as long as older pseudonyms must be recomputable.
Transport and edge
Section titled “Transport and edge”- Terminate TLS and manage certificates at a reviewed reverse proxy or load balancer.
- Bind Registry Evidence to loopback, a private IPv4 address, or a unique-local IPv6 address. Its
runtime fixes
tlsTerminationtooperator-controlled-upstreamandtrustProxyIdentityHeaderstofalse; it validates tokens itself. - Leave
metricsListenerunset unless needed. When present, bind it to a distinct private address. It serves onlyGET /metrics; the Evidence listener does not serve metrics. - Size Registry Evidence
rateLimitsas per-process, in-memory budgets. N replicas multiply each limit by N, and restart restores the full budget. Set the failed-selector budget deliberately and enforce per-client quotas at the gateway. - Keep every Evidence source hop on a private network where possible. Give Registry Evidence a dedicated source credential scoped to the exact operation the bundle performs.
- Keep hostname and fixed-origin verification enabled for every Evidence HTTP source. Evidence
Gateway ignores
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY, andNO_PROXY, follows no redirect, and has no application proxy setting.
Authorization and disclosure
Section titled “Authorization and disclosure”- Review scopes, access profiles, source requests, and disclosure rules as governed input.
- Exercise missing, expired, wrongly issued, and insufficiently scoped credentials.
- Confirm a denied request reaches no protected source.
- Confirm configuration cannot widen access through an unknown or ignored field.
Assume an automated adversary
Section titled “Assume an automated adversary”- Take runtime updates on a deliberate cadence. Track advisories against pinned base images and edge components as well as the runtime.
- Keep the refusal surface uninformative end to end. Do not let the edge add distinguishing error pages, redirects, or timing differences in front of the runtime’s closed problem shapes.
- Rehearse replacement of a governed Evidence bundle. The time to withdraw a disclosure is the deployment pipeline’s, so measure it before an incident.
Registry Evidence exposes no posture route. Its posture is the exact package and closed runtime file it loaded, mounted read-only, with no reload, merge, governed-field override, or fallback. Record the package digest and retain the runtime file with the deployment record. One process serves one operator-controlled trust domain; mutually distrustful issuers or customers require separate deployments, signers, bundles, and audit boundaries.
Incident response
Section titled “Incident response”- Know the private vulnerability reporting channel before an incident.
- For a compromised Evidence signing key, disable provider signing authority, remove its public
JWK, add its thumbprint to
signing.revokedKeyIds, and activate a checked replacement or leave the service unavailable. Restart affected issuers and consumers. Registry Evidence has no assertion revocation or status feature, so use short validity windows and key denylisting. - Rotate a compromised source credential at the source and restart the affected process.
- Preserve shipped audit copies and copy the entire local audit directory, including sealed files, before retention removes them.
- A
403 evidence.denieddeliberately does not identify the failed authorization check. Inspect trusted local configuration and the audit refusal phase: audience, matching grant, authority, purpose and subject roles, then response-format permission.
Verify
Section titled “Verify”Before handoff, record:
- production configuration and package checks;
- authenticated and unauthenticated request results;
- audit failure behavior;
- source timeout and size-limit behavior;
- backup and restore evidence; and
- the rollback trigger and responsible operator.
Also confirm Registry Evidence readiness rechecks the subject-binding key, signer, pinned audit sink, and every source credential. It does not send an evidence-data request, so readiness does not prove that a source returns data. Verify a stored assertion offline with independently retained expectations, and confirm an audited request reaches the configured durable sink.
Troubleshooting
Section titled “Troubleshooting”| Symptom | Cause | Fix |
|---|---|---|
| Registry Evidence refuses a non-immutable input | The package, runtime.yaml, captured artifact, or CA bundle is writable, or the secret root is reachable by group or other | Freeze the package and target, tighten the secret root to 0700, and restart |
| Registry Evidence refuses an invalid bound source extract | The named extract is writable | Make the extract non-writable and restart |
| A second Registry Evidence process reports a locked audit sink | Two processes share one audit.path | Use one writer per path or use distinct paths or stdout per replica |
Registry Evidence returns 403 evidence.denied unexpectedly | Audience, grant, authority, purpose, subject, or format authorization failed | Check local configuration in the incident-response order and inspect the audit refusal phase |
Cookies on Registry Stack
We use optional cookies to understand how you use the main Registry Stack website and this documentation. If you contact us, we may link this activity to your enquiry. You can change your choice at any time. Read the privacy policy.
Your browser asks sites not to track you, so optional tracking stays off.
We could not use or save that choice. Optional tracking remains off.