التشغيل السريع: إنشاء تعيين نهج لتحديد الموارد غير المتوافقة باستخدام ملف Bicep

في هذا التشغيل السريع، يمكنك استخدام ملف Bicep لإنشاء تعيين نهج يتحقق من توافق المورد مع نهج Azure. يتم تعيين النهج إلى مجموعة موارد ويدقق الأجهزة الظاهرية التي لا تستخدم الأقراص المدارة. بعد إنشاء تعيين النهج، يمكنك تحديد الأجهزة الظاهرية غير المتوافقة.

Bicep هي لغة المجال المخصصة (DSL) التي تستخدم بناء الجملة التعريفي لتوزيع موارد Azure. توفر بناء جملة مختصر، وسلامة موثوقة من النوع، ودعمًا لإعادة استخدام التعليمة البرمجية. تقدم Bicep أفضل تجربة تأليف لحلول البنية الأساسية باعتبارها تعليمة برمجية في Azure.

المتطلبات الأساسية

  • إذا لم يكن لديك حساب Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
  • Bicep.
  • Azure PowerShell أو Azure CLI.
  • Visual Studio Code وملحق Bicep ل Visual Studio Code.
  • Microsoft.PolicyInsights يجب أن يكون مسجلا في اشتراك Azure الخاص بك. لتسجيل موفر موارد، يجب أن يكون لديك إذن لتسجيل موفري الموارد. يتم تضمين هذا الإذن في أدوار المساهم والمالك.
  • مجموعة موارد مع جهاز ظاهري واحد على الأقل لا يستخدم الأقراص المدارة.

مراجعة ملف Bicep

ينشئ ملف Bicep تعيين نهج لنطاق مجموعة موارد ويعين تعريف النهج المضمن تدقيق الأجهزة الظاهرية التي لا تستخدم الأقراص المدارة.

إنشاء ملف Bicep التالي ك policy-assignment.bicep.

  1. افتح Visual Studio Code وحدد File>New Text File.
  2. انسخ ملف Bicep والصقه في Visual Studio Code.
  3. حدد File>Save واستخدم filename 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

نوع المورد المحدد في ملف Bicep هو Microsoft.Authorization/policyAssignments.

يستخدم ملف Bicep ثلاث معلمات لنشر تعيين النهج:

  • policyAssignmentName ينشئ تعيين النهج المسمى audit-vm-managed-disks.
  • policyDefinitionID يستخدم معرف تعريف النهج المضمن. كمرجع، الأوامر للحصول على المعرف موجودة في القسم لنشر القالب.
  • policyDisplayName ينشئ اسم عرض مرئيا في مدخل Microsoft Azure.

لمزيد من المعلومات حول ملفات Bicep:

نشر ملف Bicep

يمكنك نشر ملف Bicep باستخدام Azure PowerShell أو Azure CLI.

من جلسة Visual Studio Code الطرفية، اتصل ب Azure. إذا كان لديك أكثر من اشتراك واحد، فقم بتشغيل الأوامر لتعيين السياق إلى اشتراكك. استبدل <subscriptionID> بمعرف اشتراك Azure الخاص بك.

Connect-AzAccount

# Run these commands if you have multiple subscriptions
Get-AzSubScription
Set-AzContext -Subscription <subscriptionID>

يمكنك التحقق مما إذا كان Microsoft.PolicyInsights مسجلا. إذا لم يكن كذلك، يمكنك تشغيل أمر لتسجيل موفر الموارد.

Get-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights' |
   Select-Object -Property ResourceTypes, RegistrationState

Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'

لمزيد من المعلومات، انتقل إلى Get-AzResourceProvider و Register-AzResourceProvider.

تعرض الأوامر التالية قيمة المعلمة policyDefinitionID :

(Get-AzPolicyDefinition |
  Where-Object { $_.Properties.DisplayName -eq 'Audit VMs that do not use managed disks' }).ResourceId

تنشر الأوامر التالية تعريف النهج إلى مجموعة الموارد الخاصة بك. استبدل <resourceGroupName> باسم مجموعة الموارد:

$rg = Get-AzResourceGroup -Name '<resourceGroupName>'

$deployparms = @{
Name = 'PolicyDeployment'
ResourceGroupName = $rg.ResourceGroupName
TemplateFile = 'policy-assignment.bicep'
}

New-AzResourceGroupDeployment @deployparms

يخزن $rg المتغير خصائص مجموعة الموارد. $deployparms يستخدم المتغير splatting لإنشاء قيم المعلمات وتحسين قابلية القراءة. New-AzResourceGroupDeployment يستخدم الأمر قيم المعلمات المعرفة في $deployparms المتغير .

  • Name هو اسم النشر المعروض في الإخراج وفي Azure لتوزيع مجموعة الموارد.
  • ResourceGroupName يستخدم الخاصية $rg.ResourceGroupName للحصول على اسم مجموعة الموارد الخاصة بك حيث يتم تعيين النهج.
  • TemplateFile يحدد اسم ملف Bicep وموقعه على الكمبيوتر المحلي.

يمكنك التحقق من نشر تعيين النهج باستخدام الأمر التالي:

يستخدم الأمر الخاصية $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

لمزيد من المعلومات، انتقل إلى Get-AzPolicyAssignment.

تحديد الموارد غير المتوافقة

بعد نشر تعيين النهج، يتم تدقيق الأجهزة الظاهرية التي يتم نشرها إلى مجموعة الموارد للامتثال لنهج القرص المدار.

تستغرق حالة التوافق لتعيين نهج جديد بضع دقائق لتصبح نشطة وتوفر نتائج حول حالة النهج.

$complianceparms = @{
ResourceGroupName = $rg.ResourceGroupName
PolicyAssignmentName = 'audit-vm-managed-disks'
Filter = 'IsCompliant eq false'
}

Get-AzPolicyState @complianceparms

$complianceparms ينشئ المتغير قيم المعلمات المستخدمة في Get-AzPolicyState الأمر .

  • ResourceGroupName يحصل على اسم مجموعة الموارد من الخاصية $rg.ResourceGroupName .
  • PolicyAssignmentName يحدد الاسم المستخدم عند إنشاء تعيين النهج.
  • Filter يستخدم تعبيرا للبحث عن الموارد غير المتوافقة مع تعيين النهج.

تشبه نتائجك المثال التالي وتظهر ComplianceStateNonCompliant:

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

لمزيد من المعلومات، انتقل إلى Get-AzPolicyState.

تنظيف الموارد

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

لتسجيل الخروج من جلسة عمل Azure PowerShell:

Disconnect-AzAccount

الخطوات التالية

في هذا التشغيل السريع، قمت بتعيين تعريف نهج لتحديد الموارد غير المتوافقة في بيئة Azure.

لمعرفة المزيد حول كيفية تعيين النهج التي تتحقق من توافق الموارد، تابع البرنامج التعليمي.