Получение данных о соответствии для ресурсов Azure
Одним из наибольших преимуществ Политики Azure является анализ и контроль, который эта служба выполняет над ресурсами в подписке или группе управления подписками. Этот элемент управления можно использовать для предотвращения создания ресурсов в неправильном расположении, принудительного использования общих и согласованных тегов или аудита существующих ресурсов для соответствующих конфигураций и параметров. Во всех случаях Политика Azure создает данные, которые позволяют определить состояние соответствия среды.
Прежде чем просматривать данные о соответствии, важно понимать состояния соответствия в Политика Azure.
Существует несколько способов доступа к информации о соответствии, которая создается при назначении политик и инициатив:
- с помощью портала Azure;
- с помощью скриптов командной строки.
- Просмотр журналов Azure Monitor
- С помощью запросов Azure Resource Graph
Прежде чем переходить к способам создания отчетов о соответствии, давайте рассмотрим, когда обновляются данные о соответствии, а также с какой частотой и какие события запускают цикл оценки.
Триггеры оценки
Результаты завершенного цикла оценки отражаются в поставщике ресурсов Microsoft.PolicyInsights
с помощью операций PolicyStates
и PolicyEvents
. Дополнительные сведения об операциях REST API Azure Policy Insights см. здесь.
Оценка назначенных политик и инициатив выполняется в результате разных событий:
Определенной области назначается новая политика или инициатива. Для применения назначения к определенной области требуется около пяти минут, а затем цикл оценки начинается для применимых ресурсов в отношении вновь назначенной политики или инициативы. В зависимости от используемых эффектов ресурсы помечаются как соответствующие, несоответствующие, исключенные или неизвестные. Большая политика или инициатива, оцененная по большому объему ресурсов, может занять некоторое время, поэтому не существует предопределенного ожидания завершения цикла оценки. После завершения обновленные результаты соответствия будут доступны на портале и пакетах SDK.
Политика или инициатива, уже назначенная определенной области, является обновленной. Цикл и время оценки в этом сценарии аналогичны новому назначению области.
Ресурс разворачивается или обновляется в области с назначением с помощью Azure Resource Manager, REST API или поддерживаемого пакета SDK. В этом сценарии событие действия политики (присоединение, аудит, отказ, развертывание) и данные о состоянии соответствия отдельного ресурса становятся доступными на портале и в пакетах SDK примерно через 15 минут. Это событие не вызывает оценку других ресурсов.
Подписка (тип ресурса
Microsoft.Resources/subscriptions
) создается или перемещается в иерархии группы управления с назначенным определением политики, предназначенным для типа ресурса подписки. Оценка поддерживаемых подпиской эффектов (audit (аудит), auditIfNotExist, deployIfNotExists, modify (изменение)), ведение журнала и выполнение любого действия по исправлению занимает около 30 минут.Исключение политики можно создавать, обновлять или удалять. В этом сценарии соответствующее назначение оценивается для определенной области исключения.
Стандартный цикл оценки соответствия. Каждые 24 часа назначения автоматически повторно оцениваются. Оценка масштабной политики или инициативы для большой области ресурсов может занять много времени. Поэтому сведений об ожидаемом времени завершения цикла оценки нет. После этого обновленные результаты оценки соответствия становятся доступными на портале и в пакетах SDK.
Управляемый ресурс обновляется поставщиком ресурсов машинной конфигурации, добавляя сведения о соответствии.
Проверка по запросу.
Примечание.
По проектированию Политика Azure освобождает все ресурсы в Microsoft.Resources
поставщике ресурсов (RP) от оценки политики за исключением подписок и групп ресурсов, которые можно оценить.
Проверка оценки по запросу
Оценочное сканирование подписки или группы ресурсов можно начать с Azure CLI, Azure PowerShell, вызова REST API или с помощью действия "Проверка соответствия Политике Azure" в GitHub. Эта проверка является асинхронным процессом.
Примечание.
Не все поставщики ресурсов Azure поддерживают оценочные проверки по запросу. Например, в настоящее время Диспетчер виртуальных сетей Azure (AVNM) не поддерживает триггеры, запущенные вручную, или стандартный цикл оценки соответствия политикам (ежедневные проверки).
Проверка по требованию (действие GitHub)
Действие "Проверка соответствия Политике Azure" позволяет активировать проверку оценки по запросу из рабочего процесса GitHub для одного или нескольких ресурсов, групп ресурсов или подписок, а также направить этот рабочий процесс на основе данных о состоянии соответствия требованиям этих ресурсов. Вы также можете настроить выполнение рабочего процесса в запланированное время, чтобы получать самые свежие данные о состоянии соответствия в удобное для себя время. При необходимости GitHub Actions может создать отчет о состоянии соответствия сканированных ресурсов для дальнейшего анализа или архивации.
Следующий пример выполняет проверку соответствия для одной подписки.
on:
schedule:
- cron: '0 8 * * *' # runs every morning 8am
jobs:
assess-policy-compliance:
runs-on: ubuntu-latest
steps:
- name: Login to Azure
uses: azure/login@v1
with:
creds: ${{secrets.AZURE_CREDENTIALS}}
- name: Check for resource compliance
uses: azure/policy-compliance-scan@v0
with:
scopes: |
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Дополнительные сведения и примеры рабочих процессов см. в разделе GitHub Actions для репозитория проверки соответствия Политике Azure.
Проверка оценки по запросу (Azure CLI)
Проверка соответствия запускается с помощью команды az policy state trigger-scan.
По умолчанию az policy state trigger-scan
запускает оценку для всех ресурсов в текущей подписке. Чтобы запустить оценку для определенной группы ресурсов, используйте resource-group
этот параметр. Следующий пример запускает проверку соответствия в текущей подписке для группы ресурсов MyRG:
az policy state trigger-scan --resource-group "MyRG"
Вы можете не ожидать завершения асинхронного процесса, прежде чем продолжать работу с параметром no-wait
.
Проверка оценки по запросу (Azure PowerShell)
Проверка соответствия запускается командлетом Start-AzPolicyComplianceScan.
По умолчанию Start-AzPolicyComplianceScan
запускает оценку для всех ресурсов в текущей подписке. Чтобы запустить оценку для определенной группы ресурсов, используйте ResourceGroupName
этот параметр. Следующий пример запускает проверку соответствия в текущей подписке для группы ресурсов MyRG:
Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'
Можно сделать так, чтобы PowerShell ожидал завершения асинхронного вызова перед выдачей выходных данных или выполнял его в фоновом режиме в качестве задания. Чтобы использовать задание PowerShell для выполнения проверки соответствия требованиям в фоновом режиме, используйте AsJob
параметр и задайте для объекта значение, например $job
в этом примере:
$job = Start-AzPolicyComplianceScan -AsJob
Чтобы проверить состояние этого задания, получите свойства объекта $job
. Задание имеет тип Microsoft.Azure.Commands.Common.AzureLongRunningJob
. Используйте Get-Member
для объекта $job
, чтобы просмотреть доступные свойства и методы.
Пока выполняется проверка соответствия, объект $job
возвращает следующие результаты:
$job
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
2 Long Running O... AzureLongRunni... Running True localhost Start-AzPolicyCompliance...
После завершения State
проверки соответствия свойство изменится на Completed.
Проверка оценки по запросу (REST)
Так как процесс является асинхронным, запускающая его конечная точка REST возвращает ответ, не дожидаясь его завершения. Вместо этого она предоставляет URI для получения состояния выполняемой оценки.
В каждом универсальном коде ресурса (URI) REST API есть переменные, которые необходимо заменить собственными значениями:
{YourRG}
— замените это значение именем своей группы ресурсов.{subscriptionId}
— замените это значение идентификатором своей подписки.
Сканирование поддерживает оценку ресурсов в подписке или группе ресурсов. Запустите сканирование для области через команду POST REST API, используя следующие структуры универсального кода ресурса (URI):
Подписка
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
Группа ресурсов
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{YourRG}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
Этот вызов возвращает состояние 202 — принято. В заголовке ответа входит свойство со следующим форматом location
:
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01
{ResourceContainerGUID}
создается для запрошенной области статически. Если эта область уже выполняет проверку по требованию, новое сканирование не запускается. Вместо этого новый запрос предоставляется тот же {ResourceContainerGUID}
location
универсальный код ресурса (URI) для состояния. Команда GET REST API в location
URI возвращает 202 Accepted во время оценки. После завершения проверки оценки возвращается состояние 200 ОК . Вот пример текста в формате JSON, который передается в ответе после завершения проверки:
{
"status": "Succeeded"
}
Сканирование оценки по требованию (Visual Studio Code)
Расширение Политика Azure для Visual Studio Code может выполнять проверку оценки для определенного ресурса. Эта проверка является синхронным процессом, в отличие от методов Azure PowerShell и REST. Дополнительные сведения и инструкции см. в статье Оценка по запросу с помощью расширения VS Code.
Портал
На портале Azure можно ознакомиться с процессом визуализации и оценки состояния соответствия в вашей среде. На странице Политика параметр Обзор предоставляет сведения о соответствии для доступных областей в рамках соответствия для политик и инициатив. В дополнение к состоянию соответствия и числу на каждое назначение, в нем содержится диаграмма, отображающая соответствие за последние семь дней. Страница соответствия требованиям содержит большую часть этих же сведений (за исключением диаграммы), но предоставляет дополнительные параметры фильтрации и сортировки.
Так как политика или инициатива может быть назначена разным областям, в таблице предусмотрена область для каждого назначения и тип определения, назначенный этой области. Здесь также отображается число несоответствующих ресурсов и политик для каждого назначения. Выбрав политику или инициативу в таблице, можно получить подробные сведения о соответствии для указанного назначения.
В списке ресурсов на вкладке Соответствие ресурсов отображается состояние оценки существующих ресурсов для текущего назначения. На вкладке по умолчанию установлено значение Не соответствует, но можно выполнить фильтрацию. События (присоединение, аудит, отказ, развертывание, изменение), инициируемые запросом для создания ресурса, отображаются на вкладке События.
Для ресурсов режима поставщика ресурсов на вкладке Соответствие ресурсов можно открыть информацию о соответствии компонентов, выбрав этот ресурс или щелкнув его строку правой кнопкой мыши и выбрав действие Просмотреть сведения о соответствии. На этой странице также представлены вкладки для просмотра назначенных этому ресурсу политик, событий, событий компонентов и журнала изменений.
Вернитесь на страницу соответствия ресурса, выберите и удерживайте событие (или нажмите правую кнопку мыши) в строке событий, о котором нужно собрать подробные сведения, и выберите Показать журналы действий. Откроется страница журнала действий и префильтровываются в поиске с подробными сведениями о назначении и событиях. Журнал действий предоставляет больше контекста и сведений об этих событиях.
Примечание.
Результаты соответствия можно экспортировать с портала с помощью запросов Azure Resource Graph.
Командная строка
Те же сведения, которые доступны на портале, можно получить с помощью REST API (включая ARMClient), Azure PowerShell или Azure CLI. Дополнительные сведения о REST API см. в справочнике по Политике Azure. Справочные страницы REST API имеют зеленую кнопку "Попробовать" для каждой операции, которая позволяет попробовать ее прямо в браузере.
Используйте ARMClient или аналогичное средство для управления аутентификацией в Azure для примеров с REST API.
Суммирование результатов
С помощью REST API формирование сводных данных можно выполнить по контейнеру, определению или назначению. Ниже приведен пример суммирования на уровне подписки с помощью Политика Azure Сводка по подписке аналитики:
POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01
В выходных данных будет представлена сводка по подписке. В следующем примере выходных данных сводная информация о соответствии выполняется value.results.nonCompliantResources
и value.results.nonCompliantPolicies
. Этот запрос предоставляет дополнительные сведения, включая каждое назначение, входящее в число несоответствующих, а также сведения об определении для каждого назначения. Каждый объект политики в иерархии предоставляет более подробную queryResultsUri
информацию на этом уровне.
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary",
"@odata.count": 1,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant'",
"nonCompliantResources": 15,
"nonCompliantPolicies": 1
},
"policyAssignments": [
{
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77",
"policySetDefinitionId": "",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77'",
"nonCompliantResources": 15,
"nonCompliantPolicies": 1
},
"policyDefinitions": [
{
"policyDefinitionReferenceId": "",
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"effect": "deny",
"results": {
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'",
"nonCompliantResources": 15
}
}
]
}
]
}
]
}
Запрос ресурсов
В предыдущем примере value.policyAssignments.policyDefinitions.results.queryResultsUri
предоставляет пример URI для всех несоответствующих ресурсов для определенного определения политики. В значении $filter
Значение ComplianceState равно (eq) NonCompliant
PolicyAssignmentId
и указывается для определения политики, а затем сам PolicyDefinitionId. Причина включения PolicyAssignmentId
в фильтр заключается в том, что может PolicyDefinitionId
существовать в нескольких назначениях политик или инициатив с различными областями. Указав и те PolicyAssignmentId
PolicyDefinitionId
, и другие, мы можем быть явными в результатах, которые мы ищем. PolicyStates
Ранее мы использовалиlatest
, что автоматически задает from
и to
период времени за последние 24 часа.
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'
Следующий пример ответа был обрезан до одного несоответствующего ресурса для краткости. Подробный ответ имеет несколько фрагментов данных о ресурсе, политике или инициативе и назначении. Здесь вы также можете увидеть, какие параметры назначения были переданы в определение политики.
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
"@odata.count": 15,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"timestamp": "2018-05-19T04:41:09Z",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Compute/virtualMachines/linux",
"policyAssignmentId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Authorization/policyAssignments/37ce239ae4304622914f0c77",
"policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
"effectiveParameters": "",
"ComplianceState": "NonCompliant",
"subscriptionId": "{subscriptionId}",
"resourceType": "/Microsoft.Compute/virtualMachines",
"resourceLocation": "westus2",
"resourceGroup": "RG-Tags",
"resourceTags": "tbd",
"policyAssignmentName": "37ce239ae4304622914f0c77",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "{\"tagName\":{\"value\":\"costCenter\"},\"tagValue\":{\"value\":\"Contoso-Test\"}}",
"policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags",
"policyDefinitionName": "1e30110a-5ceb-460c-a204-c1c3969c6d62",
"policyDefinitionAction": "deny",
"policyDefinitionCategory": "tbd",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionCategory": "",
"policySetDefinitionParameters": "",
"managementGroupIds": "",
"policyDefinitionReferenceId": ""
}
]
}
Просмотр событий
После создания или обновления ресурса создается результат оценки политики. Такие результаты называются событиями политики. Чтобы просмотреть последние события политики, связанные с подпиской, используйте следующий универсальный код ресурса (URI).
https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01
Результаты должны выглядеть примерно так:
{
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default",
"@odata.count": 1,
"value": [
{
"@odata.id": null,
"@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default/$entity",
"NumAuditEvents": 16
}
]
}
Дополнительные сведения о запросах событий политик см. в справочной статье по событиям Политики Azure.
Azure CLI
Группа команд Azure CLI для Политики Azure охватывает большинство операций, доступных в REST или Azure PowerShell. Полный список доступных команд см. в разделе Azure CLI — общие сведения о Политике Azure.
Пример. Получение сводки состояния для приоритетной назначенной политики с наибольшим числом несоответствующих ресурсов.
az policy state summarize --top 1
Верхняя часть ответа выглядит примерно так:
{
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
"odataid": null,
"policyAssignments": [
{
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyDefinitions": [
{
"effect": "audit",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"results": {
"nonCompliantPolicies": null,
"nonCompliantResources": 398,
"policyDetails": [
{
"complianceState": "noncompliant",
"count": 1
}
],
"policyGroupDetails": [
{
"complianceState": "noncompliant",
"count": 1
}
],
"queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2020-07-14 14:01:22Z&$to=2020-07-15 14:01:22Z and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8' and PolicyDefinitionId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a'",
"resourceDetails": [
{
"complianceState": "noncompliant",
"count": 398
},
{
"complianceState": "compliant",
"count": 4
}
]
}
}
],
...
Пример. Получение записи состояния для последнего оцененного ресурса (по умолчанию — по меткам времени в порядке убывания).
az policy state list --top 1
[
{
"complianceReasonCode": "",
"complianceState": "Compliant",
"effectiveParameters": "",
"isCompliant": true,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/securitycenterbuiltin",
"policyAssignmentName": "SecurityCenterBuiltIn",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "auditifnotexists",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/aa633080-8b72-40c4-a2d7-d00c03e80bed",
"policyDefinitionName": "aa633080-8b72-40c4-a2d7-d00c03e80bed",
"policyDefinitionReferenceId": "identityenablemfaforownerpermissionsmonitoring",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "security center",
"policySetDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
"policySetDefinitionName": "1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "",
"resourceId": "/subscriptions/{subscriptionId}",
"resourceLocation": "",
"resourceTags": "tbd",
"resourceType": "Microsoft.Resources/subscriptions",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.903433+00:00"
}
]
Пример. Получение сведений для всех несоответствующих ресурсов виртуальной сети.
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
[
{
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyAssignmentName": "e0704696df5e4c3c81c873e8",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "RG-Tags",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
"resourceLocation": "westus2",
"resourceTags": "tbd",
"resourceType": "Microsoft.Network/virtualNetworks",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.901911+00:00"
}
]
Пример. Получение событий, связанных с несоответствующими ресурсами виртуальной сети и произошедших после указанной даты.
az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2020-07-14T00:00:00Z'
[
{
"complianceReasonCode": "",
"complianceState": "NonCompliant",
"effectiveParameters": "",
"isCompliant": false,
"managementGroupIds": "{managementgroupId}",
"odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
"odataid": null,
"policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
"policyAssignmentName": "e0704696df5e4c3c81c873e8",
"policyAssignmentOwner": "tbd",
"policyAssignmentParameters": "",
"policyAssignmentScope": "/subscriptions/{subscriptionId}",
"policyAssignmentVersion": "",
"policyDefinitionAction": "audit",
"policyDefinitionCategory": "tbd",
"policyDefinitionGroupNames": [
""
],
"policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
"policyDefinitionReferenceId": "",
"policyDefinitionVersion": "",
"policyEvaluationDetails": null,
"policySetDefinitionCategory": "",
"policySetDefinitionId": "",
"policySetDefinitionName": "",
"policySetDefinitionOwner": "",
"policySetDefinitionParameters": "",
"policySetDefinitionVersion": "",
"resourceGroup": "RG-Tags",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
"resourceLocation": "westus2",
"resourceTags": "tbd",
"resourceType": "Microsoft.Network/virtualNetworks",
"subscriptionId": "{subscriptionId}",
"timestamp": "2020-07-15T08:37:07.901911+00:00"
}
]
Azure PowerShell
Модуль Azure PowerShell для Политики Azure доступен в коллекции PowerShell как Az.PolicyInsights. Используя PowerShellGet, вы можете установить модуль с помощью Install-Module -Name Az.PolicyInsights
(установите последнюю версию Azure PowerShell):
# Install from PowerShell Gallery via PowerShellGet
Install-Module -Name Az.PolicyInsights
# Import the downloaded module
Import-Module Az.PolicyInsights
# Login with Connect-AzAccount if not using Cloud Shell
Connect-AzAccount
Модуль содержит следующие командлеты.
Get-AzPolicyStateSummary
Get-AzPolicyState
Get-AzPolicyEvent
Get-AzPolicyRemediation
Remove-AzPolicyRemediation
Start-AzPolicyRemediation
Stop-AzPolicyRemediation
Пример. Получение сводки состояния для приоритетной назначенной политики с наибольшим числом несоответствующих ресурсов.
PS> Get-AzPolicyStateSummary -Top 1
NonCompliantResources : 15
NonCompliantPolicies : 1
PolicyAssignments : {/subscriptions/{subscriptionId}/resourcegroups/RG-Tags/providers/micros
oft.authorization/policyassignments/37ce239ae4304622914f0c77}
Пример. Получение записи состояния для последнего оцененного ресурса (по умолчанию — по меткам времени в порядке убывания).
PS> Get-AzPolicyState -Top 1
Timestamp : 5/22/2018 3:47:34 PM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/networkInterfaces/linux316
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/networkInterfaces
ResourceLocation : westus2
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
Пример. Получение сведений для всех несоответствующих ресурсов виртуальной сети.
PS> Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"
Timestamp : 5/22/2018 4:02:20 PM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/virtualNetworks
ResourceLocation : westus2
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
Пример. Получение событий, связанных с несоответствующими ресурсами виртуальной сети, которые произошли после определенной даты, преобразование в объект CSV и экспорт в файл.
$policyEvents = Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2020-09-19'
$policyEvents | ConvertTo-Csv | Out-File 'C:\temp\policyEvents.csv'
Выходные данные объекта $policyEvents
выглядят следующим образом:
Timestamp : 9/19/2020 5:18:53 AM
ResourceId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState : NonCompliant
SubscriptionId : {subscriptionId}
ResourceType : /Microsoft.Network/virtualNetworks
ResourceLocation : eastus
ResourceGroup : RG-Tags
ResourceTags : tbd
PolicyAssignmentName : 37ce239ae4304622914f0c77
PolicyAssignmentOwner : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction : deny
PolicyDefinitionCategory : tbd
TenantId : {tenantId}
PrincipalOid : {principalOid}
Поле PrincipalOid
можно использовать для получения конкретного пользователя с помощью командлета Get-AzADUser
Azure PowerShell. Замените {principalOid}
ответ, полученный из предыдущего примера.
PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker
Журналы Azure Monitor
Если у вас есть рабочая область Log Analytics с AzureActivity
из связанного с подпиской решения Аналитики журнала действий, вы также можете просмотреть результаты несоответствия из циклов оценки новых и обновленных ресурсов, используя простые запросы Kusto и таблицу AzureActivity
. С учетом подробных сведений о несоответствии в журналах Azure Monitor вы также можете настроить оповещения для отслеживания несоответствия.
Azure Resource Graph
Записи соответствия хранятся в Azure Resource Graph (ARG). Данные можно экспортировать из запросов ARG для формирования настраиваемых панелей мониторинга на основе областей и политик, интересующих вас. Ознакомьтесь с нашими примерами запросов на экспорт данных соответствия с помощью ARG.
Следующие шаги
- Изучите примеры на странице примеров Политики Azure.
- Изучите статью о структуре определения Политики Azure.
- Изучите сведения о действии политик.
- Узнайте о программном создании политик.
- Узнайте, как исправлять несоответствующие ресурсы.
- Дополнительные сведения о группе управления см. в статье Упорядочивание ресурсов с помощью групп управления Azure.