Aracılığıyla paylaş


Hızlı Başlangıç: Bicep dosyası 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 bicep dosyası 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.

Bicep, Azure kaynaklarını dağıtmak için bildirim temelli söz dizimi kullanan, etki alanına özgü bir dildir (DSL). Kısa sözdizimi, güvenilir tür güvenliği ve kod yeniden kullanımı için destek sağlar. Bicep, Azure'daki kod olarak altyapı çözümleriniz için en iyi yazma deneyimini sunar.

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.

Önkoşullar

  • Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
  • Bicep.
  • Azure PowerShell veya Azure CLI.
  • Visual Studio Code ve Visual Studio Code için Bicep uzantısı.
  • Microsoft.PolicyInsightsAzure 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.

Bicep dosyasını gözden geçirme

Bicep dosyası, 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 Bicep dosyasını policy-assignment.bicep olarak oluşturun.

  1. Visual Studio Code'ı açın ve Dosya>Yeni Metin Dosyası'na tıklayın.
  2. Bicep dosyasını kopyalayıp Visual Studio Code'a yapıştırın.
  3. Dosya>Kaydet'i seçin ve policy-assignment.bicep dosya adını kullanın.
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

Bicep dosyasında tanımlanan kaynak türü Microsoft.Authorization/policyAssignments'tır.

Bicep dosyası, ilke atamasını dağıtmak için üç parametre kullanır:

  • policyAssignmentNameaudit-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.

Bicep dosyaları hakkında daha fazla bilgi için:

  • Daha fazla Bicep ö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.
  • Bicep dosyalarını geliştirmeyi öğrenmek için Bicep belgelerine gidin.
  • Abonelik düzeyinde dağıtımlar hakkında bilgi edinmek için Bicep dosyalarıyla abonelik dağıtımları bölümüne gidin.

Bicep dosyasını dağıtma

Bicep dosyasını 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.bicep'
}

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 , Yerel bilgisayarınızdaki Bicep dosyasının adını ve 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.

Uyumlu olmayan kaynakları belirleme

İ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/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, ]}

Daha fazla bilgi için Get-AzPolicyState sayfasına gidin.

Kaynakları temizleme

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

Azure PowerShell oturumunuzun oturumunu kapatmak için:

Disconnect-AzAccount

Sonraki adımlar

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.