Skip to content

feat: trustee-chart v0.9.0 — Trustee 1.2 / OSC 1.13 support#36

Closed
butler54 wants to merge 18 commits into
validatedpatterns:mainfrom
butler54:dev/osc-1.13-upgrade
Closed

feat: trustee-chart v0.9.0 — Trustee 1.2 / OSC 1.13 support#36
butler54 wants to merge 18 commits into
validatedpatterns:mainfrom
butler54:dev/osc-1.13-upgrade

Conversation

@butler54

Copy link
Copy Markdown
Collaborator

Summary

Update trustee-chart from v0.8.0 to v0.9.0 for Trustee 1.2 / OSC 1.13 support, based on Phase 12 code analysis (33 upstream changes, 13 breaking) and Phase 13 design spec (clean version bump).

KBS Config TOML Rewrite (B4-B10, B13, C4-C5)

  • [admin] section: replaced type/insecure_api/auth_public_key with authorization_mode = "DenyAll"
  • [attestation_token]: renamed insecure_key to insecure_header_jwk
  • [attestation_service]: removed work_dir and policy_engine
  • [attestation_service.rvps_config]: flattened nested storage to storage_type = "LocalJson"
  • [[plugins]]: replaced type = "LocalFs" + dir_path with storage_backend_type = "kvstorage"
  • New [storage_backend] section with unified paths at /opt/confidential-containers/storage
  • New inline [attestation_service.verifier_config.dcap_verifier] (replaces separate ConfigMap)
  • Deleted [policy_engine] section entirely

KbsConfig CR + Template Cleanup (C1, C4-C5)

  • Removed tdxConfigSpec / kbsTdxConfigMapName from kbs.yaml
  • Deleted tdx-config.yaml template entirely (TDX config now inline in KBS TOML)
  • Removed obsolete kbs.admin.format from values.yaml

RVPS Format Migration (B1-B3)

  • reference-values.yaml: key reference-values.json: '[]' changed to reference_value: '{}'
  • rvps-values-policies.yaml: construction changed from list/append to dict/set (object format); all 16 reference value names preserved

Resource Policy (B11)

  • resource-policy.yaml: data key policy.rego changed to resource-policy.rego; custom EAR-based policy body unchanged

Chart Metadata

  • Chart.yaml: version 0.8.0 to 0.9.0

Test plan

  • helm template . renders valid YAML with default values
  • helm template . --set kbs.tdx.enabled=true renders inline DCAP verifier section
  • helm template . --set kbs.gpu.enabled=true renders NVIDIA verifier section
  • Zero grep matches for stale v1.1 patterns
  • Deploy on fresh OCP cluster with OSC 1.13 / Trustee 1.2 operators

butler54 and others added 4 commits July 16, 2026 23:22
- Replace admin type/insecure_api with authorization_mode
- Rename insecure_key to insecure_header_jwk (B5)
- Remove work_dir and policy_engine (B6)
- Flatten RVPS config storage_type = LocalJson (B7)
- Replace resource plugin with storage_backend_type (B8)
- Add unified storage_backend section (B8, B13)
- Remove policy_engine section entirely (B9)
- Simplify attestation_token_broker to signer (B10)
- Add inline dcap_verifier for TDX (C5)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove tdxConfigSpec from KbsConfig CR (C1)
- Delete tdx-config.yaml template (C4-C5)
- Bump chart version from 0.8.0 to 0.9.0 (D-01)
- Remove obsolete kbs.admin.format from values.yaml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- reference-values.yaml: rename key, change default
- rvps-values-policies.yaml: list/append to dict/set
- rvps-values-policies.yaml: update ConfigMap data key
- All 16 reference value names preserved
- Data key changed from policy.rego to resource-policy.rego
- Custom EAR-based policy body preserved unchanged
- B12 permissive default change not applicable
@butler54
butler54 force-pushed the dev/osc-1.13-upgrade branch from d784f6e to 5f34085 Compare July 16, 2026 23:22
butler54 and others added 14 commits July 16, 2026 23:42
authorization_mode = "DenyAll" replaced the old admin
auth keypair flow. Remove the now-unused:
- kbs-operator-keys.yaml (ESO for admin public key)
- kbsAuthSecretName from KbsConfig CR
- kbs.publicKey vault path from values.yaml

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…mount

- Add kbsAuthSecretName: kbs-auth-public-key back to KbsConfig CR spec
- Create dummy Opaque secret kbs-auth-public-key in trustee-operator-system
- Operator v1.2 controller requires this field for volume mount even though
  admin auth is disabled (authorization_mode = DenyAll)
