بنية تعيين Azure Policy

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

إشعار

ولمزيد من المعلومات حول نطاق Azure Policy، راجع فهم النطاق في Azure Policy.

يمكنك استخدام JavaScript Object Notation (JSON) لإنشاء تعيين نهج. يحتوي تعيين النهج على عناصر لـ:

على سبيل المثال، يظهر JSON التالي تعيين نهج في وضع DoNotEnforce مع معلمات ديناميكية:

{
    "properties": {
        "displayName": "Enforce resource naming rules",
        "description": "Force resource names to begin with DeptA and end with -LC",
        "metadata": {
            "assignedBy": "Cloud Center of Excellence"
        },
        "enforcementMode": "DoNotEnforce",
        "notScopes": [],
        "policyDefinitionId": "/subscriptions/{mySubscriptionID}/providers/Microsoft.Authorization/policyDefinitions/ResourceNaming",
        "nonComplianceMessages": [
            {
                "message": "Resource names must start with 'DeptA' and end with '-LC'."
            }
        ],
        "parameters": {
            "prefix": {
                "value": "DeptA"
            },
            "suffix": {
                "value": "-LC"
            }
        },
        "identity": {
            "type": "SystemAssigned"
        },
        "resourceSelectors": [],
        "overrides": []
    }
}

جميع نماذج Azure Policy موجودة في نماذج Azure Policy.

الاسم المعروض والوصف

يمكنك استخدام displayName وdescription لتعريف تعيين النهج وتوفير سياق لاستخدامه مع مجموعة محددة من الموارد. displayName يحتوي على حد أقصى يبلغ 128 حرفًا وdescription يحتوي على حد أقصى يبلغ 512 حرفًا.

بيانات التعريف

تخزين الخاصية الاختيارية metadata معلومات حول تعيين النهج. يمكن للعملاء تحديد أي خصائص وقيم مفيدة لمؤسستهم في metadata. ومع ذلك، هناك بعض الخصائص الشائعة المستخدمة من قبل Azure Policy. كل metadata خاصية لها حد 1024 حرفا.

خصائص بيانات التعريف الشائعة

  • assignedBy (سلسلة): الاسم المألوف لمدير الأمان الذي أنشأ التعيين.

  • createdBy (سلسلة): المعرّف الفريد العالمي لمدير الأمان الذي أنشأ التعيين.

  • createdOn (سلسلة): تنسيق Universal ISO 8601 DateTime لوقت إنشاء التعيين.

  • parameterScopes (عنصر): مجموعة من أزواج قيم المفاتيح حيث يطابق المفتاح اسم المعلمة المكوّن strongType وتحدد القيمة نطاق المورد المستخدم في المدخل لتوفير قائمة الموارد المتوفرة عن طريق مطابقة strongType. يقوم المدخل بتعيين هذه القيمة إذا كان النطاق مختلفًا عن نطاق التعيين. في حالة الضبط، يؤدي تحرير تعيين النهج في المدخل تلقائيًا إلى تعيين نطاق المعلمة إلى هذه القيمة. ومع ذلك، النطاق غير مؤمن للقيمة ويمكن تغييره إلى نطاق آخر.

    المثال parameterScopes التالي هو لمعلمة strongType المسماة backupPolicyIdالتي تعين نطاق تحديد المورد عند تحرير التعيين في المدخل.

    "metadata": {
        "parameterScopes": {
            "backupPolicyId": "/subscriptions/{SubscriptionID}/resourcegroups/{ResourceGroupName}"
        }
    }
    
  • updatedBy (سلسلة): الاسم المألوف لمدير الأمان الذي قام بتحديث التعيين، إن وجد.

  • updatedOn (سلسلة): تنسيق Universal ISO 8601 DateTime لوقت تحديث التعيين، إن وجد.

  • evidenceStorages (كائن): حساب التخزين الافتراضي الموصى به الذي يجب استخدامه للاحتفاظ بالأدلة للإثباتات على تعيينات النهج ذات manual التأثير. displayName الخاصية هي اسم حساب التخزين. evidenceStorageAccountID الخاصية هي معرف المورد لحساب التخزين. الخاصية evidenceBlobContainer هي اسم حاوية الكائن الثنائي كبير الحجم الذي تخطط لتخزين الأدلة فيه.

    {
      "properties": {
        "displayName": "A contingency plan should be in place to ensure operational continuity for each Azure subscription.",
        "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/{definitionId}",
        "metadata": {
          "evidenceStorages": [
            {
              "displayName": "Default evidence storage",
              "evidenceStorageAccountId": "/subscriptions/{subscriptionId}/resourceGroups/{rg-name}/providers/Microsoft.Storage/storageAccounts/{storage-account-name}",
              "evidenceBlobContainer": "evidence-container"
            }
          ]
        }
      }
    }
    

محددات الموارد

