Udostępnij za pośrednictwem


Pobieranie danych zgodności zasobów platformy Azure

Jedną z największych zalet usługi Azure Policy jest wgląd w szczegółowe informacje i mechanizmy kontroli nad zasobami w ramach subskrypcji lub grupy zarządzania subskrypcji. Ta kontrolka może służyć do zapobiegania tworzeniu zasobów w niewłaściwej lokalizacji, wymuszania wspólnego i spójnego użycia tagów lub inspekcji istniejących zasobów pod kątem odpowiednich konfiguracji i ustawień. We wszystkich przypadkach dane są generowane przez usługę Azure Policy, aby umożliwić zrozumienie stanu zgodności środowiska.

Przed przejrzeniem danych zgodności ważne jest, aby zrozumieć stany zgodności w usłudze Azure Policy.

Istnieje kilka sposobów uzyskiwania dostępu do informacji o zgodności generowanych przez zasady i przypisania inicjatyw:

Zanim przyjrzymy się metodom raportowania zgodności, przyjrzyjmy się aktualizacji informacji o zgodności oraz częstotliwości i zdarzeń wyzwalających cykl oceny.

Wyzwalacze oceny

Wyniki ukończonego cyklu oceny są dostępne w dostawcy Microsoft.PolicyInsights zasobów za pośrednictwem PolicyStates operacji i PolicyEvents . Aby uzyskać więcej informacji na temat operacji interfejsu API REST usługi Azure Policy Insights, zobacz Azure Policy Insights.

Oceny przypisanych zasad i inicjatyw mają miejsce w wyniku różnych zdarzeń:

  • Zasady lub inicjatywa jest nowo przypisana do zakresu. Zastosowanie przypisania do zdefiniowanego zakresu trwa około pięciu minut, a następnie cykl oceny rozpoczyna się dla odpowiednich zasobów względem nowo przypisanych zasad lub inicjatywy. W zależności od użytych efektów zasoby są oznaczone jako zgodne, niezgodne, wykluczone lub nieznane. Duża zasada lub inicjatywa oceniana pod kątem dużego zakresu zasobów może zająć trochę czasu, więc nie ma wstępnie zdefiniowanego oczekiwania co do czasu ukończenia cyklu oceny. Po zakończeniu zaktualizowane wyniki zgodności są dostępne w portalu i zestawach SDK.

  • Zaktualizowano zasady lub inicjatywę przypisaną do zakresu. Cykl oceny i czas dla tego scenariusza są takie same jak w przypadku nowego przypisania do zakresu.

  • Zasób jest wdrażany lub aktualizowany w zakresie przy użyciu przypisania za pośrednictwem usługi Azure Resource Manager, interfejsu API REST lub obsługiwanego zestawu SDK. W tym scenariuszu zdarzenie efektu (dołączanie, inspekcja, odmowa, wdrażanie) i informacje o stanie zgodności poszczególnych zasobów staną się dostępne w portalu i zestawach SDK około 15 minut później. To zdarzenie nie powoduje oceny innych zasobów.

  • Subskrypcja (typ Microsoft.Resources/subscriptionszasobu) jest tworzona lub przenoszona w hierarchii grup zarządzania z przypisaną definicją zasad przeznaczoną dla typu zasobu subskrypcji. Ocena obsługiwanych efektów subskrypcji (inspekcja, auditIfNotExist, deployIfNotExists, modyfikowanie), rejestrowanie i wszelkie akcje korygacyjne trwa około 30 minut.

  • Wykluczenie z zasad jest tworzone, aktualizowane lub usuwane. W tym scenariuszu odpowiednie przypisanie jest oceniane dla zdefiniowanego zakresu wykluczeń.

  • Standardowy cykl oceny zgodności. Co 24 godziny przydziały są automatycznie ponownie oceniane. Duża zasada lub inicjatywa wielu zasobów może zająć trochę czasu, więc nie ma wstępnie zdefiniowanego oczekiwania co do czasu ukończenia cyklu oceny. Po zakończeniu zaktualizowane wyniki zgodności są dostępne w portalu i zestawach SDK.

  • Dostawca zasobów konfiguracji maszyny jest aktualizowany ze szczegółami zgodności przez zasób zarządzany.

  • Skanowanie na żądanie

