Snabbstart: Skapa en principtilldelning för att identifiera icke-kompatibla resurser med hjälp av Python

Det första steget mot att förstå kompatibilitet i Azure är att identifiera dina resursers status. I den här snabbstarten skapar du en principtilldelning som identifierar virtuella datorer som inte använder hanterade diskar. När du är klar identifierar du virtuella datorer som inte är kompatibla.

Python-biblioteket används för att hantera Azure-resurser från kommandoraden eller i skript. Den här guiden beskriver hur du använder Python-biblioteket för att skapa en principtilldelning.

Förutsättningar

Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

Använda Azure Cloud Shell

Azure är värd för Azure Cloud Shell, en interaktiv gränssnittsmiljö som du kan använda via webbläsaren. Du kan använda antingen Bash eller PowerShell med Cloud Shell för att arbeta med Azure-tjänster. Du kan använda förinstallerade Cloud Shell-kommandon för att köra koden i den här artikeln utan att behöva installera något i din lokala miljö.

Så här startar du Azure Cloud Shell:

Alternativ Exempel/länk
Välj Prova i det övre högra hörnet av ett kodblock. Om du väljer Prova kopieras koden inte automatiskt till Cloud Shell. Exempel på Prova för Azure Cloud Shell
Gå till https://shell.azure.com eller Välj knappen Starta Cloud Shell för att öppna Cloud Shell i webbläsaren. Starta Cloud Shell i ett nytt fönster
Välj knappen Cloud Shell på menyn längst upp till höger i Azure-portalen. Cloud Shell-knappen i Azure Portal

Så här kör du koden i den här artikeln i Azure Cloud Shell:

  1. Starta Cloud Shell.

  2. Kopiera koden genom att klicka på knappen Kopiera på ett kodblock.

  3. Klistra in koden i Cloud Shell-sessionen genom att välja Ctrl+Skift+V på Windows och Linux eller genom att välja Cmd+Skift+V på macOS.

  4. Välj Retur för att köra koden.

Lägga till principbiblioteket

Om du vill aktivera Python för Azure Policy måste biblioteket läggas till. Det här biblioteket fungerar överallt där Python kan användas, inklusive bash på Windows 10 eller lokalt installerade.

  1. Kontrollera att den senaste Python-versionen är installerad (minst 3.8). Om det inte har installerats än laddar du ned det på Python.org.

  2. Kontrollera att den senaste versionen av Azure CLI är installerad (minst 2.5.1). Om det inte har installerats än kan du gå till Installera Azure CLI.

    Anteckning

    Azure CLI krävs för att Python ska kunna använda CLI-baserad autentisering i följande exempel. Information om andra alternativ finns i Autentisera med hjälp av Azure-hanteringsbiblioteken för Python.

  3. Autentisera via Azure CLI.

    az login
    
  4. I valfri Python-miljö installerar du de bibliotek som krävs för 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
    

    Anteckning

    Om Python är installerat för alla användare måste dessa kommandon köras från en upphöjd konsol.

  5. Kontrollera att biblioteken har installerats. azure-mgmt-policyinsights bör vara 0.5.0 eller högre, bör vara azure-mgmt-resource 9.0.0 eller högre och ska vara azure-cli-core 2.5.0 eller högre.

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

Skapa en principtilldelning

I den här snabbstarten skapar du en principtilldelning och tilldelar definitionen Granska virtuella datorer som inte använder hanterade diskar ( 06a78e20-9358-41c9-923c-fb736d382a4d ). Den här principdefinitionen identifierar resurser som inte uppfyller villkoren i principdefinitionen.

Kör följande kod för att skapa en ny principtilldelning:

# 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)

Föregående kommandon använder följande information:

Tilldelningsinformation:

  • subId – din prenumeration. Krävs för autentisering. Ersätt {subId} med din prenumeration.
  • display_name – Visningsnamn för principtilldelningen. I det här fallet använder du Tilldelningen Granska virtuella datorer utan hanterade diskar.
  • policy_definition_id – Principdefinitionssökvägen som du använder för att skapa tilldelningen. I det här fallet är det ID:t för principdefinitionen Granska virtuella datorer som inte använder hanterade diskar. I det här exemplet är principdefinitionen inbyggd och sökvägen innehåller inte information om hanteringsgrupp eller prenumeration.
  • scope – Ett omfång avgör vilka resurser eller gruppering av resurser som principtilldelningen tillämpas på. Det kan vara allt från en hanteringsgrupp till en enskild resurs. Se till att {scope} ersätta med något av följande mönster:
    • Hanteringsgrupp: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Prenumeration: /subscriptions/{subscriptionId}
    • Resursgrupp: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Resurs: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]
  • beskrivning – En djupare förklaring av vad principen gör eller varför den har tilldelats till det här omfånget.

Skapa tilldelning:

  • Omfång – Det här omfånget avgör var principtilldelningen sparas. Det omfång som anges i tilldelningsinformationen måste finnas i det här omfånget.
  • Namn – det faktiska namnet på tilldelningen. I det här exemplet användes audit-vm-manageddisks.
  • Principtilldelning – Python PolicyAssignment-objektet som skapades i föregående steg.

Nu är du redo att identifiera icke-kompatibla resurser för att förstå kompatibilitetstillståndet för din miljö.

Identifiera icke-kompatibla resurser

Använd följande information för att identifiera resurser som inte är kompatibla med principtilldelningen som du skapade. Kör följande kod:

# 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)

Ersätt {subId} med den prenumeration som du vill visa kompatibilitetsresultaten för den här principtilldelningen. En lista över andra omfång och sätt att sammanfatta data finns i Principtillståndsmetoder.

Ditt resultat liknar följande exempel:

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

Resultatet matchar det du ser på fliken Resursefterlevnad för en principtilldelning i Azure Portal vyn.

Rensa resurser

Om du vill ta bort den skapade tilldelningen använder du följande kommando:

# 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)

Ersätt {subId} med din prenumeration och med samma {scope} omfång som du använde för att skapa principtilldelningen.

Nästa steg

I den här snabbstarten har du tilldelat en principdefinition för att identifiera icke-kompatibla resurser i Azure-miljön.

Mer information om hur du tilldelar principdefinitioner för att verifiera att nya resurser är kompatibla finns i självstudien för: