Creación de una asignación de directiva para identificar recursos no compatibles mediante un archivo Bicep
En este inicio rápido, usará un archivo de Bicep para crear una asignación de directiva que valide el cumplimiento de los recursos con una directiva de Azure. 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.
Bicep es un lenguaje específico de dominio (DSL) que usa una sintaxis declarativa para implementar recursos de Azure. Brinda sintaxis concisa, seguridad de tipos confiable y compatibilidad con la reutilización de código. Bicep ofrece la mejor experiencia de creación para sus soluciones de infraestructura como código en Azure.
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.
- Bicep.
- Azure PowerShell o la CLI de Azure.
- Visual Studio Code y la extensión de Bicep para Visual Studio Code.
Microsoft.PolicyInsights
debe 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.
Revisión del archivo de Bicep
El archivo de Bicep crea una asignación de directiva para un ámbito de grupo de recursos y asigna la definición de directiva integrada Auditar máquinas virtuales que no usan discos administrados.
Cree el siguiente archivo de Bicep como policy-assignment.bicep.
- Abra Visual Studio Code y seleccione Archivo>Nuevo archivo.
- Copie y pegue el archivo de Bicep en Visual Studio Code.
- Seleccione Archivo>Guardar y use el nombre de archivo policy-assignment.bicep.
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'
resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
name: policyAssignmentName
scope: resourceGroup()
properties: {
policyDefinitionId: policyDefinitionID
description: 'Policy assignment to resource group scope created with Bicep file'
displayName: policyDisplayName
nonComplianceMessages: [
{
message: 'Virtual machines should use managed disks'
}
]
}
}
output assignmentId string = assignment.id
El tipo de recurso definido en el archivo de Bicep es Microsoft.Authorization/policyAssignments.
La plantilla usa tres parámetros para implementar la asignación de directiva:
policyAssignmentName
crea la asignación de directiva denominada audit-vm-managed-disks.policyDefinitionID
usa el identificador de la definición de directiva integrada. Como referencia, los comandos para obtener el identificador se encuentran en la sección para implementar la plantilla.policyDisplayName
crea un nombre para mostrar que está visible en Azure Portal.
Para obtener más información sobre los archivos de Bicep:
- Para encontrar más ejemplos de Bicep, vaya a Examinar ejemplos de código.
- Para más información sobre las referencias de plantilla para implementaciones, vaya a Referencia de plantillas de Azure.
- Para obtener información sobre cómo desarrollar archivos de Bicep, vaya a la documentación de Bicep.
- Para obtener información sobre las implementaciones de nivel de suscripción, vaya a Implementaciones de suscripciones con archivos de Bicep.
Implementación del archivo de Bicep
Puede implementar el archivo de Bicep con Azure PowerShell o la CLI de 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>
Puede comprobar si Microsoft.PolicyInsights
está registrado. Si no es así, puede ejecutar un comando para registrar el proveedor de recursos.
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.
Los siguientes comandos muestran el valor del parámetro policyDefinitionID
:
(Get-AzPolicyDefinition |
Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId
Los siguientes comandos implementan la definición de directiva en el grupo de recursos. Reemplace <resourceGroupName>
por el nombre del grupo de recursos:
$rg = Get-AzResourceGroup -Name '<resourceGroupName>'
$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.bicep'
}
New-AzResourceGroupDeployment @deployparms
La variable $rg
almacena las propiedades del grupo de recursos. La variable $deployparms
usa la expansión para crear valores de parámetro y mejorar la legibilidad. El comando New-AzResourceGroupDeployment
usa los valores de parámetro definidos en la variable $deployparms
.
Name
es el nombre de implementación que se muestra en la salida y en Azure para las implementaciones del grupo de recursos.ResourceGroupName
usa la propiedad$rg.ResourceGroupName
para obtener el nombre del grupo de recursos donde se asigna la directiva.TemplateFile
especifica el nombre y la ubicación del archivo de Bicep en el equipo local.
Puede comprobar la implementación de la asignación de directivas con el comando siguiente:
El comando usa la propiedad $rg.ResourceId
para obtener el id. del grupo de recursos.
Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
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 obtener más información, vaya a Get-AzPolicyAssignment.
Identificación de recursos sin compatibilidad
Una vez implementada la asignación de directiva, las máquinas virtuales que se implementan en el grupo de recursos se auditan para cumplir la directiva de disco administrado.
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.
$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}
Get-AzPolicyState @complianceparms
La variable $complianceparms
crea valores de parámetro que se usan 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/20/2024 18:55:45
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
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.