1.3. 在 Tekton Chains 中签名数据的 secret


集群管理员可以生成密钥对,并使用 Tekton 链来使用 Kubernetes secret 为工件签名。要使 Tekton 链正常工作,加密的密钥和密码必须存在,作为 openshift-pipelines 命名空间中的 signing-secrets secret 的一部分。

目前,Tekton 链支持 x509cosign 签名方案。

注意

只使用一个受支持的签名方案。

x509 签名方案

要将 x509 签名方案与 Tekton 链搭配使用,您必须满足以下要求:

  • 使用 x509.pem 结构将私钥存储在 signing-secrets 中。
  • 将私钥存储为未加密的 PKCS #8 PEM 文件。
  • 密钥是 ed25519ecdsa 类型。

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 集群。

流程

  1. 运行以下命令来编辑 TektonConfig CR:

    $ oc edit TektonConfig config
    Copy to Clipboard Toggle word wrap
  2. TektonConfig CR 中,将 generateSigningSecret 值设置为 true

    使用 TektonConfig CR 创建 ECDSA cosign 密钥对的示例

    apiVersion: operator.tekton.dev/v1
    kind: TektonConfig
    metadata:
      name: config
    spec:
    # ...
      chain:
        disabled: false
        generateSigningSecret: true 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    默认值为 false。将值设为 true 会生成 ecdsa 密钥对。
  3. 几分钟后,从机密中提取公钥并存储它,以便您可以使用它来验证工件(testations)。运行以下命令来提取密钥:

    $ oc extract -n openshift-pipelines secret/signing-secrets --keys=cosign.pub
    Copy to Clipboard Toggle word wrap

结果

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 签名方案。

先决条件

流程

  1. 运行以下命令,生成 cosign.keycosign.pub 密钥对:

    $ cosign generate-key-pair k8s://openshift-pipelines/signing-secrets
    Copy to Clipboard Toggle word wrap

    Cosign 会提示您输入密码,然后创建一个 Kubernetes secret。

  2. 将加密的 cosign.key 私钥和 cosign.password 解密密码存储在 signing-secrets Kubernetes secret 中。确保私钥存储为 ENCRYPTED COSIGN PRIVATE KEY 类型的加密 PEM 文件。

1.3.3. 使用 skopeo 工具手动生成签名 secret

您可以使用 skopeo 工具生成密钥,并在带有 Tekton 链的 cosign 签名方案中使用它们。

先决条件

  • 您已在 Linux 系统上安装 skopeo 软件包。

流程

  1. 运行以下命令生成公钥/私钥对:

    $ skopeo generate-sigstore-key --output-prefix <mykey> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <mykey> 替换为您选择的密钥名称。

    Skopeo 会提示您输入私钥的密码短语,然后创建名为 <mykey>.private<mykey>.pub 的密钥文件。

  2. 运行以下命令,使用 base64 工具对 <mykey>.pub 文件进行编码:

    $ base64 -w 0 <mykey>.pub > b64.pub
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,使用 base64 工具对 <mykey>.private 文件进行编码:

    $ base64 -w 0 <mykey>.private > b64.private
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,使用 base64 工具对 passhprase 进行编码:

    $ echo -n '<passphrase>' | base64 -w 0 > b64.passphrase 
    1
    Copy to Clipboard Toggle word wrap
    1
    <passphrase> 替换为用于密钥对的密码短语。
  5. 运行以下命令,在 openshift-pipelines 命名空间中创建 signing-secrets secret:

    $ oc create secret generic signing-secrets -n openshift-pipelines
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令来编辑 signing-secrets secret:

    $ oc edit secret -n openshift-pipelines signing-secrets
    Copy to Clipboard Toggle word wrap

    使用以下方法在 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
    Copy to Clipboard Toggle word wrap
    1
    <Encoded <mykey>.private> 替换为 b64.private 文件的内容。
    2
    <Encoded passphrase> 替换为 b64.passphrase 文件的内容。
    3
    <Encoded <mykey>.pub> 替换为 b64.pub 文件的内容。

1.3.4. 解决 "secret already exists" 错误

如果 signing-secret secret 已经填充,则创建此 secret 的命令可能会输出以下出错信息:

Error from server (AlreadyExists): secrets "signing-secrets" already exists
Copy to Clipboard Toggle word wrap

您可以通过删除 secret 来解决这个问题。

流程

  1. 运行以下命令来删除 signing-secret secret:

    $ oc delete secret signing-secrets -n openshift-pipelines
    Copy to Clipboard Toggle word wrap
  2. 重新创建密钥对,并使用您首选的签名方案将其存储在机密中。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat