Какие у меня есть возможности для отладки настраиваемых политик Azure или оценки полей за пределами механизма политик?

Я пытаюсь создать несколько настраиваемых политик и имею дело с некоторыми сложными выражениями полей, как показано ниже:

    "then": {
        "effect": "[parameters('effect')]",
        "details": {
            "type": "Microsoft.Network/azureFirewalls",
            "existenceCondition": {
                "count": {
                    "field": "Microsoft.Network/azureFirewalls/ipConfigurations[*]",
                    "where": {
                        "field": "Microsoft.Network/azureFirewalls/ipConfigurations[*].subnet.id",
                        "like": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/*/providers/Microsoft.Network/virtualNetworks/', first(split(field('fullName'), '/')), '/subnets/AzureFirewallSubnet')]"
                    }
                },
                "equals": 1
            }
        }
    }

Выражение не работает так, как я ожидал. Есть ли способ оценить некоторые из полей или выражений, упомянутых выше, для ресурса вне механизма политики, выполнив вызовы Powershell?

Например, когда мне нужно что-то отладить, как мне оценить подобные выражения вне механизма plolicy:

"field": "Microsoft.Network/azureFirewalls/ipConfigurations[*].subnet.id",
"like": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/*/providers/Microsoft.Network/virtualNetworks/', first(split(field('fullName'), '/')), '/subnets/AzureFirewallSubnet')]"

person Allan Xu    schedule 27.10.2020    source источник


Ответы (1)


Запрос графика ресурсов

Получить текущие значения псевдонимов. Мне нравится использовать запрос графика ресурсов через API (Postman). Для этого используйте следующую конечную точку с авторизацией Bearer Token.

POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2019-04-01

Полезные данные тела запроса графика ресурсов:

{
    "query": "Resources | where type =~ 'Microsoft.Network' | project aliases",
    "subscriptions": [
        "{{subscription_id}}"
    ]
}

Шаблон ARM только для оценки результатов

Если вы хотите протестировать оценку функции ARM, вы можете поместить ее в шаблон ARM с функцией ARM в качестве вывода. Это может выглядеть примерно так.

Шаблон:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "fullName": {
      "type": "string"
    }
  },
  "variables": {},
  "functions": [],
  "resources": [],
  "outputs": {
    "result": {
      "type": "string",
      "value": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/*/providers/Microsoft.Network/virtualNetworks/', first(split(parameters('fullName'), '/')), '/subnets/AzureFirewallSubnet')]"
    }
  }
}

API развертывания Azure

Вы можете развернуть этот шаблон, добавив его в объект развертывания. Возьмите значение field('fullName') из приведенного выше запроса графика ресурсов и жестко закодируйте или параметризуйте эту часть. Включение его в полезные данные тела для следующей конечной точки с использованием той же аутентификации токена-носителя, указанной выше.

PUT https://management.azure.com/subscriptions/:subscriptionId/providers/Microsoft.Resources/deployments/:deploymentName?api-version=2019-08-01

Полезная нагрузка корпуса развертывания:

{
  "location": "westus2",
  "properties": {
    "mode": "Incremental",
    "parameters": {
      "fullName": {
        "value": "PUT THE FULL NAME HERE"
      }
    },
    "template": PASTE THE TEMPLATE HERE
  }
}

Вы можете просмотреть эти выходные данные либо через портал из колонки ресурсов подписки, либо вызвать другую конечную точку, используя ту же аутентификацию токена-носителя.

GET https://management.azure.com/subscriptions/:subscriptionId/providers/Microsoft.Resources/deployments/:deploymentName?api-version=2019-08-01

Это покажет выход для вашей функции ARM.

Отзыв о портале политики Azure

Кроме того, еще одно хорошее место для проверки отзывов о политике Azure - это вкладка Compliance в колонке портала политики Azure. Если вам удастся получить оценку вашей политики до Non-Compliant, вы получите ответ, почему она была оценена таким образом.

Для этого в колонке "Политика"

  • Нажмите Compliance
  • Щелкните название своего задания
  • Щелкните название применимого определения политики.
  • Просмотреть любой Non-Compliant ресурс
  • Щелкните эллипсы ... в правом крайнем правом углу строки.
  • Выберите Compliant Reason.

Это покажет вам ценные кусочки информации, например Target Value, Current Value и т. Д.

person Rob S.    schedule 27.10.2020