azure - Azure 资源组需要多个标签名称

标签 azure azure-policy

我有以下用例:我想要 Azure 策略,要求有两个强制标签:资源组环境项目强>。如果没有这两个标签,则不可能创建新的资源组,并且已创建的没有这两个标签的资源组应显示为不合规。到目前为止,这听起来像是一个简单的场景,但我没有得到预期的结果,而且越来越难保持理智,所以请指教。

我已经查看了 Stack Overflow 中的多个线程,以及这篇 Microsoft 文章:How to build an audit Azure Policy with multiple parameters .

我使用以下代码:

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
          "field": "tags['Environment']",
          "exists": "false"
        },
        {
          "field": "tags['Project']",
          "exists": "false"
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

注意:我在故障排除过程中删除了参数,并用值替换它们以简化操作。使用参数而不是显式值时,结果是相同的。

我的理解是,allOf应该充当逻辑AND,并且应该要求所有条件都到位 - 成为资源组,具有标签环境并具有标签项目。

那么结果是什么呢?创建新资源组时,如果不提供环境和项目标签,验证将不允许您继续: enter image description here

注意:您可能会发现标签要求有相同的策略名称,并且这是唯一的策略分配...到处都是!这是我的个人测试租户,因此不可能存在我不知道的其他策略分配。

问题是,它允许我仅使用提供的一个标签来继续:

  • 仅环境

Only Environment

  • 唯一的项目

Only Project

如果我们查看合规状态,您可能会看到资源组被策略标记为合规:

enter image description here

但它只有一个单个标签 - 项目,没有标签环境...并且仍然标记为合规。

enter image description here

因此,经过漫长的探索后,我的问题是 - 如何强制使用这两个标签 - 环境和项目。可能还有其他标签,但这两个标签应该是必需的,并且不允许在不提供它们的情况下创建新资源组,并且如果两者都缺失,则不允许将旧资源组标记为不合规。

我错过了什么,它不能像预期的那样工作?

我还使用了文章中的代码... 1:1 ...复制-粘贴,我再次只能使用单个标签继续。

请支持。

我遵循了 Stack Overflow 中的其他示例,如 Microsoft 官方文章。即使是 Microsoft 文章中建议的示例也没有按预期工作,或者至少没有按照我的预期工作。

最佳答案

此处的 AllOf 条件指示策略引擎在满足所有条件的情况下检测不合规资源。意思是:

  1. 您当前正在扫描 RG
  2. 当前 RG 没有环境标签
  3. 当前 RG 没有项目标签

我们可以将其表达为:“如果这是一个没有环境并且没有标签项目的 RG,那么我的项目是不合规的”。

如果满足任一条件(例如存在一个标记),则该资源会被标记为合规,因为它不符合您的总体条件。

您想要在此处添加 AnyOf 条件,以确保在一个或另一个标记不存在时它会中断。可以这样表达:“如果这是一个没有环境没有标签项目的 RG,那么我的项目是不合规的”。

代码:

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [
        {
          "field": "type",
          "equals": "Microsoft.Resources/subscriptions/resourceGroups"
        },
        {
          "anyOf": [
            {
              "field": "tags['Environment']",
              "exists": "false"
            },
            {
              "field": "tags['Project']",
              "exists": "false"
            }
          ]
        }
      ]
    },
    "then": {
      "effect": "deny"
    }
  },
  "parameters": {}
}

关于azure - Azure 资源组需要多个标签名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75445305/

相关文章:

azure - 有没有办法阻止通过策略将用户添加到 Azure 资源?

Azure AD B2C 选择Web应用程序用户有访问权限

azure - 如何在 Azure 上启用 Ping(ICMP)

angular - 将 Angular 4 发布到 Azure

Azure 策略分配 - 排除资源类型

json - 用于打开防火墙的 Azure Policy

asp.net - 缩放 azure 网站

azure - .Net Core 微服务 : using HTTPS on Kubernetes on Azure (AKS)

azure - 将 Azure 策略定义部署到管理组权限