Programowe tworzenie zasad

Ten artykuł przeprowadzi Cię przez programowe tworzenie zasad i zarządzanie nimi. Azure Policy definicje wymuszają różne reguły i efekty dotyczące zasobów. Wymuszanie zapewnia zgodność zasobów ze standardami firmowymi i umowami dotyczącymi poziomu usług.

Aby uzyskać informacje o zgodności, zobacz pobieranie danych zgodności.

Wymagania wstępne

Przed rozpoczęciem upewnij się, że zostały spełnione następujące wymagania wstępne:

  1. Jeśli ta czynność nie została jeszcze wykonana, zainstaluj klienta ARMClient. Jest to narzędzie, które wysyła żądania HTTP do interfejsów API opartych na usłudze Azure Resource Manager.

  2. Zaktualizuj moduł Azure PowerShell do najnowszej wersji. Zobacz Instalowanie modułu Azure PowerShell, aby uzyskać szczegółowe informacje. Aby uzyskać więcej informacji na temat najnowszej wersji, zobacz Azure PowerShell.

  3. Zarejestruj dostawcę zasobów usługi Azure Policy Insights przy użyciu Azure PowerShell, aby sprawdzić, czy subskrypcja współpracuje z dostawcą zasobów. Aby zarejestrować dostawcę zasobów, musisz mieć uprawnienia do uruchamiania operacji rejestrowania dla dostawcy zasobów. Ta operacja jest uwzględniona w rolach Współautor i Właściciel. Uruchom następujące polecenie, aby zarejestrować dostawcę zasobów:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Aby uzyskać więcej informacji na temat rejestrowania i wyświetlania dostawców zasobów, zobacz Dostawcy zasobów i typy.

  4. Jeśli jeszcze tego nie zrobiono, zainstaluj interfejs wiersza polecenia platformy Azure. Najnowszą wersję można uzyskać w sekcji Instalowanie interfejsu wiersza polecenia platformy Azure w systemie Windows.

Tworzenie i przypisywanie definicji zasad

Pierwszym krokiem w kierunku lepszego wglądu zasobów jest utworzenie i przypisanie zasad dotyczących zasobów. Następnym krokiem jest nauczenie się programowego tworzenia i przypisywania zasad. Przykładowe zasady przeprowadzają inspekcję kont magazynu, które są otwarte dla wszystkich sieci publicznych przy użyciu programu PowerShell, interfejsu wiersza polecenia platformy Azure i żądań HTTP.

Tworzenie i przypisywanie definicji zasad za pomocą programu PowerShell

  1. Użyj poniższego fragmentu kodu JSON, aby utworzyć plik JSON o nazwie AuditStorageAccounts.json.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    Aby uzyskać więcej informacji na temat tworzenia definicji zasad, zobacz Azure Policy Struktura definicji.

  2. Uruchom następujące polecenie, aby utworzyć definicję zasad przy użyciu pliku AuditStorageAccounts.json.

    New-AzPolicyDefinition -Name 'AuditStorageAccounts' -DisplayName 'Audit Storage Accounts Open to Public Networks' -Policy 'AuditStorageAccounts.json'
    

    Polecenie tworzy definicję zasad o nazwie Audit Storage Accounts Open to Public Networks (Przeprowadź inspekcję kont magazynu otwartych w sieciach publicznych). Aby uzyskać więcej informacji na temat innych parametrów, których można użyć, zobacz New-AzPolicyDefinition.

    W przypadku wywołania bez parametrów New-AzPolicyDefinition lokalizacji domyślnie zapisuje definicję zasad w wybranej subskrypcji kontekstu sesji. Aby zapisać definicję w innej lokalizacji, użyj następujących parametrów:

    • SubscriptionId — zapisz w innej subskrypcji. Wymaga wartości identyfikatora GUID .
    • ManagementGroupName — zapisz w grupie zarządzania. Wymaga wartości ciągu .
  3. Po utworzeniu definicji zasad można utworzyć przypisanie zasad, uruchamiając następujące polecenia:

    $rg = Get-AzResourceGroup -Name 'ContosoRG'
    $Policy = Get-AzPolicyDefinition -Name 'AuditStorageAccounts'
    New-AzPolicyAssignment -Name 'AuditStorageAccounts' -PolicyDefinition $Policy -Scope $rg.ResourceId
    

    Zastąp wartość ContosoRG nazwą zamierzonej grupy zasobów.

    Parametr Zakres współdziała New-AzPolicyAssignment z grupą zarządzania, subskrypcją, grupą zasobów lub pojedynczym zasobem. Parametr używa pełnej ścieżki zasobu, której właściwość ResourceId zwraca Get-AzResourceGroup . Wzorzec zakresu dla każdego kontenera jest następujący. Zastąp {rName}odpowiednio wartości , {rgName}, {subId}i {mgName} nazwą zasobu, nazwą grupy zasobów, identyfikatorem subskrypcji i nazwą grupy zarządzania. {rType} element zostanie zastąpiony typem zasobu , takim jak Microsoft.Compute/virtualMachines dla maszyny wirtualnej.

    • Zasobów- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupa zasobów — /subscriptions/{subId}/resourceGroups/{rgName}
    • Subskrypcji- /subscriptions/{subId}
    • Grupa zarządzania — /providers/Microsoft.Management/managementGroups/{mgName}

