Skapa principer programmässigtProgrammatically create policies

Den här artikeln vägleder dig genom program mässigt skapa och hantera principer.This article walks you through programmatically creating and managing policies. Azure Policy definitioner tillämpar olika regler och effekter över dina resurser.Azure Policy definitions enforce different rules and effects over your resources. Tvång ser till att resurserna är kompatibla med företagets standarder och service nivå avtal.Enforcement makes sure that resources stay compliant with your corporate standards and service level agreements.

Information om kompatibilitet finns i Hämta efterlevnadsprinciper.For information about compliance, see getting compliance data.

FörutsättningarPrerequisites

Kontrol lera att följande krav är uppfyllda innan du börjar:Before you begin, make sure that the following prerequisites are met:

  1. Installera ARMClient, om du inte redan gjort det.If you haven't already, install the ARMClient. Det är ett verktyg som skickar HTTP-begäranden till Azure Resource Manager-baserade API:er.It's a tool that sends HTTP requests to Azure Resource Manager-based APIs.

  2. Uppdatera Azure PowerShell-modulen till den senaste versionen.Update your Azure PowerShell module to the latest version. Detaljerad information finns i Installera Azure PowerShell-modulen.See Install Azure PowerShell module for detailed information. Mer information om den senaste versionen finns i Azure PowerShell.For more information about the latest version, see Azure PowerShell.

  3. Registrera resurs leverantören Azure Policy Insights med Azure PowerShell för att kontrol lera att din prenumeration fungerar med resurs leverantören.Register the Azure Policy Insights resource provider using Azure PowerShell to validate that your subscription works with the resource provider. Om du vill registrera en resurs leverantör måste du ha behörighet att köra register åtgärds åtgärden för resurs leverantören.To register a resource provider, you must have permission to run the register action operation for the resource provider. Den här åtgärden ingår i rollerna Deltagare och Ägare.This operation is included in the Contributor and Owner roles. Registrera resursprovidern genom att köra följande kommando:Run the following command to register the resource provider:

    Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
    

    Mer information om att registrera och Visa resurs leverantörer finns i resurs leverantörer och typer.For more information about registering and viewing resource providers, see Resource Providers and Types.

  4. Installera Azure CLI om du inte redan gjort det.If you haven't already, install Azure CLI. Du kan hämta den senaste versionen när du installerar Azure CLI i Windows.You can get the latest version at Install Azure CLI on Windows.

Skapa och tilldela en principdefinitionCreate and assign a policy definition

Det första steget mot bättre insyn i resurserna är att skapa och tilldela principer över dina resurser.The first step toward better visibility of your resources is to create and assign policies over your resources. Nästa steg är att lära dig att program mässigt skapa och tilldela en princip.The next step is to learn how to programmatically create and assign a policy. Exempel principen granskar lagrings konton som är öppna för alla offentliga nätverk med PowerShell, Azure CLI och HTTP-begäranden.The example policy audits storage accounts that are open to all public networks using PowerShell, Azure CLI, and HTTP requests.

Skapa och tilldela en princip definition med PowerShellCreate and assign a policy definition with PowerShell

  1. Använd följande JSON-kodfragment för att skapa en JSON-fil med namnet AuditStorageAccounts.jspå.Use the following JSON snippet to create a JSON file with the name 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 princip definition finns i Azure policy definitions struktur.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Kör följande kommando för att skapa en princip definition med hjälp av AuditStorageAccounts.jsi filen.Run the following command to create a policy definition using the AuditStorageAccounts.json file.

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

    Kommandot skapar en princip definition med namnet Granska lagrings konton som är öppna i offentliga nätverk.The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Mer information om andra parametrar som du kan använda finns i New-AzPolicyDefinition.For more information about other parameters that you can use, see New-AzPolicyDefinition.

    När anropas utan plats parametrar, New-AzPolicyDefinition sparar standard princip definitionen i den valda prenumerationen av sessionens kontext.When called without location parameters, New-AzPolicyDefinition defaults to saving the policy definition in the selected subscription of the sessions context. Om du vill spara definitionen på en annan plats använder du följande parametrar:To save the definition to a different location, use the following parameters:

    • SubscriptionId – Spara i en annan prenumeration.SubscriptionId - Save to a different subscription. Kräver ett GUID -värde.Requires a GUID value.
    • ManagementGroupName – Spara till en hanterings grupp.ManagementGroupName - Save to a management group. Kräver ett sträng värde.Requires a string value.
  3. När du har skapat en princip definition kan du skapa en princip tilldelning genom att köra följande kommandon:After you create your policy definition, you can create a policy assignment by running the following commands:

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

    Ersätt conto sorg med namnet på den avsedda resurs gruppen.Replace ContosoRG with the name of your intended resource group.

    Omfattnings parametern i New-AzPolicyAssignment fungerar med hanterings grupp, prenumeration, resurs grupp eller en enskild resurs.The Scope parameter on New-AzPolicyAssignment works with management group, subscription, resource group, or a single resource. Parametern använder en fullständig resurs Sök väg som egenskapen ResourceID i Get-AzResourceGroup returnerar.The parameter uses a full resource path, which the ResourceId property on Get-AzResourceGroup returns. Mönstret för omfånget för varje behållare är följande.The pattern for Scope for each container is as follows. Ersätt {rName} , {rgName} , {subId} , och {mgName} med resurs namnet, resurs gruppens namn, prenumerations-ID och namn på hanterings gruppen.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} ersätts med resurs typen för resursen, till exempel Microsoft.Compute/virtualMachines för en virtuell dator.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Klusterresursen /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Resurs grupp – /subscriptions/{subId}/resourceGroups/{rgName}Resource group - /subscriptions/{subId}/resourceGroups/{rgName}
    • Prenumerera /subscriptions/{subId}Subscription - /subscriptions/{subId}
    • Hanterings grupp – /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Mer information om hur du hanterar resurs principer med hjälp av Resource Manager PowerShell-modulen finns i AZ. Resources.For more information about managing resource policies using the Resource Manager PowerShell module, see Az.Resources.

Skapa och tilldela en princip definition med ARMClientCreate and assign a policy definition using ARMClient

