Uh oh!
There was an error while loading. Please reload this page.
ci: sign the published image in CI via OIDC-federated KMS - #268
Closed
robinnsc wants to merge 2 commits into
Closed
Conversation
Moves production Docker Hub signing off operator laptops into a reviewer-gated workflow: the dockerhub environment supplies the registry credential and enforces the two-person rule mechanically, and AWS access is OIDC-federated to a role only this repository's approved environment runs can assume. Pins cosign by checksum and the credentials action by commit SHA, forces the proven tag-based storage flags, and fails the run if the .sig tag does not appear.
robinnsc
requested review from
LeeroyHannigan, amrith, c33howard, jcshepherd, pdf-amzn and yesyayen
as code ownersAugust 14, 2026 08:47
github.ref_name on a workflow_dispatch from main is 'main', which would have annotated production signatures with the wrong release.
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A
sign-imageworkflow: dispatch it with a verified image digest and anapproved run signs that digest on Docker Hub with the production KMS key —
attached Cosign signature, legacy tag-based storage, no transparency log
(deliberate, see below). AWS access is OIDC-federated (
id-token: write);there are no new secrets anywhere. cosign is pinned by checksum, the
credentials action by commit SHA. A post-sign gate fails the run unless the
sha256-<digest>.sigTAG exists and is a single OCI manifest — the exactfailure mode cosign v3's defaults produce (new-format referrer, no tag),
which we hit live on ECR tonight.
Why
Manual signing requires one person to simultaneously hold a production KMS
session and the team registry credential on a laptop. Nobody should be
comfortable with that. This moves the act into the
dockerhubenvironment,which supplies the registry credential it already holds and enforces the
two-person rule mechanically (required reviewers, no self-review, main
only) instead of by chat message.
The AWS side is already live and verified:
ExtendDBContainerSigningCIcan be assumed only via GitHub OIDC by runs of this repository in the
dockerhubenvironment, and the key policy (both its Allow and itsexplicit Deny) admits exactly that role plus the manual break-glass
operator role. This is Phase 1 of the pipeline consolidation plan, pulled
forward — nothing here is launch-throwaway.
Transparency log is off this release for consistency with the ECR
signature (signed from a corp machine, which cannot reach Rekor — it is
DNS-sinkholed). Runners can reach Rekor, so next release this becomes a
one-flag change plus runbook update.
Testing done
yaml.safe_loadpasses; input gate follows the env-only pattern fromghcr-mirror (digest regex is the same one fuzzed on ci: mirror Cosign signature artifacts through the GHCR mirror job #264).
--use-signing-config=false --new-bundle-format=false --tlog-upload=false) was proven live againstECR Public tonight: produced the
.sigtag, single OCI manifest,simplesigning layer, verified with the production key.
key policy Allow + Deny); policy before/after archived in release
evidence.
ci: mirror Cosign signature artifacts through the GHCR mirror job #264, ci: accept promoted release tags in the GHCR mirror job #266). First dispatch is the live verification; every gate fails
closed.
Checklist
cargo test --workspace) — not applicable, workflow-only changecargo fmt --check) — not applicablecargo clippy -- -W clippy::pedantic) — not applicableADR / RFC: n/a — CI tooling only.
Breaking changes
None. The manual signing path remains available as break-glass.
By submitting this pull request, I confirm that my contribution is made under
the terms of the Apache License 2.0 and I agree to the Developer Certificate of
Origin (DCO). See CONTRIBUTING.md for details.