Szybki start: tworzenie przypisania zasad w celu identyfikowania niezgodnych zasobów przy użyciu szablonu usługi ARM

W tym przewodniku Szybki start użyjesz szablonu usługi Azure Resource Manager (szablonu usługi ARM), aby utworzyć przypisanie zasad, które weryfikuje zgodność zasobu z zasadami platformy Azure. Zasady są przypisywane do grupy zasobów i przeprowadza inspekcję maszyn wirtualnych, które nie korzystają z dysków zarządzanych. Po utworzeniu przypisania zasad należy zidentyfikować niezgodne maszyny wirtualne.

Szablon usługi Azure Resource Manager to plik JavaScript Object Notation (JSON), który definiuje infrastrukturę i konfigurację projektu. W szablonie używana jest składnia deklaratywna. Możesz opisać zamierzone wdrożenie bez konieczności pisania sekwencji poleceń programowania w celu utworzenia wdrożenia.

Jeśli Twoje środowisko spełnia wymagania wstępne i masz doświadczenie w korzystaniu z szablonów ARM, wybierz przycisk Wdróż na platformie Azure. Szablon zostanie otwarty w witrynie Azure Portal.

Zrzut ekranu przedstawiający przycisk Wdróż na platformie Azure w celu przypisania zasad za pomocą szablonu usługi Azure Resource Manager.

Wymagania wstępne

  • Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
  • Program Azure PowerShell lub interfejs wiersza polecenia platformy Azure.
  • Program Visual Studio Code i narzędzia usługi Azure Resource Manager (ARM).
  • Microsoft.PolicyInsights musi być zarejestrowana w ramach subskrypcji platformy Azure. Aby zarejestrować dostawcę zasobów, musisz mieć uprawnienia do rejestrowania dostawców zasobów. To uprawnienie jest uwzględniane w rolach Współautor i Właściciel.
  • Grupa zasobów z co najmniej jedną maszyną wirtualną, która nie korzysta z dysków zarządzanych.

Przegląd szablonu

Szablon usługi ARM tworzy przypisanie zasad dla zakresu grupy zasobów i przypisuje wbudowaną definicję zasad Inspekcja maszyn wirtualnych, które nie korzystają z dysków zarządzanych.

Utwórz następujący szablon usługi ARM jako policy-assignment.json.

  1. Otwórz program Visual Studio Code i wybierz pozycję Plik>nowy plik tekstowy.
  2. Skopiuj i wklej szablon arm do programu Visual Studio Code.
  3. Wybierz pozycję Plik>Zapisz i użyj nazwy pliku 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 zasobu zdefiniowany w szablonie usługi ARM to Microsoft.Authorization/policyAssignments.

Szablon używa trzech parametrów do wdrożenia przypisania zasad:

  • policyAssignmentName Tworzy przypisanie zasad o nazwie audit-vm-managed-disks.
  • policyDefinitionID używa identyfikatora wbudowanej definicji zasad. Do celów referencyjnych polecenia umożliwiające pobranie identyfikatora znajdują się w sekcji dotyczącej wdrażania szablonu.
  • policyDisplayName Tworzy nazwę wyświetlaną widoczną w witrynie Azure Portal.

Aby uzyskać więcej informacji na temat plików szablonów usługi ARM:

Wdrażanie szablonu usługi ARM

Szablon usługi ARM można wdrożyć za pomocą programu Azure PowerShell lub interfejsu wiersza polecenia platformy Azure.

Z poziomu sesji terminalu programu Visual Studio Code nawiąż połączenie z platformą Azure. Jeśli masz więcej niż jedną subskrypcję, uruchom polecenia, aby ustawić kontekst na subskrypcję. Zamień wartość <subscriptionID> na identyfikator swojej subskrypcji platformy Azure.

Connect-AzAccount

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

Możesz sprawdzić, czy Microsoft.PolicyInsights jest zarejestrowany. Jeśli tak nie jest, możesz uruchomić polecenie w celu zarejestrowania dostawcy zasobów.

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

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

Aby uzyskać więcej informacji, przejdź do pozycji Get-AzResourceProvider i Register-AzResourceProvider.

Następujące polecenia wyświetlają wartość parametru policyDefinitionID :

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

Następujące polecenia wdrażają definicję zasad w grupie zasobów. Zastąp <resourceGroupName> ciąg nazwą grupy zasobów:

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

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

New-AzResourceGroupDeployment @deployparms

Zmienna $rg przechowuje właściwości dla grupy zasobów. Zmienna $deployparms używa splattingu , aby utworzyć wartości parametrów i zwiększyć czytelność. Polecenie New-AzResourceGroupDeployment używa wartości parametrów zdefiniowanych w zmiennej $deployparms .

  • Name to nazwa wdrożenia wyświetlana w danych wyjściowych i na platformie Azure dla wdrożeń grupy zasobów.
  • ResourceGroupName$rg.ResourceGroupName używa właściwości , aby uzyskać nazwę grupy zasobów, do której przypisano zasady.
  • TemplateFile określa nazwę i lokalizację szablonu usługi ARM na komputerze lokalnym.

Wdrożenie przypisania zasad można sprawdzić za pomocą następującego polecenia:

Polecenie używa $rg.ResourceId właściwości , aby uzyskać identyfikator grupy zasobów.

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

Aby uzyskać więcej informacji, przejdź do pozycji Get-AzPolicyAssignment.

Identyfikowanie niezgodnych zasobów

Po wdrożeniu przypisania zasad maszyny wirtualne wdrożone w grupie zasobów są poddawane inspekcji pod kątem zgodności z zasadami dysku zarządzanego.

Stan zgodności dla nowego przypisania zasad może potrwać kilka minut i dostarczyć wyniki dotyczące stanu zasad.

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

Get-AzPolicyState @complianceparms

Zmienna $complianceparms tworzy wartości parametrów używane w poleceniu Get-AzPolicyState .

  • ResourceGroupName pobiera nazwę grupy zasobów z $rg.ResourceGroupName właściwości .
  • PolicyAssignmentName określa nazwę używaną podczas tworzenia przypisania zasad.
  • Filter używa wyrażenia do znajdowania zasobów, które nie są zgodne z przypisaniem zasad.

Wyniki są podobne do poniższego przykładu i ComplianceState pokazują: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, ]}

Aby uzyskać więcej informacji, przejdź do polecenia Get-AzPolicyState.

Czyszczenie zasobów

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

Aby wylogować się z sesji programu Azure PowerShell:

Disconnect-AzAccount

Następne kroki

W tym przewodniku Szybki start została przypisana definicja zasad mających na celu zidentyfikowanie niezgodnych zasobów w środowisku platformy Azure.

Aby dowiedzieć się więcej na temat przypisywania zasad, które weryfikują zgodność zasobów, przejdź do samouczka.