使用 GKE 配置 Binary Authorization 政策
本快速入门介绍了如何在 Binary Authorization 政策中配置和测试基本规则。
在本快速入门中,您将查看并配置政策中的默认规则。默认规则允许部署所有映像;您可以通过在 Google Kubernetes Engine (GKE) 集群上部署一个容器映像来对此进行测试。之后,您可以将默认规则设置为禁止部署所有映像并尝试部署一个映像进行测试。
准备工作
- 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
- 安装
kubectl
。
创建启用了 Binary Authorization 强制执行的集群
现在,创建一个启用了 Binary Authorization 的 GKE 集群。这是您希望运行已部署的容器映像的集群。
Binary Authorization 可与 Autopilot 或 Standard 集群搭配使用。
Google Cloud 控制台
以下步骤用于配置 Autopilot 集群。
在 Google Cloud 控制台中,进入 GKE Kubernetes 集群页面:
点击创建。
在创建 Autopilot 集群中,执行以下操作:
在名称字段中,输入
test-cluster
。在区域菜单中,选择
us-central1
。展开高级设置部分。
点击安全链接以显示安全面板。
在安全性面板中,选中启用 Binary Authorization 复选框。
选择仅强制执行。
点击下一步,然后点击 Next:Review and Create。
要开始创建集群,请点击创建。
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/PROJECT_ID/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"
该命令会生成以下输出:
{ "name": "projects/PROJECT_ID/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
测试强制执行政策
您可以通过尝试将示例容器映像部署到集群来测试强制执行政策。
在本快速入门中,您可以使用 Container Registry 内位于路径 gcr.io/google-samples/hello-app
中的示例容器映像。这是一个由 Google 创建的公共容器映像,其中包含一个“Hello, World!”示例应用。
Google Cloud 控制台
如需测试政策,请执行以下操作:
转到 Google Cloud 控制台中的 GKE 集群页面。
点击部署。
控制台会提示您输入部署详情。
选择现有容器映像。
输入
gcr.io/google-samples/hello-app:1.0
作为容器映像路径。点击继续。
在应用名称字段中输入
hello-server
。点击部署。
kubectl
如需测试政策,请执行以下操作:
更新本地
kubeconfig
文件:gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
这可以提供访问 GKE 中的集群所需的凭据和端点信息。
部署映像:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
现在,验证 Binary Authorization 是否允许部署:
Google Cloud 控制台
如需验证映像是否已部署,请转到 Google Cloud 控制台中的 GKE 工作负载页面。
部署的工作负载带有绿色图标,表明映像已成功部署。
kubectl
如需验证映像是否已部署,请执行以下操作:
kubectl get pods
该命令会输出类似于以下内容的消息,表示部署成功:
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
请务必删除该部署,以便继续执行下一步:
Google Cloud 控制台
如需删除部署,请执行以下操作:
返回 Google Cloud 控制台中的 GKE 工作负载页面。
选择
hello-server
工作负载。点击删除。
kubectl
如需删除部署,请执行以下操作:
kubectl delete deployment hello-server
将强制执行政策配置为禁止所有映像
现在,将政策修改为阻止(而不是允许)部署所有映像。
Google Cloud 控制台
如需修改政策,请执行以下操作:
返回 Google Cloud 控制台中的 Binary Authorization 页面。
点击修改政策。
选择禁止所有映像。
点击保存政策。
gcloud
如需修改政策,请执行以下操作:
导出 YAML 格式的政策文件:
gcloud container binauthz policy export > /tmp/policy.yaml
在文本编辑器中,将
evaluationMode
从ALWAYS_ALLOW
更改为ALWAYS_DENY
。YAML 格式的政策文件应如下所示:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/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", "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"
重新测试政策
同样,可通过将示例容器映像部署到集群来测试政策。这次,Binary Authorization 会阻止映像的部署。
Google Cloud 控制台
部署映像:
转到 Google Cloud 控制台中的 GKE 集群页面。
点击部署。
控制台会提示您输入部署详情。
选择现有容器映像。
输入
gcr.io/google-samples/hello-app:1.0
作为容器映像路径。点击继续。
在应用名称字段中输入
hello-server
。点击部署。
kubectl
部署映像:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
您现在可以验证政策是否被阻止:
Google Cloud 控制台
如需验证映像是否未部署,请执行以下操作:
返回 Google Cloud 控制台中的 GKE 工作负载页面。
容器映像的工作负载带有红色图标,表明未能部署该映像。
kubectl
如需验证映像是否未部署,请执行以下命令:
kubectl get pods
该命令会输出以下消息,表明该映像未部署:
No resources found.
您可以进一步了解部署详情:
kubectl get event --template \ '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
您会看到类似于以下内容的响应:
FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule
在此输出中:
- POD_NAME:Pod 的名称。
- IMAGE_NAME:映像的名称。
- ATTESTOR_NAME:证明者的名称。
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除您在 GKE 中创建的集群:
控制台
如需删除集群,请执行以下操作:
转到 Google Cloud 控制台中的 GKE 集群页面。
选择
test-cluster
集群,然后点击删除。
gcloud
如需删除集群,请执行以下操作:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
后续步骤
- 使用
built-by-cloud-build
证明者仅部署由 Cloud Build 构建的映像(预览版)。 - 如需查看有关要求提供证明的端到端教程,请参阅:
- 阅读我们关于 DevOps 的资源,并探索 DevOps 研究和评估 (DORA) 研究项目。