Программное создание политикProgrammatically create policies

В этой статье описано программное создание и управление политиками.This article walks you through programmatically creating and managing policies. Определения политик Azure применяют различные правила и эффекты к ресурсам.Azure Policy definitions enforce different rules and effects over your resources. Принудительное применение обеспечивает соответствие ресурсов корпоративным стандартам и соглашениям об уровне обслуживания.Enforcement makes sure that resources stay compliant with your corporate standards and service level agreements.

Сведения о соответствии см. в статье Получение данных о соответствии.For information about compliance, see getting compliance data.

Технические условияPrerequisites

Прежде чем приступить к работе, убедитесь, что у вас есть следующие необходимые компоненты.Before you begin, make sure that the following prerequisites are met:

  1. Установите ARMClient, если его у вас еще нет.If you haven't already, install the ARMClient. Это средство, которое отправляет HTTP-запросы к API-интерфейсам на основе Azure Resource Manager.It's a tool that sends HTTP requests to Azure Resource Manager-based APIs.

  2. Обновите свой модуль Azure PowerShell до последней версии.Update your Azure PowerShell module to the latest version. Дополнительные сведения см. в статье Install the Azure PowerShell module (Установка модуля Azure PowerShell).See Install Azure PowerShell module for detailed information. Дополнительные сведения о последней версии см. по ссылке для Azure PowerShell.For more information about the latest version, see Azure PowerShell.

  3. Зарегистрируйте поставщик ресурсов Azure Policy Insights с помощью Azure PowerShell, чтобы проверить, работает подписка с поставщиком ресурсов.Register the Azure Policy Insights resource provider using Azure PowerShell to validate that your subscription works with the resource provider. Чтобы сделать это, необходимо иметь разрешение на регистрацию поставщика ресурсов.To register a resource provider, you must have permission to run the register action operation for the resource provider. Эта операция включается в роли участника и владельца.This operation is included in the Contributor and Owner roles. Выполните указанную ниже команду для регистрации поставщика ресурсов.Run the following command to register the resource provider:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Дополнительные сведения о регистрации и просмотре поставщиков ресурсов см. в статье Поставщики и типы ресурсов.For more information about registering and viewing resource providers, see Resource Providers and Types.

  4. Установите интерфейс командной строки Azure CLI, если это еще не сделано.If you haven't already, install Azure CLI. Последнюю версию CLI см. в статье Установка Azure CLI в Windows.You can get the latest version at Install Azure CLI on Windows.

Создание и назначение определения политикиCreate and assign a policy definition

Первый шаг для улучшения видимости ваших ресурсов — создать и назначить в них политики.The first step toward better visibility of your resources is to create and assign policies over your resources. Теперь необходимо научиться программно создавать и назначать политику.The next step is to learn how to programmatically create and assign a policy. Пример политики проверяет учетные записи хранения, которые открыты для всех общедоступных сетей, используя запросы PowerShell, Azure CLI и HTTP.The example policy audits storage accounts that are open to all public networks using PowerShell, Azure CLI, and HTTP requests.

Создание и назначение определения политики с помощью PowerShellCreate and assign a policy definition with PowerShell

  1. Используйте следующий фрагмент кода JSON, чтобы создать файл JSON с именем AuditStorageAccounts.json.Use the following JSON snippet to create a JSON file with the name AuditStorageAccounts.json.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    Дополнительные сведения о создании определения политики см. в статье Структура определения службы "Политика Azure".For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Выполните следующую команду, чтобы создать определение политики с использованием файла AuditStorageAccounts.json.Run the following command to create a policy definition using the AuditStorageAccounts.json file.

    New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
    

    Эта команда создает определение политики с именем Audit Storage Accounts Open to Public Networks (Аудит учетных записей хранения, открытых для общедоступных сетей).The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Дополнительные сведения о других параметрах, которые можно использовать, см. в статье о командлете New-AzPolicyDefinition.For more information about other parameters that you can use, see New-AzPolicyDefinition.

    При вызове без параметров расположения New-AzPolicyDefinition по умолчанию сохраняет определение политики в выбранной подписке контекста сеансов.When called without location parameters, New-AzPolicyDefinition defaults to saving the policy definition in the selected subscription of the sessions context. Чтобы сохранить определение в другом месте, используйте следующие параметры:To save the definition to a different location, use the following parameters:

    • SubscriptionId — сохранение в другой подписке.SubscriptionId - Save to a different subscription. Требуется значение GUID.Requires a GUID value.
    • ManagementGroupName — сохранение в группе управления.ManagementGroupName - Save to a management group. Требуется значение строки.Requires a string value.
  3. После создания определения политики вы можете создать назначение политики, выполнив следующие команды:After you create your policy definition, you can create a policy assignment by running the following commands:

    $rg = Get-AzResourceGroup -Name 'ContosoRG'
    $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts'
    New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
    

    Замените ContosoRG именем вашей целевой группы ресурсов.Replace ContosoRG with the name of your intended resource group.

    Параметр области в New-AzPolicyAssignment работает с группой управления, подпиской, группой ресурсов или одним ресурсом.The Scope parameter on New-AzPolicyAssignment works with management group, subscription, resource group, or a single resource. Параметр использует полный путь к ресурсу, возвращаемый свойством ResourceId в Get-AzResourceGroup.The parameter uses a full resource path, which the ResourceId property on Get-AzResourceGroup returns. Формат параметра Scope для каждого контейнера приведен ниже.The pattern for Scope for each container is as follows. Замените {rName}, {rgName}, {subId} и {mgName} именем ресурса, именем группы ресурсов, идентификатором подписки и именем группы управления соответственно.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. Замените {rType}типом ресурса, таким как Microsoft.Compute/virtualMachines для виртуальной машины.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Ресурс: /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}.Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Группа ресурсов — /subscriptions/{subId}/resourceGroups/{rgName}Resource group - /subscriptions/{subId}/resourceGroups/{rgName}
    • Подписка — /subscriptions/{subId}/Subscription - /subscriptions/{subId}/
    • Группа управления — /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Дополнительные сведения об управлении политиками ресурсов с помощью модуля PowerShell Azure Resource Manager см. в разделе Политики.For more information about managing resource policies using the Azure Resource Manager PowerShell module, see Az.Resources.

Создание и назначение определения политики с помощью ARMClientCreate and assign a policy definition using ARMClient

Выполните указанные ниже действия, чтобы создать определение политики.Use the following procedure to create a policy definition.

  1. Скопируйте следующий фрагмент кода JSON, чтобы создать файл JSON.Copy the following JSON snippet to create a JSON file. Вызовите файл на следующем шаге.You'll call the file in the next step.

    "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"
            }
        }
    }
    
  2. Создайте определение политики с использованием одного из следующих вызовов:Create the policy definition using one of the following calls:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2016-12-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=2016-12-01" @<path to policy definition JSON file>
    

    Замените {subscriptionId} идентификатором своей подписки или {managementGroupId} идентификатором своей группы управления.Replace the preceding {subscriptionId} with the ID of your subscription or {managementGroupId} with the ID of your management group.

    Дополнительные сведения о структуре запроса см. в разделе определения политик Azure — создание или обновление и определения политик — создание или обновление в группе управления .For more information about the structure of the query, see Azure Policy Definitions – Create or Update and Policy Definitions – Create or Update At Management Group

Используйте следующую процедуру для создания назначения политики и назначьте определение политики на уровне группы ресурсов.Use the following procedure to create a policy assignment and assign the policy definition at the resource group level.

  1. Скопируйте следующий фрагмент кода JSON, чтобы создать файл JSON назначения политики.Copy the following JSON snippet to create a JSON policy assignment file. Замените данные в символах <> на собственные значения.Replace example information in <> symbols with your own values.

    {
        "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>"
        }
    }
    
  2. Создайте назначение политики с использованием следующего вызова:Create the policy assignment using the following call:

    armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2017-06-01-preview" @<path to Assignment JSON file>
    

    Замените данные в символах <> на собственные значения.Replace example information in <> symbols with your own values.

    Дополнительные сведения о том, как выполнять HTTP-запросы к REST API, см. в статье Azure Resource Manager.For more information about making HTTP calls to the REST API, see Azure REST API Resources.

Создание и назначение определения политики с помощью Azure CLICreate and assign a policy definition with Azure CLI

Чтобы создать определение политики, выполните указанные ниже действия.To create a policy definition, use the following procedure:

  1. Скопируйте следующий фрагмент кода JSON, чтобы создать файл JSON назначения политики.Copy the following JSON snippet to create a JSON policy assignment file.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    Дополнительные сведения о создании определения политики см. в статье Структура определения службы "Политика Azure".For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Чтобы создать определение политики, выполните следующую команду:Run the following command to create a policy definition:

    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 (Аудит учетных записей хранения, открытых для общедоступных сетей).The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Дополнительные сведения о других параметрах, которые можно использовать, см. в разделе о az policy definition create.For more information about other parameters that you can use, see az policy definition create.

    При вызове без параметров расположения az policy definition creation по умолчанию сохраняет определение политики в выбранной подписке контекста сеансов.When called without location parameters, az policy definition creation defaults to saving the policy definition in the selected subscription of the sessions context. Чтобы сохранить определение в другом месте, используйте следующие параметры:To save the definition to a different location, use the following parameters:

    • --subscription — сохранение в другой подписке.--subscription - Save to a different subscription. Требуется значение GUID для идентификатора подписки или значение строки для имени подписки.Requires a GUID value for the subscription ID or a string value for the subscription name.
    • --management-group — сохранение в группе управления.--management-group - Save to a management group. Требуется значение строки.Requires a string value.
  3. Чтобы создать назначение политики, выполните следующую команду:Use the following command to create a policy assignment. Замените данные в символах <> на собственные значения.Replace example information in <> symbols with your own values.

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    Параметр --scope в az policy assignment create работает с группой управления, подпиской, группой ресурсов или отдельным ресурсом.The --scope parameter on az policy assignment create works with management group, subscription, resource group, or a single resource. Параметр использует полный путь к ресурсу.The parameter uses a full resource path. Формат параметра --scope для каждого контейнера приведен ниже.The pattern for --scope for each container is as follows. Замените {rName}, {rgName}, {subId} и {mgName} именем ресурса, именем группы ресурсов, идентификатором подписки и именем группы управления соответственно.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. Замените {rType}типом ресурса, таким как Microsoft.Compute/virtualMachines для виртуальной машины.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Ресурс: /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}.Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Группа ресурсов — /subscriptions/{subID}/resourceGroups/{rgName}Resource group - /subscriptions/{subID}/resourceGroups/{rgName}
    • Подписка — /subscriptions/{subID}Subscription - /subscriptions/{subID}
    • Группа управления — /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Идентификатор определения политики Azure можно получить с помощью PowerShell, выполнив следующую команду:You can get the Azure Policy Definition ID by using PowerShell with the following command:

az policy definition show --name 'Audit Storage Accounts with Open Public Networks'

Идентификатор определения политики для созданного вами определения должен выглядеть следующим образом:The policy definition ID for the policy definition that you created should resemble the following example:

"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"

Дополнительные сведения об управлении политиками ресурсов с помощью Azure CLI см. в этой статье.For more information about how you can manage resource policies with Azure CLI, see Azure CLI Resource Policies.

Дальнейшие действияNext steps

Дополнительные сведения о командах и запросах, используемых в этой статье, см. в следующих ресурсах.Review the following articles for more information about the commands and queries in this article.