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 生成 x509 密钥对 复制链接链接已复制到粘贴板!
要将 x509
签名方案用于 Tekton Chains secret,您必须生成 x509
密钥对。
您可以通过将 TektonConfig
自定义资源(CR)中的 generateSigningSecret
字段设置为 true
来生成 x509
密钥对。Red Hat OpenShift Pipelines Operator 生成 ecdsa
类型密钥对: x509.pem
私钥和 x509-pub.pem
公钥。Operator 将密钥存储在 openshift-pipelines
命名空间中的 signing-secrets
secret 中。
如果将 generateSigningSecret
字段设置为 false
,Red Hat OpenShift Pipelines Operator 会覆盖并破坏 signing-secrets
secret 中的任何值。确保您在 secret 之外存储
x509-pub.pem
公钥,以防止密钥被删除。Operator 可以使用后续阶段的密钥验证工件。
Red Hat OpenShift Pipelines Operator 不提供以下功能来限制潜在的安全问题:
- 密钥轮转
- 审计密钥使用
- 正确的访问控制键
先决条件
-
已安装 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 密钥对示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 默认值为
false
。将值设为true
会生成ecdsa
密钥对。
1.3.2. 使用 cosign 工具签名 复制链接链接已复制到粘贴板!
您可以使用 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 工具签名 复制链接链接已复制到粘贴板!
您可以使用 skopeo
工具生成密钥,并在带有 Tekton 链的 cosign
签名方案中使用它们。
先决条件
- 已安装 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 - 重新创建密钥对,并使用您首选的签名方案将其存储在机密中。