Snabbstart: Skapa en principtilldelning för att identifiera icke-kompatibla resurser med Hjälp av Azure PowerShell

Det första steget mot att förstå kompatibilitet i Azure är att identifiera dina resursers status. I den här snabbstarten skapar du en principtilldelning för att identifiera icke-kompatibla resurser med hjälp av Azure PowerShell. 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.

Azure PowerShell-modulerna kan användas för att hantera Azure-resurser från kommandoraden eller i skript. Den här artikeln beskriver hur du använder Azure PowerShell för att skapa en principtilldelning.

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.
  • Azure PowerShell.
  • 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.

Ansluta till Azure

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>

Registrera resursprovider

När en resursprovider registreras är den tillgänglig att använda i din Azure-prenumeration.

Kontrollera om Microsoft.PolicyInsights är registrerad genom att köra Get-AzResourceProvider. Resursprovidern innehåller flera resurstyper. Om resultatet NotRegistered körs Register-AzResourceProvider:

 Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Mer information finns i Get-AzResourceProvider och Register-AzResourceProvider.

Skapa principtilldelning

Använd följande kommandon för att skapa en ny principtilldelning för resursgruppen. I det här exemplet används en befintlig resursgrupp som innehåller en virtuell dator utan hanterade diskar. Resursgruppen är omfånget för principtilldelningen. I det här exemplet används den inbyggda principdefinitionen Granska virtuella datorer som inte använder hanterade diskar.

Kör följande kommandon och ersätt <resourceGroupName> med resursgruppens namn:

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$definition = Get-AzPolicyDefinition |
  Where-Object { $_.DisplayName -eq 'Audit VMs that do not use managed disks' }

Variabeln $rg lagrar egenskaper för resursgruppen och variabeln $definition lagrar principdefinitionens egenskaper. Egenskaperna används i efterföljande kommandon.

Kör följande kommando för att skapa principtilldelningen:

$policyparms = @{
Name = 'audit-vm-managed-disks'
DisplayName = 'Audit VM managed disks'
Scope = $rg.ResourceId
PolicyDefinition = $definition
Description = 'Az PowerShell policy assignment to resource group'
}

New-AzPolicyAssignment @policyparms

Variabeln $policyparms använder splatting för att skapa parametervärden och förbättra läsbarheten. Kommandot New-AzPolicyAssignment använder parametervärdena som definierats i variabeln $policyparms .

  • Name skapar det principtilldelningsnamn som används i tilldelningens ResourceId.
  • DisplayName är namnet på principtilldelningen och visas i Azure-portalen.
  • Scope använder egenskapen $rg.ResourceId för att tilldela principen till resursgruppen.
  • PolicyDefinition tilldelar den principdefinition som lagras i variabeln $definition .
  • Description kan användas för att lägga till kontext om principtilldelningen.

Resultatet av principtilldelningen liknar följande exempel:

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

Kör följande kommando om du vill spela upp information om principtilldelningen på nytt:

Get-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId

Identifiera icke-kompatibla resurser

Efterlevnadstillståndet för en ny principtilldelning tar några minuter att bli aktiv och ge resultat om principens tillstånd.

Använd följande kommando för att identifiera resurser som inte är kompatibla med den principtilldelning som du skapade:

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

Variabeln $complianceparms använder splatting för att skapa 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/14/2024 18:25:37
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

Kör följande kommando för att ta bort principtilldelningen:

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.