Estructura de asignaciones de Azure Policy

Azure Policy usa las asignaciones de directivas para definir qué recursos se asignan a qué directivas o iniciativas. La asignación de directivas puede determinar los valores de los parámetros para ese grupo de recursos en el momento de la asignación, lo que permite volver a usar las definiciones de directiva que se ocupan de las mismas propiedades de recursos con diferentes necesidades de cumplimiento.

Nota:

Para obtener más información del ámbito de Azure Policy, vea Descripción del ámbito de Azure Policy.

Puede usar notación de objetos JavaScript (JSON) para crear una asignación de directiva. La asignación de directivas contiene elementos para:

Por ejemplo, el siguiente archivo JSON muestra una asignación de directiva en el modo DoNotEnforce con parámetros dinámicos:

{
    "properties": {
        "displayName": "Enforce resource naming rules",
        "description": "Force resource names to begin with DeptA and end with -LC",
        "metadata": {
            "assignedBy": "Cloud Center of Excellence"
        },
        "enforcementMode": "DoNotEnforce",
        "notScopes": [],
        "policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
        "nonComplianceMessages": [
            {
                "message": "Resource names must start with 'DeptA' and end with '-LC'."
            }
        ],
        "parameters": {
            "prefix": {
                "value": "DeptA"
            },
            "suffix": {
                "value": "-LC"
            }
        },
        "identity": {
            "type": "SystemAssigned"
        },
        "resourceSelectors": [],
        "overrides": []
    }
}

Todos los ejemplos de Azure Policy se encuentran en Ejemplos de Azure Policy.

Nombre para mostrar y descripción

Use displayName y description para identificar la asignación de directiva y proporcionar el contexto para su uso con el conjunto específico de recursos. displayName tiene una longitud máxima de 128 caracteres y description tiene una longitud máxima de 512 caracteres.

Metadatos

La propiedad metadata opcional almacena información sobre la asignación de la directiva. Los clientes pueden definir las propiedades y los valores útiles para su organización en metadata. Aun así, hay algunas propiedades comunes que se usan en Azure Policy. Cada propiedad metadata tiene un límite de 1024 caracteres.

Propiedades de metadatos comunes

  • assignedBy (cadena): nombre descriptivo de la entidad de seguridad que creó la asignación.

  • createdBy (cadena): el GUID de la entidad de seguridad que creó la asignación.

  • createdOn (cadena): el formato de fecha y hora universal ISO 8601 de la hora de creación de la asignación.

  • parameterScopes(objeto): colección de pares clave-valor donde la clave coincide con un nombre de parámetro configurado strongType y el valor define el ámbito de recurso usado en el portal para proporcionar la lista de recursos disponibles mediante la coincidencia de strongType. El portal establece este valor si el ámbito es diferente del ámbito de asignación. Si se establece, una edición de la asignación de directiva en el portal establece automáticamente el ámbito del parámetro en este valor. Sin embargo, el ámbito no está bloqueado en el valor y se puede cambiar a otro ámbito.

    El ejemplo siguiente de parameterScopes es para un parámetro strongType denominado backupPolicyId que establece un ámbito para la selección de recursos cuando la asignación se edita en el portal.

    "metadata": {
        "parameterScopes": {
            "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}"
        }
    }
    
  • updatedBy (cadena): nombre descriptivo de la entidad de seguridad que actualizó la asignación, si la hubiera.

  • updatedOn (cadena): el formato de fecha y hora universal ISO 8601 de la hora de actualización de la asignación, si lo hubiera.

  • evidenceStorages (objeto): la cuenta de almacenamiento predeterminada recomendada que se debe usar para contener evidencias de atestaciones en las asignaciones de directiva con un efecto manual. La propiedad displayName es el nombre de la cuenta de almacenamiento. La propiedad evidenceStorageAccountID es el identificador de recurso de la cuenta de almacenamiento. La propiedad evidenceBlobContainer es el nombre del contenedor de blobs en el que planea almacenar la evidencia.

    {
      "properties": {
        "displayName": "A contingency plan should be in place to ensure operational continuity for each Azure subscription.",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/{definitionId}",
        "metadata": {
          "evidenceStorages": [
            {
              "displayName": "Default evidence storage",
              "evidenceStorageAccountId": "/subscriptions/{subscriptionId}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}",
              "evidenceBlobContainer": "evidence-container"
            }
          ]
        }
      }
    }
    

Selectores de recursos

La propiedad opcional resourceSelectors facilita prácticas de implementación seguras (SDP) al permitirle implementar gradualmente asignaciones de directivas en función de factores como la ubicación del recurso, el tipo de recurso o si un recurso tiene una ubicación. Cuando se usan selectores de recursos, Azure Policy solo evaluará los recursos aplicables a las especificaciones realizadas en los selectores de recursos. Los selectores de recursos también se pueden aprovechar para restringir el ámbito de las exenciones de la misma manera.

