Corregir los recursos no conformes con Azure Policy

Los recursos que no son conformes con un directiva deployIfNotExists o modify se pueden colocar en un estado conforme a través de la Corrección. La corrección se consigue indicando a Azure Policy que ejecute el efecto deployIfNotExists o las operaciones de modificación de la directiva asignada en los recursos y las suscripciones existentes, independientemente de que la asignación sea a un grupo de administración, una suscripción, un grupo de recursos o un recurso individual. En este artículo se muestran los pasos necesarios para comprender y realizar correcciones con Azure Policy.

Cómo funciona la seguridad de corrección

Cuando Azure Policy ejecuta la plantilla en la definición de directiva deployIfNotExists, lo hace mediante una identidad administrada. Azure Policy crea una identidad administrada para cada asignación, pero debe proporcionar detalles sobre los roles que se conceden a la identidad administrada. Si faltan roles en la identidad administrada, este error se muestra durante la asignación de la directiva o una iniciativa. Al usar el portal, Azure Policy concede automáticamente a la identidad administrada los roles enumerados cuando se inicia la asignación. Al usar el SDK, los roles deben concederse manualmente a la identidad administrada. La propiedad location de la identidad administrada no afecta a su funcionamiento con Azure Policy.

Captura de pantalla de una directiva deployIfNotExists a la que le falta un permiso definido en la identidad administrada.

Importante

En los escenarios siguientes, la identidad administrada de la asignación debe obtener acceso de forma manual o se producirá un error en la implementación de la corrección:

  • Si la asignación se crea mediante el SDK.
  • Si un recurso que haya modificado el valor deployIfNotExists o modify está fuera del ámbito de la asignación de directiva.
  • Si la plantilla obtiene acceso a las propiedades de los recursos fuera del ámbito de la asignación de directiva.

Configurar la definición de directiva

El primer paso consiste en definir los roles que deployIfNotExists y modify necesitan en la definición de directiva para implementar correctamente el contenido de la plantilla incluida. En la propiedad details, agregue una propiedad roleDefinitionIds. Esta propiedad es una matriz de cadenas que coinciden con los roles de su entorno. Para consultar un ejemplo completo, vea el ejemplo de deployIfNotExists o los ejemplos de modify.

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

La propiedad roleDefinitionIds utiliza el identificador de recurso completo y no toma el valor roleName corto del rol. Para obtener el identificador del rol “Contributor” en su entorno, use el siguiente código:

az role definition list --name 'Contributor'

Configurar manualmente la identidad administrada

Al crear un trabajo mediante el portal, Azure Policy genera la identidad administrada y le concede los roles definidos en roleDefinitionIds. En las siguientes condiciones, los pasos para crear la identidad administrada y asignarle permisos se deben realizar manualmente:

  • Al usar el SDK (por ejemplo, Azure PowerShell)
  • Cuando la plantilla modifica un recurso fuera del ámbito de asignación
  • Cuando la plantilla lee un recurso fuera del ámbito de asignación

Creación de una identidad administrada con PowerShell

Para crear una identidad administrada durante la asignación de la directiva, debe definirse Location y debe usarse AssignIdentity. En el siguiente ejemplo se obtiene la definición de la directiva integrada Implementar cifrado de datos transparente de SQL DB, se establece el grupo de recursos de destino y después se crea la asignación.

# Login first with Connect-AzAccount if not using Cloud Shell

# Get the built-in "Deploy SQL DB transparent data encryption" policy definition
$policyDef = Get-AzPolicyDefinition -Id '/providers/Microsoft.Authorization/policyDefinitions/86a912f6-9a06-4e26-b447-11b16ba8659f'

# Get the reference to the resource group
$resourceGroup = Get-AzResourceGroup -Name 'MyResourceGroup'

# Create the assignment using the -Location and -AssignIdentity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL DB transparent data encryption' -Scope $resourceGroup.ResourceId -PolicyDefinition $policyDef -Location 'westus' -AssignIdentity

La variable $assignment contiene ahora el identificador principal de la identidad administrada junto con los valores estándar devueltos cuando se crea una asignación de directiva. Se puede acceder a ella a través de $assignment.Identity.PrincipalId.

Conceder roles definidos con PowerShell

La nueva identidad administrada debe completar la replicación a través de Azure Active Directory antes de se le puedan conceder los roles necesarios. Una vez se completa la replicación, el siguiente ejemplo itera la definición de directiva en $policyDef para roleDefinitionIds y usa New-AzRoleAssignment para conceder la nueva identidad administrada a los roles.

# Use the $policyDef to get to the roleDefinitionIds array
$roleDefinitionIds = $policyDef.Properties.policyRule.then.details.roleDefinitionIds

if ($roleDefinitionIds.Count -gt 0)
{
    $roleDefinitionIds | ForEach-Object {
        $roleDefId = $_.Split("/") | Select-Object -Last 1
        New-AzRoleAssignment -Scope $resourceGroup.ResourceId -ObjectId $assignment.Identity.PrincipalId -RoleDefinitionId $roleDefId
    }
}

Conceder roles definidos a través de Azure Portal

Azure Portal ofrece dos maneras de conceder los roles definidos a la identidad administrada de una asignación: mediante control de acceso (IAM) o editando la asignación de directiva o iniciativa y seleccionando Guardar.

