Skip to content

Commit 5205495

Browse files
committed
Add Cosign keyless mode required args for nerdctl compose
Signed-off-by: Ziwen Ning <[email protected]>
1 parent 6fafcbf commit 5205495

File tree

4 files changed

+53
-4
lines changed

4 files changed

+53
-4
lines changed

docs/cosign.md

+20
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,26 @@ services:
154154
- 8081:80
155155
```
156156

157+
For keyless mode, the `docker-compose.yaml` will be:
158+
```
159+
$ cat docker-compose.yml
160+
services:
161+
svc0:
162+
build: .
163+
image: ${REGISTRY}/svc1_image # replace with your registry
164+
x-nerdctl-verify: cosign
165+
x-nerdctl-sign: cosign
166+
x-nerdctl-cosign-certificate-identity: [email protected] # or x-nerdctl-cosign-certificate-identity-regexp
167+
x-nerdctl-cosign-certificate-oidc-issuer: https://accounts.example.com # or x-nerdctl-cosign-certificate-oidc-issuer-regexp
168+
ports:
169+
- 8080:80
170+
svc1:
171+
build: .
172+
image: ${REGISTRY}/svc1_image # replace with your registry
173+
ports:
174+
- 8081:80
175+
```
176+
157177
> The `env "COSIGN_PASSWORD="$COSIGN_PASSWORD""` part in the below commands is a walkaround to use rootful nerdctl and make the env variable visible to root (in sudo). You don't need this part if (1) you're using rootless, or (2) your `COSIGN_PASSWORD` is visible in root.
158178
159179
First let's `build` and `push` the two services:

pkg/cmd/compose/compose.go

+12
Original file line numberDiff line numberDiff line change
@@ -155,5 +155,17 @@ func imageVerifyOptionsFromCompose(ps *serviceparser.Service) types.ImageVerifyO
155155
if keyVal, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignPublicKey]; ok {
156156
opt.CosignKey = keyVal.(string)
157157
}
158+
if ciVal, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignCertificateIdentity]; ok {
159+
opt.CosignCertificateIdentity = ciVal.(string)
160+
}
161+
if cirVal, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignCertificateIdentityRegexp]; ok {
162+
opt.CosignCertificateIdentityRegexp = cirVal.(string)
163+
}
164+
if coiVal, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignCertificateOidcIssuer]; ok {
165+
opt.CosignCertificateOidcIssuer = coiVal.(string)
166+
}
167+
if coirVal, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignCertificateOidcIssuerRegexp]; ok {
168+
opt.CosignCertificateOidcIssuerRegexp = coirVal.(string)
169+
}
158170
return opt
159171
}

pkg/composer/pull.go

+13
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ func (c *Composer) pullServiceImage(ctx context.Context, image string, platform
5757
if publicKey, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignPublicKey]; ok {
5858
args = append(args, "--cosign-key="+publicKey.(string))
5959
}
60+
if certificateIdentity, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignCertificateIdentity]; ok {
61+
args = append(args, "--cosign-certificate-identity="+certificateIdentity.(string))
62+
}
63+
if certificateIdentityRegexp, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignCertificateIdentityRegexp]; ok {
64+
args = append(args, "--cosign-certificate-identity-regexp="+certificateIdentityRegexp.(string))
65+
}
66+
if certificateOidcIssuer, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignCertificateOidcIssuer]; ok {
67+
args = append(args, "--cosign-certificate-oidc-issuer="+certificateOidcIssuer.(string))
68+
}
69+
if certificateOidcIssuerRegexp, ok := ps.Unparsed.Extensions[serviceparser.ComposeCosignCertificateOidcIssuerRegexp]; ok {
70+
args = append(args, "--cosign-certificate-oidc-issuer-regexp="+certificateOidcIssuerRegexp.(string))
71+
}
72+
6073
if c.Options.Experimental {
6174
args = append(args, "--experimental")
6275
}

pkg/composer/serviceparser/serviceparser.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,14 @@ import (
3737

3838
// ComposeExtensionKey defines fields used to implement extension features.
3939
const (
40-
ComposeVerify = "x-nerdctl-verify"
41-
ComposeCosignPublicKey = "x-nerdctl-cosign-public-key"
42-
ComposeSign = "x-nerdctl-sign"
43-
ComposeCosignPrivateKey = "x-nerdctl-cosign-private-key"
40+
ComposeVerify = "x-nerdctl-verify"
41+
ComposeCosignPublicKey = "x-nerdctl-cosign-public-key"
42+
ComposeSign = "x-nerdctl-sign"
43+
ComposeCosignPrivateKey = "x-nerdctl-cosign-private-key"
44+
ComposeCosignCertificateIdentity = "x-nerdctl-cosign-certificate-identity"
45+
ComposeCosignCertificateIdentityRegexp = "x-nerdctl-cosign-certificate-identity-regexp"
46+
ComposeCosignCertificateOidcIssuer = "x-nerdctl-cosign-certificate-oidc-issuer"
47+
ComposeCosignCertificateOidcIssuerRegexp = "x-nerdctl-cosign-certificate-oidc-issuer-regexp"
4448
)
4549

4650
func warnUnknownFields(svc types.ServiceConfig) {

0 commit comments

Comments
 (0)