Share via


Inicio rápido: Creación de una asignación de directiva para identificar recursos no compatibles mediante la API REST

El primer paso para entender el cumplimiento en Azure es identificar el estado de sus recursos. En este inicio rápido, creará una asignación de directiva para identificar recursos no compatibles mediante la API de REST. 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.

En esta guía se usa la API REST para crear una asignación de directiva e identificar recursos no compatibles en el entorno de Azure. Los ejemplos de este artículo usan PowerShell y los comandos az rest de la CLI de Azure. También puede ejecutar loscomandos az rest desde un shell de Bash, como Git Bash.

Requisitos previos

  • Antes de comenzar, si no tiene una cuenta de Azure, cree una gratuita.
  • Versión más reciente de PowerShello un shell de Bash como Git Bash.
  • Versión más reciente de la CLI de Azure.
  • Visual Studio Code.
  • Un grupo de recursos con al menos una máquina virtual que no usa discos administrados.

Revisión de la sintaxis de la API REST

Hay dos elementos para ejecutar comandos de la API de REST: el URI de la API de REST y el cuerpo de la solicitud. Para obtener información, vaya a Asignaciones de directiva: crear.

En el ejemplo siguiente se muestra la sintaxis del URI de la API de REST para crear una definición de directiva.

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
  • scope: un ámbito determina qué recursos o grupo de recursos se aplica la asignación de directiva. Podría abarcar desde un grupo de administración a un recurso individual. Reemplace {scope} por uno de los siguientes patrones:
    • Grupo de administración: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Suscripción: /subscriptions/{subscriptionId}
    • Grupos de recursos: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Recurso: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}
  • policyAssignmentName: crea el nombre de asignación de directiva para la asignación. El nombre se incluye en la propiedad policyAssignmentId de la asignación de directiva.

En el ejemplo siguiente se muestra el código JSON para crear un archivo de cuerpo de solicitud.

{
  "properties": {
    "displayName": "",
    "description": "",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
    "nonComplianceMessages": [
      {
        "message": ""
      }
    ]
  }
}
  • displayName: nombre para mostrar de la asignación de directiva.
  • description: se puede usar para agregar contexto sobre la asignación de directiva.
  • policyDefinitionId: identificador de definición de directiva que se va a crear la asignación.
  • nonComplianceMessages: establezca el mensaje que se usará cuando se evalúa un recurso como no compatible. Para obtener más información, consulte la estructura de asignación de mensajes de no cumplimiento.

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.

az login

# Run these commands if you have multiple subscriptions
az account list --output table
az account set --subscription <subscriptionID>

Use az login incluso si usa PowerShell porque los ejemplos usan la CLI de Azure comandos az rest.

Creación de una asignación de directiva

En este ejemplo, creará una asignación de directiva y asignará las Máquinas virtuales de auditoría de que no usan discos administrados definición.

Se necesita un cuerpo de solicitud para crear la asignación. Guarde el siguiente JSON en un archivo denominado request-body.json.

{
  "properties": {
    "displayName": "Audit VM managed disks",
    "description": "Policy assignment to resource group scope created with REST API",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
    "nonComplianceMessages": [
      {
        "message": "Virtual machines should use managed disks"
      }
    ]
  }
}

Para crear la asignación de directiva en un ámbito de grupo de recursos existente, use el siguiente URI de la API de REST con un archivo para el cuerpo de la solicitud. Reemplace {subscriptionId} y {resourceGroupName} con sus valores. El comando muestra la salida JSON en el shell.

az rest --method put --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01 --body `@request-body.json

En PowerShell, se necesita el verso (`) para escapar del at sign (@) para especificar un nombre de archivo. En un shell de Bash como Git Bash, omita la barra diagonal inversa.

Para obtener información, vaya a Asignaciones de directiva: crear.

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. La API de REST se usa para mostrar los recursos no compatibles para esta asignación de directiva y la salida está en JSON.

Para identificar recursos no compatibles, ejecute el siguiente comando. Reemplace {subscriptionId} y {resourceGroupName} por los valores usados al crear la asignación de directiva.

az rest --method post --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01 --uri-parameters `$filter="complianceState eq 'NonCompliant' and PolicyAssignmentName eq 'audit-vm-managed-disks'"

Las filter consultas de recursos que se evalúan como no compatibles con la definición de directiva denominada audit-vm-managed-disks que creó con la asignación de directiva. De nuevo, observe que la barra inversa se usa para escapar del signo de dólar ($) en el filtro. Para un cliente de Bash, una barra diagonal inversa (\) es un carácter de escape común.

Los resultados deben tener una apariencia similar al ejemplo siguiente:

{
  "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
  "@odata.count": 1,
  "@odata.nextLink": null,
  "value": [
    {
      "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
      "@odata.id": null,
      "complianceReasonCode": "",
      "complianceState": "NonCompliant",
      "effectiveParameters": "",
      "isCompliant": false,
      "managementGroupIds": "",
      "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks",
      "policyAssignmentName": "audit-vm-managed-disks",
      "policyAssignmentOwner": "tbd",
      "policyAssignmentParameters": "",
      "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
      "policyAssignmentVersion": "",
      "policyDefinitionAction": "audit",
      "policyDefinitionCategory": "tbd",
      "policyDefinitionGroupNames": [
        ""
      ],
      "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionName": "06a78e20-9358-41c9-923c-fb736d382a4d",
      "policyDefinitionReferenceId": "",
      "policyDefinitionVersion": "1.0.0",
      "policySetDefinitionCategory": "",
      "policySetDefinitionId": "",
      "policySetDefinitionName": "",
      "policySetDefinitionOwner": "",
      "policySetDefinitionParameters": "",
      "policySetDefinitionVersion": "",
      "resourceGroup": "{resourceGroupName}",
      "resourceId": "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmName}>",
      "resourceLocation": "westus3",
      "resourceTags": "tbd",
      "resourceType": "Microsoft.Compute/virtualMachines",
      "subscriptionId": "{subscriptionId}",
      "timestamp": "2024-03-26T02:19:28.3720191Z"
    }
  ]
}

Para obtener más información, vaya a Estados de directiva: enumerar los resultados de la consulta para el grupo de recursos.

Limpieza de recursos

Para quitar la asignación de directiva, use el siguiente comando. Reemplace {subscriptionId} y {resourceGroupName} por los valores usados al crear la asignación de directiva. El comando muestra la salida JSON en el shell.

az rest --method delete --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01

Puede comprobar que la asignación de directiva se eliminó con el comando siguiente. Se muestra un mensaje en el shell.

az rest --method get --uri https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks?api-version=2023-04-01
The policy assignment 'audit-vm-managed-disks' is not found.

Para obtener más información, vaya a Asignaciones de directiva: Eliminar y asignaciones de directivas: Obtener.

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.