Skip to content

Commit d2c7ad9

Browse files
butler54claude
andauthored
feat: update policies, RVPS format, and admin config for Trustee 1.1 (#18)
Trustee 1.1 introduces several breaking changes requiring updates across the chart: - OPA attestation policy: use hyphenated TEE keys (az-snp-vtpm, az-tdx-vtpm) with bracket notation, query_reference_value() extension instead of data.reference, and add trust_claims output object - Resource policy: migrate to Rego v1 syntax (import rego.v1, :=, if) - RVPS reference values: switch to top-level value array format and include both secure and debug initdata PCR8 hashes - KBS admin config: add kbs.admin.format value (default v1.0) to support v1.1 type = "Simple" with [[admin.personas]] format Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent a91f071 commit d2c7ad9

6 files changed

Lines changed: 43 additions & 49 deletions

File tree

templates/attestation-policy.yaml

Lines changed: 20 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,66 +14,43 @@ data:
1414
default hardware := 97
1515
default configuration := 36
1616
17-
## miminimal but reliable attestation policy
18-
## hardware and firmware changes. This is not in our control. It's up to the user to update acceptable measurements
19-
## In conjuction with verification with the service provider.
20-
## currently setup for azure vTPM
21-
17+
trust_claims := {
18+
"executables": executables,
19+
"hardware": hardware,
20+
"configuration": configuration,
21+
}
2222
2323
##### Azure vTPM SNP
2424
executables := 3 if {
25-
# input.azsnpvtpm.measurement in data.reference.measurement
26-
input.azsnpvtpm.tpm.pcr03 in data.reference.snp_pcr03
27-
input.azsnpvtpm.tpm.pcr08 in data.reference.snp_pcr08
28-
input.azsnpvtpm.tpm.pcr09 in data.reference.snp_pcr09
29-
input.azsnpvtpm.tpm.pcr11 in data.reference.snp_pcr11
30-
input.azsnpvtpm.tpm.pcr12 in data.reference.snp_pcr12
25+
input["az-snp-vtpm"].tpm.pcr03 in query_reference_value("snp_pcr03")
26+
input["az-snp-vtpm"].tpm.pcr08 in query_reference_value("snp_pcr08")
27+
input["az-snp-vtpm"].tpm.pcr09 in query_reference_value("snp_pcr09")
28+
input["az-snp-vtpm"].tpm.pcr11 in query_reference_value("snp_pcr11")
29+
input["az-snp-vtpm"].tpm.pcr12 in query_reference_value("snp_pcr12")
3130
}
3231
3332
hardware := 2 if {
34-
# Check the reported TCB to validate the ASP FW
35-
# input.azsnpvtpm.reported_tcb_bootloader in data.reference.tcb_bootloader
36-
# input.azsnpvtpm.reported_tcb_microcode in data.reference.tcb_microcode
37-
# input.azsnpvtpm.reported_tcb_snp in data.reference.tcb_snp
38-
# input.azsnpvtpm.reported_tcb_tee in data.reference.tcb_tee
39-
input.azsnpvtpm
33+
input["az-snp-vtpm"]
4034
}
4135
42-
# For the 'configuration' trust claim 2 stands for
43-
# "The configuration is a known and approved config."
44-
#
45-
# For this, we compare all the configuration fields.
4636
configuration := 2 if {
47-
# input.azsnpvtpm.platform_smt_enabled in data.reference.smt_enabled
48-
# input.azsnpvtpm.platform_tsme_enabled in data.reference.tsme_enabled
49-
# input.azsnpvtpm.policy_abi_major in data.reference.abi_major
50-
# input.azsnpvtpm.policy_abi_minor in data.reference.abi_minor
51-
# input.azsnpvtpm.policy_single_socket in data.reference.single_socket
52-
# input.azsnpvtpm.policy_smt_allowed in data.reference.smt_allowed
53-
input.azsnpvtpm
37+
input["az-snp-vtpm"]
5438
}
5539
5640
##### Azure vTPM TDX
5741
executables := 3 if {
58-
input.aztdxvtpm.tpm.pcr03 in data.reference.tdx_pcr03
59-
input.aztdxvtpm.tpm.pcr08 in data.reference.tdx_pcr08
60-
input.aztdxvtpm.tpm.pcr09 in data.reference.tdx_pcr09
61-
input.aztdxvtpm.tpm.pcr11 in data.reference.tdx_pcr11
62-
input.aztdxvtpm.tpm.pcr12 in data.reference.tdx_pcr12
42+
input["az-tdx-vtpm"].tpm.pcr03 in query_reference_value("tdx_pcr03")
43+
input["az-tdx-vtpm"].tpm.pcr08 in query_reference_value("tdx_pcr08")
44+
input["az-tdx-vtpm"].tpm.pcr09 in query_reference_value("tdx_pcr09")
45+
input["az-tdx-vtpm"].tpm.pcr11 in query_reference_value("tdx_pcr11")
46+
input["az-tdx-vtpm"].tpm.pcr12 in query_reference_value("tdx_pcr12")
6347
}
6448
6549
hardware := 2 if {
66-
# Check the quote is a TDX quote signed by Intel SGX Quoting Enclave
67-
input.aztdxvtpm.quote.header.tee_type == "81000000"
68-
input.aztdxvtpm.quote.header.vendor_id == "939a7233f79c4ca9940a0db3957f0607"
69-
70-
# Check TDX Module version and its hash. Also check OVMF code hash.
71-
# input.aztdxvtpm.quote.body.mr_seam in data.reference.mr_seam
72-
# input.aztdxvtpm.quote.body.tcb_svn in data.reference.tcb_svn
73-
# input.aztdxvtpm.quote.body.mr_td in data.reference.mr_td
50+
input["az-tdx-vtpm"].quote.header.tee_type == "81000000"
51+
input["az-tdx-vtpm"].quote.header.vendor_id == "939a7233f79c4ca9940a0db3957f0607"
7452
}
7553
7654
configuration := 2 if {
77-
# input.aztdxvtpm.quote.body.xfam in data.reference.xfam
78-
input.aztdxvtpm
55+
input["az-tdx-vtpm"]
7956
}

templates/kbs-config-map.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,17 @@ data:
1313
private_key = "/etc/https-key/tls.key"
1414
certificate = "/etc/https-cert/tls.crt"
1515
[admin]
16+
{{- if eq (default "v1.0" .Values.kbs.admin.format) "v1.1" }}
17+
type = "Simple"
18+
insecure_api = false
19+
20+
[[admin.personas]]
21+
id = "admin"
22+
public_key_path = "/etc/auth-secret/publicKey"
23+
{{- else }}
1624
insecure_api = false
1725
auth_public_key = "/etc/auth-secret/publicKey"
26+
{{- end }}
1827
1928
[attestation_token]
2029
insecure_key = false

templates/reference-values.yaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,5 @@ metadata:
77
annotations:
88
argocd.argoproj.io/sync-wave: "4"
99
data:
10-
reference-values.json: |
11-
[
12-
]
10+
reference-values.json: '[]'
1311
{{ end }}

templates/resource-policy.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@ metadata:
88
data:
99
policy.rego: |
1010
package policy
11-
default allow = false
12-
allow {
11+
12+
import rego.v1
13+
14+
default allow := false
15+
16+
allow if {
1317
input["submods"]["cpu0"]["ear.status"] == "affirming"
1418
}

templates/rvps-values-policies.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,13 @@ spec:
2020
severity: medium
2121
object-templates-raw: |
2222
{{`{{- $pcr8Hash := fromConfigMap "imperative" "initdata" "PCR8_HASH" -}}`}}
23+
{{`{{- $debugPcr8Hash := fromConfigMap "imperative" "debug-initdata" "PCR8_HASH" -}}`}}
2324
{{`{{- $secretData := (lookup "v1" "Secret" "trustee-operator-system" "pcr-stash").data.json | base64dec | fromJson -}}`}}
2425
{{`{{- $pcr03 := $secretData.measurements.sha256.pcr03 -}}`}}
2526
{{`{{- $pcr09 := $secretData.measurements.sha256.pcr09 -}}`}}
2627
{{`{{- $pcr11 := $secretData.measurements.sha256.pcr11 -}}`}}
2728
{{`{{- $pcr12 := $secretData.measurements.sha256.pcr12 -}}`}}
28-
{{`{{- $referenceValues := list (dict "name" "snp_pcr03" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr03)) (dict "name" "tdx_pcr03" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr03)) (dict "name" "snp_pcr08" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr8Hash)) (dict "name" "tdx_pcr08" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr8Hash)) (dict "name" "snp_pcr09" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr09)) (dict "name" "tdx_pcr09" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr09)) (dict "name" "snp_pcr11" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr11)) (dict "name" "tdx_pcr11" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr11)) (dict "name" "snp_pcr12" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr12)) (dict "name" "tdx_pcr12" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr12)) -}}`}}
29+
{{`{{- $referenceValues := list (dict "name" "snp_pcr03" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr03)) (dict "name" "tdx_pcr03" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr03)) (dict "name" "snp_pcr08" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr8Hash $debugPcr8Hash)) (dict "name" "tdx_pcr08" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr8Hash $debugPcr8Hash)) (dict "name" "snp_pcr09" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr09)) (dict "name" "tdx_pcr09" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr09)) (dict "name" "snp_pcr11" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr11)) (dict "name" "tdx_pcr11" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr11)) (dict "name" "snp_pcr12" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr12)) (dict "name" "tdx_pcr12" "expiration" "2027-12-12T00:00:00Z" "value" (list $pcr12)) -}}`}}
2930
- complianceType: mustonlyhave
3031
objectDefinition:
3132
apiVersion: v1

values.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ global:
2020

2121
# KBS (Key Broker Service) configuration
2222
kbs:
23+
admin:
24+
# Admin config format: "v1.0" for Trustee 1.0 (auth_public_key),
25+
# "v1.1" for Trustee 1.1+ (type = "Simple" with [[admin.personas]])
26+
format: "v1.0"
27+
2328
# Security policy is an expected secret and is required to be pushed into the KBS
2429
# presumes security policy flavour is signed
2530
cosignKeys: secret/data/hub/coSignKeys

0 commit comments

Comments
 (0)