Dela via


Skapa principer programmässigt

Den här artikeln beskriver hur du programmatiskt skapar och hanterar principer. Azure Policy-definitioner tillämpar olika regler och effekter på dina resurser. Efterlevnaden ser till 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 uppfylls:

  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'
    

    Läs mer om att registrera och visa resursproviders i Resource Providers and Types (Resursproviders 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 skapar en principdefinition finns i Definitionsstruktur för Azure Policy.

  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 som är ö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 sparas 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 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 ScopeNew-AzPolicyAssignment fungerar med hanteringsgrupp, prenumeration, resursgrupp eller en enskild resurs. Parametern använder en fullständig resurssökväg som egenskapen ResourceIdGet-AzResourceGroup returnerar. Mönstret för Scope 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}
    • Abonnemang- /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 din hanteringsgrupp.

    Mer information om frågans struktur finns i Azure Policy Definitions – 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 hjälp av 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-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 skapar en principdefinition finns i Definitionsstruktur för Azure Policy.

  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 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 det anropas utan platsparametrar az policy definition creation sparas 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:t eller ett strängvärde för prenumerationsnamnet.
    • hanteringsgrupp – Spara i en hanteringsgrupp. Kräver ett strängvärde .
  3. Använd följande kommando för att skapa en principtilldelning. Ersätt exempelinformationen i vinkelparentessymboler < > med dina egna värden.

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

    Parametern scopeaz 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 scope 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}
    • Abonnemang- /subscriptions/{subID}
    • Hanteringsgrupp - /providers/Microsoft.Management/managementGroups/{mgName}

Du kan hämta Definitions-ID:t för Azure Policy 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 den principdefinition 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.