Aby uzyskać więcej informacji na temat zarządzania zasadami zasobów przy użyciu modułu Resource Manager PowerShell, zobacz Az.Resources.

Tworzenie i przypisywanie definicji zasad przy użyciu elementu ARMClient

Aby utworzyć definicję zasad, wykonaj poniższą procedurę.

  1. Skopiuj poniższy fragment kodu JSON, aby utworzyć plik JSON. Plik zostanie wywołany w następnym kroku.

    "properties": {
        "displayName": "Audit Storage Accounts Open to Public Networks",
        "policyType": "Custom",
        "mode": "Indexed",
        "description": "This policy ensures that storage accounts with exposure to Public Networks are audited.",
        "parameters": {},
        "policyRule": {
            "if": {
                "allOf": [{
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                        "equals": "Allow"
                    }
                ]
            },
            "then": {
                "effect": "audit"
            }
        }
    }
    
  2. Utwórz definicję zasad przy użyciu jednego z następujących wywołań:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file>
    
    # For defining a policy in a management group
    armclient PUT "/providers/Microsoft.Management/managementgroups/{managementGroupId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2021-09-01" @<path to policy definition JSON file>
    

    Zastąp poprzedni element {subscriptionId} identyfikatorem subskrypcji lub {managementGroupId} identyfikatorem grupy zarządzania.

    Aby uzyskać więcej informacji na temat struktury zapytania, zobacz Azure Policy Definitions — Create or Update and Policy Definitions - Create or UpdateAt Management Group (Tworzenie lub aktualizowanie definicji zasad — tworzenie lub aktualizowanie w grupie zarządzania).

Poniższa procedura umożliwia utworzenie przypisania zasad i przypisanie definicji zasad na poziomie grupy zasobów.

  1. Skopiuj poniższy fragment kodu JSON, aby utworzyć plik przypisania zasad JSON. Zastąp przykładowe informacje w <> symbolach własnymi wartościami.

    {
        "properties": {
            "description": "This policy assignment makes sure that storage accounts with exposure to Public Networks are audited.",
            "displayName": "Audit Storage Accounts Open to Public Networks Assignment",
            "parameters": {},
            "policyDefinitionId": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks",
            "scope": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>"
        }
    }
    
  2. Utwórz przypisanie zasad przy użyciu następującego wywołania:

    armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2021-09-01" @<path to Assignment JSON file>
    

    Zastąp przykładowe informacje w <> symbolach własnymi wartościami.

    Aby uzyskać więcej informacji na temat wykonywania wywołań HTTP do interfejsu API REST, zobacz Zasoby interfejsu API REST platformy Azure.

