创建没有标记的资源组时 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 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

Azure Policy:标签定义资源是不是可以移动/部署到特定位置

使用Azure Policy(策略)强制实现资源Tag的坑

Azure Policy 存储帐户保留策略未标记资源

在可能存在多个选项的情况下,如何创建策略以强制标记?

Azure 策略 - 拒绝使用特定标记创建资源

Azure 策略要求创建某个标记,但不使用默认值?