Dela via


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. Policyn 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 som standard den senaste versionen och ärver automatiskt mindre versionsändringar om inget annat anges.

Förutsättningar

Granska Bicep-filen

Bicep-filen skapar en principtilldelning för resursgruppens omfång och applicerar den inbyggda principdefinitionen Auditera virtuella datorer som inte använder hanterade diskar.

Skapa följande Bicep-fil som policy-assignment.bicep.

  1. Öppna Visual Studio Code och välj Fil>Ny textfil.
  2. Kopiera och klistra in Bicep-filen i Visual Studio Code.
  3. Välj >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 policytilldelningen:

  • policyAssignmentName skapar principtilldelningen som heter 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.
  • policyDisplayNameskapar ett visningsnamn som visas i Azure Portal.

För mer information om 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 ä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

För mer information, gå till 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 policytilldelning tar några minuter att bli aktivt och ge resultat om policytillståndet.

$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.

För att lära dig mer om hur man tilldelar policyer som validerar resursefterlevnad, fortsätt till handledningen.