إصلاح الموارد غير المتوافقة مع نهج Azure

يمكن وضع الموارد غير المتوافقة مع نهج نشر IfNotExists أو تعديله في حالة متوافقة من خلال المعالجة. يتم إنجاز المعالجة عن طريق توجيه نهج Azure لتشغيل تأثير DeployIfNotExists أو عمليات تعديل النهج المعين على الموارد والاشتراكات الموجودة لديك، سواء كان هذا التعيين لمجموعة إدارة أو اشتراك أو مجموعة موارد أو مورد فردي. توضح هذه المقالة الخطوات اللازمة لفهم المعالجة وإنجازها باستخدام نهج Azure.

كيفية عمل أمان المعالجة

عندما يبدأ Azure Policy نشر قالب عند تقييم نهج deployIfNotExists أو يعدل موردا عند تقييم نهج التعديل ، فإنه يقوم بذلك باستخدام هوية مدارة مقترنة بتعيين النهج. يمكن لتعيينات النهج إما استخدام هوية مدارة معينة للنظام تم إنشاؤها بواسطة خدمة النهج أو هوية معينة من قبل المستخدم يوفرها المستخدم. يجب تعيين الحد الأدنى من الدور (الأدوار) المطلوبة لمعالجة الموارد للهوية المدارة. إذا كانت الهوية المدارة تفتقد الأدوار، عرض خطأ أثناء تعيين النهج أو المبادرة. عند استخدام البوابة الإلكترونية، يمنح Azure Policy الهوية المدارة تلقائيا الأدوار المدرجة بمجرد بدء المهمة. عند استخدام SDK، يجب منح الأدوار يدويا للهوية المدارة. لا يؤثر موقع الهوية المدارة على تشغيلها باستخدام Azure Policy.

Screenshot of a policy assignment creating a system assigned managed identity in East US with Log Analytics Contributor permissions.

هام

في السيناريوهات التالية، يجب منح الهوية المدارة للمهمة حق الوصول يدويا أو فشل نشر المعالجة:

  • إذا تم إنشاء المهمة من خلال SDK
  • إذا كان مورد تم تعديله بواسطة DeployIfNotExists أو تعديله خارج نطاق تعيين النهج
  • إذا كان القالب يصل إلى الخصائص الموجودة على الموارد خارج نطاق تعيين النهج

كما أن تغيير تعريف نهج لا يؤدي إلى تحديث التعيين أو الهوية المدارة المقترنة.

تكوين تعريف النهج

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

