0

我正在尝试构建一个 Azure 策略,它将审核我们的 Azure 租户中的 ApplicationInsights 资源,该资源的 SamplingPercentage 值大于参数化值。目前,参数设置为“Float”类型(因为您可以指定33.3, 12.5, 8.3):

{
  "mode": "All",
  "policyRule": {
    "if": {
      "allOf": [{
        "value": "type",
        "equals": "Microsoft.Insights/components"
      },
      {
        "value": "SamplingPercentage",
        "greater": "[parameters('Maximum')]"
      }]      
    },
    "then": {
      "effect": "audit"
    }
  },
  "parameters": {
    "Maximum": {
      "type": "Float",
      "metadata": {
        "displayName": "Maximum",
        "description": "Sets the maximum allowed sampling percentage."
      }
    }
  }
}

但是,当通过 Azure 门户设置 SamplingPercentage 时,您会看到一个有效选项列表。我想将这些包含在Maximum参数的AllowedValues属性中。

第一个想法是使用 strongType(我假设它会提示 Azure 门户根据类型注入允许的值)......我一直无法找到这样的值。第二次尝试失败,因为它似乎不可能创建一个Array整数。Maximum当我将参数更改TypeString并声明参数时,第三次尝试失败:

"parameters": {
   "Maximum": {
     "type": "Array",
     "metadata": {
       "displayName": "Maximum",
       "description": "Sets the maximum allowed sampling percentage."
     },
     "allowedValues": [ "100", "50", "33.3", "25", "12.5", "8.3", "4", "2", "1" ]
   }
 }

和相关的条件

{
   "value": "SamplingPercentage",
   "greater": "[float(parameters('Maximum'))]"
}

导致此错误:

内部异常'模板语言函数'float'被调用了一个无效的参数。该值无法转换为目标类型。

我究竟做错了什么?

4

1 回答 1

1

以下策略规则将审核 SamplingPercentage 大于参数化值的 ApplicationInsights 资源:

"policyRule": {
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Insights/components"
      },
      {
        "value": "[float(field('Microsoft.Insights/components/SamplingPercentage'))]",
        "greater": "[float(parameters('Maximum'))]"
      }
    ]
  },
  "then": {
    "effect": "audit"
  }
},
"parameters": {
  "Maximum": {
    "type": "String",
    "metadata": {
      "displayName": "Maximum",
      "description": "Sets the maximum allowed sampling percentage."
    },
    "allowedValues": [
      "100",
      "50",
      "33.3",
      "25",
      "12.5",
      "8.3",
      "4",
      "2",
      "1"
    ]
  }
}

以下是您的政策出了什么问题:

  1. 参数Maximum的类型应该是String,而不是Array
    • allowedValues 始终是一个数组。参数的类型是要分配的类型
  2. 不能直接访问属性(如SamplingType )。您必须使用别名( Microsoft.Insights/components/SamplingPercentage )。
  3. 条件中,"value"将评估文字值。使用"field"(或field('alias')函数)评估请求负载中的属性。
于 2020-05-05T01:01:00.023 回答