Uwaga

Zgodnie z projektem usługa Azure Policy wyklucza wszystkie zasoby w ramach Microsoft.Resources dostawcy zasobów (RP) z oceny zasad z wyjątkiem subskrypcji i grup zasobów, które można ocenić.

Skanowanie oceny na żądanie

Skanowanie ewaluacyjne subskrypcji lub grupy zasobów można uruchomić za pomocą interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell, wywołania interfejsu API REST lub przy użyciu akcji GitHub Skanowania zgodności usługi Azure Policy. To skanowanie jest procesem asynchronicznym.

Uwaga

Nie wszyscy dostawcy zasobów platformy Azure obsługują skanowania ewaluacyjne na żądanie. Na przykład usługa Azure Virtual Network Manager (AVNM) obecnie nie obsługuje wyzwalaczy ręcznych ani standardowego cyklu oceny zgodności zasad (codzienne skanowania).

Skanowanie oceny na żądanie — Akcja usługi GitHub

Użyj akcji Skanowanie zgodności usługi Azure Policy, aby wyzwolić skanowanie oceny na żądanie z przepływu pracy usługi GitHub w jednym lub wielu zasobach, grupach zasobów lub subskrypcjach, a następnie brama przepływu pracy na podstawie stanu zgodności zasobów. Możesz również skonfigurować przepływ pracy do uruchamiania w zaplanowanym czasie, aby uzyskać najnowszy stan zgodności w dogodnym czasie. Opcjonalnie funkcja GitHub Actions może wygenerować raport dotyczący stanu zgodności zeskanowanych zasobów w celu dalszej analizy lub archiwizacji.

W poniższym przykładzie jest uruchamiane skanowanie pod kątem zgodności dla subskrypcji.

on:
  schedule:
    - cron:  '0 8 * * *'  # runs every morning 8am
jobs:
  assess-policy-compliance:
    runs-on: ubuntu-latest
    steps:
    - name: Login to Azure
      uses: azure/login@v1
      with:
        creds: ${{secrets.AZURE_CREDENTIALS}}

    - name: Check for resource compliance
      uses: azure/policy-compliance-scan@v0
      with:
        scopes: |
          /subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Aby uzyskać więcej informacji i przykładów przepływu pracy, zobacz repozytorium GitHub Actions for Azure Policy Compliance Scan (Funkcja GitHub Actions dla skanowania pod kątem zgodności usługi Azure Policy).

Skanowanie oceny na żądanie — interfejs wiersza polecenia platformy Azure

Skanowanie zgodności jest uruchamiane za pomocą polecenia az policy state trigger-scan .

Domyślnie az policy state trigger-scan uruchamia ocenę wszystkich zasobów w bieżącej subskrypcji. Aby rozpocząć ocenę dla określonej grupy zasobów, użyj parametru grupy zasobów . Poniższy przykład rozpoczyna skanowanie zgodności w bieżącej subskrypcji grupy zasobów MyRG :

az policy state trigger-scan --resource-group "MyRG"

Przed kontynuowaniem parametru no-wait możesz nie czekać na zakończenie procesu asynchronicznego.

Skanowanie oceny na żądanie — Azure PowerShell

Skanowanie zgodności jest uruchamiane za pomocą polecenia cmdlet Start-AzPolicyComplianceScan .

Domyślnie Start-AzPolicyComplianceScan uruchamia ocenę wszystkich zasobów w bieżącej subskrypcji. Aby rozpocząć ocenę dla określonej grupy zasobów, użyj parametru ResourceGroupName . Poniższy przykład rozpoczyna skanowanie zgodności w bieżącej subskrypcji grupy zasobów MyRG :

