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

流程

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

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

    使用 TektonConfig CR 创建 ecdsa 密钥对示例

    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 密钥对。

1.3.2. 使用 cosign 工具签名

您可以使用 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 工具签名

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

先决条件

流程

  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