快速入门:通过持续验证监控 Pod 的安全性
了解如何使用基于检查的政策来开始进行 Binary Authorization 持续验证 (CV)。在本快速入门中,您将使用以下 CV 检查来持续验证正在运行的 Pod 是否满足以下条件:
准备工作
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Binary Authorization and Google Kubernetes Engine APIs:
gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com - 安装
kubectl
命令行工具。 - 如果您的 Binary Authorization 政策和 GKE 集群位于不同的项目中,请确保两个项目中都启用了 Binary Authorization。
创建平台政策
如需设置 CV GKE 平台政策,请执行以下操作:
创建平台政策 YAML 文件:
cat << EOF > /tmp/my-policy.yaml gkePolicy: checkSets: - checks: - trustedDirectoryCheck: trustedDirPatterns: - us-central1-docker.pkg.dev/my-project/my-directory displayName: My trusted directory check - imageFreshnessCheck: maxUploadAgeDays: 30 displayName: My image freshness check displayName: My trusted directory and image freshness check set EOF
此政策会检查以下条件:
Pod 的映像存储在名为
us-central1-docker.pkg.dev/my-project/my-directory
的 Artifact Registry 代码库中。Pod 的映像在过去 30 天内上传到 Artifact Registry 或 Container Registry 代码库。
创建平台政策:
gcloud beta container binauthz policy create POLICY_ID \ --platform=gke \ --policy-file=/tmp/my-policy.yaml \ --project=POLICY_PROJECT_ID
请替换以下内容:
POLICY_ID
:您选择的 IDPOLICY_PROJECT_ID
:政策项目 ID
创建或更新集群
如需在集群上启用 CV,您可以创建新集群或更新现有集群。
如需创建集群并启用基于检查的平台政策,请运行以下命令:
gcloud beta container clusters create CLUSTER_NAME
\ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID请替换以下内容:
CLUSTER_NAME
:集群的名称LOCATION
:位置,例如:us-central1
或asia-south1
POLICY_PROJECT_ID
:存储政策的项目的 IDPOLICY_ID
:政策 IDCLUSTER_PROJECT_ID
:集群项目 ID
等待集群创建完成。
如需更新现有的已启用基于检查的政策的集群,请运行以下命令。
gcloud beta container clusters update CLUSTER_NAME \ --location=LOCATION \ --binauthz-evaluation-mode=POLICY_BINDINGS \ --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \ --project=CLUSTER_PROJECT_ID
请替换以下内容:
CLUSTER_NAME
:集群的名称LOCATION
:位置,例如:us-central1
或asia-south1
POLICY_PROJECT_ID
:存储政策的项目的 IDPOLICY_ID
:政策 IDCLUSTER_PROJECT_ID
:集群项目 ID
等待集群更新完成。
部署映像
获取
kubectl
的凭据:gcloud container clusters get-credentials CLUSTER_NAME
部署映像:
kubectl run hello-app \ --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
映像
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
符合新鲜度检查,因为它是在过去 30 天内上传到代码库的。但该映像不符合可信目录检查,因为它不在us-central1-docker.pkg.dev/my-project/my-directory
中。 因此,CV 会在 Cloud Logging 中生成TrustedDirectoryCheck
日志条目。
查看日志
日志条目会在部署 Pod 后的 24 小时内显示在 Cloud Logging 中,但也可能只需几个小时就显示。
要在 Cloud Logging 中查看日志,请使用以下过滤条件:
logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"
hello-app
Pod 的日志类似于以下内容。有些字段可能会因项目 ID、集群名称等而异。
{
"insertId": "637c2de7-0000-2b64-b671-24058876bb74",
"jsonPayload": {
"podEvent": {
"endTime": "2022-11-22T01:14:30.430151Z",
"policyName": "projects/1234567890/platforms/gke/policies/my-policy",
"images": [
{
"result": "DENY",
"checkResults": [
{
"explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
"checkSetName": "Default check set",
"checkSetIndex": "0",
"checkName": "My trusted directory check",
"verdict": "NON_CONFORMANT",
"checkType": "TrustedDirectoryCheck",
"checkIndex": "0"
}
],
"image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
}
],
"verdict": "VIOLATES_POLICY",
"podNamespace": "default",
"deployTime": "2022-11-22T01:06:53Z",
"pod": "hello-app"
},
"@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
},
"resource": {
"type": "k8s_cluster",
"labels": {
"project_id": "my-project",
"location": "us-central1-a",
"cluster_name": "my-cluster"
}
},
"timestamp": "2022-11-22T01:44:28.729881832Z",
"severity": "WARNING",
"logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
"receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}
日志条目会显示违反政策行为的相关信息,包括以下字段:
policyName
:CV 发现违规行为时使用的平台政策checkResults
:包含以下字段的结果块:explanation
:错误消息checkSetName
:检查集的displayName
值checkSetIndex
:检查集在政策中的索引checkName
:检查的名称checkIndex
:检查在检查集中的索引verdict
:生成日志条目的判定结果,在本例中为NOT_CONFORMANT
,因为不符合检查。
某些检查可以包含其他信息,以帮助您了解不符合检查的原因。
由于映像符合新鲜度检查,因此新鲜度检查不会显示在日志中。
清理
为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。
本部分介绍了如何清理本指南前面部分配置的 CV 监控。
您可以在集群中停用 CV 监控或 Binary Authorization 和 CV。
在集群中停用 Binary Authorization
如需在集群中同时停用 CV 和 Binary Authorization 强制执行,请运行以下命令:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=DISABLED \
--location=LOCATION \
--project=CLUSTER_PROJECT_ID
请替换以下内容:
CLUSTER_NAME
:集群的名称LOCATION
:集群位置CLUSTER_PROJECT_ID
:集群项目 ID
在集群中停用基于检查的政策监控
如需在集群中停用使用基于检查的政策的 CV,并使用 Binary Authorization 强制执行政策重新启用强制执行,请运行以下命令:
gcloud beta container clusters update CLUSTER_NAME \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--location=LOCATION \
--project="CLUSTER_PROJECT_ID"
请替换以下内容:
CLUSTER_NAME
:集群的名称LOCATION
:集群位置CLUSTER_PROJECT_ID
:集群项目 ID
请注意,--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
等效于旧标志 --enable-binauthz
。
删除政策
如需删除政策,请运行以下命令。无需删除基于检查的平台政策即可停用基于检查的政策审核。
gcloud beta container binauthz policy delete POLICY_ID \
--platform=gke \
--project="POLICY_PROJECT_ID"
请替换以下内容:
POLICY_ID
:政策的 IDPOLICY_PROJECT_ID
:政策项目 ID