Dela via


Snabbstart: Skapa en principtilldelning för att identifiera icke-kompatibla resurser med REST API

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 för att identifiera icke-kompatibla resurser med hjälp av REST API. Principen tilldelas till en resursgrupp och granskar virtuella datorer som inte använder hanterade diskar. När du har skapat principtilldelningen identifierar du icke-kompatibla virtuella datorer.

Den här guiden använder REST API för att skapa en principtilldelning och för att identifiera icke-kompatibla resurser i din Azure-miljö. Exemplen i den här artikeln använder PowerShell och Azure CLI-kommandona az rest . Du kan också köra az rest kommandona från ett Bash-gränssnitt som Git Bash.

När du tilldelar en inbyggd princip eller initiativdefinition är det valfritt att referera till en version. Principtilldelningar av inbyggda definitioner är standard för den senaste versionen och ärver automatiskt delversionsändringar om inget annat anges.

Förutsättningar

Granska REST API-syntaxen

Det finns två element för att köra REST API-kommandon: REST API-URI:n och begärandetexten. Mer information finns i Principtilldelningar – Skapa.

I följande exempel visas URI-syntaxen för REST API för att skapa en principdefinition.

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
  • scope: Ett omfång avgör vilka resurser eller grupper av resurser som principtilldelningen tillämpas på. Det kan sträcka sig från en hanteringsgrupp till en enskild resurs. Ersätt {scope} 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}/]{resourceType}/{resourceName}
  • policyAssignmentName: Skapar namnet på principtilldelningen för tilldelningen. Namnet ingår i principtilldelningens policyAssignmentId egenskap.

Följande exempel är JSON för att skapa en brödtextfil för begäran.

{
  "properties": {
    "displayName": "",
    "description": "",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
    "nonComplianceMessages": [
      {
        "message": ""
      }
    ]
  }
}
  • displayName: Visningsnamn för principtilldelningen.
  • description: Kan användas för att lägga till kontext om principtilldelningen.
  • policyDefinitionId: Det principdefinitions-ID som du vill skapa tilldelningen med.
  • nonComplianceMessages: Ställ in meddelandet som ska användas när en resurs utvärderas som icke-kompatibel. Mer information finns i tilldelning av icke-efterlevnadsmeddelanden.

Ansluta till Azure

Anslut till Azure från en terminalsession i Visual Studio Code. Om du har fler än en prenumeration kör du kommandona för att ange kontext till din prenumeration. Ersätt <subscriptionID> med ditt Azure-prenumerations-ID.

az login

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

Använd az login även om du använder PowerShell eftersom exemplen använder Azure CLI az rest-kommandon .

Skapa en principtilldelning

I det här exemplet skapar du en principtilldelning och tilldelar definitionen Granska virtuella datorer som inte använder hanterade diskar .

En begärandetext krävs för att skapa tilldelningen. Spara följande JSON i en fil med namnet 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"
      }
    ]
  }
}

Om du vill skapa principtilldelningen i ett befintligt resursgruppsomfång använder du följande REST API-URI med en fil för begärandetexten. Ersätt {subscriptionId} och {resourceGroupName} med dina värden. Kommandot visar JSON-utdata i gränssnittet.

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

I PowerShell krävs backtick (`) för att komma undan at sign (@) för att ange ett filnamn. I ett Bash-gränssnitt som Git Bash utelämnar du backticken.

Mer information finns i Principtilldelningar – Skapa.

Identifiera icke-kompatibla resurser

Efterlevnadstillståndet för en ny principtilldelning tar några minuter att bli aktiv och ge resultat om principens tillstånd. Du använder REST API för att visa de icke-kompatibla resurserna för den här principtilldelningen och utdata finns i JSON.

Kör följande kommando för att identifiera icke-kompatibla resurser. Ersätt {subscriptionId} och {resourceGroupName} med dina värden som användes när du skapade principtilldelningen.

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'"

Frågor filter om resurser som utvärderas som icke-kompatibla med principdefinitionen med namnet audit-vm-managed-disks som du skapade med principtilldelningen. Observera återigen att backtick används för att undkomma dollartecknet ($) i filtret. För en Bash-klient är ett omvänt snedstreck (\) ett vanligt escape-tecken.

Ditt resultat liknar följande exempel:

{
  "@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"
    }
  ]
}

Mer information finns i Principtillstånd – Lista frågeresultat för resursgrupp.

Rensa resurser

Om du vill ta bort principtilldelningen använder du följande kommando. Ersätt {subscriptionId} och {resourceGroupName} med dina värden som användes när du skapade principtilldelningen. Kommandot visar JSON-utdata i gränssnittet.

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

Du kan kontrollera att principtilldelningen har tagits bort med följande kommando. Ett meddelande visas i gränssnittet.

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.

Mer information finns i Principtilldelningar – Ta bort och Principtilldelningar – Hämta.

Nästa steg

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

Om du vill veta mer om hur du tilldelar principer som validerar resursefterlevnad fortsätter du till självstudien.