Start-AzPolicyComplianceScan -ResourceGroupName 'MyRG'

Program PowerShell może poczekać na ukończenie wywołania asynchronicznego przed dostarczeniem danych wyjściowych wyników lub uruchomieniem go w tle jako zadania. Aby użyć zadania programu PowerShell do uruchomienia skanowania zgodności w tle, użyj parametru AsJob i ustaw wartość na obiekt, na przykład $job w tym przykładzie:

$job = Start-AzPolicyComplianceScan -AsJob

Stan zadania można sprawdzić, sprawdzając $job obiekt. Zadanie jest typu Microsoft.Azure.Commands.Common.AzureLongRunningJob. Użyj Get-Member obiektu $job , aby wyświetlić dostępne właściwości i metody.

Podczas skanowania pod kątem zgodności sprawdź $job wyniki wyjściowe obiektu, takie jak:

$job

Id     Name              PSJobTypeName     State         HasMoreData     Location             Command
--     ----              -------------     -----         -----------     --------             -------
2      Long Running O... AzureLongRunni... Running       True            localhost            Start-AzPolicyCompliance...

Po zakończeniu skanowania zgodności właściwość State zmieni się na Ukończono.

Skanowanie oceny na żądanie — REST

Jako proces asynchroniczny punkt końcowy REST do uruchomienia skanowania nie czeka na zakończenie skanowania. Zamiast tego udostępnia identyfikator URI do wykonywania zapytań o stan żądanej oceny.

Każdy identyfikator URI interfejsu API REST zawiera używane zmienne, które musisz zastąpić własnymi wartościami:

  • {YourRG} — Zastąp ciąg nazwą grupy zasobów
  • {subscriptionId} — zastąp swoim identyfikatorem subskrypcji

Skanowanie obsługuje ocenę zasobów w subskrypcji lub w grupie zasobów. Uruchom skanowanie według zakresu za pomocą polecenia POST interfejsu API REST przy użyciu następujących struktur identyfikatorów URI:

  • Subskrypcja

    POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
    
  • Grupa zasobów

    POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{YourRG}/providers/Microsoft.PolicyInsights/policyStates/latest/triggerEvaluation?api-version=2019-10-01
    

Wywołanie zwraca stan Zaakceptowane 202. Uwzględniona w nagłówku odpowiedzi jest właściwością Location o następującym formacie:

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/asyncOperationResults/{ResourceContainerGUID}?api-version=2019-10-01

{ResourceContainerGUID} jest generowany statycznie dla żądanego zakresu. Jeśli zakres jest już uruchomiony skanowanie na żądanie, nowe skanowanie nie zostanie uruchomione. Zamiast tego nowe żądanie jest podane w tym samym {ResourceContainerGUID} identyfikatorze URI lokalizacji dla stanu. Polecenie GET interfejsu API REST dla identyfikatora URI lokalizacji zwraca wartość 202 Zaakceptowano, gdy ocena jest w toku. Po zakończeniu skanowania oceny zwraca on stan 200 OK . Treść ukończonego skanowania to odpowiedź JSON ze stanem:

{
    "status": "Succeeded"
}

Skanowanie oceny na żądanie — Visual Studio Code

Rozszerzenie usługi Azure Policy dla programu Visual Studio Code może uruchamiać skanowanie ewaluacyjne dla określonego zasobu. To skanowanie jest procesem synchronicznym, w przeciwieństwie do metod azure PowerShell i REST. Aby uzyskać szczegółowe informacje i kroki, zobacz Ocena na żądanie z rozszerzeniem programu VS Code.

Portal

Witryna Azure Portal przedstawia graficzne środowisko wizualizacji i zrozumienia stanu zgodności w danym środowisku. Na stronie Zasady opcja Przegląd zawiera szczegółowe informacje o dostępnych zakresach dotyczących zgodności zasad i inicjatyw. Wraz ze stanem zgodności i liczbą na przypisanie zawiera on wykres przedstawiający zgodność w ciągu ostatnich siedmiu dni. Strona Zgodność zawiera wiele tych samych informacji (z wyjątkiem wykresu), ale udostępnia dodatkowe opcje filtrowania i sortowania.

