gh attestation verify

gh attestation verify [<file-path> | oci://<image-uri>] [--owner | --repo] [flags]

使用相关的加密签名的证明来验证工件的完整性和来源。

为了验证证明,您必须验证生成证明的 Actions 工作流的身份(又称签名者工作流)。鉴于此身份,验证过程检查证明中的签名,并确认证明引用了提供的工件。

为了指定工件,该命令需要

  • 工件的文件路径,或
  • 容器镜像 URI(例如 oci://<image-uri>
    • (请注意,如果您提供 OCI URL,则您必须已向其容器注册表进行身份验证)

为了获取证明并验证签名者的身份,该命令需要以下任一项

  • --repo 标志(例如 --repo github/example)。
  • --owner 标志(例如 --owner github),或

--repo 标志值必须与工件关联的 GitHub 存储库的名称匹配。

--owner 标志值必须与工件关联的存储库所属的 GitHub 组织的名称匹配。

默认情况下,verify 命令将尝试从 GitHub API 获取与提供的工件关联的证明。如果您希望使用存储在磁盘上的证明来验证工件(参见 download 命令),请提供指向 --bundle 标志的路径。

要查看成功验证后生成的完整结果,例如用于策略引擎,请提供 --format=json 标志。

签名者工作流的身份将根据证明证书中的主体备用名称 (SAN) 进行验证。通常,签名者工作流与启动运行并生成证明的相同工作流,并且位于您的存储库中。为此,默认情况下,此命令使用 --repo--owner 标志值来验证 SAN。

但是,有时调用者工作流与执行签名的工作流并不相同。如果您的证明是通过可重用工作流生成的,那么该可重用工作流就是需要验证其身份的签名者。在这种情况下,签名者工作流可能位于您的 --repo--owner 中,也可能不在。

使用可重用工作流时,使用 --signer-repo--signer-workflow--cert-identity 标志来验证签名者工作流的身份。

有关更多策略验证选项,请参阅其他可用标志。

选项

-b, --bundle <string>
磁盘上捆绑包的路径,可以是单个 JSON 文件中的捆绑包,也可以是包含多个捆绑包的 JSON 行文件
--cert-identity <string>
强制证书的主体备用名称与提供的 value 完全匹配
-i, --cert-identity-regex <string>
强制证书的主体备用名称与提供的正则表达式匹配
--cert-oidc-issuer <string> (default "https://token.actions.githubusercontent.com")
OIDC 令牌的发行者
--custom-trusted-root <string>
指向 trusted_root.jsonl 文件的路径;可能用于脱机验证
--deny-self-hosted-runners
对于在自托管运行器上生成的证明,验证失败
-d, --digest-alg <string> (default "sha256")
用于计算工件摘要的算法:{sha256|sha512}
--format <string>
输出格式:{json}
-q, --jq <expression>
使用 jq 表达式过滤 JSON 输出
-L, --limit <int> (default 30)
要获取的证明的最大数量
--no-public-good
不要验证使用 Sigstore 公共产品实例签名的证明
-o, --owner <string>
GitHub 组织,用于通过其范围证明查找
--predicate-type <string>
按提供的谓词类型过滤证明
-R, --repo <string>
存储库名称,格式为 <owner>/<repo>
--signer-repo <string>
签署证明的可重用工作流的存储库,格式为 <owner>/<repo>
--signer-workflow <string>
签署证明的工作流,格式为 [host/]<owner>/<repo>/<path>/<to>/<workflow>
-t, --template <string>
使用 Go 模板格式化 JSON 输出;请参阅“gh help formatting”

示例

# Verify an artifact linked with a repository
$ gh attestation verify example.bin --repo github/example

# Verify an artifact linked with an organization
$ gh attestation verify example.bin --owner github

# Verify an artifact and output the full verification result
$ gh attestation verify example.bin --owner github --format json

# Verify an OCI image using attestations stored on disk
$ gh attestation verify oci://<image-uri> --owner github --bundle sha256:foo.jsonl

# Verify an artifact signed with a reusable workflow
$ gh attestation verify example.bin --owner github --signer-repo actions/example

另请参阅