بنية تعريف سياسة Azure
ينشئ Azure Policy اتفاقيات للموارد. تصف تعريفات السياسة شروط الامتثال للموارد والتأثير الذي يجب اتخاذه في حالة استيفاء أحد الشروط. يقارن الشرط حقل خاصية مورد أو قيمة بقيمة مطلوبة. يتم الوصول إلى حقول خصائص الموارد باستخدام الأسماء المستعارة. عندما يكون حقل خاصية مورد عبارة عن صفيف، يمكن استخدام اسم مستعار خاص للصفيف لتحديد قيم من جميع أعضاء الصفيف وتطبيق شرط على كل واحد. تعرف على المزيد حول الحالات.
من خلال تحديد الاتفاقيات ، يمكنك التحكم في التكاليف وإدارة مواردك بسهولة أكبر. على سبيل المثال، يمكنك تحديد أنه يسمح فقط بأنواع معينة من الأجهزة الظاهرية. أو يمكنك أن تطلب أن تحتوي الموارد على علامة معينة. يتم توريث تعيينات النهج بواسطة الموارد الفرعية. إذا تم تطبيق تعيين نهج على مجموعة موارد، فإنه ينطبق على جميع الموارد في مجموعة الموارد هذه.
تم العثور على مخطط القاعدة لتعريف السياسة هنا: https://schema.management.azure.com/schemas/2020-10-01/policyDefinition.json
يمكنك استخدام JSON لإنشاء تعريف نهج. ويتضمن تعريف السياسة العامة عناصر من أجل:
- اسم العرض
- الوصف
- الوضع
- metadata
- المعلمات
- قاعدة السياسة
- التقييم المنطقي
- أثر
على سبيل المثال، يعرض JSON التالي سياسة تحد من مكان نشر الموارد:
{
"properties": {
"displayName": "Allowed locations",
"description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
"mode": "Indexed",
"metadata": {
"version": "1.0.0",
"category": "Locations"
},
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of locations that can be specified when deploying resources",
"strongType": "location",
"displayName": "Allowed locations"
},
"defaultValue": [ "westus2" ]
}
},
"policyRule": {
"if": {
"not": {
"field": "location",
"in": "[parameters('allowedLocations')]"
}
},
"then": {
"effect": "deny"
}
}
}
}
توجد عناصر وأنماط Azure Policy المضمنة في عينات Azure Policy.
اسم العرض والوصف
يمكنك استخدام displayNameوالوصف لتحديد تعريف النهج وتوفير سياق لوقت استخدامه. يبلغ الحد الأقصى لطول displayName128 حرفا والوصفبحد أقصى 512 حرفا.
ملاحظة
أثناء إنشاء تعريف نهج أو تحديثه، يتم تعريف المعرفوالنوعوالاسم بواسطة خصائص خارجية ل JSON وليست ضرورية في ملف JSON. يؤدي جلب تعريف النهج عبر SDK إلى إرجاع خصائص المعرفوالنوعوالاسم كجزء من JSON، ولكن كل منها عبارة عن معلومات للقراءة فقط تتعلق بتعريف السياسة.
النوع
على الرغم من تعذر تعيين خاصية النوع ، إلا أن هناك ثلاث قيم يتم إرجاعها بواسطة SDK وتكون مرئية في البوابة الإلكترونية:
Builtinيتم توفير تعريفات النهج هذه وصيانتها بواسطة Microsoft.:Customتحتوي جميع تعريفات السياسة التي أنشأها العملاء على هذه القيمة.:Staticيشير إلى تعريف نهج التوافق التنظيمي مع ملكية Microsoft.: نتائج التوافق لتعريفات النهج هذه هي نتائج عمليات تدقيق الجهات الخارجية على البنية الأساسية ل Microsoft. في مدخل Azure، يتم أحيانا عرض هذه القيمة على أنها مدارة من قبل Microsoft. لمزيد من المعلومات، راجع المسؤولية المشتركة في السحابة.
الوضع
يتم تكوين الوضع بناء على ما إذا كان النهج يستهدف خاصية Azure Resource Manager أو خاصية موفر الموارد.
أوضاع Resource Manager
يحدد الوضع أنواع الموارد التي يتم تقييمها لتعريف نهج. الأوضاع المدعومة هي:
allتقييم مجموعات الموارد والاشتراكات وجميع أنواع الموارد:indexedتقييم أنواع الموارد التي تدعم العلامات والموقع فقط:
على سبيل المثال، يدعم المورد Microsoft.Network/routeTables العلامات والموقع ويتم تقييمه في كلا الوضعين. ومع ذلك، لا يمكن وضع علامة على المورد Microsoft.Network/routeTables/routes ولا يتم تقييمه في Indexed الوضع.
نوصي بتعيين الوضع في all معظم الحالات. تستخدم جميع تعريفات النهج التي تم إنشاؤها من خلال البوابة الإلكترونية الوضع all . إذا كنت تستخدم PowerShell أو Azure CLI، فيمكنك تحديد معلمة الوضع يدويا. إذا كان تعريف النهج لا يتضمن قيمة وضع ، تعيينه افتراضيا all في Azure PowerShell وإلى null Azure CLI. null الوضع هو نفسه المستخدم indexed لدعم التوافق مع الإصدارات السابقة.
indexed يجب استخدامها عند إنشاء سياسات تفرض العلامات أو المواقع. وعلى الرغم من أنه غير مطلوب، إلا أنه يمنع الموارد التي لا تدعم العلامات والمواقع من الظهور على أنها غير متوافقة في نتائج الامتثال. الاستثناء هو مجموعات المواردوالاشتراكات. يجب أن تقوم تعريفات النهج التي تفرض الموقع أو العلامات على مجموعة موارد أو اشتراك بتعيين الوضع إلى all النوع أو النوع واستهدافه Microsoft.Resources/subscriptions على Microsoft.Resources/subscriptions/resourceGroups وجه التحديد. على سبيل المثال، راجع النمط: العلامات - نموذج #1. للحصول على قائمة بالموارد التي تدعم العلامات، راجع دعم العلامات لموارد Azure.
أوضاع موفر الموارد
يتم دعم أوضاع "موفر الموارد" التالية بشكل كامل:
Microsoft.Kubernetes.Dataلإدارة مجموعات Kubernetes الخاصة بك على Azure أو إيقاف تشغيله. تستخدم التعريفات التي تستخدم وضع "موفر الموارد" هذا تأثيرات التدقيقوالرفضوالتعطيل. يدعم هذا الوضع التعريفات المخصصة كمعاينة عامة. راجع إنشاء تعريف نهج من قالب قيد لإنشاء تعريف مخصص من قالب قيد GateKeeper v3 موجود في عامل النهج المفتوح (OPA). تم إهمال استخدام تأثير EnforceOPAConstraint.Microsoft.KeyVault.Dataلإدارة الخزائن والشهادات في Azure Key Vault. لمزيد من المعلومات حول تعريفات النهج هذه، راجع دمج Azure Key Vault مع نهج Azure.
يتم حاليا دعم وضع "موفر الموارد" التالي كمعاينة:
Microsoft.ContainerService.Dataلإدارة قواعد وحدة التحكم في القبول على Azure Kubernetes Service. يجب أن تستخدم التعريفات التي تستخدم وضع موفر الموارد هذا تأثير EnforceRegoPolicy. تم إهمال هذا الوضع.
ملاحظة
ما لم ينص صراحة على ذلك، فإن أوضاع موفر الموارد تدعم فقط تعريفات السياسة المضمنة، ولا يتم دعم الإعفاءات على مستوى المكونات.
بيانات التعريف
تخزن الخاصية الاختيارية معلومات حول تعريف النهج metadata . يمكن للعملاء تحديد أي خصائص وقيم مفيدة لمؤسستهم في metadata. ومع ذلك، هناك بعض الخصائص الشائعة المستخدمة بواسطة Azure Policy وفي العناصر المضمنة. كل metadata خاصية لها حد 1024 حرفا.
خصائص بيانات التعريف الشائعة
version(السلسلة): يتتبع تفاصيل حول إصدار محتويات تعريف السياسة.category(السلسلة): يحدد تحت أي فئة في مدخل Azure يتم عرض تعريف النهج.preview(منطقي): علامة صواب أو خطأ إذا كان تعريف السياسة معاينة.deprecated(منطقي): علامة صواب أو خطأ إذا تم وضع علامة على تعريف السياسة على أنه مهمل.portalReview(السلسلة): يحدد ما إذا كان ينبغي مراجعة المعلمات في البوابة الإلكترونية، بغض النظر عن الإدخال المطلوب.
ملاحظة
تستخدم versionخدمة نهج Azure ، previewوالخصائص لنقل مستوى التغيير إلى تعريف نهج مضمن أو مبادرة وحالة deprecated . تنسيق version هو: {Major}.{Minor}.{Patch}. يتم إلحاق حالات محددة، مثل المهملة أو المعاينةversion، بالخاصية أو في خاصية أخرى كحالة منطقية. لمزيد من المعلومات حول طريقة إصدار Azure Policy المضمنة، راجع تعيين الإصدار المضمن.
لمعرفة المزيد حول معنى إهمال نهج أو في المعاينة، راجع معاينة السياسات المهملة.
المعلمات
تساعد المعلمات على تبسيط إدارة النهج عن طريق تقليل عدد تعريفات السياسة. فكر في معلمات مثل الحقول الموجودة في نموذج - name، ، ، ، cityaddressstate. تبقى هذه المعلمات دائما كما هي ، ولكن تتغير قيمها بناء على الفرد الذي يملأ النموذج.
تعمل المعلمات بنفس الطريقة عند بناء السياسات. من خلال تضمين معلمات في تعريف نهج، يمكنك إعادة استخدام هذا النهج لسيناريوهات مختلفة باستخدام قيم مختلفة.
ملاحظة
يمكن إضافة المعلمات إلى تعريف موجود ومعين. يجب أن تتضمن المعلمة الجديدة الخاصية defaultValue . وهذا يمنع التعيينات الحالية للسياسة أو المبادرة من أن تصبح غير صالحة بشكل غير مباشر.
خصائص المعلمات
تحتوي المعلمة على الخصائص التالية المستخدمة في تعريف النهج:
nameاسم المعلمة الخاصة بك.: تستخدم من قبلparametersوظيفة النشر ضمن قاعدة النهج. لمزيد من المعلومات، راجع استخدام قيمة معلمة.typeيحدد ما إذا كانت المعلمة عبارة عن سلسلة أو صفيف أو كائن أو منطقي أو عدد صحيح أو عائمأوdatetime.:metadataيحدد الخصائص الفرعية المستخدمة بشكل أساسي بواسطة مدخل Azure لعرض معلومات سهلة الاستخدام:descriptionشرح الغرض من استخدام المعلمة.: يمكن استخدامها لتقديم أمثلة على القيم المقبولة.displayNameالاسم المألوف الموضح في البوابة الإلكترونية للمعلمة.:strongType(اختياري) يستخدم عند تعيين تعريف السياسة من خلال البوابة الإلكترونية.: يوفر قائمة مدركة للسياق. لمزيد من المعلومات، راجع strongType.assignPermissions: (اختياري) تعيين true لجعل مدخل Azure يقوم بإنشاء تعيينات دور أثناء تعيين النهج.: هذه الخاصية مفيدة في حالة رغبتك في تعيين أذونات خارج نطاق التعيين. هناك تعيين دور واحد لكل تعريف دور في السياسة (أو لكل تعريف دور في جميع السياسات في المبادرة). يجب أن تكون قيمة المعلمة موردا أو نطاقا صالحا.
defaultValue: (اختياري) لتعيين قيمة المعلمة في مهمة إذا لم يتم إعطاء أي قيمة.: مطلوب عند تحديث تعريف نهج موجود تم تعيينه.allowedValues: (اختياري) يوفر صفيفا من القيم التي تقبلها المعلمة أثناء التعيين.: مقارنات القيمة المسموح بها حساسة لحالة الأحرف.
على سبيل المثال، يمكنك تحديد تعريف نهج للحد من المواقع التي يمكن نشر الموارد فيها. يمكن السماح بمعلمة لتعريف السياسة هذاالمواقع. سيتم استخدام هذه المعلمة من قبل كل تعيين لتعريف السياسة للحد من القيم المقبولة. يوفر استخدام strongType تجربة محسنة عند إكمال المهمة من خلال البوابة الإلكترونية:
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [ "westus2" ],
"allowedValues": [
"eastus2",
"westus2",
"westus"
]
}
}
استخدام قيمة معلمة
في قاعدة النهج، يمكنك الرجوع إلى المعلمات باستخدام بناء جملة الدالة التالي parameters :
{
"field": "location",
"in": "[parameters('allowedLocations')]"
}
يشير هذا النموذج إلى المعلمة allowedLocations التي تم عرضها في خصائص المعلمة.
سترونج تايب
ضمن الخاصية metadata ، يمكنك استخدام strongType لتوفير قائمة خيارات متعددة التحديد داخل مدخل Azure. يمكن أن يكون strongTypeنوع مورد مدعوم أو قيمة مسموح بها. لتحديد ما إذا كان نوع المورد صالحا ل strongType، استخدم Get-AzResourceProvider. تنسيق نوع موردtypestrongType هو <Resource Provider>/<Resource Type>. على سبيل المثال، Microsoft.Network/virtualNetworks/subnets.
يتم دعم بعض أنواع الموارد التي لم يتم إرجاعها بواسطة Get-AzResourceProvider . وهذه الأنواع هي:
Microsoft.RecoveryServices/vaults/backupPolicies
القيم غير المسموح بها لنوع المورد ل strongType هي:
locationresourceTypesstorageSkusvmSKUsexistingResourceGroups
تعريف الموقع
أثناء إنشاء مبادرة أو سياسة، من الضروري تحديد موقع التعريف. يجب أن يكون موقع التعريف مجموعة إدارة أو اشتراكا. يحدد هذا الموقع النطاق الذي يمكن تعيين المبادرة أو السياسة إليه. يجب أن تكون الموارد أعضاء مباشرين أو تابعين ضمن التسلسل الهرمي لموقع التعريف لاستهدافه للتعيين.
إذا كان موقع التعريف هو:
- الاشتراك - يمكن تعيين تعريف السياسة للموارد داخل هذا الاشتراك فقط.
- مجموعة الإدارة - يمكن تعيين تعريف النهج فقط للموارد داخل مجموعات إدارة الأطفال والاشتراكات الفرعية. إذا كنت تخطط لتطبيق تعريف النهج على عدة اشتراكات، فيجب أن يكون الموقع الجغرافي مجموعة إدارة تحتوي على كل اشتراك.
لمزيد من المعلومات، راجع فهم النطاق في نهج Azure.
قاعدة السياسة
تتكون قاعدة النهج من حظر "إذا " و"من ثم ". في كتلة if ، يمكنك تعريف شرط واحد أو أكثر يحدد وقت فرض السياسة. يمكنك تطبيق عوامل التشغيل المنطقية على هذه الشروط لتحديد سيناريو النهج بدقة.
في الكتلة ثم ، يمكنك تعريف التأثير الذي يحدث عند استيفاء الشروط إذا .
{
"if": {
<condition> | <logical operator>
},
"then": {
"effect": "deny | audit | modify | append | auditIfNotExists | deployIfNotExists | disabled"
}
}
العوامل المنطقية
عوامل التشغيل المنطقية المدعومة هي:
"not": {condition or operator}"allOf": [{condition or operator},{condition or operator}]"anyOf": [{condition or operator},{condition or operator}]
بناء الجملة ليس عكس نتيجة الشرط. يتطلب بناء جملة allOf (على غرار المنطقية والعملية ) أن تكون جميع الشروط صحيحة. يتطلب بناء جملة anyOf (على غرار العملية أو المنطقية) شرطا واحدا أو أكثر ليكون صحيحا.
يمكنك تداخل عوامل التشغيل المنطقية. يوضح المثال التالي عملية غير متداخلة داخل عملية allOf .
"if": {
"allOf": [{
"not": {
"field": "tags",
"containsKey": "application"
}
},
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
}
]
},
شروط
يقيم الشرط ما إذا كانت القيمة تفي بمعايير معينة. الشروط المدعومة هي:
"equals": "stringValue""notEquals": "stringValue""like": "stringValue""notLike": "stringValue""match": "stringValue""matchInsensitively": "stringValue""notMatch": "stringValue""notMatchInsensitively": "stringValue""contains": "stringValue""notContains": "stringValue""in": ["stringValue1","stringValue2"]"notIn": ["stringValue1","stringValue2"]"containsKey": "keyName""notContainsKey": "keyName""less": "dateValue"|"less": "stringValue"|"less": intValue"lessOrEquals": "dateValue"|"lessOrEquals": "stringValue"|"lessOrEquals": intValue"greater": "dateValue"|"greater": "stringValue"|"greater": intValue"greaterOrEquals": "dateValue"|"greaterOrEquals": "stringValue"|"greaterOrEquals": intValue"exists": "bool"
بالنسبة لأقل، أقلOrEquals، أكبر، وأكبرOrEquals، إذا كان نوع الخاصية لا يتطابق مع نوع الشرط، يتم طرح خطأ. يتم إجراء مقارنات السلسلة باستخدام InvariantCultureIgnoreCase.
عند استخدام الشرطين "أعجبني " و" أعجبني" ، يمكنك توفير حرف بدل * في القيمة. يجب ألا تحتوي القيمة على أكثر من حرف *بدل واحد .
عند استخدام شروط المطابقةو notMatch ، قم بتوفير # مطابقة رقم، لحرف، لمطابقة أي حرف، ?. وأي حرف آخر لمطابقة هذا الحرف الفعلي. على الرغم من أن المطابقة و notMatch حساسان لحالة الأحرف، إلا أن جميع الشروط الأخرى التي تقيم stringValue غير حساسة لحالة الأحرف. تتوفر البدائل غير الحساسة لحالة الأحرف في matchInsensitively وليس MatchInsensitively.
الحقول
يمكن تشكيل الشروط التي تقيم ما إذا كانت قيم الخصائص في حمولة طلب المورد تفي بمعايير معينة باستخدام تعبير حقل . يتم دعم الحقول التالية:
namefullName- ترجع هذه الدالة الاسم الكامل للمورد. الاسم الكامل للمورد هو اسم المورد الذي تسبقه أي أسماء موارد أصلية (على سبيل المثال "myServer/myDatabase").
kindtypelocation- تتم تسوية حقول الموقع لدعم تنسيقات مختلفة. على سبيل المثال ،
East US 2يعتبر مساويا لeastus2. - استخدم Global للموارد التي لا تعرف الموقع.
- تتم تسوية حقول الموقع لدعم تنسيقات مختلفة. على سبيل المثال ،
id- ترجع هذه الدالة معرف المورد الخاص بالمورد الذي يتم تقييمه.
- مثال:
/subscriptions/06be863d-0996-4d56-be22-384767287aa2/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
identity.type- إرجاع نوع الهوية المدارة الممكنة على المورد.
tagstags['<tagName>']- يدعم بناء جملة القوس هذا أسماء العلامات التي تحتوي على علامات ترقيم مثل واصلة أو نقطة أو مسافة.
- حيث <tagName> هو اسم العلامة للتحقق من صحة الشرط.
- أمثلة:
tags['Acct.CostCenter']حيث Acct.CostCenter هو اسم العلامة.
tags['''<tagName>''']- يدعم بناء جملة القوس هذا أسماء العلامات التي تحتوي على الفاصلة العليا فيه عن طريق الهروب باستخدام الفاصلة العليا المزدوجة.
- حيث "tagName>"< هو اسم العلامة للتحقق من صحة الشرط.
- مثال:
tags['''My.Apostrophe.Tag''']حيث يكون "My.Apostrophe.Tag" هو اسم العلامة.
- الأسماء المستعارة للممتلكات - للحصول على قائمة، راجع الأسماء المستعارة.
ملاحظة
tags.<tagName>، tags[tagName]ولا tags[tag.with.dots] تزال طرقا مقبولة للإعلان عن حقل علامات. ومع ذلك ، فإن التعبيرات المفضلة هي تلك المذكورة أعلاه.
ملاحظة
في تعبيرات الحقول التي تشير إلى الاسم المستعار [*]، يتم تقييم كل عنصر في الصفيف بشكل فردي مع منطقي وبين العناصر. لمزيد من المعلومات، راجع الرجوع إلى خصائص مورد الصفيف.
استخدام العلامات ذات المعلمات
يمكن تمرير قيمة معلمة إلى حقل علامة. يؤدي تمرير معلمة إلى حقل علامة إلى زيادة مرونة تعريف النهج أثناء تعيين السياسة.
في المثال التالي، concat يتم استخدامه لإنشاء بحث حقل علامات تمييز للعلامة المسماة قيمة المعلمة tagName . إذا لم تكن هذه العلامة موجودة، استخدام تأثير التعديل لإضافة العلامة باستخدام قيمة العلامة المسماة نفسها التي تم تعيينها على مجموعة الموارد الأصل للموارد التي resourcegroup() تم تدقيقها باستخدام وظيفة البحث.
{
"if": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": "false"
},
"then": {
"effect": "modify",
"details": {
"operations": [{
"operation": "add",
"field": "[concat('tags[', parameters('tagName'), ']')]",
"value": "[resourcegroup().tags[parameters('tagName')]]"
}],
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/4a9ae827-6dc8-4573-8ac7-8239d42aa03f"
]
}
}
}
القيمة
يمكن تشكيل الشروط التي تقيم ما إذا كانت القيمة تفي بمعايير معينة باستخدام تعبير قيمة . يمكن أن تكون القيم حرفية أو قيم المعلمات أو القيم التي تم إرجاعها لأي دالات قالب مدعومة.
تحذير
إذا كانت نتيجة دالة القالب خاطئة، يفشل تقييم النموذج. فشل التقييم رفضٌ ضمني. للاطلاع على مزيد من المعلومات، انظر في تجنب فشل الدالة. استخدم طريقة الإنفاذفي DoNotEnforce لمنع تأثير التقييم الفاشل على الموارد الجديدة أو المحدثة أثناء اختبار تعريف نهج جديد والتحقق من صحته.
أمثلة القيمة
يستخدم مثال قاعدة النهج هذا قيمة لمقارنة نتيجة الدالة resourceGroup() وخاصية الاسم التي تم إرجاعها بشرط مشابه ل *netrg. ترفض القاعدة أي مورد ليس من النوع الموجود Microsoft.Network/* في أي مجموعة موارد ينتهي اسمها ب .*netrg
{
"if": {
"allOf": [{
"value": "[resourceGroup().name]",
"like": "*netrg"
},
{
"field": "type",
"notLike": "Microsoft.Network/*"
}
]
},
"then": {
"effect": "deny"
}
}
يستخدم مثال قاعدة النهج هذا القيمة للتحقق مما إذا كانت نتيجة الدالات المتداخلة المتعددة متساويةtrue. ترفض القاعدة أي مورد لا يحتوي على ثلاث علامات على الأقل.
{
"mode": "indexed",
"policyRule": {
"if": {
"value": "[less(length(field('tags')), 3)]",
"equals": "true"
},
"then": {
"effect": "deny"
}
}
}
تجنب فشل القالب
يسمح استخدام دالات القالب في القيمة بالعديد من الوظائف المتداخلة المعقدة. إذا كانت نتيجة دالة القالب خاطئة، يفشل تقييم النموذج. فشل التقييم رفضٌ ضمني. مثال على قيمة تفشل في سيناريوهات معينة:
{
"policyRule": {
"if": {
"value": "[substring(field('name'), 0, 3)]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
تستخدم قاعدة نهج المثال أعلاه السلسلة الفرعية() لمقارنة الأحرف الثلاثة الأولى من الاسم ب abc. إذا كان الاسم أقصر من ثلاثة أحرف، فإن الدالة تؤدي إلى substring() حدوث خطأ. يؤدي هذا الخطأ إلى أن تصبح السياسة تأثير رفض .
بدلا من ذلك، استخدم الدالة if() للتحقق مما إذا كانت الأحرف الثلاثة الأولى من الاسم تساوي abc دون السماح لاسم أقصر من ثلاثة أحرف بالتسبب في حدوث خطأ:
{
"policyRule": {
"if": {
"value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
باستخدام قاعدة النهج المنقحة، if() تحقق من طول الاسم قبل محاولة الحصول substring() على قيمة تحتوي على أقل من ثلاثة أحرف. إذا كان الاسم قصيرا جدا ، إرجاع القيمة لا تبدأ ب abc بدلا من ذلك ومقارنتها ب abc. لا يزال المورد الذي يحمل اسما قصيرا لا يبدأ ب abc يفشل في قاعدة السياسة، ولكنه لم يعد يتسبب في حدوث خطأ أثناء التقييم.
العدد
يمكن تشكيل الشروط التي تحسب عدد أعضاء الصفيف الذين يستوفون معايير معينة باستخدام تعبير العد . تتحقق السيناريوهات الشائعة مما إذا كان "واحد على الأقل من" أو "واحد بالضبط من" أو "جميع" أو "لا شيء" من أعضاء الصفيف يستوفي شرطا. يقيم Count كل عضو صفيف لتعبير شرط ويجمع النتائج الحقيقية، والتي تتم مقارنتها بعد ذلك بعامل تشغيل التعبير.
عدد الحقول
حساب عدد أعضاء الصفيف في حمولة الطلب الذين يستوفون تعبير شرط. بنية تعبيرات عدد الحقول هي:
{
"count": {
"field": "<[*] alias>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
يتم استخدام الخصائص التالية مع عدد الحقول:
- count.field (مطلوب): يحتوي على المسار إلى الصفيف ويجب أن يكون اسما مستعارا للصفيف.
- count.where (اختياري): تعبير الشرط للتقييم الفردي لكل عضو
count.fieldصفيف [*] من الأسماء المستعارة . إذا لم يتم توفير هذه الخاصية، تقييم جميع أعضاء الصفيف الذين لديهم مسار حقل إلى true. يمكن استخدام أي شرط داخل مكان الإقامة هذا. يمكن استخدام المشغلين المنطقيين داخل هذه الخاصية لإنشاء متطلبات تقييم معقدة. - الشرط (مطلوب): تتم مقارنة القيمة بعدد العناصر التي استوفت تعبير الشرط> count.where.< يجب استخدام شرط رقمي.
لمزيد من التفاصيل حول كيفية العمل مع خصائص الصفيف في نهج Azure، بما في ذلك شرح مفصل حول كيفية تقييم تعبير عدد الحقول ، راجع الرجوع إلى خصائص مورد الصفيف.
عدد القيم
احسب عدد أعضاء الصفيف الذين يستوفون شرطا. يمكن أن يكون الصفيف صفيفا حرفيا أو مرجعا إلى معلمة الصفيف. هيكل تعبيرات عدد القيم هو:
{
"count": {
"value": "<literal array | array parameter reference>",
"name": "<index name>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
يتم استخدام الخصائص التالية مع عدد القيمة:
- count.value (مطلوب): الصفيف المراد تقييمه.
- count.name (مطلوب): اسم الفهرس، ويتكون من أحرف وأرقام باللغة الإنجليزية. يعرف اسما لقيمة عضو الصفيف الذي تم تقييمه في التكرار الحالي. يتم استخدام الاسم للإشارة إلى القيمة الحالية داخل الشرط
count.where. اختياري عندما لا يكون تعبير العد في تابع لتعبير عد آخر. عندما لا يتم توفيره، يتم تعيين اسم الفهرس ضمنيا إلى"default". - count.where (اختياري): تعبير الشرط المطلوب تقييمه بشكل فردي لكل عضو صفيف من
count.value. إذا لم يتم توفير هذه الخاصية، تقييم جميع أعضاء الصفيف إلى true. يمكن استخدام أي شرط داخل مكان الإقامة هذا. يمكن استخدام المشغلين المنطقيين داخل هذه الخاصية لإنشاء متطلبات تقييم معقدة. يمكن الوصول إلى قيمة عضو الصفيف المعدود حاليا عن طريق استدعاء الدالة الحالية . - الشرط (مطلوب): تتم مقارنة القيمة بعدد العناصر التي استوفت تعبير الشرط>.<
count.whereيجب استخدام شرط رقمي.
الوظيفة الحالية
الوظيفة current() متوفرة فقط داخل الحالة count.where . ترجع هذه الدالة قيمة عضو الصفيف الذي يتم تعداده حاليا بواسطة تقييم تعبير العد .
استخدام عدد القيم
current(<index name defined in count.name>). على سبيل المثال:current('arrayMember').current(). مسموح به فقط عندما لا يكون تعبير عدد القيم تابعا لتعبير عد آخر. ترجع هذه الدالة نفس القيمة المذكورة أعلاه.
إذا كانت القيمة التي تم إرجاعها بواسطة المكالمة كائنا، دعم الوصول إلى الخصائص. على سبيل المثال: current('objectArrayMember').property.
استخدام عدد الحقول
current(<the array alias defined in count.field>). على سبيل المثال، current('Microsoft.Test/resource/enumeratedArray[*]').current(). مسموح به فقط عندما لا يكون تعبير عدد الحقول تابعا لتعبير عد آخر. ترجع هذه الدالة نفس القيمة المذكورة أعلاه.current(<alias of a property of the array member>). على سبيل المثال، current('Microsoft.Test/resource/enumeratedArray[*].property').
أمثلة على عدد الحقول
مثال 1: التحقق مما إذا كان الصفيف فارغا
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
},
"equals": 0
}
مثال 2: التحقق من وجود عضو صفيف واحد فقط لتلبية تعبير الشرط
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My unique description"
}
},
"equals": 1
}
مثال 3: التحقق من وجود عضو صفيف واحد على الأقل للوفاء بتعبير الشرط
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My common description"
}
},
"greaterOrEquals": 1
}
مثال 4: تحقق من أن كافة أعضاء صفيف الكائنات يستوفون تعبير الشرط
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "description"
}
},
"equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}
مثال 5: تحقق من تطابق عضو صفيف واحد على الأقل مع خصائص متعددة في تعبير الشرط
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
"equals": "Inbound"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
"equals": "Allow"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
"equals": "3389"
}
]
}
},
"greater": 0
}
مثال 6: استخدم current() الدالة where داخل الشروط للوصول إلى قيمة عضو الصفيف المعدود حاليا في دالة قالب. يتحقق هذا الشرط مما إذا كانت الشبكة الظاهرية تحتوي على بادئة عنوان ليست ضمن نطاق CIDR 10.0.0.0/24.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"value": "[ipRangeContains('10.0.0.0/24', current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
"equals": false
}
},
"greater": 0
}
مثال 7: استخدم field() الدالة where داخل الشروط للوصول إلى قيمة عضو الصفيف المعدود حاليا. يتحقق هذا الشرط مما إذا كانت الشبكة الظاهرية تحتوي على بادئة عنوان ليست ضمن نطاق CIDR 10.0.0.0/24.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"value": "[ipRangeContains('10.0.0.0/24', first(field(('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]')))]",
"equals": false
}
},
"greater": 0
}
أمثلة على عدد القيم
مثال 1: تحقق مما إذا كان اسم المورد يتطابق مع أي من أنماط الأسماء المحددة.
{
"count": {
"value": [ "prefix1_*", "prefix2_*" ],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
مثال 2: تحقق مما إذا كان اسم المورد يتطابق مع أي من أنماط الأسماء المحددة. لا تحدد الدالة current() اسم فهرس. النتيجة هي نفسها مثل المثال السابق.
{
"count": {
"value": [ "prefix1_*", "prefix2_*" ],
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
مثال 3: تحقق مما إذا كان اسم المورد يتطابق مع أي من أنماط الأسماء المحددة التي توفرها معلمة صفيف.
{
"count": {
"value": "[parameters('namePatterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
مثال 4: تحقق مما إذا كانت أي من بادئات عنوان الشبكة الظاهرية ليست ضمن قائمة البادئات المعتمدة.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"count": {
"value": "[parameters('approvedPrefixes')]",
"name": "approvedPrefix",
"where": {
"value": "[ipRangeContains(current('approvedPrefix'), current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
"equals": true
},
},
"equals": 0
}
},
"greater": 0
}
مثال 5: تحقق من أن جميع قواعد NSG المحجوزة محددة في NSG. يتم تعريف خصائص قواعد NSG المحجوزة في معلمة صفيف تحتوي على كائنات.
قيمة المعلمة:
[
{
"priority": 101,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 22
},
{
"priority": 102,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 3389
}
]
السياسات:
{
"count": {
"value": "[parameters('reservedNsgRules')]",
"name": "reservedNsgRule",
"where": {
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].priority",
"equals": "[current('reservedNsgRule').priority]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
"equals": "[current('reservedNsgRule').access]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
"equals": "[current('reservedNsgRule').direction]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
"equals": "[current('reservedNsgRule').destinationPortRange]"
}
]
}
},
"equals": 1
}
},
"equals": "[length(parameters('reservedNsgRules'))]"
}
التأثير
يدعم Azure Policy أنواع التأثيرات التالية:
- إلحاق: إضافة مجموعة الحقول المحددة إلى الطلب
- التدقيق: ينشئ حدث تحذير في سجل الأنشطة ولكنه لا يفشل في الطلب
- AuditIfNotExists: ينشئ حدث تحذير في سجل النشاط في حالة عدم وجود مورد ذي صلة
- رفض: ينشئ حدثا في سجل النشاط ويفشل الطلب
- DeployIfNotExists: نشر مورد ذي صلة إذا لم يكن موجودا بالفعل
- معطل: لا يقيم الموارد للامتثال لقاعدة النهج
- تعديل: إضافة العلامات المحددة أو تحديثها أو إزالتها من مورد أو اشتراك
- EnforceOPAConstraint (مهمل): يقوم بتكوين وحدة تحكم قبول وكيل النهج المفتوح باستخدام Gatekeeper v3 لمجموعات Kubernetes المدارة ذاتيا على Azure
- EnforceRegoPolicy (مهمل): يقوم بتكوين وحدة تحكم قبول وكيل النهج المفتوح باستخدام Gatekeeper v2 في Azure Kubernetes Service
للحصول على تفاصيل كاملة حول كل تأثير وترتيب التقييم والخصائص والأمثلة، راجع فهم تأثيرات نهج Azure.
مهام السياسة العامة
يمكن استخدام الوظائف لإدخال منطق إضافي في قاعدة السياسة. يتم حلها ضمن قاعدة السياسة العامة لتعريف السياسة وضمن قيم المعلمات المخصصة لتعريفات السياسة في مبادرة.
تتوفر جميع وظائف قالب Resource Manager للاستخدام ضمن قاعدة نهج، باستثناء الدالات التالية والدالات المعرفة من قبل المستخدم:
- كوبي إندكس()
- التاريخالوقتإضافة()
- النشر()
- البيئة()
- extensionResourceId()
- قائمةحسابساس()
- قائمةمفاتيح()
- قائمأسرار()
- list*
- إدارةالمجموعة()
- نيوجويد()
- مناطق الاختيار()
- مقدمي الخدمات()
- المرجع()
- resourceId()
- الاشتراكResourceId()
- tenantResourceId()
- مستأجر()
- utcNow(تنسيق)
- المتغيرات()
ملاحظة
لا تزال هذه الوظائف متوفرة ضمن details.deployment.properties.template جزء نشر القالب في تعريف نهج DeployIfNotExists .
تتوفر الدالة التالية للاستخدام في قاعدة نهج، ولكنها تختلف عن الاستخدام في قالب Azure Resource Manager (قالب ARM):
utcNow()- على عكس قالب ARM ، يمكن استخدام هذه الخاصية خارج defaultValue.- إرجاع سلسلة تم تعيينها إلى التاريخ والوقت الحاليين بتنسيق
yyyy-MM-ddTHH:mm:ss.fffffffZDateTime ISO 8601 العالمي .
- إرجاع سلسلة تم تعيينها إلى التاريخ والوقت الحاليين بتنسيق
تتوفر الوظائف التالية فقط في قواعد السياسة:
addDays(dateTime, numberOfDaysToAdd)- dateTime: سلسلة [مطلوب] - سلسلة بتنسيق DateTime ISO 8601 العالمي 'yyyy-MM-ddTHH:mm:ss. FFFFFFFZ'
- numberOfDaysToAdd: عدد صحيح [مطلوب] - عدد الأيام المطلوب إضافته
field(fieldName)- اسم الحقل: سلسلة [مطلوب] - اسم الحقل المراد استرداده
- ترجع هذه الدالة قيمة هذا الحقل من المورد الذي يتم تقييمه بواسطة الشرط if.
fieldيستخدم بشكل أساسي مع AuditIfNotExists و DeployIfNotExists للإشارة إلى الحقول الموجودة على المورد الذي يتم تقييمه. يمكن رؤية مثال على هذا الاستخدام في مثال DeployIfNotExists.
requestContext().apiVersion- إرجاع إصدار واجهة برمجة التطبيقات للطلب الذي أدى إلى تقييم النهج (على سبيل المثال:
2021-09-01). هذه القيمة هي إصدار واجهة برمجة التطبيقات الذي تم استخدامه في طلب PUT/PATCH للتقييمات حول إنشاء/تحديث الموارد. يتم استخدام أحدث إصدار من واجهة برمجة التطبيقات دائما أثناء تقييم الامتثال للموارد الموجودة.
- إرجاع إصدار واجهة برمجة التطبيقات للطلب الذي أدى إلى تقييم النهج (على سبيل المثال:
policy()ترجع هذه الدالة المعلومات التالية حول النهج الذي يتم تقييمه. يمكن الوصول إلى الخصائص من الكائن الذي تم إرجاعه (على سبيل المثال:
[policy().assignmentId]).{ "assignmentId": "/subscriptions/ad404ddd-36a5-4ea8-b3e3-681e77487a63/providers/Microsoft.Authorization/policyAssignments/myAssignment", "definitionId": "/providers/Microsoft.Authorization/policyDefinitions/34c877ad-507e-4c82-993e-3452a6e0ad3c", "setDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/42a694ed-f65e-42b2-aa9e-8052e9740a92", "definitionReferenceId": "StorageAccountNetworkACLs" }
ipRangeContains(range, targetRange)- النطاق: سلسلة [مطلوبة] - سلسلة تحدد نطاقا من عناوين IP للتحقق مما إذا كان targetRange بداخلها.
- targetRange: سلسلة [مطلوبة] - سلسلة تحدد نطاقا من عناوين IP للتحقق من صحتها كما هي مضمنة في النطاق.
- إرجاع منطقي لمعرفة ما إذا كان نطاق عنوان IP للنطاق يحتوي على نطاق عنوان IP targetRange . لا يسمح بالنطاقات الفارغة أو الاختلاط بين عائلات IP ويؤدي إلى فشل التقييم.
التنسيقات المدعومة:
- عنوان IP واحد (أمثلة:
10.0.0.0,2001:0DB8::3:FFFE) - نطاق CIDR (أمثلة:
10.0.0.0/24,2001:0DB8::/110) - النطاق المحدد بواسطة عناوين IP للبدء والنهاية (أمثلة:
192.168.0.1-192.168.0.9,2001:0DB8::-2001:0DB8::3:FFFF)
current(indexName)- دالة خاصة يمكن استخدامها فقط داخل تعبيرات العد.
مثال على وظيفة السياسة
يستخدم مثال قاعدة النهج هذا دالة المورد للحصول على خاصية الاسم، مقترنة like بدالة concat الصفيف والكائن لإنشاء شرط يفرض اسم المورد resourceGroup للبدء باسم مجموعة الموارد.
{
"if": {
"not": {
"field": "name",
"like": "[concat(resourceGroup().name,'*')]"
}
},
"then": {
"effect": "deny"
}
}
حدود قواعد السياسة
القيود المفروضة أثناء التأليف
يتم فرض قيود على هيكل قواعد السياسة أثناء تأليف السياسة أو تعيينها. ستفشل محاولات إنشاء تعريفات النهج التي تتجاوز هذه الحدود أو تعيينها.
| الحد | القيمة | التفاصيل الإضافية |
|---|---|---|
| تعبيرات الشرط في الشرط if | 4096 | |
| تعبيرات الشرط في الكتلة ثم | 128 | ينطبق على الوجودشرطالتدقيقIfNotExists و DeployIfNotExists النهج |
| وظائف النهج لكل قاعدة نهج | 2048 | |
| عدد المعلمات في دالة السياسة | 128 | مثال: [function('parameter1', 'parameter2', ...)] |
| عمق وظائف السياسة المتداخلة | 64 | مثال: [function(nested1(nested2(...)))] |
| طول سلسلة تعبير دالات النهج | 81920 | مثال: طول "[function(....)]" |
| تعبيرات عدد الحقول لكل صفيف | 5 | |
| تعبيرات عدد القيم لكل قاعدة نهج | 10 | |
| عدد مرات تكرار تعبير عدد القيم | 100 | بالنسبة لتعبيرات عدد القيم المتداخلة، يتضمن هذا أيضا عدد التكرار للتعبير الأصل |
الحدود المفروضة أثناء التقييم
حدود لحجم الكائنات التي تتم معالجتها بواسطة وظائف السياسة أثناء تقييم السياسة. لا يمكن دائما فرض هذه الحدود أثناء التأليف لأنها تعتمد على المحتوى الذي تم تقييمه. على سبيل المثال:
{
"field": "name",
"equals": "[concat(field('stringPropertyA'), field('stringPropertyB'))]"
}
يعتمد طول السلسلة التي تم إنشاؤها بواسطة الدالة concat() على قيمة الخصائص في المورد الذي تم تقييمه.
| الحد | القيمة | مثال |
|---|---|---|
| طول السلسلة التي تم إرجاعها بواسطة دالة | 131072 | [concat(field('longString1'), field('longString2'))] |
| عمق الكائنات المعقدة المقدمة كمعلمة إلى دالة أو التي تم إرجاعها بواسطة دالة | 128 | [union(field('largeObject1'), field('largeObject2'))] |
| عدد عقد الكائنات المعقدة المقدمة كمعلمة إلى دالة أو التي تم إرجاعها بواسطة دالة | 32768 | [concat(field('largeArray1'), field('largeArray2'))] |
تحذير
السياسة التي تتجاوز الحدود المذكورة أعلاه أثناء التقييم ستصبح فعليا سياسة رفض ويمكنها حظر الطلبات الواردة. عند كتابة سياسات ذات وظائف معقدة، ضع في اعتبارك هذه الحدود واختبر سياساتك مقابل الموارد التي لديها القدرة على تجاوزها.
الأسماء المستعارة
يمكنك استخدام الأسماء المستعارة للخصائص للوصول إلى خصائص معينة لنوع مورد. تمكنك الأسماء المستعارة من تقييد القيم أو الشروط المسموح بها لخاصية على مورد. يقوم كل اسم مستعار بتعيين المسارات في إصدارات API مختلفة لنوع مورد معين. أثناء تقييم السياسة، يحصل محرك النهج على مسار الخاصية لإصدار واجهة برمجة التطبيقات هذا.
قائمة الأسماء المستعارة تنمو دائما. للعثور على الأسماء المستعارة التي يدعمها نهج Azure حاليا، استخدم إحدى الطرق التالية:
ملحق نهج Azure للتعليمات البرمجية Visual Studio (مستحسن)
استخدم ملحق Azure Policy ل Visual Studio Code لعرض الأسماء المستعارة لخصائص الموارد واكتشافها.
Azure PowerShell
# Login first with Connect-AzAccount if not using Cloud Shell # Use Get-AzPolicyAlias to list available providers Get-AzPolicyAlias -ListAvailable # Use Get-AzPolicyAlias to list aliases for a Namespace (such as Azure Compute -- Microsoft.Compute) (Get-AzPolicyAlias -NamespaceMatch 'compute').Aliasesملاحظة
للبحث عن الأسماء المستعارة التي يمكن استخدامها مع تأثير التعديل ، استخدم الأمر التالي في Azure PowerShell 4.6.0 أو أعلى:
Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }Azure CLI
# Login first with az login if not using Cloud Shell # List namespaces az provider list --query [*].namespace # Get Azure Policy aliases for a specific Namespace (such as Azure Compute -- Microsoft.Compute) az provider show --namespace Microsoft.Compute --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"REST API / ARMClient
GET https://management.azure.com/providers/?api-version=2019-10-01&$expand=resourceTypes/aliases
فهم الاسم المستعار [*]
تحتوي العديد من الأسماء المستعارة المتوفرة على إصدار يظهر كاسم "عادي" وآخر يحتوي على [*] مرفق به. على سبيل المثال:
Microsoft.Storage/storageAccounts/networkAcls.ipRulesMicrosoft.Storage/storageAccounts/networkAcls.ipRules[*]
يمثل الاسم المستعار "العادي" الحقل كقيمة واحدة. هذا الحقل مخصص لسيناريوهات مقارنة المطابقة التامة عندما يجب أن تكون مجموعة القيم بأكملها كما تم تعريفها تماما، لا أكثر ولا أقل.
يمثل الاسم المستعار [*] مجموعة من القيم المحددة من عناصر خاصية مورد الصفيف. على سبيل المثال:
| الاسم المستعار | القيم المحددة |
|---|---|
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
عناصر ipRules الصفيف. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
قيم الخاصية من كل عنصر من action عناصر الصفيف ipRules . |
عند استخدامها في حالة حقل ، تجعل الأسماء المستعارة للصفيف من الممكن مقارنة كل عنصر صفيف فردي بقيمة مستهدفة. عند استخدامه مع تعبير العد ، من الممكن:
- التحقق من حجم الصفيف
- تحقق مما إذا كان الكل \ أي\nأحد عناصر الصفيف يفي بحالة معقدة
- تحقق مما إذا كانت عناصر الصفيف n بالضبط تفي بحالة معقدة
لمزيد من المعلومات والأمثلة، راجع الرجوع إلى خصائص مورد الصفيف.
الخطوات التالية
- انظر هيكل تعريف المبادرة
- راجع الأمثلة في عينات نهج Azure.
- اطلع على فهم تأثيرات النهج.
- فهم كيفية إنشاء السياسات برمجيا.
- تعرف على كيفية الحصول على بيانات الامتثال.
- تعرّف على كيفية معالجة الموارد غير الممتثلة.
- راجع ماهية مجموعة الإدارة باستخدام تنظيم مواردك باستخدام مجموعات إدارة Azure.