Краткое руководство. Создание назначения политики для выявления несоответствуемых ресурсов с помощью 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.

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