1.3. 在 Tekton Chains 中签名数据的 secret
集群管理员可以生成密钥对,并使用 Tekton 链来使用 Kubernetes secret 为工件签名。要使 Tekton 链正常工作,加密的密钥和密码必须存在,作为 openshift-pipelines
命名空间中的 signing-secrets
secret 的一部分。
目前,Tekton 链支持 x509
和 cosign
签名方案。
只使用一个受支持的签名方案。
要将 x509
签名方案与 Tekton Chains 搭配使用,请将 ed25519
或 ecdsa
类型的 x509.pem
私钥存储在 signing-secrets
Kubernetes secret 中。
1.3.1. 使用 cosign 进行签名
您可以使用 cosign
工具使用带有 Tekton 链的 cosign
签名方案。
先决条件
- 已安装 cosign 工具。
流程
运行以下命令,生成
cosign.key
和cosign.pub
密钥对:$ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
Cosign 会提示您输入密码,然后创建一个 Kubernetes secret。
-
将加密的
cosign.key
私钥和cosign.password
解密密码存储在signing-secrets
Kubernetes secret 中。确保私钥存储为ENCRYPTED COSIGN PRIVATE KEY
类型的加密 PEM 文件。
1.3.2. 使用 skopeo 进行签名
您可以使用 skopeo
工具生成密钥,并在带有 Tekton 链的 cosign
签名方案中使用它们。
先决条件
- 已安装 skopeo 工具。
流程
运行以下命令生成公钥/私钥对:
$ skopeo generate-sigstore-key --output-prefix <mykey> 1
- 1
- 将
<mykey>
替换为您选择的密钥名称。
Skopeo 会提示您输入私钥的密码短语,然后创建名为
<mykey>.private
和<mykey>.pub
的密钥文件。运行以下命令,使用
base64
工具对<mykey>.pub
文件进行编码:$ base64 -w 0 <mykey>.pub > b64.pub
运行以下命令,使用
base64
工具对<mykey>.private
文件进行编码:$ base64 -w 0 <mykey>.private > b64.private
运行以下命令,使用
base64
工具对 passhprase 进行编码:$ echo -n '<passphrase>' | base64 -w 0 > b64.passphrase 1
- 1
- 将
<passphrase>
替换为用于密钥对的密码短语。
运行以下命令,在
openshift-pipelines
命名空间中创建signing-secrets
secret:$ oc create secret generic signing-secrets -n openshift-pipelines
运行以下命令来编辑
signing-secrets
secret:$ oc edit secret -n openshift-pipelines signing-secrets
使用以下方法在 secret 的数据中添加编码的密钥:
apiVersion: v1 data: cosign.key: <Encoded <mykey>.private> 1 cosign.password: <Encoded passphrase> 2 cosign.pub: <Encoded <mykey>.pub> 3 immutable: true kind: Secret metadata: name: signing-secrets # ... type: Opaque
1.3.3. 解决 "secret already exists" 错误
如果 signing-secret
secret 已经填充,则创建此 secret 的命令可能会输出以下出错信息:
Error from server (AlreadyExists): secrets "signing-secrets" already exists
您可以通过删除 secret 来解决这个问题。
流程
运行以下命令来删除
signing-secret
secret:$ oc delete secret signing-secrets -n openshift-pipelines
- 重新创建密钥对,并使用您首选的签名方案将其存储在机密中。