Programmatisch beleid maken

Dit artikel begeleidt u bij het programmatisch maken en beheren van beleidsregels. Azure Policy definities dwingen verschillende regels en effecten af voor uw resources. Afdwinging zorgt ervoor dat resources voldoen aan uw bedrijfsstandaarden en serviceovereenkomsten.

Zie Nalevingsgegevens ophalen voor informatie over naleving.

Vereisten

Voordat u begint, moet u ervoor zorgen dat aan de volgende vereisten wordt voldaan:

  1. Installeer de ARMClient als u dit nog niet hebt gedaan. Dit is een hulpprogramma waarmee HTTP-aanvragen worden verzonden naar Azure Resource Manager-API’s.

  2. Werk uw Azure PowerShell-module bij naar de nieuwste versie. Zie Azure PowerShell-module installeren voor gedetailleerde informatie. Zie Azure PowerShell voor meer informatie over de nieuwste versie.

  3. Registreer de Azure Policy Insights-resourceprovider met behulp van Azure PowerShell om te controleren of uw abonnement werkt met de resourceprovider. Als u een resourceprovider wilt registreren, moet u gemachtigd zijn om de bewerking voor de registratieactie voor de resourceprovider uit te voeren. Deze bewerking is opgenomen in de rollen Inzender en Eigenaar. Voer de volgende opdracht uit om de resourceprovider te registreren:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Zie Resourceproviders en -typen voor meer informatie over het registreren en weergeven van resourceproviders.

  4. Installeer Azure CLI als u dat nog niet hebt gedaan. U kunt de nieuwste versie downloaden via Azure CLI installeren in Windows.

Een beleidsdefinitie maken en toewijzen

De eerste stap voor een betere zichtbaarheid van uw resources is het maken en toewijzen van beleidsregels voor uw resources. De volgende stap is om te leren hoe u een beleid programmatisch maakt en toewijst. Het voorbeeldbeleid controleert opslagaccounts die zijn geopend voor alle openbare netwerken met behulp van PowerShell, Azure CLI en HTTP-aanvragen.

Een beleidsdefinitie maken en toewijzen met PowerShell

  1. Gebruik het volgende JSON-fragment om een JSON-bestand te maken met de naam AuditStorageAccounts.json.

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

    Zie Azure Policy Definitiestructuur voor meer informatie over het ontwerpen van een beleidsdefinitie.

  2. Voer de volgende opdracht uit om een beleidsdefinitie te maken met behulp van het bestand AuditStorageAccounts.json.

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

    Met de opdracht maakt u een beleidsdefinitie met de naam Opslagaccounts controleren die openstaan voor openbare netwerken. Zie New-AzPolicyDefinition voor meer informatie over andere parameters die u kunt gebruiken.

    Wanneer aangeroepen zonder locatieparameters, New-AzPolicyDefinition wordt standaard de beleidsdefinitie opgeslagen in het geselecteerde abonnement van de sessiecontext. Gebruik de volgende parameters om de definitie op een andere locatie op te slaan:

    • SubscriptionId : opslaan in een ander abonnement. Vereist een GUID-waarde .
    • ManagementGroupName : opslaan in een beheergroep. Vereist een tekenreekswaarde .
  3. Nadat u de beleidsdefinitie hebt gemaakt, kunt u een beleidstoewijzing maken door de volgende opdrachten uit te voeren:

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

    Vervang ContosoRG door de naam van de beoogde resourcegroep.

    De parameter Bereik op New-AzPolicyAssignment werkt met beheergroep, abonnement, resourcegroep of één resource. De parameter maakt gebruik van een volledig resourcepad, dat de eigenschap ResourceId op Get-AzResourceGroup retourneert. Het patroon voor Bereik voor elke container is als volgt. Vervang {rName}, {rgName}, {subId}en {mgName} door respectievelijk de resourcenaam, de naam van de resourcegroep, de abonnements-id en de naam van de beheergroep. {rType} wordt vervangen door het resourcetype van de resource, bijvoorbeeld Microsoft.Compute/virtualMachines voor een virtuele machine.

    • Resource- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Resourcegroep - /subscriptions/{subId}/resourceGroups/{rgName}
    • Abonnement- /subscriptions/{subId}
    • Beheergroep - /providers/Microsoft.Management/managementGroups/{mgName}