تسهل الخاصية الاختيارية resourceSelectors ممارسات النشر الآمنة (SDP) من خلال تمكينك من طرح تعيينات النهج تدريجيا استنادا إلى عوامل مثل موقع المورد أو نوع المورد أو ما إذا كان للمورد موقع. عند استخدام محددات الموارد، سيقوم نهج Azure بتقييم الموارد القابلة للتطبيق فقط على المواصفات التي تم إجراؤها في محددات الموارد. يمكن أيضا استخدام محددات الموارد لتضييق نطاق الإعفاءات بنفس الطريقة.

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

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

عندما تكون مستعدا لتوسيع نطاق التقييم لنهجك، يجب عليك فقط تعديل التعيين. يوضح المثال التالي تعيين النهج الخاص بنا مع منطقتين إضافيتين من Azure تمت إضافتها إلى محدد SDPRegions . ملاحظة، في هذا المثال، يعني SDP خزينة Deployment Practice:

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyDefinitions/ResourceLimit",
        "definitionVersion": "1.1",
        "resourceSelectors": [
            {
                "name": "SDPRegions",
                "selectors": [
                    {
                        "kind": "resourceLocation",
                        "in": [ "eastus", "westus", "centralus", "southcentralus" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/ResourceLimit",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "ResourceLimit"
}

محددات الموارد لها الخصائص التالية:

  • name: اسم محدد المورد.

  • selectors: (اختياري) الخاصية المستخدمة لتحديد المجموعة الفرعية من الموارد المطبقة على تعيين النهج التي يجب تقييمها للامتثال.

    • kind: خاصية محدد يصف الخاصية التي تضيق مجموعة الموارد التي تم تقييمها. يمكن استخدام كل نوع مرة واحدة فقط في محدد مورد واحد. القيم المسموح بها هي:

      • resourceLocation: تستخدم هذه الخاصية لتحديد الموارد استنادا إلى نوعها. لا يمكن استخدامها في محدد المورد نفسه مثل resourceWithoutLocation.

      • resourceType: تستخدم هذه الخاصية لتحديد الموارد استنادا إلى نوعها.

      • resourceWithoutLocation: تستخدم هذه الخاصية لتحديد الموارد على مستوى الاشتراك الذي لا يحتوي على موقع. حاليا يدعم subscriptionLevelResourcesفقط . لا يمكن استخدامها في محدد المورد نفسه مثل resourceLocation.

    • in: قائمة القيم المسموح بها للقيم المحددة kind. لا يمكن استخدامها مع notIn. يمكن أن يحتوي على ما يصل إلى 50 قيمة.

    • notIn: قائمة القيم غير المسموح بها للقيم المحددة kind. لا يمكن استخدامها مع in. يمكن أن يحتوي على ما يصل إلى 50 قيمة.

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

التجاوزات

تسمح لك الخاصية الاختيارية overrides بتغيير تأثير تعريف النهج دون تعديل تعريف النهج الأساسي أو استخدام تأثير معلمات في تعريف النهج.

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

دعونا نلقي نظرة على مثال. تخيل أن لديك مبادرة نهج تسمى CostManagement تتضمن تعريف نهج مخصص معpolicyDefinitionReferenceId corpVMSizePolicy وتأثير واحد ل audit. لنفترض أنك تريد تعيين مبادرة CostManagement ، ولكنك لا تريد حتى الآن رؤية التوافق الذي تم الإبلاغ عنه لهذا النهج. يمكن استبدال تأثير "التدقيق" لهذا النهج ب "معطل" من خلال تجاوز تعيين المبادرة، كما هو موضح في العينة التالية:

{
    "properties": {
        "policyDefinitionId": "/subscriptions/{subId}/providers/Microsoft.Authorization/policySetDefinitions/CostManagement",
        "overrides": [
            {
                "kind": "policyEffect",
                "value": "disabled",
                "selectors": [
                    {
                        "kind": "policyDefinitionReferenceId",
                        "in": [ "corpVMSizePolicy" ]
                    }
                ]
            }
        ]
    },
    "systemData": { ... },
    "id": "/subscriptions/{subId}/providers/Microsoft.Authorization/policyAssignments/CostManagement",
    "type": "Microsoft.Authorization/policyAssignments",
    "name": "CostManagement"
}

التجاوزات لها الخصائص التالية:

  • kind: الخاصية التي سيتجاوزها التعيين. النوع المدعوم هو policyEffect.

  • value: القيمة الجديدة التي تتجاوز القيمة الموجودة. القيم المدعومة هي تأثيرات.

  • selectors: (اختياري) الخاصية المستخدمة لتحديد نطاق تعيين النهج الذي يجب أن يأخذه في التجاوز.

    • kind: خاصية محدد يصف الخاصية التي ستضيق نطاق التجاوز. القيمة المسموح بها ل kind: policyEffect هي:

      • policyDefinitionReferenceId: يحدد هذا تعريفات النهج ضمن تعيين المبادرة التي يجب أن تأخذ على تجاوز التأثير.
    • in: قائمة القيم المسموح بها للقيم المحددة kind. لا يمكن استخدامها مع notIn. يمكن أن يحتوي على ما يصل إلى 50 قيمة.

    • notIn: قائمة القيم غير المسموح بها للقيم المحددة kind. لا يمكن استخدامها مع in. يمكن أن يحتوي على ما يصل إلى 50 قيمة.

لاحظ أنه يمكن استخدام تجاوز واحد لاستبدال تأثير العديد من النهج عن طريق تحديد قيم متعددة في صفيف policyDefinitionReferenceId. يمكن استخدام تجاوز واحد لما يصل إلى 50 policyDefinitionReferenceIds، ويمكن أن يحتوي تعيين نهج واحد على ما يصل إلى 10 تجاوزات، يتم تقييمها بالترتيب الذي تم تحديدها به. قبل إنشاء التعيين، يتم التحقق من صحة التأثير الذي تم اختياره في التجاوز مقابل قاعدة النهج وقائمة القيم المسموح بها للمعلمة (في الحالات التي يتم فيها تحديد معلمات التأثير).

وضع التطبيق

توفر خاصية enforcementMode للعملاء القدرة على اختبار نتيجة نهج على الموارد الموجودة دون بدء تأثير النهج أو تشغيل الإدخالات في سجل Azure Activity.

يشار إلى هذا السيناريو بشكل عام باسم «ماذا لو» ويتوافق مع ممارسات النشر الآمن. enforcementMode يختلف عن التأثير معطّل، لأن هذا التأثير يمنع تقييم الموارد من الحدوث على الإطلاق.

هذه الخاصية لها القيم التالية:

وضع قيمة JSON نوع المعالجة يدويًا إدخال سجل النشاط ‏‏الوصف
مُمَكّن الإعداد الافتراضي سلسلة ‏‏نعم‬ ‏‏نعم‬ يتم فرض تأثير النهج في أثناء إنشاء المورد أو تحديثه.
⁧⁩مُعطل⁧⁩ DoNotEnforce سلسلة ‏‏نعم‬ لا لا يتم فرض تأثير النهج في أثناء إنشاء المورد أو تحديثه.

إذا لم يتم تحديد enforcementMode في تعريف نهج أو مبادرة، يتم استخدام القيمة افتراضي. مهام المعالجة يمكن بدؤها لنهج deployIfNotExists، حتى عند تعيين enforcementMode على DoNotEnforce.

النطاقات المستبعدة

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

إشعار

يختلف مورد مستبعد عن مورد معفى. لمزيد من المعلومات، راجع فهم النطاق في نهج Azure.

معرف تعريف النهج

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

رسائل عدم التوافق

لتعيين رسالة مخصصة توضح سبب عدم توافق المورد مع تعريف النهج أو المبادرة، قم بتعيين nonComplianceMessages في تعريف التعيين. هذه العقدة عبارة عن صفيف من إدخالات message. هذه الرسالة المخصصة هي بالإضافة إلى رسالة الخطأ الافتراضية لعدم التوافق وهي اختيارية.

هام

يتم دعم الرسائل المخصصة لعدم التوافق فقط في التعريفات أو المبادرات مع تعريفات أوضاع Resource Manager.

"nonComplianceMessages": [
    {
        "message": "Default message"
    }
]

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

"nonComplianceMessages": [
    {
        "message": "Default message"
    },
    {
        "message": "Message for just this policy definition by reference ID",
        "policyDefinitionReferenceId": "10420126870854049575"
    }
]

المعلمات

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

"parameters": {
    "prefix": {
        "value": "DeptA"
    },
    "suffix": {
        "value": "-LC"
    }
}

في هذا المثال، المعلمات المحددة مسبقًا في تعريف النهج هي prefix وsuffix. يعين تعيين النهج المحدد هذا prefix إلى DeptA وsuffix إلى -LC. يمكن إعادة استخدام تعريف النهج نفسه مع مجموعة مختلفة من المعلمات لإدارة مختلفة، ما يقلل من الازدواجية والتعقيد في تعريفات النهج مع توفير المرونة.

الهوية

بالنسبة لتعيينات النهج التي تم تعيين التأثير عليها إلى deployIfNotExist أو تعديلها، يلزم أن يكون لديك خاصية هوية لإجراء المعالجة على الموارد غير المتوافقة. عند استخدام الهوية، يجب على المستخدم أيضًا تحديد موقع للتعيين.

إشعار

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

# System-assigned identity
 "identity": {
    "type": "SystemAssigned"
  }
# User-assigned identity
  "identity": {
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/SubscriptionID/resourceGroups/testResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/test-identity": {}
    }
  },

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