Corregir los recursos no conformes con Azure PolicyRemediate non-compliant resources with 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.Resources that are non-compliant to a deployIfNotExists or modify policy can be put into a compliant state through Remediation. La corrección se lleva a cabo indicando a Azure Policy que ejecute en los recursos existentes el efecto deployIfNotExists o los elementos operations de la etiqueta de la directiva asignada.Remediation is accomplished by instructing Azure Policy to run the deployIfNotExists effect or the tag operations of the assigned policy on your existing resources. En este artículo se muestran los pasos necesarios para comprender y realizar correcciones con Azure Policy.This article shows the steps needed to understand and accomplish remediation with Azure Policy.

Cómo funciona la seguridad de correcciónHow remediation security works

Cuando Azure Policy ejecuta la plantilla en la definición de directiva deployIfNotExists, lo hace mediante una identidad administrada.When Azure Policy runs the template in the deployIfNotExists policy definition, it does so using a managed identity. Azure Policy crea una identidad administrada para cada asignación, pero debe proporcionar detalles sobre los roles que se conceden a la identidad administrada.Azure Policy creates a managed identity for each assignment, but must have details about what roles to grant the managed identity. Si faltan roles en la identidad administrada, este error se muestra durante la asignación de la directiva o una iniciativa.If the managed identity is missing roles, this error is displayed during the assignment of the policy or an initiative. Al usar el portal, Azure Policy concederá automáticamente a la identidad administrada los roles enumerados una vez que se inicie la asignación.When using the portal, Azure Policy will automatically grant the managed identity the listed roles once assignment is started.

Identidad administrada - función ausente

Importante

Si un recurso modificado por deployIfNotExists o por modify está fuera del ámbito de la asignación de la directiva o si la plantilla accede a propiedades de recursos situados fuera del ámbito de la asignación de la directiva, debe concederse manualmente acceso a la identidad administrada de la asignación o se producirá un error en la implementación de la corrección.If a resource modified by deployIfNotExists or modify is outside the scope of the policy assignment or the template accesses properties on resources outside the scope of the policy assignment, the assignment's managed identity must be manually granted access or the remediation deployment will fail.

Configurar la definición de directivaConfigure policy definition

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.The first step is to define the roles that deployIfNotExists and modify needs in the policy definition to successfully deploy the content of your included template. En la propiedad details, agregue una propiedad roleDefinitionIds.Under the details property, add a roleDefinitionIds property. Esta propiedad es una matriz de cadenas que coinciden con los roles de su entorno.This property is an array of strings that match roles in your environment. Para consultar un ejemplo completo, vea el ejemplo de deployIfNotExists o los ejemplos de modify.For a full example, see the deployIfNotExists example or the modify examples.

"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.The roleDefinitionIds property uses the full resource identifier and doesn't take the short roleName of the role. Para obtener el identificador del rol “Contributor” en su entorno, use el siguiente código:To get the ID for the 'Contributor' role in your environment, use the following code:

az role definition list --name 'Contributor'

Configurar manualmente la identidad administradaManually configure the managed identity

Al crear un trabajo mediante el portal, Azure Policy genera la identidad administrada y le concede los roles definidos en roleDefinitionIds.When creating an assignment using the portal, Azure Policy both generates the managed identity and grants it the roles defined in roleDefinitionIds. En las siguientes condiciones, los pasos para crear la identidad administrada y asignarle permisos se deben realizar manualmente:In the following conditions, steps to create the managed identity and assign it permissions must be done manually:

  • Al usar el SDK (por ejemplo, Azure PowerShell)While using the SDK (such as Azure PowerShell)
  • Cuando la plantilla modifica un recurso fuera del ámbito de asignaciónWhen a resource outside the assignment scope is modified by the template
  • Cuando la plantilla lee un recurso fuera del ámbito de asignaciónWhen a resource outside the assignment scope is read by the template

Nota

Azure PowerShell y .NET son el únicos SDK que actualmente admiten esta funcionalidad.Azure PowerShell and .NET are the only SDKs that currently support this capability.

Creación de una identidad administrada con PowerShellCreate managed identity with PowerShell

