Краткое руководство. Создание назначения политики для выявления несоответствуемых ресурсов с помощью REST API

Чтобы понять, соответствуют ли ресурсы требованиям в Azure, прежде всего нужно определить их состояние. В этом кратком руководстве описано, как создать назначение политики для выявления несоответствующих ресурсов с помощью REST API. Политика назначается группе ресурсов и проверяет виртуальные машины, которые не используют управляемые диски. После создания назначения политики вы определите несоответствующие виртуальные машины.

В этом руководстве REST API используется для создания назначения политики для определения в среде Azure ресурсов, не соответствующих требованиям. Примеры, приведенные в этой статье, используют PowerShell и команды Azure CLI az rest . Вы также можете выполнять az rest команды из оболочки Bash, например Git Bash.

Необходимые компоненты

  • Если у вас нет учетной записи Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
  • Последняя версия PowerShell или оболочка Bash, например Git Bash.
  • Последняя версия Azure CLI.
  • Visual Studio Code.
  • Группа ресурсов с хотя бы одной виртуальной машиной, которая не использует управляемые диски.

Проверка синтаксиса REST API

Существует два элемента для выполнения команд REST API: URI REST API и текста запроса. Дополнительные сведения см. в разделе "Назначения политик— создание".

В следующем примере показан синтаксис URI REST API для создания определения политики.

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
  • scope: область определяет, какие ресурсы или группу ресурсов назначение политики применяется. Она может варьироваться от группы управления до отдельного ресурса. Замените {scope} одним из следующих шаблонов:
    • Группа управления: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Подписка: /subscriptions/{subscriptionId}
    • группу ресурсов /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName};
    • Ресурс: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}.
  • policyAssignmentName: создает имя назначения политики для назначения. Имя включается в свойство назначения policyAssignmentId политики.

В следующем примере приведен пример JSON для создания файла текста запроса.

{
  "properties": {
    "displayName": "",
    "description": "",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
    "nonComplianceMessages": [
      {
        "message": ""
      }
    ]
  }
}
  • displayName: отображаемое имя назначения политики.
  • description: можно использовать для добавления контекста о назначении политики.
  • policyDefinitionId: идентификатор определения политики, создающий назначение.
  • nonComplianceMessages: задайте сообщение для использования, если ресурс оценивается как несоответствующий. Дополнительные сведения см. в разделе Сообщения о несоответствии.

Подключение к Azure

Из сеанса терминала Visual Studio Code подключитесь к Azure. Если у вас несколько подписок, выполните команды, чтобы задать контекст для подписки. Замените <subscriptionID> идентификатором своей подписки Azure.

az login

# Run these commands if you have multiple subscriptions
az account list --output table
az account set --subscription <subscriptionID>

Используйте az login даже если вы используете PowerShell, так как в примерах используются команды Azure CLI az rest .

Создание назначения политики

В этом примере создается назначение политики и назначается виртуальные машины аудита, которые не используют определение управляемых дисков.

Текст запроса необходим для создания назначения. Сохраните следующий код JSON в файле с именем request-body.json.

{
  "properties": {
    "displayName": "Audit VM managed disks",
    "description": "Policy assignment to resource group scope created with REST API",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
    "nonComplianceMessages": [
      {
        "message": "Virtual machines should use managed disks"
      }
    ]
  }
}

Чтобы создать назначение политики в существующей группе ресурсов область, используйте следующий URI REST API с файлом для текста запроса. Замените {subscriptionId} и {resourceGroupName} собственными значениями. Команда отображает выходные данные JSON в оболочке.

az rest --method put --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01 --body `@request-body.json

В PowerShell для указания имени файла необходимо использовать at sign@обратную тикку (`). В оболочке Bash, как Git Bash, опустите обратную тикку.

Дополнительные сведения см. в разделе "Назначения политик— создание".

Выявление несоответствующих ресурсов

Состояние соответствия для нового назначения политики занимает несколько минут, чтобы стать активным и предоставить результаты о состоянии политики. REST API используется для отображения несоответствуемых ресурсов для этого назначения политики, а выходные данные — в ФОРМАТЕ JSON.

Чтобы определить несоответствующие ресурсы, выполните следующую команду. Замените {subscriptionId} значения, {resourceGroupName} используемые при создании назначения политики.

az rest --method post --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01 --uri-parameters `$filter="complianceState eq 'NonCompliant' and PolicyAssignmentName eq 'audit-vm-managed-disks'"

Запросы filter ресурсов, которые оцениваются как несовместимые с определением политики с именем audit-vm-managed-disks , созданным с назначением политики. Опять же, обратите внимание, что обратная символика используется для экранирования знака доллара ($) в фильтре. Для клиента Bash обратная косая черта (\) является общим escape-символом.

Результаты должны выглядеть примерно так:

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
  "@odata.count": 1,
  "@odata.nextLink": null,
  "value": [
    {
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "@odata.id": null,
      "complianceReasonCode": "",
      "complianceState": "NonCompliant",
      "effectiveParameters": "",
      "isCompliant": false,
      "managementGroupIds": "",
      "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks",
      "policyAssignmentName": "audit-vm-managed-disks",
      "policyAssignmentOwner": "tbd",
      "policyAssignmentParameters": "",
      "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
      "policyAssignmentVersion": "",
      "policyDefinitionAction": "audit",
      "policyDefinitionCategory": "tbd",
      "policyDefinitionGroupNames": [
        ""
      ],
      "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionName": "06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionReferenceId": "",
      "policyDefinitionVersion": "1.0.0",
      "policySetDefinitionCategory": "",
      "policySetDefinitionId": "",
      "policySetDefinitionName": "",
      "policySetDefinitionOwner": "",
      "policySetDefinitionParameters": "",
      "policySetDefinitionVersion": "",
      "resourceGroup": "{resourceGroupName}",
      "resourceId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmName}>",
      "resourceLocation": "westus3",
      "resourceTags": "tbd",
      "resourceType": "Microsoft.Compute/virtualMachines",
      "subscriptionId": "{subscriptionId}",
      "timestamp": "2024-03-26T02:19:28.3720191Z"
    }
  ]
}

Дополнительные сведения см. в раздел "Состояния политики" — список результатов запроса для группы ресурсов.

Очистка ресурсов

Чтобы удалить назначение политики, используйте следующую команду. Замените {subscriptionId} значения, {resourceGroupName} используемые при создании назначения политики. Команда отображает выходные данные JSON в оболочке.

az rest --method delete --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01

Вы можете проверить, что назначение политики было удалено с помощью следующей команды. Сообщение отображается в оболочке.

az rest --method get --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
The policy assignment 'audit-vm-managed-disks' is not found.

Дополнительные сведения см. в раздел "Назначения политик" — "Удаление " и "Назначения политик" — "Получить".

Следующие шаги

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

Дополнительные сведения о назначении политик, проверяющих соответствие ресурсов, см. в этом руководстве.