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

El primer paso para entender el cumplimiento en Azure es identificar el estado de sus recursos. En esta guía de inicio rápido, se crea una asignación de directiva para identificar máquinas virtuales que no usan discos administrados. Cuando haya finalizado, podrá identificar máquinas virtuales que no estén conformes.

La biblioteca Python se usa para administrar los recursos de Azure desde la línea de comandos o en scripts. En esta guía se explica cómo usar la biblioteca Python para crear una asignación de directiva.

Requisitos previos

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Uso de Azure Cloud Shell

En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.

Para iniciar Azure Cloud Shell:

Opción Ejemplo o vínculo
Seleccione Pruébelo en la esquina superior derecha de un bloque de código. Solo con seleccionar Pruébelo no se copia automáticamente el código en Cloud Shell. Ejemplo de Probarlo para Azure Cloud Shell
Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador. Iniciar Cloud Shell en una nueva ventana
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal. Botón Cloud Shell en Azure Portal

Para ejecutar el código de este artículo en Azure Cloud Shell:

  1. Inicie Cloud Shell.

  2. Seleccione el botón Copiar de un bloque de código para copiar el código.

  3. Pegue el código en la sesión de Cloud Shell. Para ello, seleccione Ctrl+Mayús+V en Windows y Linux, o bien seleccione Cmd+Mayús+V en macOS.

  4. Seleccione Entrar para ejecutar el código.

Incorporación de la biblioteca de directiva

Para permitir que Python funcione con Azure Policy, se debe agregar la biblioteca. Esta biblioteca funciona siempre que se pueda usar Python, lo que incluye bash en Windows 10 o instalado localmente.

  1. Compruebe que está instalada la versión más reciente de Python (al menos la 3.8). Si aún no está instalada, descárguela en Python.org.

  2. Compruebe que está instalada la versión más reciente de la CLI de Azure (al menos la 2.5.1). Si aún no está instalada, consulte Instalación de la CLI de Azure.

    Nota

    La CLI de Azure es necesaria para que Python pueda usar la autenticación basada en la CLI en los ejemplos siguientes. Para información sobre otras opciones, consulte Autenticación mediante las bibliotecas de administración de Python.

  3. Autentíquese mediante la CLI de Azure.

    az login
    
  4. En el entorno de Python que elija, instale las bibliotecas necesarias para Azure Policy:

    # Add the Python library for Python
    pip install azure-mgmt-policyinsights
    
    # Add the Resources library for Python
    pip install azure-mgmt-resource
    
    # Add the CLI Core library for Python for authentication (development only!)
    pip install azure-cli-core
    
    # Add the Azure identity library for Python
    pip install azure.identity
    

    Nota

    Si Python está instalado en todos los usuarios, estos comando deben ejecutarse desde una consola con privilegios elevados.

  5. Compruebe que se han instalado las bibliotecas. azure-mgmt-policyinsights debe tener la versión 0.5.0 o posterior, azure-mgmt-resource debe tener la versión 9.0.0 o posterior, y azure-cli-core debe tener la versión 2.5.0 o posterior.

    # Check each installed library
    pip show azure-mgmt-policyinsights azure-mgmt-resource azure-cli-core azure.identity
    

Creación de una asignación de directiva

En este inicio rápido, creará una asignación de directiva y asignará la definición Auditoría de máquinas virtuales que no usan discos administrados (06a78e20-9358-41c9-923c-fb736d382a4d). Esta definición de directiva identifica los recursos que no cumplen las condiciones establecidas en la definición de directiva.

Ejecute el código siguiente para crear una nueva asignación de directiva:

# Import specific methods and models from other libraries
from azure.mgmt.resource.policy import PolicyClient
from azure.mgmt.resource.policy.models import PolicyAssignment, Identity, UserAssignedIdentitiesValue, PolicyAssignmentUpdate
from azure.identity import AzureCliCredential

# Set subscription
subId = "{subId}"
assignmentLocation = "westus2"

# Get your credentials from Azure CLI (development only!) and get your subscription list
credential = AzureCliCredential()
policyClient = PolicyClient(credential, subId, base_url=none)

