如何创建验证资源组名称的Azure策略

时间:2017-09-05 10:45:11

标签: azure azure-powershell

我正在尝试创建一个Azure策略,我可以在订阅级别分配该策略,并控制订阅中资源组的命名。

策略需要以资源类型为目标或以其他方式限制其应用程序,否则它们将全局应用于所有资源。

我可以使用哪种资源类型(或其他方法)将验证限制为资源组名称?

以下是我的尝试:

$definition = New-AzureRmPolicyDefinition -Name resourceGroupNamePatterns 
   -Description "Restrict resource group names to allowed prefixes only" -Policy '{
    "if": {
        "allOf": [
          {
            "not": {
              "field": "name",
              "like": "Pattern1-*"
            }
          },
          {
            "not": {
              "field": "name",
              "like": "Pattern2-*"
            }
          },
          {
            "field": "type",
            "equals": "Microsoft.Resources/subscriptions/resourcegroups"
          }
        ]
    },
    "then": {
        "effect": "deny"
    }
}'

2 个答案:

答案 0 :(得分:1)

资源组是Microsoft.Resources/subscriptions/resourcegroups类型。您可以从资源提供者操作中推断出:

Get-AzureRmProviderOperation 'Microsoft.Resources/*'

答案 1 :(得分:1)

不确定此问题是否仍然相关,但在发布Azure策略时,不支持对资源组进行评估。

问题中提供的政策定义是正确的。

请尝试更新您的powershell版本,并更新策略定义。它将默认为mode: all,这反过来将启用对资源组的策略评估。

有关政策模式的文档:https://docs.microsoft.com/en-us/azure/azure-policy/policy-definition

<强>模式

该模式确定将为策略评估哪些资源类型。支持的模式是:

  • 所有:评估资源组和所有资源类型
  • 已建立索引:仅评估支持标记和位置的资源类型

我们建议您将模式设置为全部。通过门户创建的所有策略定义都使用all模式。如果使用PowerShell或Azure CLI,则需要指定mode参数并将其设置为all。