Tworzenie i przypisywanie definicji zasad za pomocą interfejsu wiersza polecenia platformy Azure

Aby utworzyć definicję zasad, wykonaj następującą procedurę:

  1. Skopiuj poniższy fragment kodu JSON, aby utworzyć plik przypisania zasad JSON.

    {
        "if": {
            "allOf": [{
                    "field": "type",
                    "equals": "Microsoft.Storage/storageAccounts"
                },
                {
                    "field": "Microsoft.Storage/storageAccounts/networkAcls.defaultAction",
                    "equals": "Allow"
                }
            ]
        },
        "then": {
            "effect": "audit"
        }
    }
    

    Aby uzyskać więcej informacji na temat tworzenia definicji zasad, zobacz Azure Policy Struktura definicji.

  2. Uruchom następujące polecenie, aby utworzyć definicję zasad:

    az policy definition create --name 'audit-storage-accounts-open-to-public-networks' --display-name 'Audit Storage Accounts Open to Public Networks' --description 'This policy ensures that storage accounts with exposures to public networks are audited.' --rules '<path to json file>' --mode All
    

    Polecenie tworzy definicję zasad o nazwie Audit Storage Accounts Open to Public Networks (Przeprowadź inspekcję kont magazynu otwartych w sieciach publicznych). Aby uzyskać więcej informacji na temat innych parametrów, których można użyć, zobacz az policy definition create.

    W przypadku wywołania bez parametrów az policy definition creation lokalizacji domyślnie zapisuje definicję zasad w wybranej subskrypcji kontekstu sesji. Aby zapisać definicję w innej lokalizacji, użyj następujących parametrów:

    • subskrypcja — zapisz w innej subskrypcji. Wymaga wartości identyfikatora GUID dla identyfikatora subskrypcji lub wartości ciągu dla nazwy subskrypcji.
    • management-group — zapisz w grupie zarządzania. Wymaga wartości ciągu .
  3. Użyj następującego polecenia, aby utworzyć przypisanie zasad. Zastąp przykładowe informacje w <> symbolach własnymi wartościami.

    az policy assignment create --name '<name>' --scope '<scope>' --policy '<policy definition ID>'
    

    Parametr az policy assignment createzakresu działa z grupą zarządzania, subskrypcją, grupą zasobów lub pojedynczym zasobem. Parametr używa pełnej ścieżki zasobu. Wzorzec zakresu dla każdego kontenera jest następujący. Zastąp {rName}odpowiednio wartości , {rgName}, {subId}i {mgName} nazwą zasobu, nazwą grupy zasobów, identyfikatorem subskrypcji i nazwą grupy zarządzania. {rType} element zostanie zastąpiony typem zasobu , takim jak Microsoft.Compute/virtualMachines dla maszyny wirtualnej.

    • Zasobów- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Grupa zasobów — /subscriptions/{subID}/resourceGroups/{rgName}
    • Subskrypcji- /subscriptions/{subID}
    • Grupa zarządzania — /providers/Microsoft.Management/managementGroups/{mgName}

Identyfikator definicji Azure Policy można uzyskać przy użyciu programu PowerShell za pomocą następującego polecenia:

az policy definition show --name 'Audit Storage Accounts with Open Public Networks'

Identyfikator definicji zasad dla utworzonej definicji zasad powinien przypominać następujący przykład:

"/subscription/<subscriptionId>/providers/Microsoft.Authorization/policyDefinitions/Audit Storage Accounts Open to Public Networks"

Aby uzyskać więcej informacji na temat zarządzania zasadami zasobów za pomocą interfejsu wiersza polecenia platformy Azure, zobacz Zasady zasobów interfejsu wiersza polecenia platformy Azure.

Następne kroki

Zapoznaj się z następującymi artykułami, aby uzyskać więcej informacji na temat poleceń i zapytań w tym artykule.