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. | ![]() |
| Gå till https://shell.azure.com eller Välj knappen Starta Cloud Shell för att öppna Cloud Shell i webbläsaren. | ![]() |
| Välj knappen Cloud Shell på menyn längst upp till höger i Azure-portalen. | ![]() |
Så här kör du koden i den här artikeln i Azure Cloud Shell:
Starta Cloud Shell.
Kopiera koden genom att klicka på knappen Kopiera på ett kodblock.
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.
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.
Kontrollera att den senaste Python-versionen är installerad (minst 3.8). Om det inte har installerats än laddar du ned det på Python.org.
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.
Autentisera via Azure CLI.
az loginI 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.identityAnteckning
Om Python är installerat för alla användare måste dessa kommandon köras från en upphöjd konsol.
Kontrollera att biblioteken har installerats.
azure-mgmt-policyinsightsbör vara 0.5.0 eller högre, bör varaazure-mgmt-resource9.0.0 eller högre och ska varaazure-cli-core2.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}/]
- Hanteringsgrupp:
- 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:


