本页面介绍了如何保护映像部署以 Cloud Run 和 Google Kubernetes Engine。
了解如何配置 Binary Authorization 以检查 build 证明,并阻止部署并非由 Cloud Build 生成的映像。这个过程可以降低 未经授权的软件。
准备工作
Enable the Cloud Build, Binary Authorization, and Artifact Registry APIs.
要使用本指南中的命令行示例,请安装并配置 Google Cloud SDK。
使用 Binary Authorization 控制部署
Binary Authorization 中的政策是一组规则,用于管理映像的部署。您可以将规则配置为要求具有数字签名的证明。
Cloud Build 会在构建时生成证明并进行签名。借助 Binary Authorization,您可以使用 built-by-cloud-build
证明者来验证证明,并仅部署 Cloud Build 构建的映像。
如需在项目中创建 built-by-cloud-build
证明者,请在该项目中运行 build。
如需仅允许部署 Cloud Build 构建的映像,请执行以下步骤:
控制台
转到 Google Cloud 控制台中的 Binary Authorization 页面:
在政策标签页中,点击修改政策。
在修改政策对话框中,选择只允许已被以下所有证明者批准的映像。
点击添加证明者。
在添加证明者对话框中,执行以下操作:
- 选择根据项目和证明者名称添加并执行以下步骤:
- 在项目名称字段中,输入在其中运行 Cloud Build 的项目。
- 点击证明者名称字段,可看到
built-by-cloud-build
证明者可用。 - 点击
built-by-cloud-build
。
或者,您也可以选择根据证明者资源 ID 添加。在证明者资源 ID 中,输入以下内容:
projects/PROJECT_ID/attestors/built-by-cloud-build
将
PROJECT_ID
替换为运行 Cloud Build 的项目。
- 选择根据项目和证明者名称添加并执行以下步骤:
点击添加 1 个证明者 (Add 1 attestor)。
点击保存政策。
gcloud
使用以下命令将现有政策导出到一个文件中:
gcloud container binauthz policy export > /tmp/policy.yaml
修改政策文件。
修改以下规则之一:
defaultAdmissionRule
clusterAdmissionRules
istioServiceIdentityAdmissionRules
kubernetesServiceAccountAdmissionRules
如果还没有
requireAttestationsBy
块,请将其添加到规则中。在
requireAttestationsBy
块中,添加以下内容:projects/PROJECT_ID/attestors/built-by-cloud-build
将
PROJECT_ID
替换为运行 Cloud Build 的项目。保存政策文件。
导入政策文件。
gcloud container binauthz policy import /tmp/policy.yaml
以下是包含对
built-by-cloud-build-attestor
的引用的示例政策文件:defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policy
将
PROJECT_ID
替换为运行 Cloud Build 的项目的项目 ID。
您可以在 GKE 或 Cloud Run 的 Binary Authorization 日志消息中查看政策错误
使用试运行模式
在试运行模式下,Binary Authorization 会检查政策合规性,而不会实际阻止部署。相反,政策合规性状态消息会记录到 Cloud Logging 中。您可以使用这些日志来确定阻止政策是否正常运行以及识别假正例。
如需启用试运行,请执行以下操作:
控制台
转到 Google Cloud 控制台中的 Binary Authorization 页面。
点击修改政策。
在默认规则或特定规则中,选中试运行模式。
点击保存政策。
gcloud
将 Binary Authorization 政策导出到 YAML 文件:
gcloud container binauthz policy export > /tmp/policy.yaml
在文本编辑器中,将
enforcementMode
设置为DRYRUN_AUDIT_LOG_ONLY
并保存文件。如需更新政策,请执行以下命令以导入文件:
gcloud container binauthz policy import /tmp/policy.yaml
您可以在 GKE 或 Cloud Run 的 Binary Authorization 日志消息中查看政策错误
限制
Cloud Build 和 Binary Authorization 必须位于同一项目中。如果你在其他环境中运行部署平台 项目,请为多项目设置配置 IAM 角色。 并在添加 Binary Authorization 中的
built-by-cloud-build
证明者。当您使用显式
docker push
构建步骤将映像推送到 Artifact Registry 时,Cloud Build 不会生成认证。确保按 在docker build
构建步骤中使用images
字段复制到 Artifact Registry。如需详细了解images
,请参阅在 Artifact Registry 中存储映像的不同方式。您必须为构建流水线和 部署流水线这是因为 Cloud Build 仅在构建流水线成功完成后才会生成认证。然后,Binary Authorization 会在部署映像之前检查证明。
在专用池中启用证明
默认情况下,Cloud Build 不会生成 Binary Authorization
为专用池中的构建提供证明。要生成
请将 requestedVerifyOption: VERIFIED
选项添加到您的
build 配置文件:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
requestedVerifyOption: VERIFIED
添加 requestedVerifyOption
后,Cloud Build 会
证明生成和出处元数据
图片。
查看证明者元数据
首次在项目中运行构建时,系统会创建证明者。通过
证明者 ID 的格式为
projects/PROJECT_ID/attestors/built-by-cloud-build
,
其中 PROJECT_ID
是您的项目 ID。
您可以使用以下命令检查构建证明者元数据:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build
将 PROJECT_ID
替换为运行 Cloud Build 的项目。
输出包含关于证明者和相应公钥的信息。例如:
name": "projects/PROJECT_ID/attestors/built-by-cloud-build", "userOwnedDrydockNote": { "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build", "publicKeys": [ { "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1", "pkixPublicKey": { "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n", "signatureAlgorithm": "ECDSA_P256_SHA256" } }, ... } ], "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com" }, "updateTime": "2021-09-24T15:26:44.808914Z", "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"