"details": {
    ...
    "roleDefinitionIds": [
        "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
        "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ]
}

تستخدم الخاصية roleDefinitionIds معرف المورد الكامل ولا تأخذ الدور القصيراسم الدور. للحصول على معرف دور "المساهم" في بيئتك، استخدم التعليمة البرمجية التالية:

az role definition list --name "Contributor"

هام

يجب أن تقتصر الأذونات على أصغر مجموعة ممكنة عند تعريف roleDefinitionIds ضمن تعريف نهج أو تعيين أذونات لهوية مدارة يدويا. راجع توصيات أفضل ممارسات الهوية المدارة للحصول على المزيد من أفضل الممارسات.

تكوين الهوية المدارة يدويا

عند إنشاء مهمة باستخدام البوابة الإلكترونية، يمكن ل Azure Policy إنشاء هوية مدارة ومنحها الأدوار المحددة في roleDefinitionIds. في الحالات التالية، يجب أن تتم خطوات إنشاء الهوية المدارة وتعيين أذونات لها يدويا:

  • أثناء استخدام SDK (مثل Azure PowerShell)
  • عندما يتم تعديل مورد خارج نطاق المهمة بواسطة القالب
  • عندما يقرأ القالب موردا خارج نطاق المهمة

تكوين هوية مدارة من خلال مدخل Azure

عند إنشاء مهمة باستخدام البوابة الإلكترونية، يمكنك تحديد إما هوية مدارة معينة للنظام أو هوية مدارة معينة من قبل المستخدم.

لتعيين هوية مدارة معينة للنظام في البوابة الإلكترونية:

  1. في علامة التبويب معالجة في طريقة عرض إنشاء/تحرير المهمة، ضمن أنواع الهوية المدارة، تأكد من تحديد الهوية المدارةالمعينة من قبل النظام.

  2. حدد الموقع الذي سيتم تحديد موقع الهوية المدارة فيه.

لتعيين هوية مدارة معينة من قبل مستخدم في البوابة الإلكترونية:

  1. في علامة التبويب معالجة في طريقة عرض إنشاء/تحرير المهمة، ضمن أنواع الهوية المدارة، تأكد من تحديد الهوية المدارة المعينة من قبل المستخدم.

  2. حدد النطاق الذي تتم فيه استضافة الهوية المدارة. لا يجب أن يكون نطاق الهوية المدارة مساويا لنطاق المهمة ، ولكن يجب أن يكون في نفس المستأجر.

  3. ضمن الهويات المعينة من قبل المستخدم الحالي، حدد الهوية المدارة.

    ملاحظة

    إذا لم يكن لدى الهوية المدارة الأذونات اللازمة لتنفيذ مهمة المعالجة المطلوبة، منحها الأذونات تلقائيا فقط من خلال البوابة الإلكترونية. بالنسبة لكافة الطرق الأخرى، يجب تكوين الأذونات يدويا.

إنشاء هوية مدارة باستخدام PowerShell

لإنشاء هوية أثناء تعيين السياسة، يجب تحديد الموقع واستخدام الهوية . يحصل المثال التالي على تعريف النهج المضمن نشر SQL يقوم تشفير البيانات الشفاف لقاعدة البيانات بتعيين مجموعة الموارد الهدف، ثم يقوم بإنشاء المهمة باستخدام نظام تم تعيين هوية مدارة.

# Login first with Connect-AzAccount if not using Cloud Shell

# Get the built-in "Deploy SQL DB transparent data encryption" policy definition
$policyDef = Get-AzPolicyDefinition -Id '/providers/Microsoft.Authorization/policyDefinitions/86a912f6-9a06-4e26-b447-11b16ba8659f'

# Get the reference to the resource group
$resourceGroup = Get-AzResourceGroup -Name 'MyResourceGroup'

# Create the assignment using the -Location and -Identity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL DB transparent data encryption' -Scope $resourceGroup.ResourceId -PolicyDefinition $policyDef -Location 'westus' -IdentityType "SystemAssigned"

يحصل المثال التالي على تعريف النهج المضمن نشر SQL تشفير بيانات شفاف لقاعدة البيانات، وتعيين مجموعة الموارد الهدف، ثم إنشاء المهمة باستخدام هوية مدارة معينة من قبل المستخدم.

# Login first with Connect-AzAccount if not using Cloud Shell

# Get the built-in "Deploy SQL DB transparent data encryption" policy definition
$policyDef = Get-AzPolicyDefinition -Id '/providers/Microsoft.Authorization/policyDefinitions/86a912f6-9a06-4e26-b447-11b16ba8659f'

# Get the reference to the resource group
$resourceGroup = Get-AzResourceGroup -Name 'MyResourceGroup'

# Get the existing user assigned managed identity ID
$userassignedidentity = Get-AzUserAssignedIdentity -ResourceGroupName $rgname -Name $userassignedidentityname 
$userassignedidentityid = $userassignedidentity.Id

# Create the assignment using the -Location and -Identity properties
$assignment = New-AzPolicyAssignment -Name 'sqlDbTDE' -DisplayName 'Deploy SQL DB transparent data encryption' -Scope $resourceGroup.ResourceId -PolicyDefinition $policyDef -Location 'westus' -IdentityType "UserAssigned" -IdentityId $userassignedidentityid

يحتوي المتغير الآن على المعرف الرئيسي للهوية المدارة إلى جانب القيم القياسية التي يتم $assignment إرجاعها عند إنشاء تعيين نهج. يمكن الوصول إليها من خلال الهويات المدارة المعينة للنظام والهويات $assignment.Identity.UserAssignedIdentities[$userassignedidentityid].PrincipalId المدارة المعينة من $assignment.Identity.PrincipalId قبل المستخدم.

منح أدوار محددة الهوية المدارة باستخدام PowerShell

يجب أن تكمل الهوية المدارة الجديدة النسخ المتماثل من خلال Azure Active Directory قبل أن تتمكن من منحها الأدوار المطلوبة. بمجرد اكتمال النسخ المتماثل، يكرر المثال التالي تعريف النهج في $policyDefل roleDefinitionIds ويستخدم New-AzRoleAssignment لمنح الهوية المدارة الجديدة الأدوار.

# Use the $policyDef to get to the roleDefinitionIds array
$roleDefinitionIds = $policyDef.Properties.policyRule.then.details.roleDefinitionIds

if ($roleDefinitionIds.Count -gt 0)
{
    $roleDefinitionIds | ForEach-Object {
        $roleDefId = $_.Split("/") | Select-Object -Last 1
        New-AzRoleAssignment -Scope $resourceGroup.ResourceId -ObjectId $assignment.Identity.PrincipalId -RoleDefinitionId $roleDefId
    }
}

منح أدوار محددة الهوية المدارة من خلال البوابة الإلكترونية

هناك طريقتان لمنح الهوية المدارة للمهمة الأدوار المحددة باستخدام البوابة الإلكترونية، باستخدام التحكم في الوصول (IAM) أو عن طريق تحرير تعيين النهج أو المبادرة وتحديد حفظ.

لإضافة دور إلى الهوية المدارة للمهمة، اتبع الخطوات التالية:

  1. قم بتشغيل خدمة Azure Policy في مدخل Microsoft Azure من خلال تحديد "All services" ، ثم ابحث عن "Policy" وحددها.

  2. حدد "Assignments" على الجانب الأيسر من صفحة Policy في Azure.

  3. حدد موقع المهمة التي لها هوية مدارة وحدد الاسم.

  4. ابحث عن الخاصية معرف المهمة في صفحة التحرير. سيكون معرف المهمة شيئا مثل:

    /subscriptions/{subscriptionId}/resourceGroups/PolicyTarget/providers/Microsoft.Authorization/policyAssignments/2802056bfc094dfb95d4d7a5
    

    اسم الهوية المدارة هو الجزء الأخير من معرف مورد التعيين، الموجود 2802056bfc094dfb95d4d7a5 في هذا المثال. انسخ هذا الجزء من معرف مورد المهمة.

  5. انتقل إلى المورد أو حاوية الموارد الأصلية (مجموعة الموارد، الاشتراك، مجموعة الإدارة) التي تحتاج إلى إضافة تعريف الدور يدويا.

  6. حدد الارتباط التحكم في الوصول (IAM) في صفحة الموارد، ثم حدد + إضافة تعيين دور في أعلى صفحة التحكم في الوصول.

  7. حدد الدور المناسب الذي يطابق roleDefinitionIds من تعريف النهج. اترك تعيين حق الوصول لتعيينه إلى الإعداد الافتراضي ل "مستخدم Azure AD أو المجموعة أو التطبيق". في المربع تحديد ، الصق أو اكتب جزء معرف مورد المهمة الموجود سابقا. بمجرد اكتمال البحث ، حدد الكائن الذي يحمل نفس الاسم لتحديد المعرف وتحديد حفظ.

إنشاء مهمة معالجة

توضح الأقسام التالية كيفية إنشاء مهمة معالجة.

إنشاء مهمة معالجة من خلال البوابة الإلكترونية

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

لإنشاء مهمة معالجة، اتبع الخطوات التالية:

  1. قم بتشغيل خدمة Azure Policy في مدخل Microsoft Azure من خلال تحديد "All services" ، ثم ابحث عن "Policy" وحددها.

    Screenshot of searching for Policy in All Services.

  2. حدد المعالجة على الجانب الأيمن من صفحة نهج Azure.

    Screenshot of the Remediation node on the Policy page.

  3. يتم تضمين كافة نشر IfNotExistsوتعديل تعيينات النهج مع الموارد غير المتوافقة في علامة التبويب نهج لمعالجة وجدول البيانات. حدد على نهج يحتوي على موارد غير متوافقة. يتم فتح صفحة مهمة معالجة جديدة .

    ملاحظة

    تتمثل إحدى الطرق البديلة لفتح صفحة مهمة المعالجة في العثور على النهج وتحديده من صفحة الامتثال ، ثم تحديد الزر إنشاء مهمة معالجة .

  4. في صفحة مهمة معالجة جديدة ، يتم عرض إعدادات المعالجة الاختيارية:

    • النسبة المئوية لعتبة الفشل - تستخدم لتحديد ما إذا كان يجب أن تفشل مهمة المعالجة إذا تجاوزت النسبة المئوية للفشل العتبة المحددة. المقدمة كرقم بين 0 إلى 100. بشكل افتراضي ، تكون عتبة الفشل 100٪.
    • عدد الموارد - يحدد عدد الموارد غير المتوافقة التي يجب معالجتها في مهمة معالجة معينة. القيمة الافتراضية هي 500 (الحد السابق). الحد الأقصى لعدد الموارد هو 50000 مورد.
    • عمليات النشر المتوازية - يحدد عدد الموارد التي يجب معالجتها في نفس الوقت. القيم المسموح بها هي 1 إلى 30 موردا في المرة الواحدة. تبلغ القيمة الافتراضية 10.

    ملاحظة

    لا يمكن تغيير هذه الإعدادات بمجرد بدء مهمة المعالجة.

  5. في نفس الصفحة، قم بتصفية الموارد المراد معالجتها باستخدام علامات الحذف Scope لاختيار موارد فرعية من حيث تم تعيين النهج (بما في ذلك وصولا إلى كائنات الموارد الفردية). بالإضافة إلى ذلك، استخدم القائمة المنسدلة المواقع لمزيد من تصفية الموارد.

    Screenshot of the Remediate node and the grid of resources to remediate.

  6. ابدأ مهمة المعالجة بمجرد تصفية الموارد عن طريق تحديد معالجة. تفتح صفحة توافق النهج على علامة التبويب مهام المعالجة لإظهار حالة تقدم المهام. تبدأ عمليات النشر التي تم إنشاؤها بواسطة مهمة المعالجة على الفور.

    Screenshot of the Remediation tasks tab and progress of existing remediation tasks.

  7. حدد مهمة المعالجة من صفحة الامتثال للنهج للحصول على تفاصيل حول التقدم. يتم عرض التصفية المستخدمة للمهمة جنبا إلى جنب مع الحالة وقائمة الموارد التي يتم معالجتها.

  8. من صفحة مهمة المعالجة ، حدد مطولا (أو انقر بزر الماوس الأيمن) على مورد لعرض نشر مهمة المعالجة أو المورد. في نهاية الصف، حدد الأحداث ذات الصلة للاطلاع على تفاصيل مثل رسالة خطأ.

    Screenshot of the context menu for a resource on the Remediate task tab.

تتم إضافة الموارد التي تم نشرها من خلال مهمة معالجة إلى علامة التبويب الموارد المنشورة في صفحة توافق النهج.

إنشاء مهمة معالجة من خلال Azure CLI

لإنشاء مهمة معالجة باستخدام Azure CLI، استخدم الأوامر az policy remediation . استبدل {subscriptionId} بمعرف الاشتراك الخاص بك وب {myAssignmentId}deployIfNotExists أو قم بتعديل معرف تعيين النهج.

# Login first with az login if not using Cloud Shell

# Create a remediation for a specific assignment
az policy remediation create --name myRemediation --policy-assignment '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

للحصول على أوامر وأمثلة معالجة أخرى، راجع أوامر معالجة نهج az .

إنشاء مهمة معالجة من خلال Azure PowerShell

لإنشاء مهمة معالجة باستخدام Azure PowerShell، استخدم الأوامر Start-AzPolicyRemediation . استبدل {subscriptionId} بمعرف الاشتراك الخاص بك وب {myAssignmentId}deployIfNotExists أو قم بتعديل معرف تعيين النهج.

# Login first with Connect-AzAccount if not using Cloud Shell

# Create a remediation for a specific assignment
Start-AzPolicyRemediation -Name 'myRemedation' -PolicyAssignmentId '/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/policyAssignments/{myAssignmentId}'

للحصول على cmdlets وأمثلة أخرى للمعالجة، راجع الوحدة النمطية Az.PolicyInsights .

إنشاء مهمة معالجة أثناء تعيين النهج في مدخل Azure

تتمثل إحدى الطرق المبسطة لإنشاء مهمة معالجة في القيام بذلك من مدخل Azure أثناء تعيين النهج. إذا كان تعريف النهج المطلوب تعيينه هو تأثير deployIfNotExists أو تعديل ، فإن المعالج الموجود على علامة التبويب معالجة يوفر خيار إنشاء مهمة معالجة . إذا تم تحديد هذا الخيار، إنشاء مهمة معالجة في نفس الوقت الذي يتم فيه تعيين النهج.

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