-
Notifications
You must be signed in to change notification settings - Fork 649
Add support for SigningConfig in sign/attest #4371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #4371 +/- ##
==========================================
- Coverage 40.10% 34.32% -5.78%
==========================================
Files 155 217 +62
Lines 10044 15518 +5474
==========================================
+ Hits 4028 5327 +1299
- Misses 5530 9500 +3970
- Partials 486 691 +205 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
1d07438 to
8dbe6bf
Compare
|
Putting this up for an early review. Only the last commit is new, the first two commits will be merged in other open PRs. I also am currently doing some manual testing. |
|
Testing against staging with a local zot instance: Sign: Attest: |
|
Note to reviewers: Going to take a pass over trying to reduce duplication. Edit: Reviewing the code, I'd rather not try to reduce duplication for now between sign and attest. These commands will be nearly identical post-Cosign v3, so I'd rather just remove one later on then try to determine a good API for shared logic between the two right now. |
a789a34 to
4f9d05d
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I love how all the pieces are clicking together! Just a few minor, non-blocking comments.
This will indirectly add support for signing with Rekor v2, since signing will be handled by sigstore-go rather than Cosign. This also brings sign/attest up to par with sign-blob/attest-blob with respect to signing with a key and providing a trusted root when providing a signing config. This feature is gated behind one of two signing config flags, which in a later version of Cosign will be flipped to on by default. Signed-off-by: Hayden <8418760+haydentherapper@users.noreply.github.com>
--signing-config and --use-signing-config are now mutually exclusive. TrustedMaterial and SigningConfig are set in the same line as fetching the trusted root and signing config. Signed-off-by: Hayden <8418760+haydentherapper@users.noreply.github.com>
4f9d05d to
81e920f
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [cosign](https://github.com/sigstore/cosign) | minor | `2.5.3` -> `2.6.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>sigstore/cosign (cosign)</summary> ### [`v2.6.0`](https://github.com/sigstore/cosign/blob/HEAD/CHANGELOG.md#v260) [Compare Source](sigstore/cosign@v2.5.3...v2.6.0) v2.6.0 introduces a number of new features, including: - Signing an in-toto statement rather than Cosign constructing one from a predicate, along with verifying a statement's subject using a digest and digest algorithm rather than providing a file reference ([#​4306](sigstore/cosign#4306)) - Uploading a signature and its verification material (a ["bundle"](https://github.com/sigstore/protobuf-specs/blob/main/protos/sigstore_bundle.proto)) as an OCI Image 1.1 referring artifact, completing [#​3927](sigstore/cosign#3927) ([#​4316](sigstore/cosign#4316)) - Providing service URLs for signing and attesting using a [SigningConfig](https://github.com/sigstore/protobuf-specs/blob/4df5baadcdb582a70c2bc032e042c0a218eb3841/protos/sigstore_trustroot.proto#L185). Note that this is required when using a [Rekor v2](https://github.com/sigstore/rekor-tiles) instance ([#​4319](sigstore/cosign#4319)) Example generation and verification of a signed in-toto statement: ``` cosign attest-blob --new-bundle-format=true --bundle="digest-key-test.sigstore.json" --key="cosign.key" --statement="../sigstore-go/examples/sigstore-go-signing/intoto.txt" cosign verify-blob-attestation --bundle="digest-key-test.sigstore.json" --key=cosign.pub --type=unused --digest="b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9" --digestAlg="sha256" ``` Example container signing and verification using the new bundle format and referring artifacts: ``` cosign sign --new-bundle-format=true ghcr.io/user/alpine@sha256:a19367999603840546b8612572e338ec076c6d1f2fec61760a9e11410f546733 cosign verify --new-bundle-format=true ghcr.io/user/alpine@sha256:a19367999603840546b8612572e338ec076c6d1f2fec61760a9e11410f546733 ``` Example usage of a signing config provided by the public good instance's TUF repository: ``` cosign sign-blob --use-signing-config --bundle sigstore.json README.md cosign verify-blob --new-bundle-format --bundle sigstore.json --certificate-identity $EMAIL --certificate-oidc-issuer $ISSUER --use-signed-timestamps README.md ``` v2.6.0 leverages sigstore-go's signing and verification APIs gated behind these new flags. In an upcoming major release, we will be updating Cosign to default to producing and consuming bundles to align with all other Sigstore SDKs. #### Features - Add to `attest-blob` the ability to supply a complete in-toto statement, and add to `verify-blob-attestation` the ability to verify with just a digest ([#​4306](sigstore/cosign#4306)) - Have cosign sign support bundle format ([#​4316](sigstore/cosign#4316)) - Add support for SigningConfig for sign-blob/attest-blob, support Rekor v2 ([#​4319](sigstore/cosign#4319)) - Add support for SigningConfig in sign/attest ([#​4371](sigstore/cosign#4371)) - Support self-managed keys when signing with sigstore-go ([#​4368](sigstore/cosign#4368)) - Don't require timestamps when verifying with a key ([#​4337](sigstore/cosign#4337)) - Don't load content from TUF if trusted root path is specified ([#​4347](sigstore/cosign#4347)) - Add a terminal spinner while signing with sigstore-go ([#​4402](sigstore/cosign#4402)) - Require exclusively a SigningConfig or service URLs when signing ([#​4403](sigstore/cosign#4403)) - Remove SHA256 assumption in sign-blob/verify-blob ([#​4050](sigstore/cosign#4050)) - Bump sigstore-go, support alternative hash algorithms with keys ([#​4386](sigstore/cosign#4386)) #### Breaking API Changes - `sign.SignerFromKeyOpts` no longer generates a key. Instead, it returns whether or not the client needs to generate a key, and if so, clients should call `sign.KeylessSigner`. This allows clients to more easily manage key generation. #### Bug Fixes - Verify subject with bundle only when checking claims ([#​4320](sigstore/cosign#4320)) - Fixes to cosign sign / verify for the new bundle format ([#​4346](sigstore/cosign#4346)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMTMuNSIsInVwZGF0ZWRJblZlciI6IjQxLjExMy41IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Summary
This will indirectly add support for signing with Rekor v2, since signing will be handled by sigstore-go rather than Cosign.
This also brings sign/attest up to par with the recent changes to sign-blob/attest-blob, including signing with a key and providing a path to a trusted root when providing a signing config to verify after signing.
This feature is gated behind one of two signing config flags, which in a later version of Cosign will be flipped to on by default. Once this is the default, we'll be able to refactor the core signing and verification logic in Cosign, largely replacing it with sigstore-go.
Fixes #4324
Release Note
Documentation