Szybki start: tworzenie przypisania zasad w celu identyfikowania niezgodnych zasobów za pomocą interfejsu API REST

Pierwszym krokiem do zrozumienia pojęcia zgodności na platformie Azure jest określenie obecnej sytuacji dotyczącej Twoich zasobów. W tym przewodniku Szybki start utworzysz przypisanie zasad w celu zidentyfikowania niezgodnych zasobów przy użyciu interfejsu API REST. Zasady są przypisywane do grupy zasobów i przeprowadza inspekcję maszyn wirtualnych, które nie korzystają z dysków zarządzanych. Po utworzeniu przypisania zasad należy zidentyfikować niezgodne maszyny wirtualne.

W tym przewodniku użyto interfejsu API REST do utworzenia przypisania zasad i zidentyfikowania niezgodnych zasobów w środowisku platformy Azure. Przykłady w tym artykule używają programu PowerShell i poleceń interfejsu wiersza polecenia az rest platformy Azure. Możesz również uruchomić az rest polecenia z powłoki Bash, takiej jak Git Bash.

Wymagania wstępne

  • Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Najnowsza wersja programu PowerShell lub powłoki Bash, na przykład Git Bash.
  • Najnowsza wersja interfejsu wiersza polecenia platformy Azure.
  • Program Visual Studio Code
  • Grupa zasobów z co najmniej jedną maszyną wirtualną, która nie korzysta z dysków zarządzanych.

Przejrzyj składnię interfejsu API REST

Istnieją dwa elementy do uruchamiania poleceń interfejsu API REST: identyfikator URI interfejsu API REST i treść żądania. Aby uzyskać więcej informacji, przejdź do pozycji Przypisania zasad — tworzenie.

W poniższym przykładzie przedstawiono składnię identyfikatora URI interfejsu API REST w celu utworzenia definicji zasad.

PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/policyAssignments/{policyAssignmentName}?api-version=2023-04-01
  • scope: Zakres określa, które zasoby lub grupa zasobów są wymuszane przez przypisanie zasad. Może ona zawierać zakres od grupy zarządzania do pojedynczego zasobu. Zastąp {scope} element jednym z następujących wzorców:
    • Grupa zarządzania: /providers/Microsoft.Management/managementGroups/{managementGroup}
    • Subskrypcje: /subscriptions/{subscriptionId}
    • Grupa zasobów: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
    • Zasób: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/[{parentResourcePath}/]{resourceType}/{resourceName}
  • policyAssignmentName: tworzy nazwę przypisania zasad dla przypisania. Nazwa jest uwzględniona we właściwości przypisania policyAssignmentId zasad.

Poniższy przykład to kod JSON umożliwiający utworzenie pliku treści żądania.

{
  "properties": {
    "displayName": "",
    "description": "",
    "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/11111111-1111-1111-1111-111111111111",
    "nonComplianceMessages": [
      {
        "message": ""
      }
    ]
  }
}
  • displayName: Nazwa wyświetlana przypisania zasad.
  • description: może służyć do dodawania kontekstu dotyczącego przypisania zasad.
  • policyDefinitionId: identyfikator definicji zasad, który ma zostać utworzony przez przypisanie.
  • nonComplianceMessages: ustaw komunikat, który ma być używany, gdy zasób jest oceniany jako niezgodny. Aby uzyskać więcej informacji, zobacz komunikaty o niezgodności przypisania.

Łączenie się z platformą Azure

Z poziomu sesji terminalu programu Visual Studio Code nawiąż połączenie z platformą Azure. Jeśli masz więcej niż jedną subskrypcję, uruchom polecenia, aby ustawić kontekst na subskrypcję. Zamień wartość <subscriptionID> na identyfikator swojej subskrypcji platformy Azure.

az login

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

Użyj az login polecenia az rest, nawet jeśli używasz programu PowerShell, ponieważ w przykładach użyto poleceń az rest interfejsu wiersza polecenia platformy Azure.

Tworzenie przypisania zasad

W tym przykładzie utworzysz przypisanie zasad i przypiszesz definicję Przeprowadź inspekcję maszyn wirtualnych, które nie używają dysków zarządzanych .

Treść żądania jest potrzebna do utworzenia przypisania. Zapisz następujący kod JSON w pliku o nazwie 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"
      }
    ]
  }
}

Aby utworzyć przypisanie zasad w istniejącym zakresie grupy zasobów, użyj następującego identyfikatora URI interfejsu API REST z plikiem treści żądania. Zastąp {subscriptionId} wartości i {resourceGroupName} wartościami. Polecenie wyświetla dane wyjściowe JSON w powłoce.

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

W programie PowerShell funkcja backtick (`) jest wymagana do ucieczki at sign (@) w celu określenia nazwy pliku. W powłoce powłoki Bash, takiej jak Git Bash, pomiń backtick.

Aby uzyskać więcej informacji, przejdź do pozycji Przypisania zasad — tworzenie.

Identyfikowanie niezgodnych zasobów

Stan zgodności dla nowego przypisania zasad może potrwać kilka minut i dostarczyć wyniki dotyczące stanu zasad. Interfejs API REST służy do wyświetlania niezgodnych zasobów dla tego przypisania zasad, a dane wyjściowe są w formacie JSON.

Aby zidentyfikować niezgodne zasoby, uruchom następujące polecenie. Zastąp {subscriptionId} wartości i {resourceGroupName} wartościami użytymi podczas tworzenia przypisania zasad.

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

Zapytania filter dotyczące zasobów, które są oceniane jako niezgodne z definicją zasad o nazwie audit-vm-managed-disks utworzone za pomocą przypisania zasad. Ponownie zwróć uwagę, że backtick jest używany do ucieczki znaku dolara ($) w filtrze. W przypadku klienta powłoki Bash ukośnik odwrotny (\) jest typowym znakiem ucieczki.

Wyniki powinny wyglądać podobnie do następujących:

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

Aby uzyskać więcej informacji, zobacz Stany zasad — wyświetlanie listy wyników zapytania dla grupy zasobów.

Czyszczenie zasobów

Aby usunąć przypisanie zasad, użyj następującego polecenia. Zastąp {subscriptionId} wartości i {resourceGroupName} wartościami użytymi podczas tworzenia przypisania zasad. Polecenie wyświetla dane wyjściowe JSON w powłoce.

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

Możesz sprawdzić, czy przypisanie zasad zostało usunięte za pomocą następującego polecenia. W powłoce zostanie wyświetlony komunikat.

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.

Aby uzyskać więcej informacji, przejdź do pozycji Przypisania zasad — Usuwanie i przypisania zasad — Pobieranie.

Następne kroki

W tym przewodniku Szybki start została przypisana definicja zasad mających na celu zidentyfikowanie niezgodnych zasobów w środowisku platformy Azure.

Aby dowiedzieć się więcej na temat przypisywania zasad, które weryfikują zgodność zasobów, przejdź do samouczka.