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