Para crear una identidad administrada durante la asignación de la directiva, debe definirse Location y debe usarse AssignIdentity.To create a managed identity during the assignment of the policy, Location must be defined and AssignIdentity used. 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.The following example gets the definition of the built-in policy Deploy SQL DB transparent data encryption, sets the target resource group, and then creates the assignment.

# 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.The $assignment variable now contains the principal ID of the managed identity along with the standard values returned when creating a policy assignment. Se puede acceder a ella a través de $assignment.Identity.PrincipalId.It can be accessed through $assignment.Identity.PrincipalId.

Conceder roles definidos con PowerShellGrant defined roles with 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.The new managed identity must complete replication through Azure Active Directory before it can be granted the needed roles. 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.Once replication is complete, the following example iterates the policy definition in $policyDef for the roleDefinitionIds and uses New-AzRoleAssignment to grant the new managed identity the 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 PortalGrant defined roles through portal

Hay dos maneras de conceder a la identidad administrada de una asignación los roles definidos mediante Azure Portal, mediante Access control (IAM) o editando la asignación de directiva o iniciativa y haciendo clic en Guardar.There are two ways to grant an assignment's managed identity the defined roles using the portal, by using Access control (IAM) or by editing the policy or initiative assignment and clicking Save.

Para agregar un rol a la identidad administrada de la asignación, siga estos pasos:To add a role to the assignment's managed identity, follow these steps:

  1. Inicie el servicio Azure Policy en Azure Portal. Para ello, haga clic en Todos los servicios y, a continuación, busque y seleccione Directiva.Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

  2. Seleccione Asignaciones en el panel izquierdo de la página de Azure Policy.Select Assignments on the left side of the Azure Policy page.

  3. Busque la asignación que tiene una identidad administrada y haga clic en el nombre.Locate the assignment that has a managed identity and click on the name.

  4. Busque la propiedad Id. de asignación en la página Editar.Find the Assignment ID property on the edit page. El identificador de asignación será algo como:The assignment ID will be something like:

    /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.The name of the managed identity is the last portion of the assignment resource ID, which is 2802056bfc094dfb95d4d7a5 in this example. Copie esta parte del identificador de recursos de asignación.Copy this portion of the assignment resource ID.

  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.Navigate to the resource or the resources parent container (resource group, subscription, management group) that needs the role definition manually added.

  6. Haga clic en el vínculo Control de acceso (IAM) en la página de recursos y haga clic en + Agregar asignación de rol en la parte superior de la página de control de acceso.Click the Access control (IAM) link in the resources page and click + Add role assignment at the top of the access control page.

  7. Seleccione el rol adecuado que coincide con un roleDefinitionIds de la definición de la directiva.Select the appropriate role that matches a roleDefinitionIds from the policy definition. Deje Asignar acceso a con el valor predeterminado de “Usuario de Azure AD, grupo o aplicación”.Leave Assign access to set to the default of 'Azure AD user, group, or application'. En el cuadro Seleccionar, pegue o escriba la parte del identificador del recurso de asignación que buscó anteriormente.In the Select box, paste or type the portion of the assignment resource ID located earlier. Una vez finalizada la búsqueda, haga clic en el objeto con el mismo nombre que el identificador seleccionado y haga clic en Guardar.Once the search completes, click the object with the same name to select ID and click Save.

Crear una tarea de correcciónCreate a remediation task

Creación de una tarea de corrección a través del portalCreate a remediation task through portal

Durante la evaluación, la asignación de directiva con los efectos deployIfNotExists o modify determina si hay recursos no conformes.During evaluation, the policy assignment with deployIfNotExists or modify effects determines if there are non-compliant resources. Cuando se encuentran los recursos no conformes, se proporcionan los detalles en la página Corrección.When non-compliant resources are found, the details are provided on the Remediation page. La opción para desencadenar una tarea de corrección está junto a la lista de directivas que tienen recursos no página.Along with the list of policies that have non-compliant resources is the option to trigger a remediation task. Esta opción crea una implementación a partir de la plantilla de deployIfNotExists o de las operaciones de modify.This option is what creates a deployment from the deployIfNotExists template or the modify operations.

