1.3. 在 Tekton Chains 中签名数据的 secret
集群管理员可以生成密钥对,并使用 Tekton 链来使用 Kubernetes secret 为工件签名。要使 Tekton 链正常工作,加密的密钥和密码必须存在,作为 openshift-pipelines
命名空间中的 signing-secrets
secret 的一部分。
目前,Tekton 链支持 x509
和 cosign
签名方案。
只使用一个受支持的签名方案。
x509 签名方案
要将 x509
签名方案与 Tekton 链搭配使用,您必须满足以下要求:
-
使用
x509.pem
结构将私钥存储在signing-secrets
中。 -
将私钥存储为未加密的
PKCS #8
PEM 文件。 -
密钥是
ed25519
或ecdsa
类型。
cosign 签名方案
要将 cosign
签名方案与 Tekton 链搭配使用,您必须满足以下要求:
-
使用
cosign.key
结构将私钥存储在signing-secrets
中。 -
使用
cosign.password
结构将密码存储在signing-secrets
中。 -
将私钥存储为
ENCRYPTED COSIGN PRIVATE KEY
类型的加密 PEM 文件。
1.3.1. 使用 TektonConfig CR 生成 cosign 密钥对 复制链接链接已复制到粘贴板!
要将 Tekton Chains secret 的 cosign
签名方案用于 Tekton Chains secret,您可以通过将 TektonConfig
自定义资源(CR)中的 generateSigningSecret
字段设置为 true
来生成使用 ECDSA 加密的 cosign
密钥对。
先决条件
-
已安装 OpenShift CLI (
oc
)实用程序。 -
您可以使用
openshift-pipelines
命名空间的管理权限登录到 OpenShift Container Platform 集群。
流程
运行以下命令来编辑
TektonConfig
CR:oc edit TektonConfig config
$ oc edit TektonConfig config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
TektonConfig
CR 中,将generateSigningSecret
值设置为true
:使用 TektonConfig CR 创建 ECDSA cosign 密钥对的示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 默认值为
false
。将值设为true
会生成ecdsa
密钥对。
几分钟后,从机密中提取公钥并存储它,以便您可以使用它来验证工件(testations)。运行以下命令来提取密钥:
oc extract -n openshift-pipelines secret/signing-secrets --keys=cosign.pub
$ oc extract -n openshift-pipelines secret/signing-secrets --keys=cosign.pub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
结果
OpenShift Pipelines Operator 生成 ecdsa
类型 cosign
密钥对,并将其存储在 openshift-pipelines
命名空间中的 signing-secrets
secret 中。secret 包括以下文件:
-
cosign.key
:私钥 -
cosign.password
:用于解密私钥的密码 -
cosign.pub
公钥
如果 signing-secrets
secret 已存在,Operator 不会覆盖 secret。
当前目录中的 cosign.pub
文件包含从机密中提取的公钥。
如果将 generateSigningSecret
字段设置为 false
,Red Hat OpenShift Pipelines Operator 会覆盖并破坏 signing-secrets
secret 中的任何值。
Red Hat OpenShift Pipelines Operator 不提供以下安全功能:
- 密钥轮转
- 审计密钥使用
- 正确的访问控制键
1.3.2. 使用 cosign 工具手动生成签名 secret 复制链接链接已复制到粘贴板!
您可以使用 cosign
工具使用带有 Tekton 链的 cosign
签名方案。
先决条件
- 已安装 Cosign 工具。有关安装 Cosign 工具的详情,请参考有关 Cosign 的 Sigstore 文档。
流程
运行以下命令,生成
cosign.key
和cosign.pub
密钥对:cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
$ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cosign 会提示您输入密码,然后创建一个 Kubernetes secret。
-
将加密的
cosign.key
私钥和cosign.password
解密密码存储在signing-secrets
Kubernetes secret 中。确保私钥存储为ENCRYPTED COSIGN PRIVATE KEY
类型的加密 PEM 文件。
1.3.3. 使用 skopeo 工具手动生成签名 secret 复制链接链接已复制到粘贴板!
您可以使用 skopeo
工具生成密钥,并在带有 Tekton 链的 cosign
签名方案中使用它们。
先决条件
-
您已在 Linux 系统上安装
skopeo
软件包。
流程
运行以下命令生成公钥/私钥对:
skopeo generate-sigstore-key --output-prefix <mykey>
$ skopeo generate-sigstore-key --output-prefix <mykey>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<mykey>
替换为您选择的密钥名称。
Skopeo 会提示您输入私钥的密码短语,然后创建名为
<mykey>.private
和<mykey>.pub
的密钥文件。运行以下命令,使用
base64
工具对<mykey>.pub
文件进行编码:base64 -w 0 <mykey>.pub > b64.pub
$ base64 -w 0 <mykey>.pub > b64.pub
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
base64
工具对<mykey>.private
文件进行编码:base64 -w 0 <mykey>.private > b64.private
$ base64 -w 0 <mykey>.private > b64.private
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
base64
工具对 passhprase 进行编码:echo -n '<passphrase>' | base64 -w 0 > b64.passphrase
$ echo -n '<passphrase>' | base64 -w 0 > b64.passphrase
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<passphrase>
替换为用于密钥对的密码短语。
运行以下命令,在
openshift-pipelines
命名空间中创建signing-secrets
secret:oc create secret generic signing-secrets -n openshift-pipelines
$ oc create secret generic signing-secrets -n openshift-pipelines
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来编辑
signing-secrets
secret:oc edit secret -n openshift-pipelines signing-secrets
$ oc edit secret -n openshift-pipelines signing-secrets
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下方法在 secret 的数据中添加编码的密钥:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3.4. 解决 "secret already exists" 错误 复制链接链接已复制到粘贴板!
如果 signing-secret
secret 已经填充,则创建此 secret 的命令可能会输出以下出错信息:
Error from server (AlreadyExists): secrets "signing-secrets" already exists
Error from server (AlreadyExists): secrets "signing-secrets" already exists
您可以通过删除 secret 来解决这个问题。
流程
运行以下命令来删除
signing-secret
secret:oc delete secret signing-secrets -n openshift-pipelines
$ oc delete secret signing-secrets -n openshift-pipelines
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 重新创建密钥对,并使用您首选的签名方案将其存储在机密中。