Skip to content

Commit 0a58d4c

Browse files
authored
Merge pull request kubernetes#3061 from saschagrunert/signing-release-artifacts
KEP-3031: Add release artifact signing KEP
2 parents dbf5b76 + 2099733 commit 0a58d4c

File tree

2 files changed

+212
-0
lines changed

2 files changed

+212
-0
lines changed
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
# KEP-3031: Signing release artifacts
2+
3+
<!-- toc -->
4+
5+
- [Release Signoff Checklist](#release-signoff-checklist)
6+
- [Summary](#summary)
7+
- [Motivation](#motivation)
8+
- [Goals](#goals)
9+
- [Non-Goals](#non-goals)
10+
- [Proposal](#proposal)
11+
- [User Stories (Optional)](#user-stories-optional)
12+
- [Risks and Mitigations](#risks-and-mitigations)
13+
- [Graduation Criteria](#graduation-criteria)
14+
- [Alpha](#alpha)
15+
- [Beta](#beta)
16+
- [GA](#ga)
17+
- [Drawbacks](#drawbacks)
18+
- [Alternatives](#alternatives)
19+
- [Implementation History](#implementation-history)
20+
<!-- /toc -->
21+
22+
## Release Signoff Checklist
23+
24+
<!--
25+
**ACTION REQUIRED:** In order to merge code into a release, there must be an
26+
issue in [kubernetes/enhancements] referencing this KEP and targeting a release
27+
milestone **before the [Enhancement Freeze](https://git.k8s.io/sig-release/releases)
28+
of the targeted release**.
29+
30+
For enhancements that make changes to code or processes/procedures in core
31+
Kubernetes—i.e., [kubernetes/kubernetes], we require the following Release
32+
Signoff checklist to be completed.
33+
34+
Check these off as they are completed for the Release Team to track. These
35+
checklist items _must_ be updated for the enhancement to be released.
36+
-->
37+
38+
Items marked with (R) are required _prior to targeting to a milestone / release_.
39+
40+
- [ ] (R) Enhancement issue in release milestone, which links to KEP dir in [kubernetes/enhancements] (not the initial KEP PR)
41+
- [ ] (R) KEP approvers have approved the KEP status as `implementable`
42+
- [ ] (R) Design details are appropriately documented
43+
- [ ] (R) Test plan is in place, giving consideration to SIG Architecture and SIG Testing input (including test refactors)
44+
- [ ] e2e Tests for all Beta API Operations (endpoints)
45+
- [ ] (R) Ensure GA e2e tests for meet requirements for [Conformance Tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md)
46+
- [ ] (R) Minimum Two Week Window for GA e2e tests to prove flake free
47+
- [ ] (R) Graduation criteria is in place
48+
- [ ] (R) [all GA Endpoints](https://github.com/kubernetes/community/pull/1806) must be hit by [Conformance Tests](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md)
49+
- [ ] (R) Production readiness review completed
50+
- [ ] (R) Production readiness review approved
51+
- [ ] "Implementation History" section is up-to-date for milestone
52+
- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
53+
- [ ] Supporting documentation—e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
54+
55+
<!--
56+
**Note:** This checklist is iterative and should be reviewed and updated every time this enhancement is being considered for a milestone.
57+
-->
58+
59+
[kubernetes.io]: https://kubernetes.io/
60+
[kubernetes/enhancements]: https://git.k8s.io/enhancements
61+
[kubernetes/kubernetes]: https://git.k8s.io/kubernetes
62+
[kubernetes/website]: https://git.k8s.io/website
63+
64+
## Summary
65+
66+
Target of this enhancement is to define which technology the Kubernetes
67+
community is using to signs release artifacts.
68+
69+
## Motivation
70+
71+
Signing artifacts provides end users a chance to verify the integrity of the
72+
downloaded resource. It allows to mitigate man-in-the-middle attacks directly on
73+
the client side and therefore ensures the trustfulness of the remote serving the
74+
artifacts.
75+
76+
### Goals
77+
78+
- Defining the used tooling for signing all Kubernetes related artifacts
79+
- Providing a standard signing process for related projects (like k/release)
80+
81+
### Non-Goals
82+
83+
- Discussing not user-facing internal technical implementation details
84+
85+
## Proposal
86+
87+
Every Kubernetes release produces a set of artifacts. We define artifacts as
88+
something consumable by end users. Artifacts can be binaries, container images,
89+
checksum files, documentation, provenance metadata, or the software bill of
90+
materials. None of those end-user resources are signed right now.
91+
92+
The overall goal of SIG Release is to unify the way how to sign artifacts. This
93+
will be done by relying on the tools of the Linux Foundations digital signing
94+
project [sigstore](https://www.sigstore.dev). This goal aligns with the
95+
[Roadmap and Vision](https://github.com/kubernetes/sig-release/blob/f62149/roadmap.md)
96+
of SIG Release to provide a secure software supply chain for Kubernetes. It also
97+
joins the effort of gaining full SLSA Compliance in the Kubernetes Release
98+
Process ([KEP-3027](https://github.com/kubernetes/enhancements/issues/3027)).
99+
Because of that, the future [SLSA](https://slsa.dev) compliance of artifacts
100+
produced by SIG release will require signing artifacts starting from level 2.
101+
102+
[cosign](https://github.com/sigstore/cosign) will be the tool of our choice when
103+
speaking about the technical aspects of the solution. How we integrate the
104+
projects into our build process in k/release is out of scope of this KEP and
105+
will be discussed in the Release Engineering subproject of SIG Release. A
106+
pre-evaluation of the tool has been done already to ensure that it meets the
107+
requirements.
108+
109+
An [ongoing discussion](https://github.com/kubernetes/release/issues/2227) about
110+
using cosign already exists in k/release. This issue contains technical
111+
discussions about how to utilize the existing Google infrastructure as well as
112+
consider utilizing keyless signing via workload identities. Nevertheless, this
113+
KEP focuses more on the "What" aspects rather than the "How".
114+
115+
### User Stories (Optional)
116+
117+
- As an end user, I would like to be able to verify the Kubernetes release
118+
artifacts, so that I can mitigate possible resource modifications by the
119+
network.
120+
121+
### Risks and Mitigations
122+
123+
- **Risk:** Unauthorized access to the signing key or its infrastructure
124+
125+
**Mitigations:**
126+
127+
- Storing the credentials in a secure Google Cloud Project with
128+
limited access for SIG Release.
129+
- Enabling the cosign [transparency log
130+
(Rekor)](https://github.com/sigstore/cosign#rekor-support) to make the key
131+
usage publicly auditable.
132+
- Working towards [keyless
133+
signing](https://github.com/sigstore/cosign/blob/3f83940/KEYLESS.md) to
134+
minimize the attack surface of the supply chain.
135+
136+
### Graduation Criteria
137+
138+
#### Alpha
139+
140+
- Outline and integrate an example process for signing Kubernetes release
141+
artifacts.
142+
143+
#### Beta
144+
145+
- Standard Kubernetes release artifacts (binaries and container images) are
146+
signed.
147+
148+
#### GA
149+
150+
- All Kubernetes artifacts are signed. This does exclude everything which gets
151+
build outside of the main Kubernetes repository.
152+
153+
## Drawbacks
154+
155+
- The initial implementation effort from the release engineering perspective
156+
requires adding an additional layer of complexity to the Kubernetes build
157+
pipeline.
158+
159+
## Alternatives
160+
161+
- Using the [OCI Registry As Storage (ORAS) project](https://github.com/oras-project/oras)
162+
163+
## Implementation History
164+
165+
- 2021-11-29 Initial Draft
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
title: Signing release artifacts
2+
kep-number: 3031
3+
authors:
4+
- "@saschagrunert"
5+
owning-sig: sig-release
6+
participating-sigs:
7+
- sig-security
8+
status: provisional
9+
creation-date: 2021-11-02
10+
reviewers:
11+
- "@dlorenc"
12+
- "@puerco"
13+
- "@sftim"
14+
approvers:
15+
- "@cpanato"
16+
- "@justaugustus"
17+
18+
##### WARNING !!! ######
19+
# prr-approvers has been moved to its own location
20+
# You should create your own in keps/prod-readiness
21+
# Please make a copy of keps/prod-readiness/template/nnnn.yaml
22+
# to keps/prod-readiness/sig-xxxxx/00000.yaml (replace with kep number)
23+
#prr-approvers:
24+
25+
# see-also:
26+
# - "/keps/sig-aaa/1234-we-heard-you-like-keps"
27+
# - "/keps/sig-bbb/2345-everyone-gets-a-kep"
28+
# replaces:
29+
# - "/keps/sig-ccc/3456-replaced-kep"
30+
31+
# The target maturity stage in the current dev cycle for this KEP.
32+
stage: alpha
33+
34+
# The most recent milestone for which work toward delivery of this KEP has been
35+
# done. This can be the current (upcoming) milestone, if it is being actively
36+
# worked on.
37+
latest-milestone: "v1.23"
38+
39+
# The milestone at which this feature was, or is targeted to be, at each stage.
40+
milestone:
41+
alpha: "v1.23"
42+
# beta: "v1.20"
43+
# stable: "v1.22"
44+
45+
# The following PRR answers are required at beta release
46+
# metrics:
47+
# - my_feature_metric

0 commit comments

Comments
 (0)