Szybki start: tworzenie przypisania zasad w celu identyfikowania niezgodnych zasobów przy użyciu pliku Bicep

W tym przewodniku Szybki start użyjesz pliku Bicep, 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.

Bicep to język specyficzny dla domeny (DSL), który używa składni deklaratywnej do wdrażania zasobów platformy Azure. Zapewnia zwięzłą składnię, niezawodne bezpieczeństwo typów i obsługę ponownego użycia kodu. Bicep oferuje najlepsze środowisko tworzenia rozwiązań infrastruktury jako kodu na platformie Azure.

Wymagania wstępne

Przejrzyj plik Bicep

Plik Bicep tworzy przypisanie zasad dla zakresu grupy zasobów i przypisuje wbudowaną definicję zasad Inspekcja maszyn wirtualnych, które nie używają dysków zarządzanych.

Utwórz następujący plik Bicep jako policy-assignment.bicep.

  1. Otwórz program Visual Studio Code i wybierz pozycję Plik>nowy plik tekstowy.
  2. Skopiuj i wklej plik Bicep do programu Visual Studio Code.
  3. Wybierz pozycję Plik>Zapisz i użyj nazwy pliku 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

Typ zasobu zdefiniowany w pliku Bicep to Microsoft.Authorization/policyAssignments.

Plik Bicep 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 Bicep:

Wdrażanie pliku Bicep

Plik Bicep 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.bicep'
}

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ę pliku Bicep 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/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, ]}

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.