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.
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.
- 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.
- Otwórz program Visual Studio Code i wybierz pozycję Plik>nowy plik tekstowy.
- Skopiuj i wklej szablon arm do programu Visual Studio Code.
- 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:
- Aby znaleźć więcej przykładów szablonów usługi ARM, 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 opracowywać szablony usługi ARM, przejdź do dokumentacji szablonu usługi ARM.
- Aby dowiedzieć się więcej na temat wdrożeń na poziomie subskrypcji, przejdź do pozycji Wdrożenia subskrypcji przy użyciu 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.