Snabbstart: Skapa en principtilldelning för att identifiera icke-kompatibla resurser med hjälp av en Bicep-fil
I den här snabbstarten använder du en Bicep-fil för att skapa en principtilldelning som validerar resursens efterlevnad med en Azure-princip. Principen tilldelas till en resursgrupp och granskar virtuella datorer som inte använder hanterade diskar. När du har skapat principtilldelningen identifierar du icke-kompatibla virtuella datorer.
Bicep är ett domänspecifikt språk (DSL) som använder deklarativ syntax för att distribuera Azure-resurser. Det ger koncis syntax, tillförlitlig typsäkerhet och stöd för återanvändning av kod. Bicep erbjuder den bästa redigeringsupplevelsen för dina infrastruktur-som-kod-lösningar i Azure.
När du tilldelar en inbyggd princip eller initiativdefinition är det valfritt att referera till en version. Principtilldelningar av inbyggda definitioner är standard för den senaste versionen och ärver automatiskt delversionsändringar om inget annat anges.
Förutsättningar
- Om du inte har något Azure-konto skapar du ett kostnadsfritt konto innan du börjar.
- Bicep.
- Azure PowerShell eller Azure CLI.
- Visual Studio Code och Bicep-tillägget för Visual Studio Code.
Microsoft.PolicyInsights
måste vara registrerad i din Azure-prenumeration. Om du vill registrera en resursprovider måste du ha behörighet att registrera resursprovidrar. Behörigheten ingår i rollerna Deltagare och Ägare.- En resursgrupp med minst en virtuell dator som inte använder hanterade diskar.
Granska Bicep-filen
Bicep-filen skapar en principtilldelning för ett resursgruppsomfång och tilldelar den inbyggda principdefinitionen Granska virtuella datorer som inte använder hanterade diskar.
Skapa följande Bicep-fil som policy-assignment.bicep.
- Öppna Visual Studio Code och välj Fil>Ny textfil.
- Kopiera och klistra in Bicep-filen i Visual Studio Code.
- Välj Spara fil>och använd filnamnet policy-assignment.bicep.
param policyAssignmentName string = 'audit-vm-managed-disks'
param policyDefinitionID string = '/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d'
param policyDisplayName string = 'Audit VM managed disks'
resource assignment 'Microsoft.Authorization/policyAssignments@2023-04-01' = {
name: policyAssignmentName
scope: resourceGroup()
properties: {
policyDefinitionId: policyDefinitionID
description: 'Policy assignment to resource group scope created with Bicep file'
displayName: policyDisplayName
nonComplianceMessages: [
{
message: 'Virtual machines should use managed disks'
}
]
}
}
output assignmentId string = assignment.id
Resurstypen som definieras i Bicep-filen är Microsoft.Authorization/policyAssignments.
Bicep-filen använder tre parametrar för att distribuera principtilldelningen:
policyAssignmentName
skapar principtilldelningen med namnet audit-vm-managed-disks.policyDefinitionID
använder ID:t för den inbyggda principdefinitionen. Som referens finns kommandona för att hämta ID:t i avsnittet för att distribuera mallen.policyDisplayName
skapar ett visningsnamn som visas i Azure Portal.
Mer information om Bicep-filer:
- Om du vill hitta fler Bicep-exempel går du till Bläddra bland kodexempel.
- Mer information om mallreferenser för distributioner finns i Referens för Azure-mallar.
- Om du vill lära dig hur du utvecklar Bicep-filer går du till Bicep-dokumentationen.
- Om du vill veta mer om distributioner på prenumerationsnivå går du till Prenumerationsdistributioner med Bicep-filer.
Distribuera Bicep-filen
Du kan distribuera Bicep-filen med Azure PowerShell eller Azure CLI.
Anslut till Azure från en terminalsession i Visual Studio Code. Om du har fler än en prenumeration kör du kommandona för att ange kontext till din prenumeration. Ersätt <subscriptionID>
med ditt Azure-prenumerations-ID.
Connect-AzAccount
# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>
Du kan kontrollera om Microsoft.PolicyInsights
det är registrerat. Om det inte är det kan du köra ett kommando för att registrera resursprovidern.
Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
Select-Object -Property ResourceTypes, RegistrationState
Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
Mer information finns i Get-AzResourceProvider och Register-AzResourceProvider.
Följande kommandon visar policyDefinitionID
parameterns värde:
(Get-AzPolicyDefinition |
Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId
Följande kommandon distribuerar principdefinitionen till resursgruppen. Ersätt <resourceGroupName>
med resursgruppens namn:
$rg = Get-AzResourceGroup -Name '<resourceGroupName>'
$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.bicep'
}
New-AzResourceGroupDeployment @deployparms
Variabeln $rg
lagrar egenskaper för resursgruppen. Variabeln $deployparms
använder splatting för att skapa parametervärden och förbättra läsbarheten. Kommandot New-AzResourceGroupDeployment
använder parametervärdena som definierats i variabeln $deployparms
.
Name
är distributionsnamnet som visas i utdata och i Azure för resursgruppens distributioner.ResourceGroupName
använder egenskapen$rg.ResourceGroupName
för att hämta namnet på resursgruppen där principen har tilldelats.TemplateFile
anger Bicep-filens namn och plats på den lokala datorn.
Du kan verifiera principtilldelningens distribution med följande kommando:
Kommandot använder $rg.ResourceId
egenskapen för att hämta resursgruppens ID.
Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Name : audit-vm-managed-disks
ResourceId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
ResourceName : audit-vm-managed-disks
ResourceGroupName : {resourceGroupName}
ResourceType : Microsoft.Authorization/policyAssignments
SubscriptionId : {subscriptionId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Authorization/policyAssignments/audit-vm-managed-disks
Properties : Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Policy.PsPolicyAssignmentProperties
Mer information finns i Get-AzPolicyAssignment.
Identifiera icke-kompatibla resurser
När principtilldelningen har distribuerats granskas virtuella datorer som distribueras till resursgruppen för kompatibilitet med principen för hanterade diskar.
Efterlevnadstillståndet för en ny principtilldelning tar några minuter att bli aktiv och ge resultat om principens tillstånd.
$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}
Get-AzPolicyState @complianceparms
Variabeln $complianceparms
skapar parametervärden som används i Get-AzPolicyState
kommandot.
ResourceGroupName
hämtar resursgruppens namn från egenskapen$rg.ResourceGroupName
.PolicyAssignmentName
anger namnet som användes när principtilldelningen skapades.Filter
använder ett uttryck för att hitta resurser som inte är kompatibla med principtilldelningen.
Dina resultat liknar följande exempel och ComplianceState
visar NonCompliant
:
Timestamp : 2/20/2024 18:55:45
ResourceId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.compute/virtualmachines/{vmId}
PolicyAssignmentId : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/microsoft.authorization/policyassignments/audit-vm-managed-disks
PolicyDefinitionId : /providers/microsoft.authorization/policydefinitions/06a78e20-9358-41c9-923c-fb736d382a4d
IsCompliant : False
SubscriptionId : {subscriptionId}
ResourceType : Microsoft.Compute/virtualMachines
ResourceLocation : {location}
ResourceGroup : {resourceGroupName}
ResourceTags : tbd
PolicyAssignmentName : audit-vm-managed-disks
PolicyAssignmentOwner : tbd
PolicyAssignmentScope : /subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}
PolicyDefinitionName : 06a78e20-9358-41c9-923c-fb736d382a4d
PolicyDefinitionAction : audit
PolicyDefinitionCategory : tbd
ManagementGroupIds : {managementGroupId}
ComplianceState : NonCompliant
AdditionalProperties : {[complianceReasonCode, ]}
Mer information finns i Get-AzPolicyState.
Rensa resurser
Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Logga ut från Azure PowerShell-sessionen:
Disconnect-AzAccount
Nästa steg
I den här snabbstarten har du tilldelat en principdefinition för att identifiera icke-kompatibla resurser i Azure-miljön.
Om du vill veta mer om hur du tilldelar principer som validerar resursefterlevnad fortsätter du till självstudien.