Zrzut ekranu przedstawiający stronę Zgodność, opcje filtrowania i szczegóły.

Ponieważ zasady lub inicjatywa można przypisać do różnych zakresów, tabela zawiera zakres dla każdego przypisania i typ przypisanej definicji. Podano również liczbę niezgodnych zasobów i niezgodnych zasad dla każdego przypisania. Wybranie zasad lub inicjatywy w tabeli zapewnia dokładniejsze przyjrzenie się zgodności dla tego konkretnego przypisania.

Zrzut ekranu przedstawiający stronę Szczegóły zgodności, w tym liczbę i szczegóły zgodności zasobów.

Lista zasobów na karcie Zgodność zasobów zawiera stan oceny istniejących zasobów dla bieżącego przypisania. Karta jest domyślnie ustawiona na Niezgodne, ale można je filtrować. Zdarzenia (dołączanie, inspekcja, odmowa, wdrażanie, modyfikowanie) wyzwalane przez żądanie utworzenia zasobu są wyświetlane na karcie Zdarzenia .

Zrzut ekranu przedstawiający kartę Zdarzenia na stronie Szczegóły zgodności.

W przypadku zasobów trybu dostawcy zasobów na karcie Zgodność zasobów wybierz zasób lub kliknij prawym przyciskiem myszy wiersz i wybierz pozycję Wyświetl szczegóły zgodności powoduje otwarcie szczegółów zgodności składnika. Ta strona zawiera również karty umożliwiające wyświetlanie zasad przypisanych do tego zasobu, zdarzeń, zdarzeń składników i historii zmian.

Zrzut ekranu przedstawiający kartę Zgodność składników i szczegóły zgodności dla przypisania trybu dostawcy zasobów.

Po powrocie na stronę zgodności zasobów wybierz i przytrzymaj (lub kliknij prawym przyciskiem myszy) w wierszu zdarzenia, na którym chcesz zebrać więcej szczegółów, a następnie wybierz pozycję Pokaż dzienniki aktywności. Zostanie otwarta strona dziennika aktywności i zostanie wstępnie przefiltrowana do wyszukiwania zawierającego szczegóły przypisania i zdarzeń. Dziennik aktywności zawiera więcej kontekstu i informacji o tych zdarzeniach.

Zrzut ekranu przedstawiający dziennik aktywności dla działań i ocen usługi Azure Policy.

Uwaga

Wyniki zgodności można wyeksportować z portalu za pomocą zapytań usługi Azure Resource Graph.

Wiersz polecenia

Te same informacje dostępne w portalu można pobrać za pomocą interfejsu API REST (w tym z usługą ARMClient), programu Azure PowerShell i interfejsu wiersza polecenia platformy Azure. Aby uzyskać szczegółowe informacje na temat interfejsu API REST, zobacz dokumentację usługi Azure Policy . Strony referencyjne interfejsu API REST mają zielony przycisk "Wypróbuj" dla każdej operacji, która umożliwia wypróbowanie go bezpośrednio w przeglądarce.

Użyj elementu ARMClient lub podobnego narzędzia do obsługi uwierzytelniania na platformie Azure dla przykładów interfejsu API REST.

Podsumowanie wyników

Za pomocą interfejsu API REST podsumowania mogą być wykonywane przez kontener, definicję lub przypisanie. Oto przykład podsumowania na poziomie subskrypcji przy użyciu podsumowania dla subskrypcji usługi Azure Policy Insights:

POST https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01

