فهم تأمين الموارد في Azure Blueprints

هام

في 11 يوليو 2026، سيتم إهمال المخططات (معاينة). قم بترحيل تعريفات المخططات والتعيينات الموجودة إلى مواصفات القالب وتكديسات التوزيع. سيتم تحويل البيانات الاصطناعية للمخطط إلى قوالب ARM JSON أو ملفات Bicep المستخدمة لتعريف مكدسات التوزيع. لمعرفة كيفية تأليف أداة كمورد ARM، راجع:

لا يعد إنشاء بيئات متسقة على نطاق واسع أمرًا ذا قيمة حقيقية إلا إذا كانت هناك آلية للحفاظ على هذا الاتساق. تشرح هذه المقالة كيفيه عمل تأمين الموارد في Azure Blueprints. لمُشاهدة مثال على تأمين الموارد وتطبيق رفض التعيينات، راجع البرنامج التعليمي لحماية الموارد الجديدة.

إشعار

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

أوضاع التأمين وحالاتها

ينطبق وضع التأمين على تعيين المُخطط ويحتوي على ثلاثة خيارات: عدم القفل أو القراءة فقط أو عدم الحذف. يتم تكوين وضع التأمين في أثناء توزيع البيانات الاصطناعية في أثناء تعيين المخطط. يمكن تعيين وضع تأمين مختلف عن طريق تحديث تعيين المُخطط. ومع ذلك، لا يُمكن تغيير أوضاع التأمين خارج Azure Blueprints.

الموارد التي تم إنشاؤها بواسطة البيانات الاصطناعية في تعيين مخطط له أربع حالات: غير مؤمن أو للقراءة فحسب أو لا يمكن التحرير أو الحذف أو لا يُمكن الحذف. يُمكن أن يكون كل نوع من أنواع البيانات الاصطناعية في حالة غير مؤمن. يُمكن استخدام الجدول التالي لتحديد حالة مورد:

وضع نوع مورد البيانات الاصطِناعية حالة ‏‏الوصف
عـدم التأمين * غير مؤمن الموارد غير مَحمية بواسطة Azure Blueprints. تستخدم هذه الحالة أيضًا للموارد المضافة إلى أداة مجموعة موارد للقراءة فحسب أو عدم حذفها من خارج تعيين المُخطط.
للقراءة فقط مجموعة الموارد يتعذر التحرير / الحذف تتم قراءة مجموعة الموارد فقط ولا يمكن تعديل جميع خصائصها، باستثناء العلامات. يُمكن إضافة الموارد غير المؤمنة أو نقلها أو تغييرها أو حذفها من مجموعة الموارد هذه.
للقراءة فقط غير تابع لمجموعة الموارد للقراءة فقط باستثناء العلامات، يظل المورد غير قابل للتغيير ولا يمكن حذفه أو تعديله.
عـدم الحذف * لا يمكن الحذف يُمكن تغيير الموارد، ولكن لا يمكن حذفها. يُمكن إضافة الموارد غير المؤمنة أو نقلها أو تغييرها أو حذفها من مجموعة الموارد هذه.

تجـاوز حالات التأمين

من المُمكن عادة أن يسمح لشخص ما يملك التحكم المناسب في الوصول المستند إلى الدور Azure (Azure RBAC) على الاشتراك، مثل دور «المالك»، بتغيير أي مورد أو حذفه. هذا الوصول ليس هو الحال عندما تطبق Azure Blueprints التأمين كجزء من تعيين تم توزيعه. إذا تم تثبيت التعيين باستخدام الخيار القراءة فحسب أو عدم الحذف، فلن يتمكن حتى مالك الاشتراك من تنفيذ الإجراء المحظور على المورد المَحمي.

يحمي هذا الإجراء الأمني اتساق المخطط المحدد والبيئة التي صُممت لإنشائها من الحذف أو التغيير العرضي أو البرمجي.

تعيين فـي مجموعة الإدارة

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

لتعيين المُخطط إلى مجموعة إدارة بدلاً من اشتراك، يتغير استدعاء واجهة برمجة تطبيقات REST لتبدو كما يلي:

PUT https://management.azure.com/providers/Microsoft.Management/managementGroups/{assignmentMG}/providers/Microsoft.Blueprint/blueprintAssignments/{assignmentName}?api-version=2018-11-01-preview

يجب أن تكون مجموعة الإدارة المحددة بواسطة {assignmentMG} إما ضمن التسلسل الهرمي لمجموعة الإدارة أو أن تكون نفس مجموعة الإدارة إذ يتم حفظ تعريف المُخطط.

يبدو نص الطلب لتعيين المُخطط كما يلي:

{
    "identity": {
        "type": "SystemAssigned"
    },
    "location": "eastus",
    "properties": {
        "description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
        "blueprintId": "/providers/Microsoft.Management/managementGroups/{blueprintMG}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
        "scope": "/subscriptions/{targetSubscriptionId}",
        "parameters": {
            "storageAccountType": {
                "value": "Standard_LRS"
            },
            "costCenter": {
                "value": "Contoso/Online/Shopping/Production"
            },
            "owners": {
                "value": [
                    "johnDoe@contoso.com",
                    "johnsteam@contoso.com"
                ]
            }
        },
        "resourceGroups": {
            "storageRG": {
                "name": "defaultRG",
                "location": "eastus"
            }
        }
    }
}

