Azure Policy 中 match 和 like 通配符的区别

The difference between wildcards in match & like in Azure Policy

我正在使用此处记录的 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": "####;......"
            },

等 有没有更好的方法来实现这个?

您说得对,不能在 match 子句中使用星号通配符 (*)。

但是,您可以使用 value clause with the take and field functions 来达到您想要的结果:

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