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:
Installera ARMClient, om du inte redan gjort det. Det är ett verktyg som skickar HTTP-begäranden till Azure Resource Manager-baserade API:er.
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.
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.
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
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.
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-AzPolicyDefinitionsparas 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.
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.ResourceIdErsätt ContosoRG med namnet på den avsedda resursgruppen.
Omfångsparametern på fungerar med
New-AzPolicyAssignmenthanteringsgrupp, prenumeration, resursgrupp eller en enskild resurs. Parametern använder en fullständig resurssökväg som ResourceId-egenskapen påGet-AzResourceGroupreturnerar. 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 enMicrosoft.Compute/virtualMachinesvirtuell dator.- Resurs –
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName} - Resursgrupp –
/subscriptions/{subId}/resourceGroups/{rgName} - Prenumeration –
/subscriptions/{subId} - Hanteringsgrupp –
/providers/Microsoft.Management/managementGroups/{mgName}
- Resurs –
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.
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" } } }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å.
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>" } }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:
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.
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 AllKommandot 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 creationsparas 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.
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 createhanteringsgrupp, 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 enMicrosoft.Compute/virtualMachinesvirtuell dator.- Resurs –
/subscriptions/{subID}/resourceGroups/{rgName}/providers/{rType}/{rName} - Resursgrupp –
/subscriptions/{subID}/resourceGroups/{rgName} - Prenumeration –
/subscriptions/{subID} - Hanteringsgrupp –
/providers/Microsoft.Management/managementGroups/{mgName}
- Resurs –
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.