Inicio rápido: Creación de una asignación de directiva para identificar recursos no compatibles mediante la plantilla de ARM
En este inicio rápido, usará una plantilla de Azure Resource Manager (plantilla de ARM) para crear una asignación de directiva que valide el cumplimiento del recurso 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.
Una plantilla de Azure Resource Manager es un archivo de notación de objetos JavaScript (JSON) que define tanto la infraestructura como la configuración de un proyecto. La plantilla usa sintaxis declarativa. Se describe la implementación deseada sin escribir la secuencia de comandos de programación para crear la implementación.
Si su entorno cumple los requisitos previos y está familiarizado con el uso de plantillas de Resource Manager, seleccione el botón Implementar en Azure. La plantilla se abre en Azure Portal.
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 o la CLI de Azure.
- Visual Studio Code y las herramientas de Azure Resource Manager (ARM).
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 de la plantilla
La plantilla de ARM 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 la siguiente plantilla de ARM como policy-assignment.json.
- Abra Visual Studio Code y seleccione Archivo>Nuevo archivo.
- Copie y pegue la plantilla de ARM en Visual Studio Code.
- Seleccione Archivo>Guardar y use el nombre de archivo policy-assignment.json.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"policyAssignmentName": {
"type": "string",
"defaultValue": "audit-vm-managed-disks",
"metadata": {
"description": "Policy assignment name used in assignment's resource ID"
}
},
"policyDefinitionID": {
"type": "string",
"defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
"metadata": {
"description": "Policy definition ID"
}
},
"policyDisplayName": {
"type": "string",
"defaultValue": "Audit VM managed disks",
"metadata": {
"description": "Display name for Azure portal"
}
}
},
"resources": [
{
"type": "Microsoft.Authorization/policyAssignments",
"apiVersion": "2023-04-01",
"name": "[parameters('policyAssignmentName')]",
"properties": {
"policyDefinitionId": "[parameters('policyDefinitionID')]",
"description": "Policy assignment to resource group scope created with ARM template",
"displayName": "[parameters('policyDisplayName')]",
"nonComplianceMessages": [
{
"message": "Virtual machines should use managed disks"
}
]
}
}
],
"outputs": {
"assignmentId": {
"type": "string",
"value": "[resourceId('Microsoft.Authorization/policyAssignments', parameters('policyAssignmentName'))]"
}
}
}
El tipo de recurso definido en la plantilla de ARM 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 plantilla de ARM:
- Para obtener más ejemplos de plantillas de ARM, 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 plantillas de ARM, vaya a la documentación de plantillas de ARM.
- Para obtener información sobre las implementaciones de nivel de suscripción, vaya a Implementaciones de suscripciones con plantillas de ARM.
Implementación de la plantilla de ARM
Puede implementar la plantilla de ARM 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.json'
}
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 de la plantilla de ARM 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/26/2024 19:02:56
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.