管理符合企业合同的合规性
了解企业合同如何使您更好地验证和管理您提升的代码合规性。另外,自定义示例策略以适合您的企业标准。
摘要
前言
企业合同是一个策略驱动的工作流工具,用于通过定义和强制实施构建和测试容器镜像的策略来维护软件供应链安全性。安全 CI/CD 工作流应包含工件验证,以尽早检测问题。它是企业合同的职责,用于验证容器镜像是否已签名,并由已知和可信构建系统测试。
第 1 章 红帽受信任的应用程序 Pipeline 的企业合同
软件供应链越复杂,使用可靠的检查和最佳实践来保证软件工件完整性和源代码的依赖性更为重要。镜像容器等工件。这是 Red Hat Enterprise Contract 进入 Red Hat Trusted Application Pipeline 构建并部署体验的地方。
企业合同是一个策略驱动的工作流工具,用于通过定义和强制实施构建和测试容器镜像的策略来维护软件供应链安全性。对于为软件工件(SLSA)验证创建 Supply-chain 级别的构建系统,例如,Tekton with Tekton Chains 和 GitHub Actions with SLSA GitHub Generator,检查签名并确认 attestations 的内容实际上与预期内容匹配,这是验证和维护软件供应链的完整性的一部分。安全 CI/CD 工作流应包含工件验证,以尽早检测问题。它是企业合同的职责,用于验证容器镜像是否已签名,并由已知和可信构建系统测试。
验证签名和测试的容器镜像的一般步骤如下:
- 使用红帽受信任的应用程序管道创建或复制容器镜像。
- 使用 Cosign 生成签名密钥。
- 使用 Cosign 为容器镜像签名。
- 使用 Cosign 准备镜像。
- 使用企业合同 CLI 验证已签名且已测试的容器镜像。
但是,它意味着向软件工件(如容器镜像) 签名 和测试是什么?为什么选择它?怎么样?
签名的软件工件(如容器镜像)会比未签名工件造成几个攻击向量的风险显著降低。当容器镜像被签名时,各种加密技术将镜像绑定到特定的实体或机构。结果是一个数字签名,用于验证镜像的真实性,以便您可以将其追溯到其创建者(实体或组织),同时还验证镜像在签名后没有被更改或篡改。有关软件供应链威胁的更多信息,请参阅 Supply 链威胁。
企业合同使用行业标准 Sigstore Cosign 作为库来验证您的容器镜像。使用 Red Hat Trusted Artifact Signer,红帽支持的 Sigstore 框架版本,您可以使用您自己的 Sigstore 服务实例来通过 Cosign CLI 签发和测试容器镜像。有关 RHTAS 的更多信息,请参阅 Red Hat Trusted Artifact Signer。
与测试的软件 工件 一样,在没有验证的情况下无法发生这种情况。经过验证的 有关软件工件(如容器镜像)的可验证信息,用于描述该工件的生成位置、时间和方式。attestation 本身是一个经过身份验证的声明,采用元数据的形式,证明工件是完好且值得信任的。企业合同使用这些合同以加密方式验证构建是否未被篡改,并根据一组策略(如 SLSA 要求)检查构建。有关 SLSA 的更多信息,请参阅关于 SLSA。
当您将代码从 RHTAP 开发命名空间推送到 stage 命名空间时,或从 stage 命名空间推送到生产环境命名空间时,企业合同会自动运行其验证检查,以确保容器镜像已签名并被已知和可信构建系统测试。当您的镜像通过企业合同检查时,您可以将代码更改合并到一个环境到下一个环境。有关将应用程序部署到不同命名空间的更多信息,请参阅 受信任的应用程序管道软件模板。有关 RHTAP 保存部署清单的位置的更多信息,请参阅 RHTAP GitOps 存储库 及其 YAML 文件。
第 2 章 安装 Enterprise Contract 命令行
先决条件
- 在 Red Hat OpenShift Container Platform 版本 4.13 或更高版本上安装 Red Hat Trusted Artifact Signer。
-
安装了
cosign
和oc
二进制文件的工作站。 - 访问 OpenShift Web 控制台。
流程
从 OpenShift 集群下载
ec
二进制文件。- 登录 OpenShift Web 控制台。在主页中,单击 ? 图标,选择 Command line tools,进入 ec download 部分,然后单击您的平台的链接。
在工作站上打开一个终端,解压缩二进制
.gz
文件,然后设置执行位:Example
gunzip ec-amd64.gz chmod +x ec-amd64
gunzip ec-amd64.gz chmod +x ec-amd64
Copy to Clipboard Copied!
将二进制文件移到
$PATH
环境中的位置:Example
sudo mv ec-amd64 /usr/local/bin/ec
sudo mv ec-amd64 /usr/local/bin/ec
Copy to Clipboard Copied!
验证
-
运行
ec version
命令。结果应该是您刚刚安装的企业合同 CLI 的版本。
第 3 章 创建策略
Enterprise Contract 策略是 规则或一组规则和特定于企业合同的注解。企业合同可以执行多种策略检查,包括检查 红帽产品所需的所有策略规则。企业合同使用名为 Open Policy Agent 或 OPA 的一般目的策略引擎。opa 使用自己的语言(称为 Rego )定义其策略规则。这意味着,在 Enterprise Contract 策略中的 OPA 中的策略规则也会在 Rego 中定义。
流程
创建一个 Rego 文件来定义一个新的策略规则,如下例所示:
echo 'package zero_to_hero import future.keywords.contains import future.keywords.if import future.keywords.in # METADATA # title: Builder ID # description: Verify the SLSA Provenance has the builder.id set to # the expected value. # custom: # short_name: builder_id # failure_msg: The builder ID %q is not the expected %q # solution: >- # Ensure the correct build system was used to build the container # image. deny contains result if { some attestation in input.attestations attestation.statement.predicateType == "https://slsa.dev/provenance/v0.2" expected := "https://localhost/dummy-id" got := attestation.statement.predicate.builder.id expected != got result := { "code": "zero_to_hero.builder_id", "msg": sprintf("The builder ID %q is not expected, %q", [got, expected]) } } ' > rules.rego
echo 'package zero_to_hero import future.keywords.contains import future.keywords.if import future.keywords.in # METADATA
1 # title: Builder ID # description: Verify the SLSA Provenance has the builder.id set to # the expected value. # custom: # short_name: builder_id
2 # failure_msg: The builder ID %q is not the expected %q # solution: >- # Ensure the correct build system was used to build the container # image. deny contains result if { some attestation in input.attestations
3 attestation.statement.predicateType == "https://slsa.dev/provenance/v0.2" expected := "https://localhost/dummy-id" got := attestation.statement.predicate.builder.id expected != got result := { "code": "zero_to_hero.builder_id", "msg": sprintf("The builder ID %q is not expected, %q", [got, expected]) } } ' > rules.rego
Copy to Clipboard Copied! 提示您可以将
input.attestations
对象保存到 JSON 文件中,以便在指定新策略规则时从其中浏览。要将input.attestations
保存为 JSON 文件,请运行类似以下示例的命令:ec validate image --public-key cosign.pub --image "$REPOSITORY:latest" --policy policy.yaml \ --show-successes --info --output yaml
ec validate image --public-key cosign.pub --image "$REPOSITORY:latest" --policy policy.yaml \ --show-successes --info --output yaml
Copy to Clipboard Copied! 创建策略配置以使用您的新策略规则,如下例所示:
echo " --- sources: - policy: - $(pwd)/rules.rego " > policy.yaml
echo " --- sources: - policy: - $(pwd)/rules.rego " > policy.yaml
Copy to Clipboard Copied! 使用您的新策略验证您的容器镜像,并在成功和违反报告中显示其他信息,如下例所示:
ec validate image --public-key cosign.pub --image "$REPOSITORY:latest" --policy policy.yaml \ --show-successes --info --output yaml
ec validate image --public-key cosign.pub --image "$REPOSITORY:latest" --policy policy.yaml \ --show-successes --info --output yaml
Copy to Clipboard Copied!
验证
-
检查 Successes 和 violations 报告,以确保您的新规则位于
successes
列表中。
3.1. 配置策略
您可以使用内联 JSON 或 YAML 字符串配置 Enterprise Contract 策略。此策略有时称为配置或 合同,指定企业合同应在哪里查找用于应用您要强制执行的策略的规则和数据。您还可以包含或排除单个规则或特定规则软件包。
流程
在命令行中将策略配置为 JSON 或 YAML 字符串,如下例所示:
ec validate image --policy '{ "configuration": { "include": ["@minimal"] }, "sources": [ { "policy": ["oci::quay.io/enterprise-contract/ec-release-policy:latest"], "data": ["git::https://github.com/enterprise-contract/ec-policies//example/data"] } ] }' ...
ec validate image --policy '{ "configuration": { "include": ["@minimal"] }, "sources": [ { "policy": ["oci::quay.io/enterprise-contract/ec-release-policy:latest"], "data": ["git::https://github.com/enterprise-contract/ec-policies//example/data"] } ] }' ...
Copy to Clipboard Copied! (可选)排除企业合同策略中规则的特定软件包,如下例所示:
exclude: - attestation_task_bundle - slsa_build_scripted_build
exclude: - attestation_task_bundle - slsa_build_scripted_build
Copy to Clipboard Copied! 这个命令包括每个软件包中的每个规则,但指定软件包中的规则除外。
(可选)排除单个规则,如下例所示:
exclude: - attestation_task_bundle.unacceptable_task_bundle
exclude: - attestation_task_bundle.unacceptable_task_bundle
Copy to Clipboard Copied! 此命令包含
attestation_task_bundle
软件包中的每个规则,但unacceptable_task_bundle
规则除外。(可选)只包括特定软件包中的规则,如下例所示:
include: - test - java
include: - test - java
Copy to Clipboard Copied! 此命令仅包含指定软件包中的规则。
(可选)只包括特定软件包中的一些规则。这意味着,您可以指定
include
和exclude
来只选择您希望 Enterprise Contract 策略包含的规则,如下例所示:include: - "*" - attestation_task_bundle.unacceptable_task_bundle exclude: - attestation_task_bundle.*
include: - "*"
1 - attestation_task_bundle.unacceptable_task_bundle exclude: - attestation_task_bundle.*
Copy to Clipboard Copied! - 1
- 星号 packagemanifests 作为通配符来匹配任何软件包。请注意,它与部分名称不匹配,这意味着您无法指定"s"与以"s"开头的每个软件包匹配。
这些命令指定 您只 包括来自
attestation_task_bundle
软件包中的unacceptable_task_bundle
规则,并排除该软件包中的所有其他规则。(可选)排除某些检查,以便 Enterprise Contract 即使这些检查失败或没有完成,也可以验证您的容器镜像,如下例所示:
exclude: - test:get-clair-scan - test:clamav-scan
exclude: - test:get-clair-scan - test:clamav-scan
Copy to Clipboard Copied! 此命令指定,如果任何确定的检查失败或未完成,企业合同仍然可以完成以验证您的容器镜像。
(可选)通过运行 config.policy.
include 命令或
命令以及字符串列表来修改软件包中规则的默认值。config.policy
.exclude您的字符串列表应该包括以下之一:
- "package name" - 从 Available rule collections 列表中的软件包中选择。
-
"rule name" - 输入软件包名称和规则代码的名称(以点(.)分隔)指定一个规则名称,如本例中所示:
attestation_type.unknown_att_type
。您可以在此处的"Attestation type"中找到规则代码。https://enterprisecontract.dev/docs/ec-policies/release_policy.html#attestation_type_package - "package name:term" - 一些策略规则处理项目列表。将 "term" 添加到 "package name" 字符串时,您可以从该列表中排除或包含特定项。这的工作方式与"软件包名称"类似,但它只适用于与该术语匹配的软件包中的策略规则。例如,如果您运行 test 软件包,您可以选择忽略给定的测试案例,但包含所有其他测试。
- "rule name:term" - 这与 "package name:term" 类似,除了 包含软件包 中的项目外,您可以包含 ot 排除特定的软件包 策略规则。
-
"@collection name" - 将其添加到您的字符串中以指定预定义的规则集合。请确保使用
@
符号为集合名称添加前缀。从 此处的 可用规则集合中选择。
第 4 章 签名容器镜像
先决条件
- 访问 OpenShift Web 控制台。
- 在 OpenShift 版本 4.13 或更高版本上运行的 Red Hat Trusted Artifact Signer (RHTAS)安装。
-
安装了
ec
、cosign
和oc
二进制文件的工作站。
流程
登录到您的 OpenShift 集群:
语法
oc login --token=TOKEN --server=SERVER_URL_AND_PORT
Example
oc login --token=sha256~ZvFDBvoIYAbVECixS4-WmkN4RfnNd8Neh3y1WuiFPXC --server=https://example.com:6443
注意若要查找您的命令行登录令牌和 URL,请登录 OpenShift Web 控制台。单击您的用户名,然后单击 Copy login 命令。如果出现提示,请再次输入您的用户名和密码,然后单击 Display Token。
登录 RHTAS。确保配置 RHTAS shell 环境以签署和验证容器镜像;例如:
cd sigstore-ocp source tas-env-variables.sh
cd sigstore-ocp source tas-env-variables.sh
Copy to Clipboard Copied! 您还可以选择手动设置环境变量;例如:
export OPENSHIFT_APPS_SUBDOMAIN=apps.$(oc get dns cluster -o jsonpath='{ .spec.baseDomain }') export OIDC_AUTHENTICATION_REALM=sigstore export FULCIO_URL=https://fulcio.$OPENSHIFT_APPS_SUBDOMAIN export OIDC_ISSUER_URL=https://keycloak-keycloak-system.$OPENSHIFT_APPS_SUBDOMAIN/auth/realms/$OIDC_AUTHENTICATION_REALM export REKOR_URL=https://rekor.$OPENSHIFT_APPS_SUBDOMAIN export TUF_URL=https://tuf.$OPENSHIFT_APPS_SUBDOMAIN
export OPENSHIFT_APPS_SUBDOMAIN=apps.$(oc get dns cluster -o jsonpath='{ .spec.baseDomain }') export OIDC_AUTHENTICATION_REALM=sigstore export FULCIO_URL=https://fulcio.$OPENSHIFT_APPS_SUBDOMAIN export OIDC_ISSUER_URL=https://keycloak-keycloak-system.$OPENSHIFT_APPS_SUBDOMAIN/auth/realms/$OIDC_AUTHENTICATION_REALM export REKOR_URL=https://rekor.$OPENSHIFT_APPS_SUBDOMAIN export TUF_URL=https://tuf.$OPENSHIFT_APPS_SUBDOMAIN
Copy to Clipboard Copied! Example
source ./tas-env-vars.sh
$ source ./tas-env-vars.sh
Copy to Clipboard Copied! -
运行以下命令,从 OpenShift 集群注销:
oc logout
。 -
找到您要签名和 attest 的容器镜像;例如:
IMAGE=quay.io/lucarval/rhtas-test@sha256:6b95efc134c2af3d45472c0a2f88e6085433df058cc210abb2bb061ac4d74359
。 -
向 RHTAP 指明您要使用 Red Hat Trusted Artifact Signer 而不是公共 Sigstore 部署进行签名和测试您的容器镜像。输入这个命令:co
sign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
. 使用以下命令为容器镜像签名:
cosign sign -y --fulcio-url=$FULCIO_URL --rekor-url=$REKOR_URL \ --oidc-issuer=$OIDC_ISSUER_URL $IMAGE
cosign sign -y --fulcio-url=$FULCIO_URL --rekor-url=$REKOR_URL \ --oidc-issuer=$OIDC_ISSUER_URL $IMAGE
Copy to Clipboard Copied! - 出现提示时,登录安装 RHTAS 时安装的 RHTAP 的 Keycloak 实例。因此,Keycloak 可以为您进行身份验证。
后续步骤
您的镜像现已签名。现在,您可以:
- 在测试时创建 SLSA 验证,并将它与容器镜像相关联。
- 使用 Red Hat Enterprise Contract 来验证容器镜像。
4.1. 生成签名密钥以签名和测试容器镜像
您必须有一个签名密钥,然后才能签署并测试容器镜像。
先决条件
-
安装了
cosign
二进制文件的工作站。
流程
-
在 CLI 中,运行这个命令:cosign
generate-key-pair
。 - 出现提示时,为密钥对输入新密码。确保您的密码是 memorable and strong。
验证
现在,您的工作目录中应当有两个新文件:一个
cosign.pub
文件和cosign.key
文件。-
cosign.pub
文件包含您的公钥。您可以与需要验证容器镜像的任何协作者共享此密钥。 -
cosign.key
文件是用于签名内容的私钥。只有负责签名和测试镜像的人员应有权访问cosign.key
文件。
-
4.2. 使用 Enterprise Contract 和 Red Hat Trusted Artifact Signer 验证容器镜像签名
安装 Red Hat Trusted Artifact Signer (RHTAS)服务时,您可以使用 ec
二进制文件来验证使用 RHTAS 服务的无密钥签名框架的容器镜像的测试和签名。有关安装 RHTAS 的更多信息,请参阅使用 Operator Lifecycle Manager 安装红帽受信任的工件 Signer。
先决条件
- 在 OpenShift 版本 4.13 或更高版本上运行的 RHTAS 安装。
- 访问 OpenShift Web 控制台。
-
安装了
cosign
和oc
二进制文件的工作站。
流程
从 OpenShift 集群下载
ec
二进制文件:- 登录 OpenShift Web 控制台。在主页中,单击右上角的 ? 图标,然后选择 Command Line Tools。
- 在 ec download 部分中,点您的平台的链接。
打开一个终端,解压缩
.gz
文件,并在ec
二进制文件上设置执行位:Linux 和 macOS 示例
-
$ gunzip ec-amd64.gz
-
$ chmod +x ec-amd64
-
将
ec
二进制文件移到$PATH
环境中的目录中:Example
$ sudo mv ec-amd64 /usr/local/bin/ec
运行 ec validate image --help
命令来查看所有 image 验证命令选项。
为容器镜像签名和验证配置 shell 环境。
打开一个终端,从
sigstore-ocp
目录运行tas-env-variables.sh
脚本:Example
cd sigstore-ocp source tas-env-variables.sh
cd sigstore-ocp source tas-env-variables.sh
Copy to Clipboard Copied! (可选)手动设置环境变量:
Example
export OPENSHIFT_APPS_SUBDOMAIN=apps.$(oc get dns cluster -o jsonpath='{ .spec.baseDomain }') export OIDC_AUTHENTICATION_REALM=sigstore export FULCIO_URL=https://fulcio.$OPENSHIFT_APPS_SUBDOMAIN export OIDC_ISSUER_URL=https://keycloak-keycloak-system.$OPENSHIFT_APPS_SUBDOMAIN/auth/realms/$OIDC_AUTHENTICATION_REALM export REKOR_URL=https://rekor.$OPENSHIFT_APPS_SUBDOMAIN export TUF_URL=https://tuf.$OPENSHIFT_APPS_SUBDOMAIN
export OPENSHIFT_APPS_SUBDOMAIN=apps.$(oc get dns cluster -o jsonpath='{ .spec.baseDomain }') export OIDC_AUTHENTICATION_REALM=sigstore export FULCIO_URL=https://fulcio.$OPENSHIFT_APPS_SUBDOMAIN export OIDC_ISSUER_URL=https://keycloak-keycloak-system.$OPENSHIFT_APPS_SUBDOMAIN/auth/realms/$OIDC_AUTHENTICATION_REALM export REKOR_URL=https://rekor.$OPENSHIFT_APPS_SUBDOMAIN export TUF_URL=https://tuf.$OPENSHIFT_APPS_SUBDOMAIN
Copy to Clipboard Copied! Example
$ source ./tas-env-vars.sh
初始化更新框架(TUF)系统:
Example
cosign initialize --mirror=$TUF_URL --root=$TUF_URL/root.json
为容器镜像签名:
语法
Cosign sign -y --fulcio-url=$FULCIO_URL --rekor-url=$REKOR_URL --oidc-issuer=$OIDC_ISSUER_URL IMAGE_NAME
Example
cosign sign -y --fulcio-url=$FULCIO_URL --rekor-url=$REKOR_URL --oidc-issuer=$OIDC_ISSUER_URL example-hello-world@sha256:2788a47fd0ef1ece30898c1e608050ea71036d3329b9772dbb3d1f693f745c
在打开的 Web 浏览器中,使用电子邮件地址为容器镜像签名。
创建
predicate.json
文件:Example
{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://example.com/tekton-pipeline", "invocation": {}, "buildConfig": {}, "metadata": { "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] }
{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://example.com/tekton-pipeline", "invocation": {}, "buildConfig": {}, "metadata": { "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] }
Copy to Clipboard Copied! 将
predicate.json
文件与容器镜像关联:语法
cosign attest -y --predicate ./predicate.json \ --type slsaprovenance IMAGE_NAME:TAG
cosign attest -y --predicate ./predicate.json \ --type slsaprovenance IMAGE_NAME:TAG
Copy to Clipboard Copied! Example
cosign attest -y --predicate ./predicate.json \ --type slsaprovenance example.io/hello-world:latest
$ cosign attest -y --predicate ./predicate.json \ --type slsaprovenance example.io/hello-world:latest
Copy to Clipboard Copied! 验证容器镜像是否至少有一个测试和签名:
语法
Cosign tree IMAGE_NAME:TAG
Example
cosign tree example.io/hello-world:latest
$ cosign tree example.io/hello-world:latest 📦 Supply Chain Security Related artifacts for an image: example.io/hello-world@sha256:7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35 └── 💾 Attestations for an image tag: example.io/hello-world:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.att └── 🍒 sha256:40d94d96a6d3ab3d94b429881e1b470ae9a3cac55a3ec874051bdecd9da06c2e └── 🔐 Signatures for an image tag: example.io/hello-world:sha256-7de5fa822a9d1e507c36565ee0cf50c08faa64505461c844a3ce3944d23efa35.sig └── 🍒 sha256:f32171250715d4538aec33adc40fac2343f5092631d4fc2457e2116a489387b7
Copy to Clipboard Copied! 使用 Enterprise Contract 验证容器镜像:
语法
ec validate image --image IMAGE_NAME:TAG \ --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' \ --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' \ --output yaml --show-successes
ec validate image --image IMAGE_NAME:TAG \ --certificate-identity-regexp 'SIGNER_EMAIL_ADDR' \ --certificate-oidc-issuer-regexp 'keycloak-keycloak-system' \ --output yaml --show-successes
Copy to Clipboard Copied! Example
ec validate image --image example.io/hello-world:latest \ --certificate-identity 'jdoe@example.com' \ --certificate-oidc-issuer 'keycloak-keycloak-system' \ --output yaml --show-successes
$ ec validate image --image example.io/hello-world:latest \ --certificate-identity 'jdoe@example.com' \ --certificate-oidc-issuer 'keycloak-keycloak-system' \ --output yaml --show-successes success: true successes: - metadata: code: builtin.attestation.signature_check msg: Pass - metadata: code: builtin.attestation.syntax_check msg: Pass - metadata: code: builtin.image.signature_check msg: Pass ec-version: v0.1.2427-499ef12 effective-time: "2024-01-21T19:57:51.338191Z" key: "" policy: {} success: true
Copy to Clipboard Copied! 企业合同生成 pass/fail 报告,其中包含任何安全违反情况的详细信息。添加
--info
标志时,报告包括更多详情和可能的解决方案。
第 5 章 Attesting and verify a container image
在企业合同可以验证您的已签名的容器镜像之前,您必须首先创建 SLSA 认可,并将其与您的容器镜像相关联。经过验证是有关软件工件的可验证信息,包括在哪里、时间和提供链中给定软件"链接"的方式。有关 Software Artifacts (SLSA)验证的 Supply-chain 级别的更多信息,请参阅 SLSA Provenance。
先决条件
- 签名的容器镜像。
- 访问 OpenShift Web 控制台。
- 在 OpenShift 版本 4.13 或更高版本上运行的 Red Hat Trusted Artifact Signer 安装。
-
安装了
cosign
和oc
二进制文件的工作站。
流程
创建 SLSA provenance
predicate.json
文件,例如:echo '{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://localhost/dummy-type", "invocation": {}, "buildConfig": {}, "metadata": { "buildStartedOn": "2023-09-25T16:26:44Z", "buildFinishedOn": "2023-09-25T16:28:59Z", "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] } ' > predicate.json
echo '{ "builder": { "id": "https://localhost/dummy-id" }, "buildType": "https://localhost/dummy-type", "invocation": {}, "buildConfig": {}, "metadata": { "buildStartedOn": "2023-09-25T16:26:44Z", "buildFinishedOn": "2023-09-25T16:28:59Z", "completeness": { "parameters": false, "environment": false, "materials": false }, "reproducible": false }, "materials": [] } ' > predicate.json
Copy to Clipboard Copied! 签名并测试您刚才创建的
predicate.json
文件,例如:cosign attest -y --fulcio-url=$FULCIO_URL \ --rekor-url=$REKOR_URL \ --oidc-issuer=$OIDC_ISSUER_URL \ --predicate predicate.json \ --type slsaprovenance $IMAGE
cosign attest -y --fulcio-url=$FULCIO_URL \ --rekor-url=$REKOR_URL \ --oidc-issuer=$OIDC_ISSUER_URL \ --predicate predicate.json \ --type slsaprovenance $IMAGE
Copy to Clipboard Copied! Keycloak 将打开,以便在签署容器镜像时基于登录自动进行身份验证。
使用企业合同验证签名和测试,例如:
ec validate image --image $IMAGE \ --certificate-identity-regexp '.*' \ --certificate-oidc-issuer-regexp '.*' \ --output yaml --show-successes
ec validate image --image $IMAGE \ --certificate-identity-regexp '.*' \ --certificate-oidc-issuer-regexp '.*' \ --output yaml --show-successes
Copy to Clipboard Copied!
运行 ec validate image
命令时尽量具体,以便每个签名与预期 的身份
匹配。
验证
- 当企业合同验证容器镜像后,会打开所有企业合同验证和签名的详细报告。
5.1. 验证 JSON 和 YAML 定义
当您考虑保护软件供应链的所有选项时,您可以选择将策略应用到任务或管道定义。例如,您可能希望使用企业合同来检查给定管道中执行哪些任务。您可能想要使一些管道任务强制执行,只允许执行某些任务,或者在任务和管道运行前强制执行的任何其他约定。
先决条件
-
您已安装了 Enterprise Contract CLI。有关安装说明,请参阅 安装企业合同 CLI 指南。您可以在
ec-cli
GitHub 仓库 中找到所需的文件。
流程
要验证企业合同 JSON 或 YAML 定义是否有效,请执行以下步骤:
-
在 Enterprise Contract CLI 中,输入
ec validate input
命令。