En el siguiente escenario de ejemplo, la nueva asignación de directiva solo se evaluará si la ubicación del recurso es Este de EE. UU. u Oeste de EE. UU.

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

Cuando esté listo para expandir el ámbito de evaluación de la directiva, solo tiene que modificar la asignación. En el ejemplo siguiente se muestra la asignación de directivas con dos regiones de Azure adicionales agregadas al selector SDPRegions. Tenga en cuenta que, en este ejemplo, SDP significa práctica de implementación segura:

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus", "centralus", "southcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

Los selectores de recursos tienen las siguientes propiedades:

  • name: nombre del selector de recursos.

  • selectors: (opcional) se debe evaluar el cumplimiento de la propiedad utilizada para determinar qué subconjunto de recursos es aplicable a la asignación de directiva.

    • kind: la propiedad de un selector que describe qué característica restringirá el conjunto de recursos evaluados. Cada kind solo se puede usar una vez en un único selector de recursos. Los valores permitidos son:

      • resourceLocation: esta propiedad se usa para seleccionar recursos en función de su tipo. No se puede usar en el mismo selector de recursos que resourceWithoutLocation.

      • resourceType: esta propiedad se usa para seleccionar recursos en función de su tipo.

      • resourceWithoutLocation: esta propiedad se usa para seleccionar recursos en el nivel de suscripción que no tienen una ubicación. Actualmente sólo admite subscriptionLevelResources. No se puede usar en el mismo selector de recursos que resourceLocation.

    • in: lista de valores permitidos para el objeto kind especificado. No se puede usar con notIn. Puede contener hasta 50 valores.

    • notIn: lista de valores no permitidos para el objeto kind especificado. No se puede usar con in. Puede contener hasta 50 valores.

Un selector de recursos puede contener varios selectores. Para que sea aplicable a un selector de recursos, un recurso debe cumplir los requisitos especificados por todos sus selectores. Además, se pueden especificar hasta 10 selectores de recursos en una sola asignación. Los recursos dentro del ámbito se evalúan cuando satisfacen cualquiera de estos selectores de recursos.

Anulaciones

La propiedad opcional overrides permite cambiar el efecto de una definición de directiva sin modificar la definición de directiva subyacente ni usar un efecto parametrizado en la definición de directiva.

El caso de uso más común para las invalidaciones son las iniciativas de directiva con un gran número de definiciones de directiva asociadas. En esta situación, la administración de varios efectos de directiva puede consumir un esfuerzo administrativo significativo, especialmente cuando el efecto debe actualizarse de vez en cuando. Las invalidaciones se pueden usar para actualizar simultáneamente los efectos de varias definiciones de directiva dentro de una iniciativa.

