更新 Binary Authorization 政策
本文档介绍如何在 Binary Authorization 政策中豁免映像。
在本文档中,您可以更新政策以从 Binary Authorization 强制执行的 Container Registry 和 Artifact Registry 中豁免容器映像,并设置默认规则以禁止部署所有其他容器。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Binary Authorization APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 如果您未使用 Cloud Shell,请安装
kubectl
。
创建启用了 Binary Authorization 的集群
创建一个启用了 Binary Authorization 的 GKE 集群。这是您希望运行已部署的容器映像的集群。
Google Cloud 控制台
转到 Google Cloud 控制台中的 GKE 集群页面。
控制台会显示 Google Cloud 项目中的 GKE 集群列表。
点击创建集群。
在名称字段中输入
test-cluster
。在位置类型选项中选择区域。
从区域下拉列表中选择
us-central1-a
。点击安全链接以显示安全面板。
在安全性面板中,选择启用 Binary Authorization。
选择仅强制执行。
点击创建。
gcloud
运行 gcloud container clusters create
,并启用 --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
标志。
gcloud container clusters create \ --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \ --zone us-central1-a \ test-cluster
查看默认政策
默认情况下,Binary Authorization 政策会配置为允许部署所有容器映像。
Google Cloud 控制台
如需查看默认政策,请执行以下操作:
转到 Google Cloud Console 中的 Binary Authorization 页面。
控制台会显示政策详情。
点击修改政策。
在项目默认规则中,已选中允许所有映像选项。
gcloud
如需查看默认政策,请导出 YAML 格式的政策文件,然后执行以下操作:
gcloud container binauthz policy export
默认情况下,该文件包含以下内容:
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
evaluationMode: ALWAYS_ALLOW
enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/<var>PROJECT_ID</var>/policy
REST API
如需查看默认政策,请以 JSON 格式检索,如下所示:
curl \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
REST API 会返回以下内容:
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
仅允许豁免映像
本部分介绍如何修改政策以豁免映像,并禁止部署所有其他映像。
Google Cloud 控制台
如需修改政策,请执行以下操作:
返回 Google Cloud 控制台中的 Binary Authorization 页面。
点击修改政策。
选择禁止所有映像。
在不受部署规则约束的映像下,展开映像路径。
点击添加映像路径。
Container Registry
在新映像路径中,粘贴 Container Registry 代码库中的以下路径:
gcr.io/google-samples/hello-app:1.0
Artifact Registry
在新映像路径中,粘贴 Artifact Registry 代码库中的以下路径:
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
点击完成以保存映像路径。
点击保存政策。
gcloud
如需修改政策以允许 Container Registry 和 Artifact Registry 中的示例映像,请执行以下操作:
导出 YAML 格式的政策文件:
gcloud container binauthz policy export > /tmp/policy.yaml
在文本编辑器中,将
evaluationMode
从ALWAYS_ALLOW
更改为ALWAYS_DENY
,并将豁免映像添加到admissionWhitelistPatterns
。如需从 Container Registry 和 Artifact Registry 中豁免以下示例映像,请按如下所示修改 YAML 格式的政策文件:
admissionWhitelistPatterns: - namePattern: gcr.io/google-samples/hello-app:1.0 - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/<var>PROJECT_ID</var>/policy
将 YAML 格式的政策文件重新导入 Binary Authorization:
gcloud container binauthz policy import /tmp/policy.yaml
REST API
如需修改政策,请执行以下操作:
创建一个使用更新后的政策的 JSON 格式的文本文件:
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "admissionWhitelistPatterns": [ { "namePattern": "gcr.io/google-samples/hello-app:1.0" }, { "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0" } ], "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_DENY", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } } EOM
将更新后的政策发送到 REST API:
curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/policy.json \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
测试政策
如需通过部署您添加到 Exempt image
许可名单的映像来测试政策,请执行以下操作:
将豁免映像部署到集群。
Google Cloud 控制台
部署豁免映像:
转到 Google Cloud 控制台中的 GKE 集群页面。
点击部署。
控制台会提示您输入部署详情。
选择现有容器映像。
输入容器映像路径。
Container Registry
如需从 Container Registry 部署映像,请输入以下命令:
gcr.io/google-samples/hello-app:1.0
Artifact Registry
如需从 Artifact Registry 部署映像,请输入以下命令:
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
点击继续。
在应用名称字段中输入
hello-server
。点击部署。
kubectl
Container Registry
从 Container Registry 部署映像:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Artifact Registry
从 Artifact Registry 部署映像:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
验证系统是否允许部署该映像:
Google Cloud 控制台
如需验证映像是否已部署,请执行以下操作:
- 转到 GKE 页面。
- 转到工作负载页面。
hello-server
工作负载带有绿色图标,表明它正在运行。kubectl
如需验证系统是否允许部署该映像,请输入以下命令:
kubectl get pods
您会看到该映像正在运行。
删除 Pod。
Google Cloud 控制台
在 GKE 工作负载页面中,执行以下操作:
选择 hello-server 工作负载。
点击删除。
当系统提示您删除资源时,点击删除。
kubectl
kubectl delete pod hello-server
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除您在 GKE 中创建的集群:
控制台
如需删除集群,请执行以下操作:
转到 Google Cloud 控制台中的 GKE 集群页面。
选择
test-cluster
集群,然后点击删除。
gcloud
如需删除集群,请输入以下命令:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
后续步骤
- 如需详细了解如何豁免映像(包括使用通配符豁免多个映像),请参阅豁免映像。
- 如需查看介绍如何设置和强制执行要求提供证明的政策的端到端教程,请参阅以下内容:
- 阅读我们关于 DevOps 的资源,并探索 DevOps 研究和评估 (DORA) 研究项目。