The Trustee 1.2 operator migrates ConfigMaps without the
kbs.confidentialcontainers.org/migrated-from-v1.1.0 annotation by
creating a .v1.1 backup and deleting the original. However, it only
implements recreation-from-backup for kbs-config, not for
attestation-policy or resource-policy. This creates a loop where the
operator deletes the ConfigMaps then fails because they're missing.

Adding the migration annotation tells the operator these ConfigMaps
are already in v1.2 format and should not be migrated.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Red Hat Trustee KBS v1.2.0 still expects RVPS reference values in the
v1.1 list format (reference-values.json key, array of name/value/expiration
objects). The v1.2 dict format causes "malformed value: invalid type: map,
expected a string" deserialization errors.

Reverts f2b0608 until the Red Hat build ships native v1.2 RVPS support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Trustee 1.2 operator hardcodes subPath=reference_value when mounting
the RVPS ConfigMap, so the key must be reference_value (not
reference-values.json). But the KBS v1.2.0 binary still expects v1.1
array format data. Use the v1.2 key name with v1.1 data format.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1. Add migration annotation to kbs-config-map.yaml and
   reference-values.yaml to prevent operator from deleting
   ArgoCD-managed ConfigMaps

2. Fix reference-values.yaml default from '[]' to '{}' — the
   LocalJson storage backend expects a JSON object

3. Rewrite rvps-values-policies.yaml to output v1.2 format:
   dict of URL-safe base64-encoded ReferenceValue structs
   (version, name, expiration, value fields per entry)

4. Add migration annotation to the ACM-policy-generated
   rvps-reference-values ConfigMap

Addresses all issues documented in TRUSTEE-1.2-GITOPS-INCOMPATIBILITY.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- kbs-config-map.yaml: add migration annotation
- reference-values.yaml: add migration annotation, fix default to '{}'
- attestation-policy.yaml: add hardware fallback for TCB OutOfDate
  (trust score 3 instead of 2) — Intel platforms commonly report
  OutOfDate TCB when microcode updates lag behind advisories

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- sealed-secrets-signing-eso.yaml: sync public JWK from Vault to
  K8s Secret 'signing-key' in trustee-operator-system namespace
- kbs.yaml: add 'signing-key' to kbsSecretResources so KBS can
  serve the public key at kbs:///default/signing-key/public

Guest CDH uses the kid URI to fetch the public key for sealed
secret signature verification during unsealing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add hardcoded Azure DCasv5 platform configuration reference values
(measurement, smt_enabled, tsme_enabled, abi_major, abi_minor,
single_socket, smt_allowed) as configurable defaults in values.yaml.

These are Azure platform constants for the CVM firmware and SEV-SNP
policy. They are required by the attestation policy for configuration
and executables trust claims but are not produced by veritas.

The SNP launch measurement is static per Azure CVM firmware generation
and will only change when Azure updates UEFI/vTPM firmware.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The RVPS BuiltIn LocalJson storage needs file_dir_path to know where
to read reference values. Without it, query_reference_value() returns
empty — causing attestation policy to use default (contraindicated)
trust claims for configuration and executables.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…dx-vtpm)

The Trustee AS passes evidence to OPA with dashes (az-snp-vtpm) per the
EAR token annotated_evidence key. The policy was using underscores
(az_snp_vtpm), causing input["az_snp_vtpm"] to be undefined and all
rules to fall through to defaults.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
count(query_reference_value("key")) errors with "count requires
array/object/set/string, got null" when the key doesn't exist in RVPS.
This kills the entire OPA policy evaluation, preventing all rules
(including fallbacks) from firing.

Add null != check before count() to let the rule evaluate to false
instead of erroring, allowing else fallbacks to work.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Comment out measurement, TCB, and config checks for az-snp-vtpm
  (upstream has these commented out — Azure manages these at platform level)
- Comment out mr_td, xfam checks for az-tdx-vtpm (per upstream)
- Remove else fallbacks that were unreachable due to count(null) errors
- Keep PCR checks active (snp_pcr03/08/09/11/12) as upstream does
- hardware=2 and configuration=2 now granted when az-snp-vtpm present
  (matching upstream behavior)

Root cause: count(query_reference_value("tcb_bootloader")) crashed with
"count requires array, got null" killing entire OPA evaluation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Azure peer-pods CDH does not fetch registry credentials from KBS via
authenticated_registry_credentials_uri. Pull secrets are distributed
to workload namespace SAs instead (sandboxed-policies-chart ps-dist).

The credential Secret in trustee-operator-system is only needed for
baremetal kata where CDH fetches kbs:///default/credential/regcred.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant