Creación de directivas mediante programaciónProgrammatically create policies

Este artículo le guiará a través de la creación y administración de directivas mediante programación.This article walks you through programmatically creating and managing policies. Las definiciones de Azure Policy aplican reglas y efectos diferentes sobre los recursos.Azure Policy definitions enforce different rules and effects over your resources. Su aplicación garantiza que los recursos cumplan los estándares corporativos y los acuerdos de nivel de servicio.Enforcement makes sure that resources stay compliant with your corporate standards and service level agreements.

Para información sobre el cumplimiento, consulte cómo obtener datos de cumplimiento.For information about compliance, see getting compliance data.

Requisitos previosPrerequisites

Asegúrese de que se cumplen los siguientes requisitos previos antes de empezar:Before you begin, make sure that the following prerequisites are met:

  1. Si aún no lo ha hecho, instale ARMClient.If you haven't already, install the ARMClient. Esta es una herramienta que envía solicitudes HTTP a las API basadas en Azure Resource Manager.It's a tool that sends HTTP requests to Azure Resource Manager-based APIs.

  2. Actualice el módulo de Azure PowerShell a la versión más reciente.Update your Azure PowerShell module to the latest version. Consulte Instalación del módulo de Azure PowerShell para más información.See Install Azure PowerShell module for detailed information. Para más información acerca de la versión más reciente, consulte Azure PowerShell.For more information about the latest version, see Azure PowerShell.

  3. Registre el proveedor de recursos de Azure Policy Insights con Azure PowerShell para validar que la suscripción funciona con el proveedor de recursos.Register the Azure Policy Insights resource provider using Azure PowerShell to validate that your subscription works with the resource provider. Para registrar un proveedor de recursos, debe tener permiso para ejecutar la operación de registro de una acción para él.To register a resource provider, you must have permission to run the register action operation for the resource provider. Esta operación está incluida en los roles Colaborador y Propietario.This operation is included in the Contributor and Owner roles. Para registrar el proveedor de recursos, ejecute el siguiente comando:Run the following command to register the resource provider:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Para más información sobre el registro y la visualización de los proveedores de recursos, consulte Tipos y proveedores de recursos.For more information about registering and viewing resource providers, see Resource Providers and Types.

  4. Si aún no lo ha hecho, instale la CLI de Azure.If you haven't already, install Azure CLI. Puede obtener la versión más reciente en Instalación de la CLI de Azure en Windows.You can get the latest version at Install Azure CLI on Windows.

Creación y asignación de una definición de directivaCreate and assign a policy definition

El primer paso hacia una mejor visibilidad de los recursos es crear y asignar directivas sobre los recursos.The first step toward better visibility of your resources is to create and assign policies over your resources. El siguiente paso es aprender a crear y asignar una directiva mediante programación.The next step is to learn how to programmatically create and assign a policy. La directiva de ejemplo audita cuentas de almacenamiento abiertas a todas las redes públicas con PowerShell, la CLI de Azure y solicitudes HTTP.The example policy audits storage accounts that are open to all public networks using PowerShell, Azure CLI, and HTTP requests.

Creación y asignación de una definición de directiva con PowerShellCreate and assign a policy definition with PowerShell

  1. Utilice el siguiente fragmento JSON para crear un archivo JSON con el nombre 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"
        }
    }
    

    Para más información acerca de la creación de una definición de directiva, consulte Estructura de definición de Azure Policy.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Ejecute el siguiente comando para crear una definición de directiva mediante el archivo 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'
    

    El comando crea una definición de directiva denominada Audit Storage Accounts Open to Public Networks (Auditoría de cuentas de almacenamiento abiertas a las redes públicas).The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Para más información acerca de otros parámetros que puede utilizar, consulte New-AzPolicyDefinition.For more information about other parameters that you can use, see New-AzPolicyDefinition.

    Cuando se llama sin parámetros de ubicación, New-AzPolicyDefinition elige de forma predeterminada guardar la definición de directiva en la suscripción seleccionada del contexto de sesiones.When called without location parameters, New-AzPolicyDefinition defaults to saving the policy definition in the selected subscription of the sessions context. Para guardar la definición en una ubicación diferente, use los siguientes parámetros:To save the definition to a different location, use the following parameters:

    • SubscriptionId: se guarda en una suscripción diferente.SubscriptionId - Save to a different subscription. Requiere un valor de GUID.Requires a GUID value.
    • ManagementGroupName: se guarda en un grupo de administración.ManagementGroupName - Save to a management group. Requiere un valor de cadena.Requires a string value.
  3. Después de crear la definición de directiva, puede crear una asignación de directiva mediante la ejecución de los siguientes comandos: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
    

    Reemplace ContosoRG por el nombre del grupo de recursos que desee.Replace ContosoRG with the name of your intended resource group.

    El parámetro Scope de New-AzPolicyAssignment funciona con un grupo de administración, una suscripción, un grupo de recursos o un único recurso.The Scope parameter on New-AzPolicyAssignment works with management group, subscription, resource group, or a single resource. El parámetro utiliza una ruta de acceso de recurso completo, que devuelve la propiedad ResourceId en Get-AzResourceGroup.The parameter uses a full resource path, which the ResourceId property on Get-AzResourceGroup returns. El patrón de Scope para cada contenedor es como sigue.The pattern for Scope for each container is as follows. Reemplace {rName}, {rgName}, {subId} y {mgName} por el nombre del recurso, el nombre del grupo de recursos, el identificador de suscripción y el nombre del grupo de administración, respectivamente.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} se reemplazaría por el tipo de recurso del recurso como, por ejemplo, Microsoft.Compute/virtualMachines para una máquina virtual.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Recurso /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupo de recursos /subscriptions/{subId}/resourceGroups/{rgName}Resource group - /subscriptions/{subId}/resourceGroups/{rgName}
    • Suscripción /subscriptions/{subId}/Subscription - /subscriptions/{subId}/
    • Grupo de administración /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Para más información acerca de cómo administrar las directivas de recursos mediante el módulo de PowerShell de Azure Resource Manager, consulte Az.Resources.For more information about managing resource policies using the Azure Resource Manager PowerShell module, see Az.Resources.