Dane wyjściowe zawierają podsumowanie subskrypcji. W poniższych przykładowych danych wyjściowych podsumowane zgodność znajdują się w obszarze value.results.nonCompliantResources i value.results.nonCompliantPolicies. To żądanie zawiera dodatkowe szczegóły, w tym każde przypisanie, które składało się na niezgodne numery i informacje o definicji dla każdego przypisania. Każdy obiekt zasad w hierarchii zawiera wartość queryResultsUri , która może służyć do uzyskania bardziej szczegółowych informacji na tym poziomie.

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary",
    "@odata.count": 1,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
        "results": {
            "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant'",
            "nonCompliantResources": 15,
            "nonCompliantPolicies": 1
        },
        "policyAssignments": [{
            "policyAssignmentId": "/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77",
            "policySetDefinitionId": "",
            "results": {
                "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77'",
                "nonCompliantResources": 15,
                "nonCompliantPolicies": 1
            },
            "policyDefinitions": [{
                "policyDefinitionReferenceId": "",
                "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
                "effect": "deny",
                "results": {
                    "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'",
                    "nonCompliantResources": 15
                }
            }]
        }]
    }]
}

Wykonywanie zapytań o zasoby

W powyższym przykładzie value.policyAssignments.policyDefinitions.results.queryResultsUri udostępnia przykładowy identyfikator URI dla wszystkich niezgodnych zasobów dla określonej definicji zasad. W wartości $filter wartość ComplianceState jest równa (eq) wartości "NonCompliant", policyAssignmentId jest określona dla definicji zasad, a następnie dla samej definicji zasad PolicyDefinitionId. Przyczyną włączenia identyfikatora PolicyAssignmentId w filtrze jest to, że identyfikator PolicyDefinitionId może istnieć w kilku przypisaniach zasad lub inicjatyw z różnymi zakresami. Określając zarówno identyfikator PolicyAssignmentId, jak i PolicyDefinitionId, możemy być jawnie w wynikach, których szukamy. Wcześniej w obszarze PolicyStates użyliśmy najnowszej wersji, która automatycznie ustawia przedział czasu od i do przedziału czasu z ostatnich 24 godzin.

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2018-05-18 04:28:22Z&$to=2018-05-19 04:28:22Z&$filter=ComplianceState eq 'NonCompliant' and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/resourcegroups/rg-tags/providers/microsoft.authorization/policyassignments/37ce239ae4304622914f0c77' and PolicyDefinitionId eq '/providers/microsoft.authorization/policydefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62'

Przykładowa odpowiedź poniżej została przycięta do pojedynczego niezgodnego zasobu w celu zwięzłości. Szczegółowa odpowiedź zawiera kilka elementów danych dotyczących zasobu, zasad lub inicjatywy oraz przypisania. Zwróć uwagę, że można również zobaczyć, jakie parametry przypisania zostały przekazane do definicji zasad.

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest",
    "@odata.count": 15,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
        "timestamp": "2018-05-19T04:41:09Z",
        "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Compute/virtualMachines/linux",
        "policyAssignmentId": "/subscriptions/{subscriptionId}/resourceGroups/rg-tags/providers/Microsoft.Authorization/policyAssignments/37ce239ae4304622914f0c77",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62",
        "effectiveParameters": "",
        "ComplianceState": "NonCompliant",
        "subscriptionId": "{subscriptionId}",
        "resourceType": "/Microsoft.Compute/virtualMachines",
        "resourceLocation": "westus2",
        "resourceGroup": "RG-Tags",
        "resourceTags": "tbd",
        "policyAssignmentName": "37ce239ae4304622914f0c77",
        "policyAssignmentOwner": "tbd",
        "policyAssignmentParameters": "{\"tagName\":{\"value\":\"costCenter\"},\"tagValue\":{\"value\":\"Contoso-Test\"}}",
        "policyAssignmentScope": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags",
        "policyDefinitionName": "1e30110a-5ceb-460c-a204-c1c3969c6d62",
        "policyDefinitionAction": "deny",
        "policyDefinitionCategory": "tbd",
        "policySetDefinitionId": "",
        "policySetDefinitionName": "",
        "policySetDefinitionOwner": "",
        "policySetDefinitionCategory": "",
        "policySetDefinitionParameters": "",
        "managementGroupIds": "",
        "policyDefinitionReferenceId": ""
    }]
}