Para agregar un rol a la identidad administrada de la asignación, siga estos pasos:

  1. Inicie el servicio Azure Policy en Azure Portal. Para ello, seleccione Todos los servicios y, a continuación, busque y seleccione Directiva.

  2. Seleccione Asignaciones en el panel izquierdo de la página de Azure Policy.

  3. Busque la asignación que tiene una identidad administrada y seleccione el nombre.

  4. Busque la propiedad Id. de asignación en la página Editar. El identificador de asignación será algo como:

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    El nombre de la identidad administrada es la última parte del identificador del recurso de asignación, que es 2802056bfc094dfb95d4d7a5 en este ejemplo. Copie esta parte del identificador de recursos de asignación.

  5. Navegue hasta el contenedor primario del recurso o recursos (grupo de recursos, suscripción, grupo de administración) al que se debe agregar manualmente la definición de función.

  6. Seleccione el vínculo Control de acceso (IAM) en la página de recursos y luego + Agregar asignación de rol en la parte superior de la página de control de acceso.

  7. Seleccione el rol adecuado que coincide con un roleDefinitionIds de la definición de la directiva. Deje Asignar acceso a con el valor predeterminado de “Usuario de Azure AD, grupo o aplicación”. En el cuadro Seleccionar, pegue o escriba la parte del identificador del recurso de asignación que buscó anteriormente. Una vez finalizada la búsqueda, seleccione el objeto con el mismo nombre que el identificador seleccionado y elija Guardar.

Crear una tarea de corrección

Creación de una tarea de corrección a través del portal

Durante la evaluación, la asignación de directiva con los efectos deployIfNotExists o modify determina si hay recursos o suscripciones no conformes. Cuando se encuentran los recursos o suscripciones no conformes, se proporcionan los detalles en la página Corrección. La opción para desencadenar una tarea de corrección está junto a la lista de directivas que tienen recursos o suscripciones no conformes. Esta opción crea una implementación a partir de la plantilla de deployIfNotExists o de las operaciones de modify.

Para crear un tarea de corrección, siga estos pasos:

  1. Inicie el servicio Azure Policy en Azure Portal. Para ello, seleccione Todos los servicios y, a continuación, busque y seleccione Directiva.

    Captura de pantalla de búsqueda de Directiva en Todos los servicios.

  2. Seleccione Corrección en el lado izquierdo de la página Azure Policy.

    Captura de pantalla del nodo Corrección en la página Directiva.

  3. Todas las asignaciones de directiva de deployIfNotExists y modify con recursos no conformes se incluyen en la pestaña y la tabla de datos Directivas que se van a corregir. Seleccione una directiva con recursos que no son conformes. Se abre la página Nueva tarea de corrección.

    Nota

    Una forma alternativa de abrir la página de tarea de corrección consiste en buscar y seleccionar la directiva desde la página Cumplimiento y después seleccionar el botón Crear tarea de corrección.

  4. En la página Nueva tarea de corrección, filtre los recursos para corregir mediante la elipse Ámbito para seleccionar los recursos secundarios a partir de los cuales se asignó la directiva (incluidos los objetos de recursos individuales). Además, utilice la lista desplegable Ubicaciones para filtrar más los recursos. Solo los recursos enumerados en la tabla se corregirán.

    Captura de pantalla del nodo Corrección y la cuadrícula de los recursos que se van a corregir.

  5. Inicie la tarea de corrección cuando se hayan filtrado los recursos; para ello, seleccione Corregir. Se abre la página de cumplimiento de directivas en la pestaña Tareas de corrección para mostrar el estado del progreso de las tareas. Las implementaciones que ha creado la tarea de corrección se inician inmediatamente.

    Captura de pantalla de la pestaña Tareas de corrección y progreso de las tareas de corrección existentes.

  6. Seleccione la tarea de corrección en la página de cumplimiento de directivas para obtener detalles sobre el progreso. El filtro usado en la tarea se muestra junto con una lista de los recursos que se van a corregir.

  7. En la página Tarea de corrección, seleccione y mantenga pulsado (o haga clic con el botón derecho) un recurso para ver el recurso o la implementación de la tarea de corrección. Al final de la fila, seleccione Eventos relacionados para ver detalles, como un mensaje de error.

    Captura de pantalla del menú contextual de un recurso en la pestaña Corregir tarea.

Los recursos implementados mediante una tarea de corrección se agregan a la pestaña Recursos implementados en la página de cumplimiento de la directiva.

Creación de una tarea de corrección a través de la CLI de Azure

Para crear una tarea de corrección con la CLI de Azure, use los comandos az policy remediation. Reemplace {subscriptionId} por el identificador de suscripción y {myAssignmentId} por el identificador de asignación de la directiva deployIfNotExists o modify.

# Login first with az login if not using Cloud Shell

# Create a remediation for a specific assignment
az policy remediation create --name myRemediation --policy-assignment '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

Para obtener otros comandos de corrección y ejemplos, consulte los comandos az policy remediation.

Creación de una tarea de corrección a través de Azure PowerShell

Para crear una tarea de corrección con Azure PowerShell, use los comandos Start-AzPolicyRemediation. Reemplace {subscriptionId} por el identificador de suscripción y {myAssignmentId} por el identificador de asignación de la directiva deployIfNotExists o modify.

# Login first with Connect-AzAccount if not using Cloud Shell

# Create a remediation for a specific assignment
Start-AzPolicyRemediation -Name 'myRemedation' -PolicyAssignmentId '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

Para obtener otros cmdlets de corrección y ejemplos, consulte el módulo Az.PolicyInsights.

Creación de una tarea de corrección durante la asignación de la directiva en Azure Portal

Una forma optimizada de crear una tarea de corrección es hacerlo desde Azure Portal durante la asignación de la directiva. Si la definición de la directiva a asignar es deployIfNotExists o un efecto Modify, el asistente de la pestaña Corrección ofrece una opción Crear una tarea de corrección. Si se selecciona esta opción, se crea una tarea de corrección al mismo tiempo que la asignación de la directiva.

Pasos siguientes