как найти поток лазурной политики - PullRequest
0 голосов
/ 12 января 2019

Я создаю политику Azure, с большой помощью я смог добраться до приведенной ниже политики json, но она ведет себя не так, как я ожидаю.

Согласно моему пониманию (поправьте меня, если я ошибаюсь): политика Azure - это в основном утверждение [if] и [then]. После [if] на картинке появляются все теги, в которых говорится, что. Если условие [Тип: Группа ресурсов] соответствует и [Имя тега Env! = Prod] и [Имя тега OS! = Windows] [затем] отклоняется.

Но результатом вышеупомянутой политики является то, что: если я указываю [Env = prod и указываю OS = Linux] в одной ResourceGroup, то политика позволяет пользователю создавать группу ресурсов. это не должно быть результатом политики.

ожидаемый результат должен быть:

сценарий 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 голосов
/ 17 января 2019

Указанное вами определение политики работает, как и ожидалось. Группа ресурсов будет только запрещена, если 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"
    }
}
...