Wyświetl zdarzenia

Po utworzeniu lub zaktualizowaniu zasobu zostanie wygenerowany wynik oceny zasad. Wyniki są nazywane zdarzeniami zasad. Użyj następującego identyfikatora URI, aby wyświetlić ostatnie zdarzenia zasad skojarzone z subskrypcją.

https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/default/queryResults?api-version=2019-10-01

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

{
    "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default",
    "@odata.count": 1,
    "value": [{
        "@odata.id": null,
        "@odata.context": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyEvents/$metadata#default/$entity",
        "NumAuditEvents": 16
    }]
}

Aby uzyskać więcej informacji na temat wykonywania zapytań dotyczących zdarzeń zasad, zobacz artykuł Azure Policy Events reference (Dokumentacja zdarzeń usługi Azure Policy).

Interfejs wiersza polecenia platformy Azure

Grupa poleceń interfejsu wiersza polecenia platformy Azure dla usługi Azure Policy obejmuje większość operacji dostępnych w interfejsie REST lub programie Azure PowerShell. Aby uzyskać pełną listę dostępnych poleceń, zobacz Interfejs wiersza polecenia platformy Azure — Omówienie usługi Azure Policy.

Przykład: pobieranie podsumowania stanu dla najbardziej przypisanych zasad z największą liczbą niezgodnych zasobów.

az policy state summarize --top 1

Górna część odpowiedzi wygląda następująco:

