Azure policy 如何在Azure中强制执行标记值的整数
我有一个Azure策略,它拒绝计算的表达式,下面有错误。我假设问题是,当您在门户中提供标记值时,它们作为字符串传递给ARM,即使要传递整数值。试图弄清楚如何强制标记结果的整数值Azure policy 如何在Azure中强制执行标记值的整数,azure-policy,Azure Policy,我有一个Azure策略,它拒绝计算的表达式,下面有错误。我假设问题是,当您在门户中提供标记值时,它们作为字符串传递给ARM,即使要传递整数值。试图弄清楚如何强制标记结果的整数值 { "field": "tags['Longevity']", "less": 1 } 错误 我还可以通过在策略中提供以下格式(即“更少”:1)来重现错误 "field": "[concat('tags[', paramete
{
"field": "tags['Longevity']",
"less": 1
}
错误
我还可以通过在策略中提供以下格式(即“更少”:1)来重现错误
"field": "[concat('tags[', parameters('tagName'), ']')]",
"less": 1
我发现标记的基本系统类型是“system.Collections.Generic.Dictionary`2+ValueCollection[system.String,system.String]”,因此,是的,您的假设是正确的,即当您在门户中提供标记值时,它们将作为字符串传递给ARM,即使要传递整数值
我已经尝试过在下面的策略中为标记值强制一个整数(作为字符串),我相信它是有效的(仅适用于正数),因为如果我提供了
- “1”位于下面策略的第26行,如果我尝试创建资源(比如Azure VM),则验证通过(如果提供的标记值为0),并且在所有其他情况下验证失败
- “2”位于下面策略的第26行,如果我尝试创建资源(比如Azure VM),则如果提供的标记值介于-1和1之间,则验证通过,并且在所有其他情况下验证失败
但是,如果您对Uservoice或反馈论坛感兴趣,您可以提出功能请求以允许非字符串类型的标记值。Microsoft支持部门提供了答案 答案如下所示,其效果与预期一致。必须使用concat()函数才能避免抱怨方括号内的方括号
{
"value": "[int(field(concat('tags[', 'Longevity', ']')))]",
"less": 0
},
INTESTENT,违反直觉,需要在定义中提供值作为
string
,以允许在求值过程中进行整数比较,但令人惊讶的是,它可以很好地处理数字,但不幸的是,它允许输入通过过滤器的字符串值,所以问题仍然存在,如何强制执行整数值Y,您是对的。为此,我们需要一个允许非字符串类型的标记值的特性。这就是我建议在UserVoice中提出相同功能请求的原因,如果感兴趣的话。Added()。下面是Microsoft支持部门发布的解决方案
{
"properties": {
"displayName": "Require a tag and its value on resources Test",
"policyType": "Custom",
"mode": "Indexed",
"metadata": {
"version": "1.0.1",
"createdBy": "xxxxxxxxxxxxxxxxxxxxxxx",
"createdOn": "2020-10-22T07:58:29.0108355Z",
"updatedBy": "xxxxxxxxxxxxxxxxxxxxxxx",
"updatedOn": "2020-10-22T10:45:42.4517009Z"
},
"parameters": {
"tagName": {
"type": "String",
"metadata": {
"displayName": "Tag Name",
"description": "Name of the tag, such as 'environment'"
}
}
},
"policyRule": {
"if": {
"not": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"less": "1"
}
},
"then": {
"effect": "deny"
}
}
},
"id": "/subscriptions/xxxxxxxxxxxxxxxxxxxxxxx/providers/Microsoft.Authorization/policyDefinitions/xxxxxxxxxxxxxxxxxxxxxxx",
"type": "Microsoft.Authorization/policyDefinitions",
"name": "xxxxxxxxxxxxxxxxxxxxxxx"
}
{
"value": "[int(field(concat('tags[', 'Longevity', ']')))]",
"less": 0
},