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.
Al asignar una definición de iniciativa o directiva integrada, es opcional hacer referencia a una versión. Las asignaciones de directivas de definiciones integradas de forma predeterminada a la versión más reciente y heredan automáticamente los cambios de versión secundaria a menos que se especifique lo contrario.
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 { $_.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 elResourceId
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.