Skapa principer programmässigt

Den här artikeln vägleder dig genom att programmatiskt skapa och hantera principer. Azure Policy definitioner tillämpar olika regler och effekter på dina resurser. Framtvingande säkerställer att resurserna följer företagets standarder och serviceavtal.

Information om efterlevnad finns i hämta efterlevnadsdata.

Förutsättningar

Innan du börjar kontrollerar du att följande krav är uppfyllda:

  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 Azure PowerShell-modulen till den senaste versionen. Detaljerad information finns i Installera Azure PowerShell-modulen. Mer information om den senaste versionen finns i Azure PowerShell.

  3. Registrera Azure Policy Insights resursprovidern med hjälp av 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 på 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 Audit Storage Accounts Open to Public Networks (Granska Storage konton som är öppna för offentliga nätverk). Mer information om andra parametrar som du kan använda finns i New-AzPolicyDefinition.

    När den anropas utan platsparametrar New-AzPolicyDefinition sparar principdefinitionen som standard 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 principdefinitionen 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-egenskapenGet-AzResourceGroup returnerar. Mönstret för Omfång för varje container är följande. Ersätt {rName}, {rgName}, {subId}och {mgName} med ditt resursnamn, resursgruppsnamn, prenumerations-ID respektive hanteringsgruppsnamn. {rType} ersätts 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 vid hanteringsgrupp.

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 exempelinformationen 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 exempelinformationen i <> symboler med dina egna värden.

    Mer information om hur du gör HTTP-anrop till REST API 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 Audit Storage Accounts Open to Public Networks (Granska Storage konton som är öppna för offentliga nätverk). Mer information om andra parametrar som du kan använda finns i az policy definition create.

    När den anropas utan platsparametrar az policy definition creation sparar principdefinitionen som standard 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 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 exempelinformationen 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 ditt resursnamn, resursgruppsnamn, prenumerations-ID respektive hanteringsgruppsnamn. {rType} ersätts 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 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 för mer information om kommandon och frågor i den här artikeln.