Программное создание политик
В этой статье описано программное создание и управление политиками. Определения Политики Azure обеспечивают соблюдение различных правил и выполнение действий в ваших ресурсах. Принудительное применение обеспечивает соответствие ресурсов корпоративным стандартам и соглашениям об уровне обслуживания.
Сведения о соответствии см. в статье Получение данных о соответствии.
Необходимые компоненты
Прежде чем приступить к работе, убедитесь, что у вас есть следующие необходимые компоненты.
Установите ARMClient, если его у вас еще нет. Это средство, которое отправляет HTTP-запросы к API-интерфейсам на основе Azure Resource Manager.
Обновите свой модуль Azure PowerShell до последней версии. Дополнительные сведения см. в статье Install the Azure PowerShell module (Установка модуля Azure PowerShell). Дополнительные сведения о последней версии см. по ссылке для Azure PowerShell.
Зарегистрируйте поставщик ресурсов Azure Policy Insights с помощью Azure PowerShell, чтобы связать подписку с поставщиком ресурсов. Чтобы сделать это, необходимо иметь разрешение на регистрацию поставщика ресурсов. Эта операция включается в роли участника и владельца. Выполните указанную ниже команду для регистрации поставщика ресурсов.
Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
Дополнительные сведения о регистрации и просмотре поставщиков ресурсов см. в статье Поставщики и типы ресурсов.
Установите Azure CLI, если это еще не сделано. Последнюю версию CLI см. в статье Установка Azure CLI в Windows.
Create and assign a policy definition (Создание и назначение определения политики).
Первый шаг для улучшения видимости ваших ресурсов — создать и назначить в них политики. Теперь необходимо научиться программно создавать и назначать политику. Пример политики проверяет учетные записи хранения, которые открыты для всех общедоступных сетей, используя запросы PowerShell, Azure CLI и HTTP.
Создание и назначение определения политики с помощью PowerShell
Используйте следующий фрагмент кода JSON, чтобы создать файл JSON с именем AuditStorageAccounts.json.
{ "if": { "allOf": [{ "field": "type", "equals": "Microsoft.Storage/storageAccounts" }, { "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction", "equals": "Allow" } ] }, "then": { "effect": "audit" } }
Дополнительные сведения о создании определения политики см. в статье Структура определения службы "Политика Azure".
Выполните следующую команду, чтобы создать определение политики с использованием файла AuditStorageAccounts.json.
New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
Эта команда создает определение политики с именем Audit Storage Accounts Open to Public Networks (Аудит учетных записей хранения, открытых для общедоступных сетей). Дополнительные сведения о других параметрах, которые можно использовать, см. в статье о командлете New-AzPolicyDefinition.
При вызове без параметров расположения
New-AzPolicyDefinition
по умолчанию сохраняет определение политики в выбранной подписке контекста сеансов. Чтобы сохранить определение в другом месте, используйте следующие параметры:- SubscriptionId — сохранение в другой подписке. Требуется значение GUID.
- ManagementGroupName — сохранение в группе управления. Требуется значение строки.
После создания определения политики вы можете создать назначение политики, выполнив следующие команды:
$rg = Get-AzResourceGroup -Name 'ContosoRG' $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts' New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
Замените ContosoRG именем вашей целевой группы ресурсов.
Параметр Scope в
New-AzPolicyAssignment
работает с группой управления, подпиской, группой ресурсов или отдельным ресурсом. Параметр использует полный путь к ресурсу, возвращаемый свойством ResourceId вGet-AzResourceGroup
. Формат параметра Scope для каждого контейнера приведен ниже. Замените{rName}
,{rgName}
,{subId}
и{mgName}
именем ресурса, именем группы ресурсов, идентификатором подписки и именем группы управления соответственно. Замените{rType}
типом ресурса, таким какMicrosoft.Compute/virtualMachines
для виртуальной машины.- Ресурс:
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
. - Группа ресурсов —
/subscriptions/{subId}/resourceGroups/{rgName}
- Подписка —
/subscriptions/{subId}
- Группа управления —
/providers/Microsoft.Management/managementGroups/{mgName}
- Ресурс:
Дополнительные сведения об управлении политиками ресурсов с помощью модуля PowerShell Azure Resource Manager см. в разделе Политики.
Создание и назначение определения политики с помощью ARMClient
Выполните указанные ниже действия, чтобы создать определение политики.
Скопируйте следующий фрагмент кода JSON, чтобы создать файл JSON. Вызовите файл на следующем шаге.
"properties": { "displayName": "Audit Storage Accounts Open to Public Networks", "policyType": "Custom", "mode": "Indexed", "description": "This policy ensures that storage accounts with exposure to Public Networks are audited.", "parameters": {}, "policyRule": { "if": { "allOf": [{ "field": "type", "equals": "Microsoft.Storage/storageAccounts" }, { "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction", "equals": "Allow" } ] }, "then": { "effect": "audit" } } }
Создайте определение политики с использованием одного из следующих вызовов:
# For defining a policy in a subscription armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file> # For defining a policy in a management group armclient PUT "/providers/Microsoft.Management/managementgroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file>
Замените {subscriptionId} идентификатором своей подписки или {managementGroupId} идентификатором своей группы управления.
Дополнительные сведения о структуре запроса см. в статье Создание и обновление определений Политики Azure и Создание и обновление определений политик в группе управления.
Используйте следующую процедуру для создания назначения политики и назначьте определение политики на уровне группы ресурсов.
Скопируйте следующий фрагмент кода JSON, чтобы создать файл JSON назначения политики. Замените данные в символах <> на собственные значения.
{ "properties": { "description": "This policy assignment makes sure that storage accounts with exposure to Public Networks are audited.", "displayName": "Audit Storage Accounts Open to Public Networks Assignment", "parameters": {}, "policyDefinitionId": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks", "scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>" } }
Создайте назначение политики с использованием следующего вызова:
armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2021-09-01" @<path to Assignment JSON file>
Замените данные в символах <> на собственные значения.
Дополнительные сведения о том, как выполнять HTTP-запросы к REST API, см. в статье Azure Resource Manager.
Создание и назначение определения политики с помощью Azure CLI
Чтобы создать определение политики, выполните указанные ниже действия.
Скопируйте следующий фрагмент кода JSON, чтобы создать файл JSON назначения политики.
{ "if": { "allOf": [{ "field": "type", "equals": "Microsoft.Storage/storageAccounts" }, { "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction", "equals": "Allow" } ] }, "then": { "effect": "audit" } }
Дополнительные сведения о создании определения политики см. в статье Структура определения службы "Политика Azure".
Чтобы создать определение политики, выполните следующую команду:
az policy definition create --name 'audit-storage-accounts-open-to-public-networks' --display-name 'Audit Storage Accounts Open to Public Networks' --description 'This policy ensures that storage accounts with exposures to public networks are audited.' --rules '<path to json file>' --mode All
Эта команда создает определение политики с именем Audit Storage Accounts Open to Public Networks (Аудит учетных записей хранения, открытых для общедоступных сетей). Дополнительные сведения о других параметрах, которые можно использовать, см. в разделе о az policy definition create.
При вызове без параметров расположения
az policy definition creation
по умолчанию сохраняет определение политики в выбранной подписке контекста сеансов. Чтобы сохранить определение в другом месте, используйте следующие параметры:- subscription — сохранение в другой подписке. Требуется значение GUID для идентификатора подписки или значение строки для имени подписки.
- management-group — сохранение в группе управления. Требуется значение строки.
Чтобы создать назначение политики, выполните следующую команду: Замените данные в символах <> на собственные значения.
az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
Параметр scope в
az policy assignment create
работает с группой управления, подпиской, группой ресурсов или отдельным ресурсом. Параметр использует полный путь к ресурсу. Формат параметра scope для каждого контейнера приведен ниже. Замените{rName}
,{rgName}
,{subId}
и{mgName}
именем ресурса, именем группы ресурсов, идентификатором подписки и именем группы управления соответственно. Замените{rType}
типом ресурса, таким какMicrosoft.Compute/virtualMachines
для виртуальной машины.- Ресурс:
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
. - Группа ресурсов —
/subscriptions/{subID}/resourceGroups/{rgName}
- Подписка —
/subscriptions/{subID}
- Группа управления —
/providers/Microsoft.Management/managementGroups/{mgName}
- Ресурс:
Вы можете получить идентификатор определения Политики Azure с помощью следующей команды в PowerShell.
az policy definition show --name 'Audit Storage Accounts with Open Public Networks'
Идентификатор определения политики для созданного вами определения должен выглядеть следующим образом:
"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"
Дополнительные сведения об управлении политиками ресурсов с помощью Azure CLI см. в этой статье.
Следующие шаги
Дополнительные сведения о командах и запросах, используемых в этой статье, см. в следующих ресурсах.