Använd följande procedur för att skapa en princip definition.Use the following procedure to create a policy definition.

  1. Kopiera följande JSON-kodfragment för att skapa en JSON-fil.Copy the following JSON snippet to create a JSON file. Du anropar filen i nästa steg.You'll call the file in the next step.

    "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 princip definitionen med något av följande anrop:Create the policy definition using one of the following calls:

    # For defining a policy in a subscription
    armclient PUT "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyDefinitions/AuditStorageAccounts?api-version=2019-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=2019-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 hanterings grupp.Replace the preceding {subscriptionId} with the ID of your subscription or {managementGroupId} with the ID of your management group.

    Mer information om frågans struktur finns i Azure policy definitioner – skapa eller uppdatera och princip definitioner – skapa eller uppdatera i hanterings gruppenFor more information about the structure of the query, see 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 princip tilldelning och tilldela princip definitionen på resurs grupps nivå.Use the following procedure to create a policy assignment and assign the policy definition at the resource group level.

  1. Kopiera följande JSON-kodfragment för att skapa en fil med en JSON-princip tilldelning.Copy the following JSON snippet to create a JSON policy assignment file. Ersätt exempel information i < > symboler med dina egna värden.Replace example information in <> symbols with your own values.

    {
        "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 princip tilldelningen med följande anrop:Create the policy assignment using the following call:

    armclient PUT "/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Authorization/policyAssignments/Audit Storage Accounts Open to Public Networks?api-version=2019-09-01" @<path to Assignment JSON file>
    

    Ersätt exempel information i < > symboler med dina egna värden.Replace example information in <> symbols with your own values.

    Mer information om hur du gör HTTP-anrop till REST API finns i Azure REST API-resurser.For more information about making HTTP calls to the REST API, see Azure REST API Resources.

Skapa och tilldela en princip definition med Azure CLICreate and assign a policy definition with Azure CLI

Använd följande procedur för att skapa en princip definition:To create a policy definition, use the following procedure:

  1. Kopiera följande JSON-kodfragment för att skapa en fil med en JSON-princip tilldelning.Copy the following JSON snippet to create a JSON policy assignment file.

    {
        "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 princip definition finns i Azure policy definitions struktur.For more information about authoring a policy definition, see Azure Policy Definition Structure.

  2. Kör följande kommando för att skapa en princip definition:Run the following command to create a policy definition:

    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 princip definition med namnet Granska lagrings konton som är öppna i offentliga nätverk.The command creates a policy definition named Audit Storage Accounts Open to Public Networks. Mer information om andra parametrar som du kan använda finns i AZ policy definition Create.For more information about other parameters that you can use, see az policy definition create.

    När anropas utan plats parametrar, az policy definition creation sparar standard princip definitionen i den valda prenumerationen av sessionens kontext.When called without location parameters, az policy definition creation defaults to saving the policy definition in the selected subscription of the sessions context. Om du vill spara definitionen på en annan plats använder du följande parametrar:To save the definition to a different location, use the following parameters:

    • prenumeration – Spara till en annan prenumeration.subscription - Save to a different subscription. Kräver ett GUID -värde för prenumerations-ID eller ett sträng värde för prenumerations namnet.Requires a GUID value for the subscription ID or a string value for the subscription name.
    • hantering-grupp – Spara i en hanterings grupp.management-group - Save to a management group. Kräver ett sträng värde.Requires a string value.
  3. Använd följande kommando för att skapa en princip tilldelning.Use the following command to create a policy assignment. Ersätt exempel information i < > symboler med dina egna värden.Replace example information in <> symbols with your own values.

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

    Omfattnings parametern i az policy assignment create fungerar med hanterings grupp, prenumeration, resurs grupp eller en enskild resurs.The scope parameter on az policy assignment create works with management group, subscription, resource group, or a single resource. Parametern använder en fullständig resurs Sök väg.The parameter uses a full resource path. Mönstret för omfånget för varje behållare är följande.The pattern for scope for each container is as follows. Ersätt {rName} , {rgName} , {subId} , och {mgName} med resurs namnet, resurs gruppens namn, prenumerations-ID och namn på hanterings gruppen.Replace {rName}, {rgName}, {subId}, and {mgName} with your resource name, resource group name, subscription ID, and management group name, respectively. {rType} ersätts med resurs typen för resursen, till exempel Microsoft.Compute/virtualMachines för en virtuell dator.{rType} would be replaced with the resource type of the resource, such as Microsoft.Compute/virtualMachines for a VM.

    • Klusterresursen /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}Resource - /subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName}
    • Resurs grupp – /subscriptions/{subID}/resourceGroups/{rgName}Resource group - /subscriptions/{subID}/resourceGroups/{rgName}
    • Prenumerera /subscriptions/{subID}Subscription - /subscriptions/{subID}
    • Hanterings grupp – /providers/Microsoft.Management/managementGroups/{mgName}Management group - /providers/Microsoft.Management/managementGroups/{mgName}

Du kan hämta Azure Policy Definitions-ID med hjälp av PowerShell med följande kommando:You can get the Azure Policy Definition ID by using PowerShell with the following command:

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

Princip Definitions-ID: t för den princip definition som du skapade bör likna följande exempel:The policy definition ID for the policy definition that you created should resemble the following example:

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

Mer information om hur du kan hantera resurs principer med Azure CLI finns i resurs principer för Azure CLI.For more information about how you can manage resource policies with Azure CLI, see Azure CLI Resource Policies.

Nästa stegNext steps

Läs följande artiklar om du vill ha mer information om kommandon och frågor i den här artikeln.Review the following articles for more information about the commands and queries in this article.