Estructura de exención de Azure Policy

La característica de exenciones de Azure Policy se usa para eximir una jerarquía de recursos o un recurso individual de la evaluación de iniciativas o definiciones. Los recursos que están exentos cuentan para el cumplimiento general, pero no se pueden evaluar ni tienen una renuncia temporal. Para obtener más información, vea ¿Qué es la aplicabilidad en Azure Policy?. Las exenciones de Azure Policy también funcionan con los siguientes modos de Resource Manager: Microsoft.Kubernetes.Data, Microsoft.KeyVault.Data y Microsoft.Network.Data.

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

Una exención de directiva se crea como un objeto secundario en la jerarquía de recursos o el recurso individual a los que se ha concedido la exención. No se pueden crear exenciones en el nivel de componente del modo de proveedor de recursos. Si se quita el recurso primario al que se aplica la exención, también se quita la exención.

Por ejemplo, en el siguiente JSON se puede ver una exención de directiva de la categoría de renuncia de un recurso en una asignación de iniciativa denominada resourceShouldBeCompliantInit. El recurso está exento solo de dos de las definiciones de directiva de la iniciativa, la definición de directiva personalizada customOrgPolicy (policyDefinitionReferenceId: requiredTags) y la definición de directiva integrada Ubicaciones permitidas (policyDefinitionReferenceId: allowedLocations):

{
    "id": "/subscriptions/{subId}/resourceGroups/ExemptRG/providers/Microsoft.Authorization/policyExemptions/resourceIsNotApplicable",
    "apiVersion": "2020-07-01-preview",
    "name": "resourceIsNotApplicable",
    "type": "Microsoft.Authorization/policyExemptions",
    "properties": {
        "displayName": "This resource is scheduled for deletion",
        "description": "This resources is planned to be deleted by end of quarter and has been granted a waiver to the policy.",
        "metadata": {
            "requestedBy": "Storage team",
            "approvedBy": "IA",
            "approvedOn": "2020-07-26T08:02:32.0000000Z",
            "ticketRef": "4baf214c-8d54-4646-be3f-eb6ec7b9bc4f"
        },
        "policyAssignmentId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyAssignments/resourceShouldBeCompliantInit",
        "policyDefinitionReferenceIds": [
            "requiredTags",
            "allowedLocations"
        ],
        "exemptionCategory": "waiver",
        "expiresOn": "2020-12-31T23:59:00.0000000Z",
        "assignmentScopeValidation": "Default"
    }
}

Nombre para mostrar y descripción

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

Metadatos

La propiedad metadata permite crear cualquier propiedad secundaria necesaria para almacenar información relevante. En el ejemplo, las propiedades requestedBy, approvedBy, approvedOn y ticketRef contienen valores del cliente para proporcionar información sobre quién ha solicitado la exención, quién y cuándo la ha aprobado, y un vale de seguimiento interno de la solicitud. Estas propiedades metadata son ejemplos, pero no son necesarias, y metadata no se limita a estas propiedades secundarias.

Id. de asignación de directiva

Este campo debe ser el nombre de la ruta de acceso completa de una asignación de directiva o una asignación de iniciativa. policyAssignmentId es una cadena y no una matriz. Esta propiedad define de qué asignación está exenta la jerarquía de recursos primaria o el recurso individual.

Identificadores de definición de directiva

Si policyAssignmentId corresponde a una asignación de iniciativa, se puede usar la propiedad policyDefinitionReferenceIds para especificar las definiciones de directiva de la iniciativa en las que el recurso del asunto tiene una exención. Como el recurso puede estar exento de una o varias definiciones de directivas incluidas, esta propiedad es una matriz. Los valores deben coincidir con los valores de la definición de iniciativa de los campos policyDefinitions.policyDefinitionReferenceId.

Categoría de exención

Existen dos categorías de exención y se usan para agrupar las exenciones:

  • Mitigada: Se concede la exención porque la intención de la directiva se alcanza a través de otro método.
  • Renuncia: Se concede la exención porque el estado de no cumplimiento del recurso se acepta temporalmente. Otra razón para usar esta categoría es para una jerarquía de recursos o recursos que se debe excluir de una o más definiciones en una iniciativa, pero no debe excluirse de toda la iniciativa.

Expiration

Para establecer cuándo una jerarquía de recursos o un recurso individual ya no están exentos de una asignación, establezca la propiedad expiresOn. Esta propiedad opcional debe tener el formato DateTime universal ISO 8601 yyyy-MM-ddTHH:mm:ss.fffffffZ.

Nota

Las exenciones de directiva no se eliminan cuando se alcanza la fecha expiresOn. El objeto se conserva para el mantenimiento de registros, pero ya no se respeta la exención.

