使用 CLI 配置政策

本页面介绍了如何使用 gcloud 命令在命令行中配置 Binary Authorization 政策。作为替代方案,您还可以使用 Google Cloud Console 或使用 REST API 执行这些任务。这个步骤是设置 Binary Authorization 的一部分。

概览

政策是一组规则,用于管理一个或多个容器映像的部署。

通过命令行配置政策时,您可以在文本编辑器中以 YAML 格式手动修改该政策。YAML 格式反映了 Binary Authorization 存储的政策的内部结构。如需详细了解此格式,请参阅 YAML 格式政策参考文档

配置政策时,您需要执行以下操作:

  • 导出 YAML 格式的政策文件
  • 添加任何其他豁免映像(可选)
  • 设置默认规则
  • 添加任何针对集群的规则(可选)
  • 导入 YAML 格式的政策文件

大多数实际政策都会进行检查,了解是否所有必需的证明者都已验证容器映像已准备好进行部署。在这种情况下,您还必须在配置政策时创建证明者

设置默认项目

设置默认 Google Cloud 项目(如果尚未设置):

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

导出 YAML 格式的政策文件

将 YAML 格式的政策文件导出到本地系统:

gcloud container binauthz policy export  > /tmp/policy.yaml

默认情况下,该文件包含以下内容:

admissionWhitelistPatterns:
- namePattern: gcr.io/google_containers/*
- namePattern: gcr.io/google-containers/*
- namePattern: k8s.gcr.io/*
- namePattern: gke.gcr.io/*
- namePattern: gcr.io/stackdriver-agents/*
globalPolicyEvaluationMode: ENABLE
defaultAdmissionRule:
  evaluationMode: ALWAYS_ALLOW
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
name: projects/PROJECT_ID/policy

管理豁免映像

豁免映像是一种无需遵守政策规则的容器映像。Binary Authorization 始终允许部署豁免映像。

每个政策都有一个由注册表路径指定的豁免映像许可名单。此路径可以是 Container Registry 中或另一个容器映像注册表中的位置。如果启用,此许可名单不包括那些由全局政策评估模式豁免的映像。

如需添加豁免映像,请在 policy.yaml 文件中的 admissionWhitelistPatterns 列表下添加一个 namePattern 节点:

admissionWhitelistPatterns:
- namePattern: MATCHING_PATTERN

其中,MATCHING_PATTERN 是指向完全匹配的单个映像的路径,或者是指向与使用通配符符号 (*) 的模式匹配的任何映像的路径。

全局政策评估模式

全局政策评估模式这种政策设置会使 Binary Authorization 先评估全局政策,然后再评估用户配置的政策。全局政策由 Google 提供,Binary Authorization 不会对 Google 维护的一系列系统映像进行进一步政策评估。启用此设置后,Google Kubernetes Engine (GKE) 所需的映像不会因政策强制执行而被阻止。全局政策会在用户政策之前额外进行评估。

还可以使用以下命令查看全局政策的内容:

gcloud container binauthz policy export --project=binauthz-global-policy

借助全局政策评估模式,您就不必在 admissionWhitelistPatterns 列表下明确指定指向 Google 维护的系统映像的路径:

admissionWhitelistPatterns:
- namePattern: gcr.io/google_containers/*
- namePattern: gcr.io/google-containers/*
- namePattern: k8s.gcr.io/*
- namePattern: gke.gcr.io/*
- namePattern: gcr.io/stackdriver-agents/*

如需启用全局政策评估模式,请将以下行添加到 policy.yaml 文件中:

globalPolicyEvaluationMode: ENABLE

如需停用全局政策评估模式,请添加以下代码:

globalPolicyEvaluationMode: DISABLE

设置默认规则

规则是政策的一部分,用于规定容器映像必须满足哪些限制条件才能部署。默认规则规定了适用于所有非豁免容器映像(具有自己的针对集群的规则的映像除外)的限制条件。每项政策都必须有一条默认规则。

默认规则在 YAML 格式的政策文件内的 defaultAdmissionRule 节点中指定。如需详细了解此规则的各个部分,请参阅 YAML 格式政策参考文档中的 ADMISSION_RULE如需查看默认规则的示例,请参阅示例政策

如需设置默认规则,请根据需要修改 policy.yaml 文件中的 defaultAdmissionRule 节点:

defaultAdmissionRule:
  evaluationMode: EVAL_MODE
  enforcementMode: ENFORCEMENT_MODE
  requireAttestationsBy:
  - ATTESTOR
  - ...

其中:

  • EVAL_MODE 用于指定在允许部署某个容器映像之前 Binary Authorization 评估的限制条件类型。
  • ENFORCEMENT_MODE 用于指定在容器映像不符合该规则中定义的限制条件时执行的操作。
  • ATTESTOR 用于指定必须由哪些证明者(如果需要)先对容器映像签名,然后才能进行部署。使用指向证明者的完全限定路径,格式为 projects/PROJECT_ID/attestors/ATTESTOR_NAME

如果您的规则需要进行检查,了解是否所有必需的证明者都已对容器映像签名,您必须先创建证明者,然后再完成此步骤。

设置针对集群的规则(可选)

一个集群还可以有一条或多条针对集群的规则。这种类型的规则只适用于要部署到特定 GKE 集群的容器映像。针对集群的规则是政策的可选部分。

针对集群的规则在 YAML 格式的政策文件内的 clusterAdmissionRules 节点中定义。如需详细了解此规则的各个部分,请参阅 YAML 格式政策参考文档中的 ADMISSION_RULE如需查看示例,请参阅示例政策中的使用针对集群的规则

如需添加针对集群的规则,请执行以下操作:

policy.yaml 文件中,添加 clusterAdmissionRules 节点:

clusterAdmissionRules:
  CLUSTER_SPECIFIER:
    evaluationMode: EVAL_MODE
    enforcementMode: ENFORCEMENT_MODE
    requireAttestationsBy:
    - ATTESTOR
    - ...

其中,CLUSTER_SPECIFIER 是要应用该规则的集群的资源 ID,格式为 location.name,其他属性如上文的设置默认规则中所述。如需查看针对集群的规则示例,请参阅示例政策

如果您的规则需要进行检查,了解是否所有必需的证明者都已对容器映像签名,您必须先创建证明者,然后再完成此步骤。

导入 YAML 格式的政策文件

最后一步是将 YAML 格式的政策文件重新导入 Binary Authorization。

如需导入该文件,请输入以下命令:

gcloud container binauthz policy import /tmp/policy.yaml

后续步骤