الفرق الرئيس في نص الطلب هذا والفرق الذي يتم تعيينه إلى اشتراك هو الخاصية properties.scope. يجب تعيين هذه الخاصية المطلوبة إلى الاشتراك الذي ينطبق عليه تعيين المُخطط. يجب أن يكون الاشتراك تابعًا مباشرًا للتسلسل الهرمي لمجموعة الإدارة إذ يتم تخزين تعيين المخطط.

إشعار

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

إزالة حالات التأمين

إذا أصبح من الضروري تعديل مورد مَحمي بواسطة تعيين أو حذفه، فهناك طريقتان للقيام بذلك.

  • تحديث تعيين المُخطط إلى وضع تأمين عدم القفل
  • حذف تعيين المُخطط

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

طريقة عمل تأمين المُخطط

يتم تطبيق إجراء رفض تعيينات الرفض من Azure RBAC على موارد البيانات الاصطناعية في أثناء تعيين مُخطط إذا حدد التعيين الخيار للقراءة فحسب أو عدم الحذف. تتم إضافة إجراء الرفض بواسطة الهوية المُدارة لتعيين المخطط ولا يُمكن إزالتها إلا من موارد البيانات الاصطناعية بنفس الهوية المدارة. يفرض مقياس الأمان هذا آلية التأمين ويَمنع إزالة تأمين المخطط خارج Azure Blueprints.

Screenshot of the Access control (I A M) page and the Deny assignments tab for a resource group.

خصائص رفض التعيين لكل وضع هـي كما يلي:

وضع Permissions.Actions Permissions.NotActions Principals[i].Type ExcludePrincipals[i].Id DoNotApplyToChildScopes
للقراءة فقط * */read
Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
SystemDefined (الجَميع) تعيين المُخطط وتعريف المستخدم في excludedPrincipals مَجموعة الموارد - صحيح؛ المورد - خطأ
عـدم الحذف */delete Microsoft.Authorization/locks/delete
Microsoft.Network/virtualNetwork/subnets/join/action
SystemDefined (الجَميع) تعيين المُخطط وتعريف المستخدم في excludedPrincipals مَجموعة الموارد - صحيح؛ المورد - خطأ

هام

يخزن Azure Resource Manager تفاصيل تعيين الدور لمدة تصل إلى 30 دقيقة. ونتيجة لذلك، قد لا يكون رفض التعيينات إجراء على موارد المُخطط ساري المفعول بشكل كامل على الفور. خلال هذه الفترة الزمنية، قد يكون من الممكن حذف مورد يهدف إلى حمايته بواسطة تأمين المُخطط.

استبعاد كيان مـن تعيين الرفض

في بعض سيناريوهات التصميم أو الأمان، قد يكون من الضروري استبعاد كيان من تعيين الرفض الذي ينشئه تعيين المُخطط. تتم هـذه الخطوة في واجهة برمجة تطبيقات REST عن طريق إضافة ما يصل إلى خمس قيم إلى صفيف excludedPrincipals في خاصية locks عند إنشاء التعيين. يمثل تعريف التعيين التالي مثالًا على نص الطلب الذي يتضمن excludedPrincipals:

{
  "identity": {
    "type": "SystemAssigned"
  },
  "location": "eastus",
  "properties": {
    "description": "enforce pre-defined simpleBlueprint to this XXXXXXXX subscription.",
    "blueprintId": "/providers/Microsoft.Management/managementGroups/{mgId}/providers/Microsoft.Blueprint/blueprints/simpleBlueprint",
    "locks": {
        "mode": "AllResourcesDoNotDelete",
        "excludedPrincipals": [
            "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
            "38833b56-194d-420b-90ce-cff578296714"
        ]
    },
    "parameters": {
      "storageAccountType": {
        "value": "Standard_LRS"
      },
      "costCenter": {
        "value": "Contoso/Online/Shopping/Production"
      },
      "owners": {
        "value": [
          "johnDoe@contoso.com",
          "johnsteam@contoso.com"
        ]
      }
    },
    "resourceGroups": {
      "storageRG": {
        "name": "defaultRG",
        "location": "eastus"
      }
    }
  }
}

استبعاد إجراء مـن تعيين رفض

على غرار استبعاد أساس في تعيين رفض في تعيين مُخطط، يمكنك استبعاد عمليات موفر موارد Azure معينة. ضمن كتلة properties.locks، في نفس المكان الذي excludedPrincipals، يُمكن إضافة excludedActions:

"locks": {
    "mode": "AllResourcesDoNotDelete",
    "excludedPrincipals": [
        "7be2f100-3af5-4c15-bcb7-27ee43784a1f",
        "38833b56-194d-420b-90ce-cff578296714"
    ],
    "excludedActions": [
        "Microsoft.ContainerRegistry/registries/push/write",
        "Microsoft.Authorization/*/read"
    ]
},

في حين يجب أن تكون excludedPrincipals صريحة، يُمكن أن تستخدم إدخالات excludedActions* لمطابقة أحرف البدل لعمليات موفر الموارد.

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