Inicio rápido: Creación de una asignación de directiva para identificar recursos no compatibles mediante Azure PowerShell

El primer paso para entender el cumplimiento en Azure es identificar el estado de sus recursos. En este inicio rápido, va a crear una asignación de directiva para identificar recursos no compatibles mediante Azure PowerShell. La directiva se asigna a un grupo de recursos y audita las máquinas virtuales que no utilizan discos administrados. Después de crear la asignación de directiva, identifique las máquinas virtuales no compatibles.

Los módulos de Azure PowerShell se pueden usar para administrar recursos de Azure desde la línea de comandos o en scripts. En este artículo se explica cómo usar Azure PowerShell para crear una asignación de directiva.

Requisitos previos

  • Antes de comenzar, si no tiene una cuenta de Azure, cree una gratuita.
  • Azure PowerShell.
  • Visual Studio Code.
  • Microsoft.PolicyInsights tiene que estar registrado en la suscripción de Azure. Para registrar un proveedor de recursos, debe tener permiso para registrar proveedores de recursos. Este permiso se incluye en los roles Colaborador y Propietario.
  • Un grupo de recursos con al menos una máquina virtual que no usa discos administrados.

Conexión con Azure

Desde una sesión de terminal de Visual Studio Code, conéctese a Azure. Si tiene más de una suscripción, ejecute los comandos para establecer el contexto en la suscripción. Reemplace <subscriptionID> con la identificación de su suscripción de Azure.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

Registro del proveedor de recursos

Cuando se registra un proveedor de recursos, está disponible para usarlo en la suscripción de Azure.

Para comprobar si Microsoft.PolicyInsights está registrado, ejecute Get-AzResourceProvider. El proveedor de recursos contiene varios tipos de recursos. Si el resultado es NotRegistered, ejecute Register-AzResourceProvider:

 Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Para obtener más información, vaya a Get-AzResourceProvider y Register-AzResourceProvider.

Creación de asignación de directiva

Use los siguientes comandos para crear una nueva asignación de directiva para el grupo de recursos. En este ejemplo se usa un grupo de recursos existente que contiene una máquina virtual sin discos administrados. El grupo de recursos es el ámbito de la asignación de directiva. En este ejemplo se usa la definición de directiva integrada Auditoría de máquinas virtuales que no usan discos administrados.

Ejecute los siguientes comandos y reemplace <resourceGroupName> por el nombre del grupo de recursos:

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$definition = Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }

La variable $rg almacena las propiedades del grupo de recursos y la variable $definition almacena las propiedades de la definición de directiva. Las propiedades se usan en comandos posteriores.

Ejecute el siguiente comando para crear una asignación de directiva:

$policyparms = @{
Name = 'audit-vm-managed-disks'
DisplayName = 'Audit VM managed disks'
Scope = $rg.ResourceId
PolicyDefinition = $definition
Description = 'Az PowerShell policy assignment to resource group'
}

New-AzPolicyAssignment @policyparms

La variable $policyparms usa la expansión para crear valores de parámetro y mejorar la legibilidad. El comando New-AzPolicyAssignment usa los valores de parámetro definidos en la variable $policyparms.

  • Name crea el nombre de asignación de directiva utilizado en el ResourceId de la asignación.
  • DisplayName es el nombre de la asignación de directiva y está visible en Azure Portal.
  • Scope usa la propiedad $rg.ResourceId para asignar la directiva al grupo de recursos.
  • PolicyDefinition asigna la definición de directiva almacenada en la variable $definition.
  • Description se puede usar para agregar contexto sobre la asignación de directiva.

Los resultados de la asignación de directiva se asemejan al ejemplo siguiente:

Name               : audit-vm-managed-disks
ResourceId         : /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName       : audit-vm-managed-disks
ResourceGroupName  : {resourceGroupName}
ResourceType       : Microsoft.Authorization/policyAssignments
SubscriptionId     : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties         : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties

Para más información, consulte New-AzPolicyAssignment.

Si desea volver a mostrar la información de asignación de directiva, ejecute el siguiente comando:

Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Identificación de recursos sin compatibilidad

El estado de cumplimiento de una nueva asignación de directiva tarda unos minutos en activarse y proporcionar resultados sobre el estado de la directiva.

Utilice el siguiente comando para identificar los recursos que no son compatibles con la asignación de directiva que ha creado:

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

La variable $complianceparms usa la expansión para crear valores de parámetro usados en el comando Get-AzPolicyState.

  • ResourceGroupName obtiene el nombre del grupo de recursos de la propiedad $rg.ResourceGroupName.
  • PolicyAssignmentName especifica el nombre utilizado cuando se creó la asignación de directiva.
  • Filter usa una expresión para buscar recursos que no son compatibles con la asignación de directiva.

Los resultados deben tener una apariencia similar al ejemplo siguiente y ComplianceState muestra NonCompliant:

Timestamp                : 2/14/2024 18:25:37
ResourceId               : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId       : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId       : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant              : False
SubscriptionId           : {subscriptionId}
ResourceType             : Microsoft.Compute/virtualMachines
ResourceLocation         : {location}
ResourceGroup            : {resourceGroupName}
ResourceTags             : tbd
PolicyAssignmentName     : audit-vm-managed-disks
PolicyAssignmentOwner    : tbd
PolicyAssignmentScope    : /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
PolicyDefinitionName     : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction   : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds       : {managementGroupId}
ComplianceState          : NonCompliant
AdditionalProperties     : {[complianceReasonCode, ]}

Para más información, consulte Get-AzPolicyState.

Limpieza de recursos

Para eliminar la asignación de directivas, ejecute el siguiente comando:

Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Para cerrar la sesión de Azure PowerShell:

Disconnect-AzAccount

Pasos siguientes

En este inicio rápido, se asigna una definición de directiva para identificar los recursos incompatibles en el entorno de Azure.

Para obtener más información sobre cómo asignar directivas que validen el cumplimiento de los recursos, continúe con el tutorial.