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

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

قالب Azure Resource Manager هو ملف JavaScript Object Notation (JSON) الذي يحدد البنية الأساسية والتكوين لمشروعك. يستخدم القالب عبارات توضيحية. يمكنك وصف النشر المقصود دون كتابة تسلسل أوامر البرمجة لإنشاء النشر.

إذا كانت بيئتك تلبي المتطلبات الأساسية وكنت معتاداً على استخدام قوالب "ARM"، فحدد زر "Deploy to Azure". سيتم فتح القالب في مدخل Azure.

لقطة شاشة للزر Deploy to Azure لتعيين نهج باستخدام قالب Azure Resource Manager.

عند تعيين نهج مضمن أو تعريف مبادرة، من الاختياري الإشارة إلى إصدار. تعيينات النهج للتعريفات المضمنة افتراضيا إلى أحدث إصدار وترث تلقائيا تغييرات الإصدار الثانوية ما لم يتم تحديد خلاف ذلك.

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

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

مراجعة القالب

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

إنشاء قالب ARM التالي ك policy-assignment.json.

  1. افتح Visual Studio Code وحدد File>New Text File.
  2. انسخ قالب ARM والصقه في Visual Studio Code.
  3. حدد حفظ الملف>واستخدم اسم الملف 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'))]"
    }
  }
}

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

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

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

لمزيد من المعلومات حول ملفات قالب ARM:

نشر قالب ARM

يمكنك نشر قالب ARM مع 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.json'
}

New-AzResourceGroupDeployment @deployparms

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

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

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

يستخدم الأمر الخاصية $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 يستخدم تعبيرا للبحث عن الموارد غير المتوافقة مع تعيين النهج.

تشبه نتائجك المثال التالي وتظهر ComplianceState 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, ]}

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

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

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

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

Disconnect-AzAccount

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

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

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