Creación y asignación de una definición de directiva con ARMClientCreate and assign a policy definition using ARMClient

Use el procedimiento siguiente para crear una definición de directiva.Use the following procedure to create a policy definition.

  1. Copie el siguiente fragmento de código JSON para crear un archivo JSON.Copy the following JSON snippet to create a JSON file. En el paso siguiente llamará al archivo.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. Cree la definición de directiva con una de las llamadas siguientes: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>
    

    Sustituya el valor de {subscriptionId} anterior por el identificador de su suscripción o {managementGroupId} por el identificador de su grupo de administración.Replace the preceding {subscriptionId} with the ID of your subscription or {managementGroupId} with the ID of your management group.

    Para más información acerca de la estructura de la consulta, consulte Azure Policy Definitions – Create or Update (Definiciones de Azure Policy: creación o actualización) y Policy Definitions – Create or Update At Management Group (Definiciones de directiva: creación o actualización en el grupo de administración).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

Utilice el procedimiento siguiente para crear una asignación de directiva y asignar la definición de directiva en el nivel de grupo de recursos.Use the following procedure to create a policy assignment and assign the policy definition at the resource group level.

  1. Copie el siguiente fragmento de código JSON para crear un archivo de asignación de directiva JSON.Copy the following JSON snippet to create a JSON policy assignment file. Reemplace la información de ejemplo de los símbolos <> por sus propios valores.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. Cree la asignación de directiva con la llamada siguiente: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>
    

    Reemplace la información de ejemplo de los símbolos <> por sus propios valores.Replace example information in <> symbols with your own values.

    Para más información acerca de cómo realizar llamadas HTTP a la API de REST, consulte Recursos de la API de REST de Azure.For more information about making HTTP calls to the REST API, see Azure REST API Resources.

Creación y asignación de una definición de directiva con la CLI de AzureCreate and assign a policy definition with Azure CLI

Use el procedimiento siguiente para crear una definición de directiva:To create a policy definition, use the following procedure:

  1. Copie el siguiente fragmento de código JSON para crear un archivo de asignación de directiva 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"
        }
    }
    

    Para más información acerca de la creación de una definición de directiva, consulte Estructura de definición de Azure Policy.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Para crear una definición de directiva, ejecute el siguiente comando: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
    

    El comando crea una definición de directiva denominada Audit Storage Accounts Open to Public Networks (Auditoría de cuentas de almacenamiento abiertas a las redes públicas).The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Para más información acerca de otros parámetros que puede utilizar, consulte creación de la definición de directivas az.For more information about other parameters that you can use, see az policy definition create.

    Cuando se llama sin parámetros de ubicación, az policy definition creation elige de forma predeterminada guardar la definición de directiva en la suscripción seleccionada del contexto de sesiones.When called without location parameters, az policy definition creation defaults to saving the policy definition in the selected subscription of the sessions context. Para guardar la definición en una ubicación diferente, use los siguientes parámetros:To save the definition to a different location, use the following parameters:

    • --subscription: se guarda en una suscripción diferente.--subscription - Save to a different subscription. Requiere un valor de GUID como identificador de suscripción o un valor de cadena como nombre.Requires a GUID value for the subscription ID or a string value for the subscription name.
    • --management-group: se guarda en un grupo de administración.--management-group - Save to a management group. Requiere un valor de cadena.Requires a string value.
  3. Use el siguiente comando para crear una asignación de directiva.Use the following command to create a policy assignment. Reemplace la información de ejemplo de los símbolos <> por sus propios valores.Replace example information in <> symbols with your own values.

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

    El parámetro --scope de az policy assignment create funciona con un grupo de administración, una suscripción, un grupo de recursos o un único recurso.The --scope parameter on az policy assignment create works with management group, subscription, resource group, or a single resource. El parámetro utiliza una ruta de acceso de recurso completa.The parameter uses a full resource path. El patrón de Scope para cada contenedor es el siguiente.The pattern for --scope for each container is as follows. Reemplace {rName}, {rgName}, {subId} y {mgName} por el nombre del recurso, el nombre del grupo de recursos, el identificador de suscripción y el nombre del grupo de administración, respectivamente.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} se reemplazaría por el tipo de recurso del recurso como, por ejemplo, Microsoft.Compute/virtualMachines para una máquina virtual.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Recurso /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupo de recursos /subscriptions/{subID}/resourceGroups/{rgName}Resource group - /subscriptions/{subID}/resourceGroups/{rgName}
    • Suscripción /subscriptions/{subID}Subscription - /subscriptions/{subID}
    • Grupo de administración /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Puede obtener el id. de definición de Azure Policy si usa PowerShell con el comando siguiente: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'

El identificador de definición de directiva para la definición de directiva que ha creado debe parecerse al ejemplo siguiente: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"

Para más información acerca de cómo administrar las directivas de recursos con la CLI de Azure, consulte las directivas de recursos de la CLI de Azure.For more information about how you can manage resource policies with Azure CLI, see Azure CLI Resource Policies.

Pasos siguientesNext steps

Revise los artículos siguientes para más información sobre los comandos y las consultas en este artículo.Review the following articles for more information about the commands and queries in this article.