Selectores de recursos

Las exenciones admiten una propiedad opcional resourceSelectors. Esta propiedad funciona de la misma manera tanto en las exenciones como en las asignaciones, lo que permite el lanzamiento o la reversión gradual de una exención a determinados subconjuntos de recursos de forma controlada en función del tipo de recurso, la ubicación del recurso o si el recurso tiene una ubicación. Puede encontrar más detalles sobre cómo usar selectores de recursos en la estructura de asignación. A continuación se muestra un ejemplo de código JSON de exención que utiliza los selectores de recursos. En este ejemplo, solo los recursos de westcentralus estarán exentos de la asignación de directiva:

{
    "properties": {
        "policyAssignmentId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
        "policyDefinitionReferenceIds": [
            "limitSku", "limitType"
        ],
        "exemptionCategory": "Waiver",
        "resourceSelectors": [
            {
                "name": "TemporaryMitigation",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "westcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/resourceGroups/demoCluster/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
    "type": "Microsoft.Authorization/policyExemptions",
    "name": "DemoExpensiveVM"
}

Se pueden agregar o quitar regiones de la lista resourceLocation del ejemplo. Los selectores de recursos permiten una mayor flexibilidad de dónde y cómo se pueden crear y administrar las exenciones.

Validación del ámbito de asignación (versión preliminar)

En la mayoría de los escenarios, el ámbito de exención se valida para garantizar que se encuentra en el ámbito de asignación. La propiedad opcional assignmentScopeValidation puede permitir que una exención omita esta validación y crearse fuera del ámbito de asignación. Esto está pensado para situaciones en las que es necesario mover una suscripción de un grupo de administración (MG) a otro, pero la directiva bloquearía el traslado debido a las propiedades de los recursos de la suscripción. En este escenario, se podría crear una exención para la suscripción en su MG actual para excluir los recursos de una asignación de directiva en el MG de destino. De este modo, cuando la suscripción se traslada al MG de destino, la operación no se bloquea puesto que los recursos ya están exentos de la asignación de directiva en cuestión. A continuación se muestra el uso de esta propiedad:

{
    "properties": {
        "policyAssignmentId": "/providers/Microsoft.Management/managementGroups/{mgB}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
        "policyDefinitionReferenceIds": [
            "limitSku", "limitType"
        ],
        "exemptionCategory": "Waiver",
        "assignmentScopeValidation": "DoNotValidate",
    },
    "systemData": { ... },
    "id": "/subscriptions/{subIdA}/providers/Microsoft.Authorization/policyExemptions/DemoExpensiveVM",
    "type": "Microsoft.Authorization/policyExemptions",
    "name": "DemoExpensiveVM"
}

Los valores permitidos de assignmentScopeValidation son Default y DoNotValidate. Si no se especifica, se producirá el proceso de validación predeterminado.

Permisos necesarios

Los permisos RBAC de Azure necesarios para administrar objetos de exención de directiva se encuentran en el grupo de operaciones Microsoft.Authorization/policyExemptions. Los roles integrados Colaborador de la directiva de recursos y Administrador de seguridad tienen los permisos read y write, y Escritor de datos de Policy Insights (versión preliminar) tiene el permiso read.

Las exenciones tienen medidas de seguridad adicionales debido al impacto de la concesión de una exención. Además de exigir la operación Microsoft.Authorization/policyExemptions/write en la jerarquía de recursos o el recurso individual, el creador de una exención debe tener el verbo exempt/Action en la asignación de destino.

Creación y administración de exenciones

Se recomienda el uso de exenciones para escenarios específicos o con límite de tiempo en los que un recurso o jerarquía de recursos debe seguir siendo objeto de seguimiento y que, de otro modo, se evaluaría, pero existe una razón específica por la que no debe evaluarse su cumplimiento. Por ejemplo, si un entorno tiene asignada la definición integrada Storage accounts should disable public network access (Id.: b2982f36-99f2-4db5-8eff-283140c09693) con efecto establecido en auditar. Tras la evaluación del cumplimiento, el recurso "StorageAcc1" no es compatible, pero StorageAcc1 debe tener habilitado el acceso a la red pública con fines empresariales. En ese momento, se debe enviar una solicitud para crear un recurso de exención destinado a StorageAcc1. Una vez creada la exención, StorageAcc1 se muestra como exento en la revisión de cumplimiento.

Revise periódicamente las exenciones para asegurarse de que están exentos todos los elementos que procede que lo estén y quitar rápidamente aquellos que ya no cumplen los requisitos para estarlo. En ese momento, también se pueden eliminar los recursos de exención que han expirado.

Pasos siguientes