Zie Az.Resources voor meer informatie over het beheren van resourcebeleid met behulp van de module Resource Manager PowerShell.

Een beleidsdefinitie maken en toewijzen met ARMClient

Gebruik de volgende procedure om een beleidsdefinitie te maken.

  1. Kopieer het volgende JSON-fragment om een JSON-bestand te maken. U roept het bestand aan in de volgende stap.

    "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. Maak de beleidsdefinitie met behulp van een van de volgende aanroepen:

    # 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>
    

    Vervang de voorgaande {subscriptionId} door de id van uw abonnement of {managementGroupId} door de id van uw beheergroep.

    Zie voor meer informatie over de structuur van de query Azure Policy Definities maken of bijwerken en beleidsdefinities - Maken of bijwerken op beheergroep.

Gebruik de volgende procedure om een beleidstoewijzing te maken en de beleidsdefinitie toe te wijzen op het niveau van de resourcegroep.

  1. Kopieer het volgende JSON-fragment om een JSON-beleidstoewijzingsbestand te maken. Vervang voorbeeldinformatie in <> symbolen door uw eigen waarden.

    {
        "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. Maak de beleidstoewijzing met behulp van de volgende aanroep:

    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>
    

    Vervang voorbeeldinformatie in <> symbolen door uw eigen waarden.

    Zie Azure REST API-resources voor meer informatie over het maken van HTTP-aanroepen naar de REST API.

Een beleidsdefinitie maken en toewijzen met Azure CLI

Gebruik de volgende procedure om een beleidsdefinitie te maken:

  1. Kopieer het volgende JSON-fragment om een JSON-beleidstoewijzingsbestand te maken.

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

    Zie Azure Policy Definitiestructuur voor meer informatie over het ontwerpen van een beleidsdefinitie.

  2. Voer de volgende opdracht uit om een beleidsdefinitie te maken:

    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
    

    Met de opdracht maakt u een beleidsdefinitie met de naam Opslagaccounts controleren die openstaan voor openbare netwerken. Zie az policy definition create voor meer informatie over andere parameters die u kunt gebruiken.

    Wanneer aangeroepen zonder locatieparameters, az policy definition creation wordt standaard de beleidsdefinitie opgeslagen in het geselecteerde abonnement van de sessiecontext. Gebruik de volgende parameters om de definitie op een andere locatie op te slaan:

    • subscription : sla op in een ander abonnement. Vereist een GUID-waarde voor de abonnements-id of een tekenreekswaarde voor de abonnementsnaam.
    • management-group : opslaan in een beheergroep. Vereist een tekenreekswaarde .
  3. Gebruik de volgende opdracht om een beleidstoewijzing te maken. Vervang voorbeeldinformatie in <> symbolen door uw eigen waarden.

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

    De bereikparameter op az policy assignment create werkt met beheergroep, abonnement, resourcegroep of één resource. De parameter maakt gebruik van een volledig resourcepad. Het patroon voor het bereik voor elke container is als volgt. Vervang {rName}, {rgName}, {subId}en {mgName} door respectievelijk de resourcenaam, de naam van de resourcegroep, de abonnements-id en de naam van de beheergroep. {rType} wordt vervangen door het resourcetype van de resource, bijvoorbeeld Microsoft.Compute/virtualMachines voor een virtuele machine.

    • Resource- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Resourcegroep - /subscriptions/{subID}/resourceGroups/{rgName}
    • Abonnement- /subscriptions/{subID}
    • Beheergroep - /providers/Microsoft.Management/managementGroups/{mgName}

U kunt de Azure Policy definitie-id ophalen met behulp van PowerShell met de volgende opdracht:

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

De beleidsdefinitie-id voor de beleidsdefinitie die u hebt gemaakt, moet er ongeveer uitzien als in het volgende voorbeeld:

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

Zie Azure CLI-resourcebeleid voor meer informatie over het beheren van resourcebeleid met Azure CLI.

Volgende stappen

Raadpleeg de volgende artikelen voor meer informatie over de opdrachten en query's in dit artikel.