10.3. Cosign OCI 支持

Cosign 是一个工具,可用于签名和验证容器镜像。它使用 ECDSA-P256 签名算法和 Red Hat 简单签名有效负载格式来创建存储在 PKIX 文件中的公钥。私钥作为加密的 PEM 文件存储。

Cosign 目前支持以下内容:

  • 硬件和 KMS 签名
  • 自带 PKI
  • OIDC PKI
  • 内置二进制透明度和时间戳服务

使用以下步骤直接安装 Cosign。

先决条件

  • 已安装 Go 版本 1.16 或更高版本。
  • 您已在 config.yaml 文件中将 FEATURE_GENERAL_OCI_SUPPORT 设置为 true

流程

  1. 输入以下 go 命令直接安装 Cosign:

    $ go install github.com/sigstore/cosign/cmd/cosign@v1.0.0

    输出示例

    go: downloading github.com/sigstore/cosign v1.0.0
    go: downloading github.com/peterbourgon/ff/v3 v3.1.0

  2. 输入以下命令为 Cosign 生成键值对:

    $ cosign generate-key-pair

    输出示例

    Enter password for private key:
    Enter again:
    Private key written to cosign.key
    Public key written to cosign.pub

  3. 输入以下命令为键值对签名:

    $ cosign sign -key cosign.key quay-server.example.com/user1/busybox:test

    输出示例

    Enter password for private key:
    Pushing signature to: quay-server.example.com/user1/busybox:sha256-ff13b8f6f289b92ec2913fa57c5dd0a874c3a7f8f149aabee50e3d01546473e3.sig

    如果您遇到 错误: signing quay-server.example.com/user1/busybox:test: getting remote image: GET https://quay-server.example.com/v2/user1/busybox/manifests/test: UNAUTHORIZED: access to the requested resource is not authorized; map[] error,因为 Cosign 依赖于 ~./docker/config.json 用于授权,您可能需要执行以下命令:

    $ podman login --authfile ~/.docker/config.json quay-server.example.com

    输出示例

    Username:
    Password:
    Login Succeeded!

  4. 输入以下命令查看更新的授权配置:

    $ cat ~/.docker/config.json
    {
    	"auths": {
    		"quay-server.example.com": {
    			"auth": "cXVheWFkbWluOnBhc3N3b3Jk"
    		}
    	}