创建没有标记的资源组时 Azure Policy 的奇怪行为
Posted
技术标签:
【中文标题】创建没有标记的资源组时 Azure Policy 的奇怪行为【英文标题】:Azure Policy weird behaviour while creating resource group without tag 【发布时间】:2019-01-10 04:17:49 【问题描述】:我已应用 Azure 策略,强制用户在创建资源组时分配标签。
当我创建一个新的 VM 并填写所有字段时,我会在同一个向导中创建一个新的资源组,然后单击查看并创建按钮。这次 azure 策略被正确触发并阻止我,因为新创建的 RG 不是使用标签创建的。
但是当我转到资源组策略并单击添加以创建新的 RG 时。那个时候我不填写标签,那么政策也不会被触发。 我并不奇怪为什么这项政策第一次有效,但第二次无效。
"if":
"allOf": [
"field": "tags",
"exists": "false"
,
"field": "type",
"equals": "Microsoft.Resources/subscriptions/resourceGroups"
]
,
"then":
"effect": "deny"
【问题讨论】:
上次我检查的策略在 RG 级别根本不起作用? 在我这边,政策有时有效,有时无效,太奇怪了。 @joy 当您转到资源组并创建新 RG 时。它有时会因为政策而阻止你吗?因为在我的情况下,当我转到 RG 刀片并创建没有标签的 RG 时,它已成功创建。当我使用新 RG 创建新 VM 时,策略会阻止 VM 部署,因为新 RG 没有标记。 在 RG 刀片中,指定 RG 名称,然后不要单击Next:Tags
,只需单击 Review + Create
,该策略有效。如果我先点击Next:Tags
,再点击Review + Create
,则该策略不起作用。
我也尝试了内置策略Enforce tag and its value on resource groups
,它有时也有效,有时无效。这似乎是一个错误。
【参考方案1】:
您遇到的差异是由资源组的 JSON 表示形式的差异引起的。
根据您在门户中单击的内容,资源组 JSON 可能没有标签属性,例如:
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo",
"name": "foo",
"location": "eastus",
"properties":
"provisioningState": "Succeeded"
其他时候它可以用一个空的标签属性创建,例如:
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/foo",
"name": "foo",
"location": "eastus",
"properties":
"provisioningState": "Succeeded"
,
"tags":
您的策略规则中的"exists": "false"
条件只会在“tags”属性缺失或为空时触发,因此具有"tags":
的资源组将绕过您的策略,即使它没有任何标签。
【讨论】:
【参考方案2】:好像弄明白了,和Azure策略无关,你的策略应该可以正常工作,可能是门户中创建资源组的刀片的错误。
我多次尝试通过powershell创建资源组,策略运行良好。
我的测试政策:
如果有必要,您可以在Github 中打开一个问题。
【讨论】:
谢谢乔伊,我会保持这个线程开放,以便其他人可以看到它 高兴,如果这是一个错误。是否可以建立一个检查预定义标签集的策略,如果用户没有指定策略中存在的任何标签,则在创建 RG 时,策略将阻止它。 @aquib.rocks 也许你可以,但如果是门户的错误,无论你创建什么策略,我认为它都不会正常工作。 该错误是因为即使我们不指定标签,该属性也作为空白存在,因此我们的策略不会阻止 RG 部署。我已经制定了策略并指定了标签名称,现在 Azure Policy 阻止了我,只允许我指定的标签名称。我也想要价值观,因此我一直在努力,但它失败了。你能看看下面的论坛查询***.com/questions/54137098/…以上是关于创建没有标记的资源组时 Azure Policy 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章