Hızlı Başlangıç: ARM şablonunu kullanarak uyumlu olmayan kaynakları tanımlamak için ilke ataması oluşturma
Bu hızlı başlangıçta, kaynağın Azure ilkesiyle uyumluluğunu doğrulayan bir ilke ataması oluşturmak için bir Azure Resource Manager şablonu (ARM şablonu) kullanacaksınız. İlke bir kaynak grubuna atanır ve yönetilen disk kullanmayan sanal makineleri denetler. İlke atamasını oluşturduktan sonra uyumlu olmayan sanal makineleri tanımlarsınız.
Azure Resource Manager şablonu, projenizin altyapısını ve yapılandırmasını tanımlayan bir JavaScript Nesne Gösterimi (JSON) dosyasıdır. Bu şablonda, bildirim temelli sözdizimi kullanılır. Dağıtımı oluşturmak için programlama komutlarının sırasını yazmadan hedeflenen dağıtımınızı açıklarsınız.
Ortamınız önkoşulları karşılıyorsa ve ARM şablonlarını kullanma hakkında bilginiz varsa, Azure’a dağıtma düğmesini seçin. Şablon Azure portalında açılır.
Yerleşik bir ilke veya girişim tanımı atarken, bir sürüme başvurmak isteğe bağlıdır. Yerleşik tanımların ilke atamaları varsayılan olarak en son sürüme ayarlı ve aksi belirtilmedikçe ikincil sürüm değişikliklerini otomatik olarak devralır.
- Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
- Azure PowerShell veya Azure CLI.
- Visual Studio Code ve Azure Resource Manager (ARM) Araçları.
Microsoft.PolicyInsights
Azure aboneliğinize kayıtlı olmalıdır. Bir kaynak sağlayıcısını kaydetmek için kaynak sağlayıcılarını kaydetme izniniz olmalıdır. Bu izin Katkıda Bulunan ve Sahip rollerine dahil edilir.- Yönetilen diskleri kullanmayan en az bir sanal makineye sahip bir kaynak grubu.
ARM şablonu, kaynak grubu kapsamı için bir ilke ataması oluşturur ve yönetilen disk kullanmayan VM'leri denetle yerleşik ilke tanımını atar.
aşağıdaki ARM şablonunu policy-assignment.json olarak oluşturun.
- Visual Studio Code'ı açın ve Dosya>Yeni Metin Dosyası'na tıklayın.
- ARM şablonunu kopyalayıp Visual Studio Code'a yapıştırın.
- Dosya>Kaydet'i seçin ve policy-assignment.json dosya adını kullanın.
{
"$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'))]"
}
}
}
ARM şablonunda tanımlanan kaynak türü Microsoft.Authorization/policyAssignments'tır.
Şablon, ilke atamasını dağıtmak için üç parametre kullanır:
policyAssignmentName
audit-vm-managed-disks adlı ilke atamasını oluşturur.policyDefinitionID
yerleşik ilke tanımının kimliğini kullanır. Başvuru için, kimliği alma komutları şablonu dağıtma bölümünde yer alır.policyDisplayName
Azure portalında görünen bir görünen ad oluşturur.
ARM şablon dosyaları hakkında daha fazla bilgi için:
- Daha fazla ARM şablonu örneği bulmak için Kod örneklerine göz atma bölümüne gidin.
- Dağıtımlara yönelik şablon başvuruları hakkında daha fazla bilgi edinmek için Azure şablon başvurusu'na gidin.
- ARM şablonları geliştirmeyi öğrenmek için ARM şablonu belgelerine gidin.
- Abonelik düzeyinde dağıtımlar hakkında bilgi edinmek için ARM şablonlarıyla abonelik dağıtımları bölümüne gidin.
ARM şablonunu Azure PowerShell veya Azure CLI ile dağıtabilirsiniz.
Visual Studio Code terminal oturumundan Azure'a bağlanın. Birden fazla aboneliğiniz varsa, aboneliğinize bağlam ayarlamak için komutları çalıştırın. <subscriptionID>
öğesini Azure abonelik kimliğinizle değiştirin.
Connect-AzAccount
# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>
Kayıtlı olup olmadığını Microsoft.PolicyInsights
doğrulayabilirsiniz. Değilse, kaynak sağlayıcısını kaydetmek için bir komut çalıştırabilirsiniz.
Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
Select-Object -Property ResourceTypes, RegistrationState
Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
Daha fazla bilgi için Get-AzResourceProvider ve Register-AzResourceProvider'a gidin.
Aşağıdaki komutlar parametrenin policyDefinitionID
değerini görüntüler:
(Get-AzPolicyDefinition |
Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId
Aşağıdaki komutlar, ilke tanımını kaynak grubunuz için dağıtır. değerini kaynak grubu adınızla değiştirin <resourceGroupName>
:
$rg = Get-AzResourceGroup -Name '<resourceGroupName>'
$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.json'
}
New-AzResourceGroupDeployment @deployparms
değişkeni, $rg
kaynak grubunun özelliklerini depolar. değişken, $deployparms
parametre değerleri oluşturmak ve okunabilirliği geliştirmek için splatting kullanır. New-AzResourceGroupDeployment
komutu değişkeninde $deployparms
tanımlanan parametre değerlerini kullanır.
Name
, kaynak grubunun dağıtımları için çıktıda ve Azure'da görüntülenen dağıtım adıdır.ResourceGroupName
, ilkenin$rg.ResourceGroupName
atandığı kaynak grubunuzun adını almak için özelliğini kullanır.TemplateFile
ARM şablonunun adını ve yerel bilgisayarınızdaki konumunu belirtir.
İlke atamasının dağıtımını aşağıdaki komutla doğrulayabilirsiniz:
komutu, kaynak grubunun kimliğini almak için özelliğini kullanır $rg.ResourceId
.
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
Daha fazla bilgi için Get-AzPolicyAssignment sayfasına gidin.
İlke ataması dağıtıldıktan sonra, kaynak grubuna dağıtılan sanal makineler yönetilen disk ilkesiyle uyumluluk açısından denetlener.
Yeni ilke atamasının uyumluluk durumunun etkinleşmesi ve ilkenin durumuyla ilgili sonuçlar sağlaması birkaç dakika sürer.
$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}
Get-AzPolicyState @complianceparms
değişkeni, $complianceparms
komutunda Get-AzPolicyState
kullanılan parametre değerlerini oluşturur.
ResourceGroupName
özelliğinden$rg.ResourceGroupName
kaynak grubu adını alır.PolicyAssignmentName
, ilke ataması oluşturulurken kullanılan adı belirtir.Filter
, ilke atamasıyla uyumlu olmayan kaynakları bulmak için bir ifade kullanır.
Sonuçlarınız aşağıdaki örneğe benzer ve ComplianceState
şunu gösterir 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, ]}
Daha fazla bilgi için Get-AzPolicyState sayfasına gidin.
Remove-AzPolicyAssignment -Name 'audit-vm-managed-disks' -Scope $rg.ResourceId
Azure PowerShell oturumunuzun oturumunu kapatmak için:
Disconnect-AzAccount
Bu hızlı başlangıçta, Azure ortamınızda uyumlu olmayan kaynakları belirlemek üzere bir ilke tanımı atadınız.
Kaynak uyumluluğunu doğrulayan ilkeler atama hakkında daha fazla bilgi edinmek için öğreticiye geçin.