如何找到天蓝色政策的流程

时间:2019-01-12 06:33:27

标签: azure azure-resource-manager

我正在创建Azure策略,在能够获得以下json策略的帮助下,它的行为方式与我期望的方式不同。

根据我的理解(如果我错了,请纠正我):Azure Policy基本上是[if]和[then]声明。在[if]之后,allof标签进入图片,说明了这一点。如果条件[Type:资源组]匹配并且[Tag Name Env!= prod]和[Tag Name OS!= windows] [然后]拒绝。

但是上述策略的结果是:如果我在单个ResourceGroup中指定[Env = prod并指定OS = Linux],则该策略允许用户创建资源组。 这不应该是该政策的结果。

预期结果应该是:

场景1(政策行为正确):如果我仅指定[Env = prod],那么它应该允许我创建ResourceGroup或如果我指定其他任何内容则阻止我

方案2(策略正确执行 ):[OS = Windows]然后它应该允许我创建RG,否则如果我指定其他任何内容,则将我阻止。

场景3(政策行为不正确):[env = prod,OS = linux],由于第二个TAG不正确,因此应该阻止我。

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Resources/subscriptions/resourceGroups"
      },
      {
        "field": "tags.Env",
        "notEquals": "Prod"
      },
      {
        "field": "tags.OS",
        "notEquals": "windows"
      }
    ]
  },
  "then": { "effect": "deny" }
}

1 个答案:

答案 0 :(得分:1)

您提供的策略定义可以正常工作。如果tags.Env != "Prod" && tags.OS != "Windows",它将仅拒绝资源组。如果您翻转此条件,您会发现它会允许您所经历过的tags.Env == "Prod" || tags.OS == "Windows"所在的任何资源组。

以下策略定义将拒绝没有预期标签的任何资源组:

{
    "if": {
        "allOf": [
            {
                "field": "type",
                "equals": "Microsoft.Resources/subscriptions/resourceGroups"
            },
            {
                "anyOf": [
                    {
                        "field": "tags.Env",
                        "notEquals": "Prod"
                    },
                    {
                        "field": "tags.OS",
                        "notEquals": "windows"
                    }
                ]
            }
        ]
    },
    "then": {
        "effect": "deny"
    }
}