YAML 格式政策参考文档

本页面介绍了以 YAML 格式指定的 Binary Authorization 政策的参考信息。使用命令行界面配置政策时,您可以修改符合此规范的 YAML 格式的文件。如需查看 YAML 格式的政策示例,请参阅示例政策

YAML 格式政策文件采用以下格式:

name: projects/<PROJECT_ID>/policy
admissionWhitelistPatterns:
- namePattern: <MATCHING_PATTERN>
- ...
globalPolicyEvaluationMode: <GLOBAL_EVAL_MODE>
defaultAdmissionRule:
  <ADMISSION_RULE>
clusterAdmissionRules:
  <CLUSTER_SPECIFIER>:
    <ADMISSION_RULE>
  ...

节点

YAML 格式具有以下顶级节点:

节点 说明 是否必需
name 政策的名称。
admissionWhitelistPatterns 指定始终允许部署容器映像。
globalPolicyEvaluationMode 指定是否应用可豁免 Google 自有系统映像的全局政策。
defaultAdmissionRule 指定适用于那些没有针对集群的规则的所有集群的规则。
clusterAdmissionRules 指定适用于特定集群的规则。

name

name 节点包含政策的名称,格式如下:

name: projects/PROJECT_ID/policy

其中,PROJECT_ID 是在其中指定了相应政策的 Google Cloud Platform (GCP) 项目的名称。

例如:

name: projects/example-project/policy

admissionWhitelistPatterns

admissionWhitelistPatterns 用于指定无需执行政策的容器映像许可名单。您可以在 namePattern 子节点中指定指向 Container Registry 中或其他注册表中的映像的路径:

admissionWhitelistPatterns:
  - namePattern: MATCHING_PATTERN
  - ...

其中,MATCHING_PATTERN 是指向完全匹配的单个映像的路径,或者是指向与使用通配符符号 (*) 的模式匹配的任何映像的路径。请注意,通配符只能出现在模式的结尾处,不能出现在其他位置,例如,不允许使用 gcr.io/n*x,但允许使用 gcr.io/nginx*。此外,通配符也不会匹配 /,例如,gcr.io/nginx*gcr.io/nginx@latest 匹配,但与 gcr.io/nginx/image 不匹配。

以下示例将包含常用 Google Kubernetes Engine (GKE) 映像以及位于 gcr.io/example-project/helloworld 的映像的注册表添加到政策的豁免映像列表中:

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

许可名单模式

如需将注册表位置与指定路径匹配的所有容器映像列入许可名单,请运行以下命令:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/*

要将特定映像列入许可名单,请运行以下命令:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld

如需将当前标记的版本列入许可名单,请运行以下命令:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld:latest
  - namePattern: gcr.io/example-project/helloworld:my-tag
  - namePattern: gcr.io/example-project/helloworld:v1.*

如需按特定版本的映像的摘要将其列入许可名单,请运行以下命令:

admissionWhitelistPatterns:
  ...
  - namePattern: gcr.io/example-project/helloworld@sha256:77b0b75136b9bd0fd36fb50f4c92ae0dbdbbe164ab67885e736fa4374e0cbb8c

globalPolicyEvaluationMode

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

如需允许 Google 维护的所有系统映像,请将 globalPolicyEvaluationMode 属性设置为 ENABLE

globalPolicyEvaluationMode: ENABLE

如需停用全局政策评估模式,请运行以下命令:

globalPolicyEvaluationMode: DISABLE

defaultAdmissionRule

defaultAdmissionRule 用于指定政策的默认规则。默认规则规定了适用于所有非豁免容器映像(具有自己的针对集群的规则的映像除外)的限制条件。您可以使用 ADMISSION_RULE 集合指定默认规则:

defaultAdmissionRule:
  ADMISSION_RULE

以下示例展示了一条默认规则,该规则仅允许部署那些已获得指定证明者授权的容器映像。如果部分必需的证明者未为映像授权,Binary Authorization 会阻止部署并将相关信息写入审核日志。

defaultAdmissionRule:
  evaluationMode: REQUIRE_ATTESTATION
  enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
  requireAttestationsBy:
  - projects/example-project/attestors/secure-build

clusterAdmissionRules

clusterAdmissionRules 用于为政策声明针对集群的规则。这些规则中的限制条件仅适用于指定的集群。如果 Binary Authorization 将针对集群的规则应用于某个部署,则不会考虑默认规则。与默认规则一样,您可以使用 ADMISSION_RULE 集合指定针对集群的规则:

clusterAdmissionRules:
  CLUSTER_SPECIFIER:
    ADMISSION_RULE

其中,CLUSTER_SPECIFIER 是要应用该规则的集群的资源 ID,格式为 location.name(例如 us-east1-a.prod-cluster)。

以下示例展示了一条针对集群的规则,该规则仅允许部署那些已获指定证明者授权的容器映像:

clusterAdmissionRules:
  us-east1-a.prod-cluster:
    evaluationMode: REQUIRE_ATTESTATION
    enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    requireAttestationsBy:
    - projects/example-project/attestors/secure-build
    - projects/example-project/attestors/prod-qualified

节点集合

ADMISSION_RULE

ADMISSION_RULE 是用于指定规则的限制条件的节点集合,格式如下:

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

defaultAdmissionRuleclusterAdmissionRule 都会引用此集合。

evaluationMode

evaluationMode 用于指定 Binary Authorization 为评估是否要部署容器映像而执行的操作。可能的值包括:

  • ALWAYS_ALLOW:始终允许部署经此规则评估的映像
  • ALWAYS_DENY:始终拒绝部署经此规则评估的映像
  • REQUIRE_ATTESTATION:要求一个或多个证明者在部署之前对版本进行授权

如果 evaluationModeREQUIRE_ATTESTATION,则您必须在 requireAttestationsBy 中提供对必需证明者的引用。

enforcementMode

enforcementMode 用于指定 Binary Authorization 在容器映像不符合规则中规定的限制条件时会采取的操作。可能的值包括:

  • ENFORCED_BLOCK_AND_AUDIT_LOG:阻止部署,并写入审核日志。
  • DRYRUN_AUDIT_LOG_ONLY:允许部署不符合规则的映像,并将有关违规行为的详细信息写入审核日志中。

大多数生产规则都使用 ENFORCED_BLOCK_AND_AUDIT_LOG 强制执行模式。DRYRUN_AUDIT_LOG_ONLY 主要用于在政策生效之前在环境中对其进行测试。

requireAttestationsBy

requireAttestationsBy 指定一个或多个必须先对版本进行授权,然后才能部署容器映像的证明者。只有 REQUIRE_ATTESTATION 规则要求进行此设置。此节点的格式为:

requireAttestationsBy:
  - projects/PROJECT_ID/attestors/ATTESTOR_NAME
  - ...

其中,PROJECT_ID 是指定了证明者的项目的名称,ATTESTOR_NAME 是需要对版本签名的证明者的名称。

以下示例展示了如何指定证明者:

requireAttestationsBy:
- projects/example-project/attestors/secure-build
- projects/example-project/attestors/prod-qualified