# Create details for the assignment
policyAssignmentIdentity = Identity(type="SystemAssigned")
policyAssignmentDetails = PolicyAssignment(display_name="Audit VMs without managed disks Assignment", policy_definition_id="/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d", description="Shows all virtual machines not using managed disks", identity=policyAssignmentIdentity, location=assignmentLocation)

# Create new policy assignment
policyAssignment = policyClient.policy_assignments.create("{scope}", "audit-vm-manageddisks", policyAssignmentDetails)

# Show results
print(policyAssignment)

Los comandos anteriores usan la siguiente información:

Detalles de la asignación:

  • subId: su suscripción. Necesario para la autenticación. Reemplace {subId} con la suscripción.
  • display_name: nombre para mostrar de la asignación de directiva. En este caso, usará Auditoría de máquinas virtuales sin discos administrados.
  • policy_definition_id: la ruta de acceso de la definición de directiva, según la opción utilizada para crear la asignación. En este caso, es el identificador de la definición de directiva Auditoría de máquinas virtuales que no usan discos administrados. En este ejemplo, la definición de directiva está integrada y la ruta de acceso no incluye la información del grupo de administración ni de la suscripción.
  • scope: un ámbito determina en qué recursos o agrupación de recursos se aplica la asignación de directiva. Podría abarcar desde un grupo de administración a un recurso individual. Asegúrese de reemplazar {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}/]
  • description: una explicación más detallada de lo que hace la directiva o de por qué se asigna a este ámbito.

Creación de asignaciones:

  • Ámbito: este ámbito determina dónde se guarda la asignación de directiva. El ámbito establecido en los detalles de la asignación debe existir dentro de este ámbito.
  • Nombre: el nombre real de la asignación. En este ejemplo se usa audit-vm-manageddisks.
  • Asignación de directiva: el objeto Python PolicyAssignment creado en el paso anterior.

Ahora ya está listo para identificar los recursos no compatibles a fin de conocer el estado de cumplimiento de su entorno.

Identificación de recursos sin compatibilidad

Utilice la siguiente información para identificar los recursos que no son compatibles con la asignación de directiva que ha creado. Ejecute el código siguiente:

# Import specific methods and models from other libraries
from azure.mgmt.policyinsights._policy_insights_client import PolicyInsightsClient
from azure.mgmt.policyinsights.models import QueryOptions
from azure.identity import AzureCliCredential

# Set subscription
subId = "{subId}"

# Get your credentials from Azure CLI (development only!) and get your subscription list
credential = AzureCliCredential()
policyClient = PolicyInsightsClient(credential, subId, base_url=none)

# Set the query options
queryOptions = QueryOptions(filter="IsCompliant eq false and PolicyAssignmentId eq 'audit-vm-manageddisks'",apply="groupby((ResourceId))")

# Fetch 'latest' results for the subscription
results = policyInsightsClient.policy_states.list_query_results_for_subscription(policy_states_resource="latest", subscription_id=subId, query_options=queryOptions)

# Show results
print(results)

Reemplace {subId} por la suscripción en la que desea ver los resultados de cumplimiento de esta asignación de directiva. Para obtener una lista de otros ámbitos y maneras de resumir los datos, consulte Métodos de estado de las directivas.

Los resultados deben tener una apariencia similar al ejemplo siguiente:

{
    'additional_properties': {
        '@odata.nextLink': None
    },
    'odatacontext': 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest',
    'odatacount': 12,
    'value': [{data}]
}

Los resultados coinciden con lo que ve en la pestaña de cumplimiento de recursos de una asignación de directiva en la vista de Azure Portal.

Limpieza de recursos

Para quitar la asignación creada, ejecute el siguiente comando:

# Import specific methods and models from other libraries
from azure.mgmt.resource.policy import PolicyClient
from azure.identity import AzureCliCredential

# Set subscription
subId = "{subId}"

# Get your credentials from Azure CLI (development only!) and get your subscription list
credential = AzureCliCredential()
policyClient = PolicyClient(credential, subId, base_url=none)

# Delete the policy assignment
policyAssignment = policyClient.policy_assignments.delete("{scope}", "audit-vm-manageddisks")

# Show results
print(policyAssignment)

Reemplace {subId} con la suscripción y {scope} con el mismo ámbito que usó para crear la asignación de directivas.

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 más información sobre la asignación de definiciones de directivas para asegurarse de la compatibilidad de los nuevos recursos, continúe con el tutorial para: