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.
Podczas przypisywania wbudowanej definicji zasad lub inicjatywy opcjonalne jest odwołanie do wersji. Przypisania zasad wbudowanych definicji są domyślne dla najnowszej wersji i automatycznie dziedziczą drobne zmiany wersji, chyba że określono inaczej.
Wymagania wstępne
- Jeśli nie masz jeszcze konta platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
- Bicep.
- Program Azure PowerShell lub interfejs wiersza polecenia platformy Azure.
- Program Visual Studio Code i rozszerzenie Bicep dla programu Visual Studio Code.
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.
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.
- Otwórz program Visual Studio Code i wybierz pozycję Plik>nowy plik tekstowy.
- Skopiuj i wklej plik Bicep do programu Visual Studio Code.
- 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:
- Aby znaleźć więcej przykładów Bicep, przejdź do sekcji Przeglądanie przykładów kodu.
- Aby dowiedzieć się więcej na temat odwołań do szablonów dla wdrożeń, przejdź do dokumentacji szablonu platformy Azure.
- Aby dowiedzieć się, jak tworzyć pliki Bicep, przejdź do dokumentacji aplikacji Bicep.
- Aby dowiedzieć się więcej o wdrożeniach na poziomie subskrypcji, przejdź do pozycji Wdrożenia subskrypcji z plikami 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.