You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: demos/bundle-attestation-demo-slides.html
+2-2Lines changed: 2 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -191,7 +191,7 @@ <h2>Generated artifacts have no upstream tag</h2>
191
191
</table>
192
192
<divclass="grid2">
193
193
<divclass="mini"><h4>Without attestation</h4><p>Bundle is just files. <codeclass="inl">checksums.txt</code> catches accidental corruption, nothing else.</p></div>
194
-
<divclass="mini"><h4>With <codeclass="inl">--attest</code></h4><p>The files listed in <codeclass="inl">checksums.txt</code>are cryptographically bound to the creator <em>and</em> the binary that produced it (recipe.yaml excluded, #1549). Recursive provenance.</p></div>
194
+
<divclass="mini"><h4>With <codeclass="inl">--attest</code></h4><p>The generated payload files listed in <codeclass="inl">checksums.txt</code>, including <codeclass="inl">recipe.yaml</code>, are cryptographically bound to the creator <em>and</em> the binary that produced it. Recursive provenance.</p></div>
+ Rekor inclusion proof). Its in-toto subject is the SHA256 of
108
-
`checksums.txt`, so signing this one file transitively pins every content
109
-
file that `checksums.txt` lists. The signer identity is the creator's OIDC
110
-
identity. (Caveat: `recipe.yaml` is currently written *after*`checksums.txt`
111
-
and is not yet covered — tracked in #1549.)
108
+
`checksums.txt`, so signing this one file transitively pins every generated
109
+
payload file that `checksums.txt` lists, including `recipe.yaml`. The signer
110
+
identity is the creator's OIDC identity.
112
111
***`aicr-attestation.sigstore.json`** — the SLSA Build Provenance attestation
113
112
*of the AICR CLI binary that produced the bundle*, copied in at bundle time.
114
113
Its signer identity is NVIDIA CI (`https://github.com/NVIDIA/aicr/.github/workflows/on-tag.yaml@...`).
@@ -143,7 +142,7 @@ Bundle verification: PASSED
143
142
144
143
Five gates run, top to bottom:
145
144
146
-
1.**Checksums** — every file listed in `checksums.txt` is hashed and compared (recipe.yaml is not yet listed — #1549).
145
+
1.**Checksums** — every generated payload file listed in `checksums.txt`, including `recipe.yaml`, is hashed and compared.
147
146
2.**Bundle signature** — the Sigstore Bundle is verified against the trusted root.
148
147
3.**Bundle predicate** — the in-toto subject is checked against the actual `checksums.txt` digest.
149
148
4.**Binary attestation chain** — `aicr-attestation.sigstore.json` is verified and its subject is checked against the CLI binary digest claimed in the bundle predicate.
Copy file name to clipboardExpand all lines: docs/user/cli-reference.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1747,7 +1747,7 @@ Use `--dynamic` for values that genuinely vary per cluster — cluster names, su
1747
1747
| Cluster-specific value (varies per deployment) | `--dynamic` | `--dynamic alloy:clusterName` |
1748
1748
| Static override (same for all deployments of this bundle) | `--set` | `--set gpuoperator:driver.version=580.105.08` |
1749
1749
1750
-
> **Attestation scope:** Dynamic values are supplied at install time and are **not covered by `--attest`**. Attestation binds the files listed in `checksums.txt` (recipe.yaml excluded, #1549), not operator-provided overrides. If you need to constrain dynamic values at deploy time, use admission control or Argo sync hooks — see [Attestation Scope](#attestation-scope).
1750
+
> **Attestation scope:** Dynamic values are supplied at install time and are **not covered by `--attest`**. Attestation binds the generated payload files listed in `checksums.txt`, including `recipe.yaml` in Helm bundles, not operator-provided overrides. If you need to constrain dynamic values at deploy time, use admission control or Argo sync hooks — see [Attestation Scope](#attestation-scope).
1751
1751
1752
1752
```shell
1753
1753
--dynamic component:path.to.field
@@ -2169,7 +2169,7 @@ When `--attest` is passed, the bundle command performs five steps:
2169
2169
1.**Verifies the binary attestation file exists** — The running `aicr` binary must have a valid SLSA provenance file (`aicr-attestation.sigstore.json`) alongside it, included by the install script from a release archive. If missing, the command fails immediately with guidance on how to install correctly.
2170
2170
2.**Acquires a signing credential** — in the default keyless mode this is an OIDC token (see [OIDC Token Sources](#oidc-token-sources) below); with `--signing-key` this step instead resolves the KMS key and no OIDC token is acquired (see [KMS-Backed Signing](#kms-backed-signing)).
2171
2171
3.**Verifies the binary's own attestation** — Cryptographically verifies the SLSA provenance binds to the running binary and was signed by NVIDIA CI. This ensures only NVIDIA-built binaries can produce attested bundles.
2172
-
4.**Signs the bundle** — Creates a SLSA Build Provenance v1 in-toto statement binding the creator's identity to the files listed in `checksums.txt` (recipe.yaml is currently excluded, #1549) and the binary that produced it.
2172
+
4.**Signs the bundle** — Creates a SLSA Build Provenance v1 in-toto statement binding the creator's identity to the generated payload files listed in `checksums.txt`, including `recipe.yaml` in Helm bundles, and the binary that produced it.
2173
2173
5.**Writes attestation files** — `attestation/bundle-attestation.sigstore.json` and `attestation/aicr-attestation.sigstore.json` are added to the bundle output.
2174
2174
2175
2175
Attestation is opt-in; bundles are unsigned by default. By default, signing uses Sigstore keyless signing (Fulcio CA + Rekor transparency log) and records the entry in **Rekor v2** (the signing config is fetched from Sigstore's TUF repository, so shard rotation is handled automatically; a cold cache is fetched on demand). Verifying such bundles with `aicr verify` needs only the `aicr` binary; verifying them with `cosign verify-blob-attestation` needs Cosign v3.0.1+. For CI/CD environments without OIDC, pass `--signing-key` to sign with a cloud KMS key instead; see [KMS-Backed Signing](#kms-backed-signing) below. For verification, see [`aicr verify`](#aicr-verify).
@@ -2296,7 +2296,7 @@ HashiCorp Vault (`hashivault://`) is not supported: its client libraries are MPL
2296
2296
2297
2297
##### Attestation Scope
2298
2298
2299
-
Attestation binds the files listed in `checksums.txt`(recipe.yaml is currently excluded, #1549; the attestation files are verified separately) — defaults, dynamic-value stubs, and any external `--data` files copied into the bundle. It does **not** bind install-time values supplied via `helm --set`, a user-provided `-f extra.yaml`, or Argo `Application.spec.source.helm.parameters`. That boundary is intentional: dynamic values are the operator's domain by design.
2299
+
Attestation binds the generated payload files listed in `checksums.txt`— including `recipe.yaml` in Helm bundles, defaults, dynamic-value stubs, and any external `--data` files copied into the bundle. The attestation files are verified separately. It does **not** bind install-time values supplied via `helm --set`, a user-provided `-f extra.yaml`, or Argo `Application.spec.source.helm.parameters`. That boundary is intentional: dynamic values are the operator's domain by design.
2300
2300
2301
2301
If you need to enforce specific install-time values (e.g., pinning `driver.version`), that is a **policy concern**, not an attestation one. Use admission control (Kyverno, Gatekeeper) or Argo sync hooks to reject deployments that violate the policy. `aicr verify` checks bundle integrity and provenance; it does not evaluate install-time value constraints.
0 commit comments