快速入门:通过持续验证监控 Pod 的安全性
了解如何使用基于检查的政策来开始进行 Binary Authorization 持续验证 (CV)。在本快速入门中,您将使用以下 CV 检查来持续验证正在运行的 Pod 是否满足以下条件:
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud的新用户, 请创建一个账号,以评估我们的产品在 实际场景中的表现。新客户还可以获得 300 美元的免费抵用金,用于 运行、测试和部署工作负载。
-
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
-
创建项目:如需创建项目,您需要拥有 Project Creator 角色
(
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予 角色。
-
创建 Google Cloud 项目:
gcloud projects create PROJECT_ID
将
PROJECT_ID替换为您要创建的 Google Cloud 项目的名称。 -
选择您创建的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID替换为您的 Google Cloud 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 Binary Authorization 和 Google Kubernetes Engine API:
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予 角色。gcloud services enable container.googleapis.com
binaryauthorization.googleapis.com -
安装 Google Cloud CLI。
-
如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init -
选择或创建项目所需角色
- 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
-
创建项目:如需创建项目,您需要拥有 Project Creator 角色
(
roles/resourcemanager.projectCreator),该角色包含resourcemanager.projects.create权限。了解如何授予 角色。
-
创建 Google Cloud 项目:
gcloud projects create PROJECT_ID
将
PROJECT_ID替换为您要创建的 Google Cloud 项目的名称。 -
选择您创建的 Google Cloud 项目:
gcloud config set project PROJECT_ID
将
PROJECT_ID替换为您的 Google Cloud 项目名称。
-
验证是否已为您的 Google Cloud 项目启用结算功能。
启用 Binary Authorization 和 Google Kubernetes Engine API:
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予 角色。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-south1POLICY_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-south1POLICY_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