Skapa principer programmässigt

Den här artikeln visar hur du programmatiskt skapar och hanterar principer. Azure Policy olika regler och effekter på dina resurser. Framtvingande ser till att resurser efterlever 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 din 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 Azure Policy Insights resursprovidern med Azure PowerShell för att verifiera att prenumerationen 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 resursproviders finns i Resursproviders och typer.

  4. Installera Azure CLI om du inte redan gjort det. 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 skapar och tilldelar en princip programmatiskt. Exempelprincipen granskar lagringskonton som är öppna för alla offentliga nätverk med 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.jspå.

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

    Mer information om hur du skapar en principdefinition finns i Azure Policy definitionsstruktur.

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

    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. Mer information om andra parametrar som du kan använda finns i New-AzPolicyDefinition.

    När den anropas utan platsparametrar New-AzPolicyDefinition sparas 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 till 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.

    Omfångsparametern på fungerar med New-AzPolicyAssignment 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} , , och med {rgName} {subId} {mgName} resursnamnet, resursgruppens namn, prenumerations-ID och hanteringsgruppens namn. {rType} ersätts med resurstypen för resursen, till exempel för en Microsoft.Compute/virtualMachines 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 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 Definitions - Create or Update and Policy Definitions - Create or Update At Management Group.

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 finns i Azure REST API Resources.

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 skapar 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. 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 sparas 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ångsparametern på fungerar med az policy assignment create 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} , , och med {rgName} {subId} {mgName} resursnamnet, resursgruppens namn, prenumerations-ID och hanteringsgruppens namn. {rType} ersätts med resurstypen för resursen, till exempel för en Microsoft.Compute/virtualMachines 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 definition-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.