Para crear un tarea de corrección, siga estos pasos:To create a remediation task, follow these steps:

  1. Inicie el servicio Azure Policy en Azure Portal. Para ello, haga clic en Todos los servicios y, a continuación, busque y seleccione Directiva.Launch the Azure Policy service in the Azure portal by clicking All services, then searching for and selecting Policy.

    Búsqueda de la directiva en todos los servicios

  2. Seleccione Corrección en el lado izquierdo de la página Azure Policy.Select Remediation on the left side of the Azure Policy page.

    Seleccione 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.All deployIfNotExists and modify policy assignments with non-compliant resources are included on the Policies to remediate tab and data table. Haga clic en una directiva con recursos que no son conformes.Click on a policy with resources that are non-compliant. Se abre la página Nueva tarea de corrección.The New remediation task page opens.

    Nota

    Una forma alternativa de abrir la página Tareas de corrección consiste en buscar y hacer clic en la directiva desde la página Cumplimiento y después hacer clic en el botón Crear tarea de corrección.An alternate way to open the remediation task page is to find and click on the policy from the Compliance page, then click the Create Remediation Task button.

  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).On the New remediation task page, filter the resources to remediate by using the Scope ellipses to pick child resources from where the policy is assigned (including down to the individual resource objects). Además, utilice la lista desplegable Ubicaciones para filtrar más los recursos.Additionally, use the Locations drop-down to further filter the resources. Solo los recursos enumerados en la tabla se corregirán.Only resources listed in the table will be remediated.

    Corrección: seleccione los recursos que quiere corregir

  5. Inicie la tarea de corrección cuando se hayan filtrado los recursos, para ello, haga clic en Corregir.Begin the remediation task once the resources have been filtered by clicking Remediate. Se abrirá la página de cumplimiento de directivas en la pestaña Tareas de corrección para mostrar el estado del progreso de las tareas.The policy compliance page will open to the Remediation tasks tab to show the state of the tasks progress.

    Corrección: progreso de las tareas de corrección

  6. Haga clic en el tarea de corrección en la página de cumplimiento de directiva para obtener detalles sobre el progreso.Click on the remediation task from the policy compliance page to get details about the progress. El filtro usado en la tarea se muestra junto con una lista de los recursos que se van a corregir.The filtering used for the task is shown along with a list of the resources being remediated.

  7. En la página Tarea de corrección, haga clic con el botón derecho en un recurso para ver el recurso o la implementación de la tarea de corrección.From the remediation task page, right-click on a resource to view either the remediation task's deployment or the resource. Al final de la fila, haga clic en Eventos relacionados para ver detalles, como un mensaje de error.At the end of the row, click on Related events to see details such as an error message.

    Corrección: menú contextual de tarea de recurso

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.Resources deployed through a remediation task are added to the Deployed Resources tab on the policy compliance page.

Creación de una tarea de corrección a través de la CLI de AzureCreate a remediation task through Azure CLI

Para crear una tarea de corrección con la CLI de Azure, use los comandos az policy remediation.To create a remediation task with Azure CLI, use the az policy remediation commands. Reemplace {subscriptionId} por el identificador de suscripción y {myAssignmentId} por el identificador de asignación de la directiva deployIfNotExists o modify.Replace {subscriptionId} with your subscription ID and {myAssignmentId} with your deployIfNotExists or modify policy assignment ID.

# 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.For other remediation commands and examples, see the az policy remediation commands.

Creación de una tarea de corrección a través de Azure PowerShellCreate a remediation task through Azure PowerShell

Para crear una tarea de corrección con Azure PowerShell, use los comandos Start-AzPolicyRemediation.To create a remediation task with Azure PowerShell, use the Start-AzPolicyRemediation commands. Reemplace {subscriptionId} por el identificador de suscripción y {myAssignmentId} por el identificador de asignación de la directiva deployIfNotExists o modify.Replace {subscriptionId} with your subscription ID and {myAssignmentId} with your deployIfNotExists or modify policy assignment ID.

# 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.For other remediation cmdlets and examples, see the Az.PolicyInsights module.

Pasos siguientesNext steps