Skapa principer programmässigt

Den här artikeln vägleder dig genom att programmatiskt skapa och hantera principer. Azure Policy definitioner framtvingar olika regler och effekter för dina resurser. Framtvingandet ser till att resurserna följer företagets standarder och serviceavtal.

Information om efterlevnad finns i hämta efterlevnadsdata.

Förutsättningar

Kontrollera att följande krav är uppfyllda innan du börjar:

  1. Installera ARMClient, om du inte redan gjort det. Det är ett verktyg som skickar HTTP-begäranden till Azure Resource Manager-baserade API:er.

  2. Uppdatera modulen Azure PowerShell till den senaste versionen. Detaljerad information finns i Installera Azure PowerShell-modulen. Mer information om den senaste versionen finns i Azure PowerShell.

  3. Registrera resursprovidern Azure Policy Insights med Azure PowerShell för att verifiera att din prenumeration fungerar med resursprovidern. Om du vill registrera en resursprovider måste du ha behörighet att köra åtgärden registrera för resursprovidern. Den här åtgärden ingår i rollerna Deltagare och Ägare. Registrera resursprovidern genom att köra följande kommando:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Mer information om hur du registrerar och visar resursprovidrar finns i Resursprovidrar och typer.

  4. Om du inte redan har gjort det installerar du Azure CLI. Du kan hämta den senaste versionen på Installera Azure CLI i Windows.

Skapa och tilldela en principdefinition

Det första steget mot bättre synlighet för dina resurser är att skapa och tilldela principer för dina resurser. Nästa steg är att lära dig hur du programmatiskt skapar och tilldelar en princip. Exempelprincipen granskar lagringskonton som är öppna för alla offentliga nätverk med hjälp av PowerShell-, Azure CLI- och HTTP-begäranden.

Skapa och tilldela en principdefinition med PowerShell

  1. Använd följande JSON-kodfragment för att skapa en JSON-fil med namnet AuditStorageAccounts.json.

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

    Mer information om hur du redigerar en principdefinition finns i Azure Policy Definitionsstruktur.

  2. Kör följande kommando för att skapa en principdefinition med hjälp av filen AuditStorageAccounts.json.

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

    Kommandot skapar en principdefinition med namnet Granska lagringskonton öppna för offentliga nätverk. Mer information om andra parametrar som du kan använda finns i New-AzPolicyDefinition.

    När det anropas utan platsparametrar New-AzPolicyDefinition sparar du som standard principdefinitionen i den valda prenumerationen för sessionskontexten. Om du vill spara definitionen på en annan plats använder du följande parametrar:

    • SubscriptionId – Spara till en annan prenumeration. Kräver ett GUID-värde .
    • ManagementGroupName – Spara i en hanteringsgrupp. Kräver ett strängvärde .
  3. När du har skapat din principdefinition kan du skapa en principtilldelning genom att köra följande kommandon:

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

    Ersätt ContosoRG med namnet på den avsedda resursgruppen.

    Parametern OmfångNew-AzPolicyAssignment fungerar med hanteringsgrupp, prenumeration, resursgrupp eller en enskild resurs. Parametern använder en fullständig resurssökväg, som resourceid-egenskapen vid Get-AzResourceGroup returnerar. Mönstret för Omfång för varje container är följande. Ersätt {rName}, {rgName}, {subId}och {mgName} med resursnamnet, resursgruppens namn, prenumerations-ID respektive hanteringsgruppsnamn. {rType} skulle ersättas med resurstypen för resursen, till exempel Microsoft.Compute/virtualMachines för en virtuell dator.

    • Resurs- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Resursgrupp – /subscriptions/{subId}/resourceGroups/{rgName}
    • Prenumeration- /subscriptions/{subId}
    • Hanteringsgrupp – /providers/Microsoft.Management/managementGroups/{mgName}

Mer information om hur du hanterar resursprinciper med hjälp av Resource Manager PowerShell-modulen finns i Az.Resources.

Skapa och tilldela en principdefinition med ARMClient

Använd följande procedur för att skapa en principdefinition.

  1. Kopiera följande JSON-kodfragment för att skapa en JSON-fil. Du anropar filen i nästa steg.

    "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. Skapa principdefinitionen med något av följande anrop:

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

    Ersätt föregående {subscriptionId} med ID:t för din prenumeration eller {managementGroupId} med ID:t för hanteringsgruppen.

    Mer information om frågans struktur finns i Azure Policy Definitioner – Skapa eller uppdatera och principdefinitioner – Skapa eller uppdatera i hanteringsgruppen.

Använd följande procedur för att skapa en principtilldelning och tilldela principdefinitionen på resursgruppsnivå.

  1. Kopiera följande JSON-kodfragment för att skapa en JSON-principtilldelningsfil. Ersätt exempelinformation i <> symboler med dina egna värden.

    {
        "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. Skapa principtilldelningen med följande anrop:

    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>
    

    Ersätt exempelinformation i <> symboler med dina egna värden.

    Mer information om hur du gör HTTP-anrop till REST-API:et finns i Azure REST API-resurser.

Skapa och tilldela en principdefinition med Azure CLI

Använd följande procedur för att skapa en principdefinition:

  1. Kopiera följande JSON-kodfragment för att skapa en JSON-principtilldelningsfil.

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

    Mer information om hur du redigerar en principdefinition finns i Azure Policy Definitionsstruktur.

  2. Kör följande kommando för att skapa en principdefinition:

    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
    

    Kommandot skapar en principdefinition med namnet Granska lagringskonton öppna för offentliga nätverk. Mer information om andra parametrar som du kan använda finns i az policy definition create.

    När det anropas utan platsparametrar az policy definition creation sparar du som standard principdefinitionen i den valda prenumerationen för sessionskontexten. Om du vill spara definitionen på en annan plats använder du följande parametrar:

    • prenumeration – Spara till en annan prenumeration. Kräver ett GUID-värde för prenumerations-ID:t eller ett strängvärde för prenumerationsnamnet.
    • management-group – Spara till en hanteringsgrupp. Kräver ett strängvärde .
  3. Använd följande kommando för att skapa en principtilldelning. Ersätt exempelinformation i <> symboler med dina egna värden.

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

    Omfångsparameternaz policy assignment create fungerar med hanteringsgrupp, prenumeration, resursgrupp eller en enskild resurs. Parametern använder en fullständig resurssökväg. Mönstret för omfånget för varje container är följande. Ersätt {rName}, {rgName}, {subId}och {mgName} med resursnamnet, resursgruppens namn, prenumerations-ID respektive hanteringsgruppsnamn. {rType} skulle ersättas med resurstypen för resursen, till exempel Microsoft.Compute/virtualMachines för en virtuell dator.

    • Resurs- /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Resursgrupp – /subscriptions/{subID}/resourceGroups/{rgName}
    • Prenumeration- /subscriptions/{subID}
    • Hanteringsgrupp – /providers/Microsoft.Management/managementGroups/{mgName}

Du kan hämta Azure Policy definitions-ID:t med hjälp av PowerShell med följande kommando:

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

Principdefinitions-ID:t för principdefinitionen som du skapade bör likna följande exempel:

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

Mer information om hur du kan hantera resursprinciper med Azure CLI finns i Resursprinciper för Azure CLI.

Nästa steg

Läs följande artiklar om du vill ha mer information om kommandon och frågor i den här artikeln.