Azure Policy 定义 deny 效果

deny 效果用于通过策略定义防止与定义的标准不匹配的资源请求,并使请求失败。

“拒绝”评估

在资源管理器模式下创建或更新匹配的资源时,Deny 会在发送给资源提供程序之前阻止请求。 该请求返回为 403 (Forbidden)。 在门户中,可以将 Forbidden 视为策略分配阻止的部署状态。 对于资源提供程序模式,资源提供程序管理资源的评估。

在评估现有资源期间,与 deny 策略定义匹配的资源将标记为不合规。

“拒绝”属性

对于资源管理器模式,deny 效果没有任何属性可用于策略定义的 then 条件。

对于 Microsoft.Kubernetes.Data 的资源提供程序模式,deny 效果具有 details 的以下子属性。 新的策略定义或更新的策略定义需要使用 templateInfo,因为 constraintTemplate 已被弃用。

  • templateInfo(必需)
    • 无法与 constraintTemplate 一起使用。
    • sourceType(必需)
      • 定义约束模板的源类型。 允许的值:PublicURLBase64Encoded

      • 如果是 PublicURL,则与 url 属性配合,以提供约束模板的位置。 位置必须可公开访问。

        警告

        请勿在 url 或可能公开机密的任何其他内容中使用 SAS URI 或令牌。

      • 如果是 Base64Encoded,则与 content 属性配合,以提供 Base 64 编码约束模板。

  • constraint(可选)
    • 无法与 templateInfo 一起使用。
    • 约束模板的 CRD 实现。 使用通过 values 作为 {{ .Values.<valuename> }} 传递的参数。 在下面的示例 2 中,这些值为 {{ .Values.excludedNamespaces }}{{ .Values.allowedContainerImagesRegex }}
  • constraintTemplate(已弃用)
    • 无法与 templateInfo 一起使用。
    • 创建或更新策略定义时必须替换为 templateInfo
    • 约束模板 CustomResourceDefinition (CRD) 定义新约束。 该模板定义 Rego 逻辑、约束架构和通过 Azure Policy 的 values 传递的约束参数。 有关详细信息,请转到 Gatekeeper 约束
  • constraintInfo(可选)
    • 不能与 constraintconstraintTemplateapiGroupskinds 一起使用。
    • 如果未提供 constraintInfo,则可以从 templateInfo 和策略生成约束。
    • sourceType(必需)
      • 定义约束的源类型。 允许的值:PublicURLBase64Encoded

      • 如果是 PublicURL,则与 url 属性配合,以提供约束的位置。 位置必须可公开访问。

        警告

        请勿在 url 或可能公开机密的任何其他内容中使用 SAS URI 或令牌。

  • namespaces(可选)
    • 要将策略评估限制为的 Kubernetes 命名空间的数组。
    • 空值或缺失值会导致策略评估包括所有命名空间,但 excludedNamespaces 中定义的命名空间除外。
  • excludedNamespaces(必需)
  • labelSelector(必需)
    • 一个包含 matchLabels(对象)和 matchExpression(数组)属性的对象,用于指定要针对所提供标签和选择器的匹配策略评估包含哪些 Kubernetes 资源
    • 空值或缺失值会导致策略评估包括所有标签和选择器,但 excludedNamespaces 中定义的命名空间除外。
  • apiGroups(使用 templateInfo 时需要)
    • 包含要匹配的 API 组的数组。 空数组 ([""]) 是核心 API 组。
    • 不允许为 apiGroups 定义 ["*"]
  • kinds(使用 templateInfo 时需要)
    • 一个数组,其中包含要将评估限制到的 Kubernetes 对象的类型
    • 不允许为 kinds 定义 ["*"]
  • values(可选)
    • 定义要传递给约束的任何参数和值。 每个值都必须在约束模板 CRD 中存在。

“拒绝”示例

示例 1:对资源管理器模式使用 deny 效果。

"then": {
  "effect": "deny"
}

示例 2:对 Microsoft.Kubernetes.Data 的资源提供程序模式使用 deny 效果。 details.templateInfo 中的其他信息声明了 PublicURL 的使用,并将 url 设置为约束模板的位置,以在 Kubernetes 中用于限制允许的容器镜像。

"then": {
  "effect": "deny",
  "details": {
    "templateInfo": {
      "sourceType": "PublicURL",
      "url": "https://store.policy.core.windows.net/kubernetes/container-allowed-images/v1/template.yaml",
    },
    "values": {
      "imageRegex": "[parameters('allowedContainerImagesRegex')]"
    },
    "apiGroups": [
      ""
    ],
    "kinds": [
      "Pod"
    ]
  }
}

后续步骤