{
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#summary/$entity",
    "odataid": null,
    "policyAssignments": [{
            "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
            "policyDefinitions": [{
                "effect": "audit",
                "policyDefinitionGroupNames": [
                    ""
                ],
                "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
                "policyDefinitionReferenceId": "",
                "results": {
                    "nonCompliantPolicies": null,
                    "nonCompliantResources": 398,
                    "policyDetails": [{
                        "complianceState": "noncompliant",
                        "count": 1
                    }],
                    "policyGroupDetails": [{
                        "complianceState": "noncompliant",
                        "count": 1
                    }],
                    "queryResultsUri": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/latest/queryResults?api-version=2019-10-01&$from=2020-07-14 14:01:22Z&$to=2020-07-15 14:01:22Z and PolicyAssignmentId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8' and PolicyDefinitionId eq '/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a'",
                    "resourceDetails": [{
                            "complianceState": "noncompliant",
                            "count": 398
                        },
                        {
                            "complianceState": "compliant",
                            "count": 4
                        }
                    ]
                }
            }],
    ...

Przykład: pobieranie rekordu stanu dla ostatnio ocenianego zasobu (wartość domyślna to sygnatura czasowa w kolejności malejącej).

az policy state list --top 1
[
  {
    "complianceReasonCode": "",
    "complianceState": "Compliant",
    "effectiveParameters": "",
    "isCompliant": true,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/securitycenterbuiltin",
    "policyAssignmentName": "SecurityCenterBuiltIn",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "auditifnotexists",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/providers/microsoft.authorization/policydefinitions/aa633080-8b72-40c4-a2d7-d00c03e80bed",
    "policyDefinitionName": "aa633080-8b72-40c4-a2d7-d00c03e80bed",
    "policyDefinitionReferenceId": "identityenablemfaforownerpermissionsmonitoring",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "security center",
    "policySetDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
    "policySetDefinitionName": "1f3afdf9-d0c9-4c3d-847f-89da613e70a8",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "",
    "resourceId": "/subscriptions/{subscriptionId}",
    "resourceLocation": "",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Resources/subscriptions",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.903433+00:00"
  }
]

Przykład: uzyskiwanie szczegółów dotyczących wszystkich niezgodnych zasobów sieci wirtualnej.

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'"
[
  {
    "complianceReasonCode": "",
    "complianceState": "NonCompliant",
    "effectiveParameters": "",
    "isCompliant": false,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
    "policyAssignmentName": "e0704696df5e4c3c81c873e8",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "audit",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionReferenceId": "",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "",
    "policySetDefinitionId": "",
    "policySetDefinitionName": "",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "RG-Tags",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
    "resourceLocation": "westus2",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Network/virtualNetworks",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.901911+00:00"
  }
]

Przykład: pobieranie zdarzeń związanych z niezgodnymi zasobami sieci wirtualnej, które wystąpiły po określonej dacie.

az policy state list --filter "ResourceType eq 'Microsoft.Network/virtualNetworks'" --from '2020-07-14T00:00:00Z'
[
  {
    "complianceReasonCode": "",
    "complianceState": "NonCompliant",
    "effectiveParameters": "",
    "isCompliant": false,
    "managementGroupIds": "{managementgroupId}",
    "odatacontext": "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.PolicyInsights/policyStates/$metadata#latest/$entity",
    "odataid": null,
    "policyAssignmentId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policyassignments/e0704696df5e4c3c81c873e8",
    "policyAssignmentName": "e0704696df5e4c3c81c873e8",
    "policyAssignmentOwner": "tbd",
    "policyAssignmentParameters": "",
    "policyAssignmentScope": "/subscriptions/{subscriptionId}",
    "policyAssignmentVersion": "",
    "policyDefinitionAction": "audit",
    "policyDefinitionCategory": "tbd",
    "policyDefinitionGroupNames": [
      ""
    ],
    "policyDefinitionId": "/subscriptions/{subscriptionId}/providers/microsoft.authorization/policydefinitions/2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionName": "2e3197b6-1f5b-4b01-920c-b2f0a7e9b18a",
    "policyDefinitionReferenceId": "",
    "policyDefinitionVersion": "",
    "policyEvaluationDetails": null,
    "policySetDefinitionCategory": "",
    "policySetDefinitionId": "",
    "policySetDefinitionName": "",
    "policySetDefinitionOwner": "",
    "policySetDefinitionParameters": "",
    "policySetDefinitionVersion": "",
    "resourceGroup": "RG-Tags",
    "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Microsoft.Network/virtualNetworks/RG-Tags-vnet",
    "resourceLocation": "westus2",
    "resourceTags": "tbd",
    "resourceType": "Microsoft.Network/virtualNetworks",
    "subscriptionId": "{subscriptionId}",
    "timestamp": "2020-07-15T08:37:07.901911+00:00"
  }
]

Azure PowerShell

Moduł Azure PowerShell dla usługi Azure Policy jest dostępny w Galeria programu PowerShell jako Az.PolicyInsights. Za pomocą modułu PowerShellGet możesz zainstalować moduł za pomocą polecenia Install-Module -Name Az.PolicyInsights (upewnij się, że zainstalowano najnowszą wersję programu Azure PowerShell ):

# Install from PowerShell Gallery via PowerShellGet
Install-Module -Name Az.PolicyInsights

# Import the downloaded module
Import-Module Az.PolicyInsights

# Login with Connect-AzAccount if not using Cloud Shell
Connect-AzAccount

Moduł zawiera następujące polecenia cmdlet:

  • Get-AzPolicyStateSummary
  • Get-AzPolicyState
  • Get-AzPolicyEvent
  • Get-AzPolicyRemediation
  • Remove-AzPolicyRemediation
  • Start-AzPolicyRemediation
  • Stop-AzPolicyRemediation

Przykład: pobieranie podsumowania stanu dla najbardziej przypisanych zasad z największą liczbą niezgodnych zasobów.

PS> Get-AzPolicyStateSummary -Top 1

NonCompliantResources : 15
NonCompliantPolicies  : 1
PolicyAssignments     : {/subscriptions/{subscriptionId}/resourcegroups/RG-Tags/providers/micros
                        oft.authorization/policyassignments/37ce239ae4304622914f0c77}

Przykład: pobieranie rekordu stanu dla ostatnio ocenianego zasobu (wartość domyślna to sygnatura czasowa w kolejności malejącej).

PS> Get-AzPolicyState -Top 1

Timestamp                  : 5/22/2018 3:47:34 PM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/networkInterfaces/linux316
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/networkInterfaces
ResourceLocation           : westus2
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd

Przykład: uzyskiwanie szczegółów dotyczących wszystkich niezgodnych zasobów sieci wirtualnej.

PS> Get-AzPolicyState -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'"

Timestamp                  : 5/22/2018 4:02:20 PM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/virtualNetworks
ResourceLocation           : westus2
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd

Przykład: pobieranie zdarzeń związanych z niezgodnymi zasobami sieci wirtualnej, które wystąpiły po określonej dacie, konwertowanie na obiekt CSV i eksportowanie do pliku.

$policyEvents = Get-AzPolicyEvent -Filter "ResourceType eq '/Microsoft.Network/virtualNetworks'" -From '2020-09-19'
$policyEvents | ConvertTo-Csv | Out-File 'C:\temp\policyEvents.csv'

Dane wyjściowe $policyEvents obiektu wyglądają podobnie do następujących danych wyjściowych:

Timestamp                  : 9/19/2020 5:18:53 AM
ResourceId                 : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Network/virtualNetworks/RG-Tags-vnet
PolicyAssignmentId         : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags/providers/Mi
                             crosoft.Authorization/policyAssignments/37ce239ae4304622914f0c77
PolicyDefinitionId         : /providers/Microsoft.Authorization/policyDefinitions/1e30110a-5ceb-460c-a204-c1c3969c6d62
ComplianceState            : NonCompliant
SubscriptionId             : {subscriptionId}
ResourceType               : /Microsoft.Network/virtualNetworks
ResourceLocation           : eastus
ResourceGroup              : RG-Tags
ResourceTags               : tbd
PolicyAssignmentName       : 37ce239ae4304622914f0c77
PolicyAssignmentOwner      : tbd
PolicyAssignmentParameters : {"tagName":{"value":"costCenter"},"tagValue":{"value":"Contoso-Test"}}
PolicyAssignmentScope      : /subscriptions/{subscriptionId}/resourceGroups/RG-Tags
PolicyDefinitionName       : 1e30110a-5ceb-460c-a204-c1c3969c6d62
PolicyDefinitionAction     : deny
PolicyDefinitionCategory   : tbd
TenantId                   : {tenantId}
PrincipalOid               : {principalOid}

Pole PrincipalOid może służyć do pobierania określonego użytkownika za pomocą polecenia cmdlet Get-AzADUserprogramu Azure PowerShell . Zastąp element {principalOid} odpowiedzią uzyskaną z poprzedniego przykładu.

PS> (Get-AzADUser -ObjectId {principalOid}).DisplayName
Trent Baker

Dzienniki usługi Azure Monitor

Jeśli masz obszar roboczy usługi Log Analytics z rozwiązaniem usługi Activity Log Analytics powiązanym z AzureActivity subskrypcją, możesz również wyświetlić wyniki niezgodności z oceny nowych i zaktualizowanych zasobów przy użyciu prostych zapytań Kusto i AzureActivity tabeli. W przypadku szczegółowych informacji w dziennikach usługi Azure Monitor alerty można skonfigurować do obserwowania pod kątem niezgodności.

Zrzut ekranu przedstawiający dzienniki usługi Azure Monitor z akcjami usługi Azure Policy w tabeli AzureActivity.

Azure Resource Graph

Rekordy zgodności są przechowywane w usłudze Azure Resource Graph (ARG). Dane można eksportować z zapytań usługi ARG w celu utworzenia dostosowanych pulpitów nawigacyjnych na podstawie zakresów i zasad zainteresowania. Przejrzyj nasze przykładowe zapytania dotyczące eksportowania danych zgodności za pośrednictwem usługi ARG.

Następne kroki