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

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.

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

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