首页 > 解决方案 > Azure Policy 中 match 和 like 通配符之间的区别

问题描述

我正在使用此处记录的 JSON 结构对 Azure 策略进行编码:https ://docs.microsoft.com/en-us/azure/governance/policy/concepts/definition-structure

有人可以确认是否可以使用星号通配符和“?”、“#”或“。” 在相同的声明上。正如它所说,我认为您只能在类似比较中使用星号,而在匹配比较中使用其他星号。

等等。非常感谢

我的标签字段必须以 4 个数字开头,然后是分号,但之后我不在乎编码的内容。理想情况下,这将是

####;*

但我发现我必须编码####;。或 ####;.. 或 ####;... 等。

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "in": "[parameters('type')]"
      },
      {
        "not": {
          "anyOf": [
            {

              "field": "[concat('tags[','tag_name', ']')]",
              "match": "####;"
            },
            {
              "field": "[concat('tags[','tag_name', ']')]",
              "match": "####;."
            },
            {
              "field": "[concat('tags[','tag_name', ']')]",
              "match": "####;.."
            },
            {
              "field": "[concat('tags[','tag_name', ']')]",
              "match": "####;..."
            },
            {
              "field": "[concat('tags[','tag_name', ']')]",
              "match": "####;...."
            },
            {
              "field": "[concat('tags[','tag_name', ']')]",
              "match": "####;....."
            },
            {
              "field": "[concat('tags[','tag_name', ']')]",
              "match": "####;......"
            },

等有没有更好的方法来实现这一目标?

标签: azurepolicy

解决方案


您是正确的,您不能在match子句中使用星号通配符 (*)。

但是,您可以使用 带有take 和 field 函数的value子句来实现您想要的结果:

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "in": "[parameters('type')]"
      },
      {
        "not": {
          "value": "[take(field('tags[tag_name]'), 5)]",
          "match": "####;"
        }
      }
    ]
  },
  "then": {
    "effect": "audit"
  }
}

推荐阅读