Ahora se verá un ejemplo. Imagine que tiene una iniciativa de directiva denominada CostManagement que incluye una definición de directiva personalizada con policyDefinitionReferenceIdcorpVMSizePolicy y un único efecto de audit. Supongamos que desea asignar la iniciativa CostManagement, pero aún no quiere ver el cumplimiento notificado para esta directiva. El efecto "audit" de esta directiva se puede reemplazar por "deshabilitado" mediante una invalidación en la asignación de iniciativa, como se muestra a continuación:

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policySetDefinitions/CostManagement",
        "overrides": [
            {
                "kind": "policyEffect",
                "value": "disabled",
                "selectors": [
                    {
                        "kind": "policyDefinitionReferenceId",
                        "in": [ "corpVMSizePolicy" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "CostManagement"
}

Las invalidaciones tienen las siguientes propiedades:

  • kind: la propiedad que invalidará la asignación. El tipo admitido es policyEffect.

  • value: el nuevo valor que invalida el valor existente. Los valores admitidos son efectos.

  • selectors: (opcional) propiedad que se usa para determinar qué ámbito de la asignación de directiva debe asumir la invalidación.

    • kind: la propiedad de un selector que describe qué característica restringirá el ámbito de la invalidación. El valor permitido para kind: policyEffect es:

      • policyDefinitionReferenceId: especifica qué definiciones de directiva dentro de una asignación de iniciativa deben asumir la invalidación del efecto.
    • in: lista de valores permitidos para el objeto kind especificado. No se puede usar con notIn. Puede contener hasta 50 valores.

    • notIn: lista de valores no permitidos para el objeto kind especificado. No se puede usar con in. Puede contener hasta 50 valores.

Tenga en cuenta que se puede usar una invalidación para reemplazar el efecto de muchas directivas especificando varios valores en la matriz policyDefinitionReferenceId. Se puede usar una sola invalidación para hasta 50 instancias de policyDefinitionReferenceIds y una única asignación de directiva puede contener hasta 10 invalidaciones, evaluadas en el orden en que se especifican. Antes de crear la asignación, el efecto elegido en la invalidación se valida con la regla de directiva y la lista de valores permitidos de parámetros, en los casos en los que se parametriza el efecto.

Modo de cumplimiento

La propiedad enforcementMode proporciona a los clientes la capacidad de probar el resultado de una directiva en los recursos existentes sin necesidad de iniciar el efecto de la directiva ni de desencadenar entradas en el registro de actividad de Azure.

Este escenario se conoce comúnmente como "What If" y se alinea con las prácticas de implementación segura. enforcementMode es diferente del efecto Deshabilitado, ya que ese efecto evita que se produzca la evaluación de recursos.

Esta propiedad tiene los siguientes valores:

Mode Valor JSON Tipo Corregir manualmente Entrada de registro de actividad Descripción
habilitado Valor predeterminado string El efecto de la directiva se aplica durante la creación o actualización de recursos.
Disabled DoNotEnforce string No El efecto de la directiva no se aplica durante la creación o actualización de recursos.

Si enforcementMode no se especifica en una definición de directiva o iniciativa, se usa el valor Default. Las tareas de corrección se pueden iniciar para las directivas deployIfNotExists, incluso cuando enforcementMode está establecido en DoNotEnforce.

Ámbitos excluidos

El ámbito de la asignación incluye todos los contenedores de recursos secundarios y los recursos secundarios. Si la definición no debe aplicarse a un contenedor de recursos secundario o a un recurso secundario, se puede excluir cada uno de ellos de la evaluación estableciendo notScopes. Esta propiedad es una matriz que permite excluir de la evaluación a uno o varios contenedores de recursos o recursos. notScopes se puede agregar o actualizar después de la creación de la asignación inicial.

Nota

Un recurso excluido no es lo mismo que un recurso exento. Para más información, consulte Descripción del ámbito en Azure Policy.

Identificador de la definición de directiva

Este campo debe ser el nombre de la ruta de acceso completa de una definición de directiva o una definición de iniciativa. policyDefinitionId es una cadena y no una matriz. El contenido más reciente de la definición o iniciativa de directiva asignada se recuperará cada vez que se evalúe la asignación de directiva. Se recomienda que, si a menudo se asignan varias directivas, se use una iniciativa en su lugar.

Mensajes de no cumplimiento

Para establecer un mensaje personalizado que describa por qué un recurso no es compatible con la definición de la directiva o de la iniciativa, establezca nonComplianceMessages en la definición de la asignación. Este nodo es una matriz de message entradas. Este mensaje personalizado es adicional al mensaje de error predeterminado para el no cumplimiento y es opcional.

Importante

Los mensajes personalizados de no cumplimiento solo se admiten en definiciones o iniciativas con definiciones de modos de Resource Manager.

"nonComplianceMessages": [
    {
        "message": "Default message"
    }
]

Si la asignación es para una iniciativa, se pueden configurar diferentes mensajes para cada definición de directiva en la iniciativa. Los mensajes utilizan el valor policyDefinitionReferenceId configurado en la definición de la iniciativa. Para más información, consulte las propiedades de las definiciones de directiva.

"nonComplianceMessages": [
    {
        "message": "Default message"
    },
    {
        "message": "Message for just this policy definition by reference ID",
        "policyDefinitionReferenceId": "10420126870854049575"
    }
]

Parámetros

Este segmento de la asignación de directiva proporciona los valores para los parámetros definidos en la definición de directiva o en la definición de iniciativa. Este diseño permite reutilizar una definición de directiva o iniciativa con distintos recursos, así como comprobar si hay valores o resultados empresariales diferentes.

"parameters": {
    "prefix": {
        "value": "DeptA"
    },
    "suffix": {
        "value": "-LC"
    }
}

En este ejemplo, los parámetros definidos anteriormente en la definición de directiva son prefix y suffix. Esta asignación de directiva determinada establece prefix en DeptA y suffix en -LC. La misma definición de directiva se puede volver a usar con un conjunto diferente de parámetros para otro departamento, lo que reduce la duplicación y la complejidad de las definiciones de directiva, a la vez que proporciona flexibilidad.

identidad

Para las asignaciones de directivas con efecto establecido en deployIfNotExist o modify, es necesario tener una propiedad de identidad para realizar la corrección en recursos no compatibles. Cuando se usa la identidad, el usuario también debe especificar una ubicación para la asignación.

Nota:

Una sola asignación de directiva solo se puede asociar a una única identidad administrada asignada por el sistema o por el usuario. Sin embargo, esa identidad se puede asignar a más de un rol si es necesario.

# System-assigned identity
 "identity": {
    "type": "SystemAssigned"
  }
# User-assigned identity
  "identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/SubscriptionID/resourceGroups/testResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
    }
  },

Pasos siguientes