Rychlý start: Vytvoření přiřazení zásad k identifikaci nevyhovujících prostředků pomocí šablony ARM

V tomto rychlém startu použijete šablonu Azure Resource Manageru (šablonu ARM) k vytvoření přiřazení zásad, které ověřuje dodržování předpisů prostředků pomocí zásad Azure. Zásada se přiřadí ke skupině prostředků a provede audit virtuálních počítačů, které nepoužívají spravované disky. Po vytvoření přiřazení zásady identifikujete nevyhovující virtuální počítače.

Šablona Azure Resource Manageru je soubor JSON (JavaScript Object Notation), který definuje infrastrukturu a konfiguraci projektu. Tato šablona používá deklarativní syntaxi. Popíšete zamýšlené nasazení, aniž byste museli psát posloupnost programovacích příkazů pro vytvoření nasazení.

Pokud vaše prostředí splňuje požadavky a jste obeznámeni s používáním šablon ARM, vyberte tlačítko Nasazení do Azure. Šablona se otevře na webu Azure Portal.

Snímek obrazovky s tlačítkem Nasadit do Azure pro přiřazení zásady pomocí šablony Azure Resource Manageru

Požadavky

  • Pokud nemáte účet Azure, vytvořte si bezplatný účet před tím, než začnete.
  • Azure PowerShell nebo Azure CLI.
  • Visual Studio Code a nástroje Azure Resource Manageru (ARM).
  • Microsoft.PolicyInsights musí být zaregistrovaný ve vašem předplatném Azure. Pokud chcete zaregistrovat poskytovatele prostředků, musíte mít oprávnění k registraci poskytovatelů prostředků. Toto oprávnění je součástí rolí Přispěvatel a Vlastník.
  • Skupina prostředků s alespoň jedním virtuálním počítačem, který nepoužívá spravované disky.

Kontrola šablony

Šablona ARM vytvoří přiřazení zásady pro obor skupiny prostředků a přiřadí předdefinované definice zásad Audit virtuálních počítačů, které nepoužívají spravované disky.

Vytvořte následující šablonu ARM jako policy-assignment.json.

  1. Otevřete Visual Studio Code a vyberte Soubor>nový textový soubor.
  2. Zkopírujte a vložte šablonu ARM do editoru Visual Studio Code.
  3. Vyberte Uložit soubor>a použijte název souboru policy-assignment.json.
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "policyAssignmentName": {
      "type": "string",
      "defaultValue": "audit-vm-managed-disks",
      "metadata": {
        "description": "Policy assignment name used in assignment's resource ID"
      }
    },
    "policyDefinitionID": {
      "type": "string",
      "defaultValue": "/providers/Microsoft.Authorization/policyDefinitions/06a78e20-9358-41c9-923c-fb736d382a4d",
      "metadata": {
        "description": "Policy definition ID"
      }
    },
    "policyDisplayName": {
      "type": "string",
      "defaultValue": "Audit VM managed disks",
      "metadata": {
        "description": "Display name for Azure portal"
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Authorization/policyAssignments",
      "apiVersion": "2023-04-01",
      "name": "[parameters('policyAssignmentName')]",
      "properties": {
        "policyDefinitionId": "[parameters('policyDefinitionID')]",
        "description": "Policy assignment to resource group scope created with ARM template",
        "displayName": "[parameters('policyDisplayName')]",
        "nonComplianceMessages": [
          {
            "message": "Virtual machines should use managed disks"
          }
        ]
      }
    }
  ],
  "outputs": {
    "assignmentId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Authorization/policyAssignments', parameters('policyAssignmentName'))]"
    }
  }
}

Typ prostředku definovaný v šabloně ARM je Microsoft.Authorization/policyAssignments.

Šablona používá k nasazení přiřazení zásady tři parametry:

  • policyAssignmentName vytvoří přiřazení zásady s názvem audit-vm-managed-disks.
  • policyDefinitionID používá ID předdefinované definice zásady. Pro referenci jsou příkazy pro získání ID v části pro nasazení šablony.
  • policyDisplayName vytvoří zobrazovaný název, který je viditelný na webu Azure Portal.

Další informace o souborech šablon ARM:

Nasazení šablony ARM

Šablonu ARM můžete nasadit pomocí Azure PowerShellu nebo Azure CLI.

Z relace terminálu editoru Visual Studio Code se připojte k Azure. Pokud máte více než jedno předplatné, spusťte příkazy pro nastavení kontextu pro vaše předplatné. <subscriptionID> nahraďte ID vašeho předplatného Azure.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

Můžete ověřit, jestli Microsoft.PolicyInsights je zaregistrovaný. Pokud tomu tak není, můžete spustit příkaz pro registraci poskytovatele prostředků.

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

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Další informace najdete v rutině Get-AzResourceProvider a Register-AzResourceProvider.

Následující příkazy zobrazují hodnotu parametru policyDefinitionID :

(Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId

Následující příkazy nasadí definici zásady do vaší skupiny prostředků. Nahraďte <resourceGroupName> názvem vaší skupiny prostředků:

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

$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.json'
}

New-AzResourceGroupDeployment @deployparms

Proměnná $rg ukládá vlastnosti pro skupinu prostředků. Proměnná $deployparms pomocí splattingu vytváří hodnoty parametrů a zlepšuje čitelnost. Příkaz New-AzResourceGroupDeployment používá hodnoty parametrů definované v $deployparms proměnné.

  • Name je název nasazení zobrazený ve výstupu a v Azure pro nasazení skupiny prostředků.
  • ResourceGroupName$rg.ResourceGroupName použije vlastnost k získání názvu vaší skupiny prostředků, ve které je zásada přiřazena.
  • TemplateFile určuje název a umístění šablony ARM v místním počítači.

Nasazení přiřazení zásad můžete ověřit pomocí následujícího příkazu:

Příkaz použije $rg.ResourceId vlastnost k získání ID skupiny prostředků.

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

Další informace najdete v tématu Get-AzPolicyAssignment.

Zjištění nevyhovujících prostředků

Po nasazení přiřazení zásad se virtuální počítače nasazené do skupiny prostředků auditují kvůli dodržování zásad spravovaného disku.

Stav dodržování předpisů pro nové přiřazení zásad trvá několik minut, než se aktivuje a poskytne výsledky o stavu zásady.

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

Get-AzPolicyState @complianceparms

Proměnná $complianceparms vytvoří hodnoty parametrů použité v Get-AzPolicyState příkazu.

  • ResourceGroupName získá název skupiny prostředků z $rg.ResourceGroupName vlastnosti.
  • PolicyAssignmentName určuje název použitý při vytvoření přiřazení zásady.
  • Filter používá výraz k vyhledání prostředků, které nevyhovují přiřazení zásad.

Výsledky se podobají následujícímu příkladu a ComplianceState ukazují NonCompliant:

Timestamp                : 2/26/2024 19:02:56
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, ]}

Další informace najdete v rutině Get-AzPolicyState.

Vyčištění prostředků

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

Odhlášení z relace Azure PowerShellu:

Disconnect-AzAccount

Další kroky

V tomto rychlém startu jste přiřadili definici zásady pro identifikaci prostředků, které nedodržují předpisy, ve vašem prostředí Azure.

Další informace o přiřazování zásad, které ověřují dodržování předpisů prostředků, najdete v tomto kurzu.