قاعدة نهج بنية تعريف نهج Azure
تتكون قاعدة النهج من if
كتل و then
. في if
الكتلة، يمكنك تعريف شرط واحد أو أكثر يحدد وقت فرض النهج. يمكنك تطبيق عوامل التشغيل المنطقية على هذه الشروط لتحديد سيناريو النهج بدقة.
للحصول على تفاصيل كاملة حول كل تأثير وترتيب التقييم والخصائص والأمثلة، راجع أساسيات تأثير تعريفات نهج Azure.
في then
الكتلة، يمكنك تحديد التأثير الذي يحدث عند if
استيفاء الشروط.
{
"if": {
<condition> | <logical operator>
},
"then": {
"effect": "deny | audit | modify | denyAction | append | auditIfNotExists | deployIfNotExists | disabled"
}
}
لمزيد من المعلومات حول policyRule، انتقل إلى مخطط تعريف النهج.
العوامل المنطقية
عوامل التشغيل المنطقية المدعومة هي:
"not": {condition or operator}
"allOf": [{condition or operator},{condition or operator}]
"anyOf": [{condition or operator},{condition or operator}]
يؤدي not
بناء الجملة إلى عكس نتيجة الشرط. allOf
يتطلب بناء الجملة (على غرار العملية المنطقيةand
) أن تكون جميع الشروط صحيحة. anyOf
يتطلب بناء الجملة (مشابه للعملية المنطقيةor
) شرطا واحدا أو أكثر ليكون صحيحا.
يمكنك تداخل العوامل المنطقية. يوضح not
المثال التالي عملية متداخلة 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"
بالنسبة إلى less
و greater
lessOrEquals
و و، greaterOrEquals
إذا لم يتطابق نوع الخاصية مع نوع الشرط، يتم طرح خطأ. يتم إجراء مقارنات السلسلة باستخدام InvariantCultureIgnoreCase
.
عند استخدام الشرطين like
و notLike
، يمكنك توفير حرف بدل (*
) في القيمة. يجب ألا تحتوي القيمة على أكثر من حرف بدل واحد.
عند استخدام الشرطين match
و notMatch
، قم بتوفير علامة تجزئة (#
) لمطابقة رقم وعلامة استفهام (?
) لحرف ونقطة (.
) لمطابقة أي حرف وأي حرف آخر لمطابقة هذا الحرف الفعلي. بينما match
تكون و notMatch
حساسة لحالة الأحرف، فإن جميع الشروط الأخرى التي تقيم stringValue
غير حساسة لحالة الأحرف. تتوفر بدائل غير حساسة لحالة الأحرف في matchInsensitively
و notMatchInsensitively
.
الحقول
يمكن تشكيل الشروط التي تقيم ما إذا كانت قيم الخصائص في حمولة طلب المورد تفي بمعايير معينة باستخدام تعبير field
. الحقول التالية مدعومة:
name
fullName
- إرجاع الاسم الكامل للمورد. الاسم الكامل للمورد هو اسم المورد الذي تم إلحاقه مسبقا بأي أسماء موارد أصل (على سبيل المثال
myServer/myDatabase
).
- إرجاع الاسم الكامل للمورد. الاسم الكامل للمورد هو اسم المورد الذي تم إلحاقه مسبقا بأي أسماء موارد أصل (على سبيل المثال
kind
type
location
- تتم تسوية حقول الموقع لدعم تنسيقات مختلفة. على سبيل المثال،
East US 2
يعتبر مساويا لـeastus2
. - استخدم global للموارد غير المحددة للموقع.
- تتم تسوية حقول الموقع لدعم تنسيقات مختلفة. على سبيل المثال،
id
- يرجع معرف المورد للمورد الذي يتم تقييمه.
- مثال:
/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
identity.type
- إرجاع نوع الهوية المدارة التي تم تمكينها على المورد.
tags
tags['<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]
لا تزال الطرق المقبولة للإعلان عن حقل علامات. ومع ذلك، التعبيرات المفضلة هي تلك المذكورة أعلاه.الأسماء المستعارة للخاصية - للحصول على قائمة، راجع الأسماء المستعارة.
إشعار
في
field
التعبيرات التي تشير إلى الاسم المستعار[*]
للصفيف يتم تقييم كل عنصر في الصفيف بشكل فردي مع منطقيand
بين العناصر. لمزيد من المعلومات، راجع الرجوع إلى خصائص مورد الصفيف.
يمكن أن تحل الشروط التي تستخدم field
التعبيرات محل بناء جملة "source": "action"
تعريف النهج القديم ، والذي يستخدم للعمل في عمليات الكتابة. على سبيل المثال، لم يعد هذا مدعوما:
{
"source": "action",
"like": "Microsoft.Network/publicIPAddresses/*"
}
ولكن يمكن تحقيق السلوك المطلوب باستخدام field
المنطق:
{
"field": "type",
"equals": "Microsoft.Network/publicIPAddresses"
}
استخدام العلامات مع المعلمات
يمكن تمرير قيمة معلمة إلى حقل علامة. يؤدي تمرير معلمة إلى حقل علامة إلى زيادة مرونة تعريف النهج أثناء تعيين النهج.
في المثال التالي، concat
يتم استخدام لإنشاء بحث حقل علامات عن العلامة المسماة قيمة المعلمة tagName
. إذا لم تكن هذه العلامة موجودة، modify
يتم استخدام التأثير لإضافة العلامة باستخدام قيمة نفس العلامة المسماة التي تم تعيينها على مجموعة الموارد الأصلية للموارد التي تم تدقيقها باستخدام دالة 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"
]
}
}
}
القيمة
الشروط التي تقيم ما إذا كانت القيمة تفي بمعايير معينة يمكن تشكيلها باستخدام value
تعبير. يمكن أن تكون القيم قيماً حرفية أو قيم معلمات أو القيم التي تم إرجاعها لأي دالات قالب معتمدة.
تحذير
إذا كانت نتيجة دالة القالب خطأ، يفشل تقييم النهج. التقييم الفاشل هو ضمني deny
. لمزيد من المعلومات، راجع تجنب فشل القالب. استخدم enforcementMode doNotEnforce
لمنع تأثير التقييم الفاشل على الموارد الجديدة أو المحدثة أثناء اختبار تعريف نهج جديد والتحقق من صحته.
أمثلة القيمة
يستخدم value
مثال قاعدة النهج هذا لمقارنة نتيجة الدالة resourceGroup()
والخاصية التي تم إرجاعها name
بشرط like
.*netrg
ترفض القاعدة أي مورد ليس من Microsoft.Network/*
type
في أي مجموعة موارد ينتهي اسمها ب *netrg
.
{
"if": {
"allOf": [
{
"value": "[resourceGroup().name]",
"like": "*netrg"
},
{
"field": "type",
"notLike": "Microsoft.Network/*"
}
]
},
"then": {
"effect": "deny"
}
}
يستخدم value
مثال قاعدة النهج هذا للتحقق مما إذا كانت نتيجة دالات متداخلة equals
true
متعددة . ترفض القاعدة أي مورد لا يحتوي على ثلاث علامات على الأقل.
{
"mode": "indexed",
"policyRule": {
"if": {
"value": "[less(length(field('tags')), 3)]",
"equals": "true"
},
"then": {
"effect": "deny"
}
}
}
تجنب فشل القالب
يسمح استخدام دالات القالب في value
بالعديد من الوظائف المعقدة المتداخلة. إذا كانت نتيجة دالة القالب خطأ، يفشل تقييم النهج. التقييم الفاشل هو ضمني deny
. مثال على value
فشل في سيناريوهات معينة:
{
"policyRule": {
"if": {
"value": "[substring(field('name'), 0, 3)]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
تستخدم قاعدة نهج المثال أعلاه السلسلة الفرعية () لمقارنة الأحرف الثلاثة الأولى من name
ب abc
. إذا كانت name
أقصر من ثلاثة أحرف، ينتج عن الدالة substring()
خطأ. يؤدي هذا الخطأ إلى أن يصبح النهج تأثيرا deny
.
بدلا من ذلك، استخدم الدالة if() للتحقق مما إذا كانت الأحرف الثلاثة الأولى من name
يساوي abc
دون السماح name
لأقصر من ثلاثة أحرف بالتسبب في حدوث خطأ:
{
"policyRule": {
"if": {
"value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
مع قاعدة النهج المنقحة، if()
يتحقق من name
طول قبل محاولة الحصول substring()
على قيمة بأقل من ثلاثة أحرف. إذا كانت name
قصيرة جدا، يتم إرجاع القيمة "لا تبدأ ب abc" بدلا من ذلك ومقارنتها ب abc
. لا يزال المورد الذي يحمل اسما قصيرا لا يبدأ ب abc
يفشل في قاعدة النهج، ولكنه لم يعد يتسبب في حدوث خطأ أثناء التقييم.
عدد
يمكن تشكيل الشروط التي تحسب عدد أعضاء الصفيف الذين يستوفون معايير معينة باستخدام count
تعبير. تتحقق السيناريوهات الشائعة مما إذا كان "واحد على الأقل من" أو "واحد بالضبط" أو "الكل" أو "أيا من" أعضاء الصفيف يفي بشرط. count
يقيم كل عضو صفيف لتعبير شرط ويلخص النتائج الحقيقية، والتي تتم مقارنتها بعد ذلك بعامل تشغيل التعبير.
عدد الحقول
حساب عدد أعضاء الصفيف في حمولة الطلب التي تفي بتعبير الشرط. بنية field count
التعبيرات هي:
{
"count": {
"field": "<[*] alias>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
يتم استخدام الخصائص التالية مع field count
:
count.field
(مطلوب): يحتوي على المسار إلى الصفيف ويجب أن يكون اسما مستعارا للصفيف.count.where
(اختياري): تعبير الشرط المراد تقييمه بشكل فردي لكل عضو صفيف اسم مستعار للصفيف.count.field
إذا لم يتم توفير هذه الخاصية، يتم تقييم جميع أعضاء الصفيف الذين لهم مسار "الحقل" إلى true. يمكن استخدام أي شرط داخل هذه الخاصية. يمكن استخدام عوامل التشغيل المنطقية داخل هذه الخاصية لإنشاء متطلبات تقييم معقدة.condition
(مطلوب): تتم مقارنة القيمة بعدد العناصر التي تفي بتعبيرcount.where
الشرط. يجب استخدام شرط رقمي.
لمزيد من التفاصيل حول كيفية العمل مع خصائص الصفيف في Azure Policy، بما في ذلك شرح مفصل حول كيفية field count
تقييم التعبير، راجع الرجوع إلى خصائص مورد الصفيف.
عدد القيم
حساب عدد أعضاء الصفيف الذين يستوفون شرطاً. يمكن أن يكون الصفيف صفيفاً حرفياً أو مرجعاً لمعلمة الصفيف. بنية value count
التعبيرات هي:
{
"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>"
}
يتم استخدام الخصائص التالية مع value count
:
count.value
(مطلوب): الصفيف المراد تقييمه.count.name
(مطلوب): اسم الفهرس، يتكون من أحرف وأرقام إنجليزية. تعريف اسم لقيمة عضو الصفيف الذي تم تقييمه في التكرار الحالي. يتم استخدام الاسم للإشارة إلى القيمة الحالية داخل الشرطcount.where
. اختياري عندماcount
لا يكون التعبير في تعبير تابع لتعبير آخرcount
. عند عدم توفيره، يتم تعيين اسم الفهرس ضمنياً إلى"default"
.count.where
(اختياري): تعبير الشرط المراد تقييمه بشكل فردي لكل عضو صفيف منcount.value
. إذا لم يتم توفير هذه الخاصية، يتم تقييم جميع أعضاء الصفيف إلى true. يمكن استخدام أي شرط داخل هذه الخاصية. يمكن استخدام عوامل التشغيل المنطقية داخل هذه الخاصية لإنشاء متطلبات تقييم معقدة. يمكن الوصول إلى قيمة عضو الصفيف الذي تم تعداده حالياً عن طريق استدعاء الدالة الحالية.condition
(مطلوب): تتم مقارنة القيمة بعدد العناصر التي تفي بتعبيرcount.where
الشرط. يجب استخدام شرط رقمي.
الدالة الحالية
تتوفر الدالة current()
فقط داخل الشرط count.where
. تقوم بإرجاع قيمة عضو الصفيف الذي تم تعداده حاليا بواسطة count
تقييم التعبير.
استخدام عدد القيم
current(<index name defined in count.name>)
. على سبيل المثال:current('arrayMember')
.current()
. مسموح به فقط عندماvalue count
لا يكون التعبير تابعا لتعبير آخرcount
. إرجاع نفس القيمة كما هو موضح أعلاه.
إذا كانت القيمة التي تم إرجاعها بواسطة الاستدعاء عنصرًا، يتم دعم موصلات الخصائص. على سبيل المثال: current('objectArrayMember').property
.
استخدام عدد الحقول
current(<the array alias defined in count.field>)
. على سبيل المثال،current('Microsoft.Test/resource/enumeratedArray[*]')
current()
. مسموح به فقط عندماfield count
لا يكون التعبير تابعا لتعبير آخرcount
. إرجاع نفس القيمة كما هو موضح أعلاه.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'))]"
}
وظائف النهج
يمكن استخدام الدالات لإدخال منطق إضافي في قاعدة النهج. يتم حلها ضمن قاعدة النهج لتعريف النهج وضمن قيم المعلمات المعينة لتعريفات النهج في مبادرة.
تتوفر جميع دالات القالب Resource Manager لاستخدامها ضمن قاعدة نهج، باستثناء الدالات التالية والدالات المعرفة من قبل المستخدم:
copyIndex()
dateTimeAdd()
dateTimeFromEpoch
dateTimeToEpoch
deployment()
environment()
extensionResourceId()
lambda()
لمزيد من المعلومات، انتقل إلى lambdalistAccountSas()
listKeys()
listSecrets()
list*
managementGroup()
newGuid()
pickZones()
providers()
reference()
resourceId()
subscriptionResourceId()
tenantResourceId()
tenant()
variables()
إشعار
لا تزال هذه الوظائف متوفرة ضمن details.deployment.properties.template
جزء نشر القالب في تعريف النهج deployIfNotExists
.
تتوفر الدالة التالية لاستخدامها في قاعدة نهج، ولكنها تختلف عن استخدامها في قالب Azure Resource Manager (قالب ARM):
utcNow()
- على عكس قالب ARM، يمكن استخدام هذه الخاصية خارج defaultValue.- تقوم بإرجاع سلسلة تم تعيينها إلى التاريخ والوقت الحاليين بتنسيق Universal ISO 8601 DateTime format
yyyy-MM-ddTHH:mm:ss.fffffffZ
.
- تقوم بإرجاع سلسلة تم تعيينها إلى التاريخ والوقت الحاليين بتنسيق Universal ISO 8601 DateTime format
تتوفر الدالات التالية فقط في قواعد النهج:
addDays(dateTime, numberOfDaysToAdd)
dateTime
: [مطلوب] سلسلة - سلسلة بتنسيق UNIVERSAL ISO 8601 DateTime 'yyyy-MM-ddTHH:mm:ss. FFFFFFFZ'numberOfDaysToAdd
: [مطلوب] عدد صحيح - عدد الأيام المراد إضافتها
field(fieldName)
fieldName
: سلسلة [مطلوب] - اسم الحقل المراد استرداده- إرجاع قيمة هذا الحقل من المورد الذي يتم تقييمه بواسطة شرط If.
field
يستخدم بشكل أساسي معauditIfNotExists
وdeployIfNotExists
للإشارة إلى الحقول على المورد الذي يتم تقييمه. يمكن مشاهدة مثال على هذا الاستخدام في مثال DeployIfNotExists.
requestContext().apiVersion
- يُعرض إصدار واجهة برمجة التطبيقات للطلب الذي قام بتشغيل تقييم النهج (على سبيل المثال:
2021-09-01
). هذه القيمة هي إصدار واجهة برمجة التطبيقات الذي تم استخدامه في طلب PUT/PATCH للتقييمات حول إنشاء/تحديث الموارد. يتم استخدام أحدث إصدار من واجهة برمجة التطبيقات دائما أثناء تقييم التوافق على الموارد الموجودة.
- يُعرض إصدار واجهة برمجة التطبيقات للطلب الذي قام بتشغيل تقييم النهج (على سبيل المثال:
policy()
إرجاع المعلومات التالية حول النهج الذي يتم تقييمه. يمكن الوصول إلى الخصائص من العنصر الذي تم إرجاعه (مثال:
[policy().assignmentId]
).{ "assignmentId": "/subscriptions/11111111-1111-1111-1111-111111111111/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)
range
: [مطلوب] سلسلة - سلسلة تحدد نطاق عناوين 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)
- دالة خاصة يمكن استخدامها داخل تعبيرات العد فقط.
مثال دالة النهج
يستخدم مثال قاعدة النهج هذا دالة resourceGroup
المورد للحصول على name
الخاصية، جنبا إلى جنب مع concat
دالة الصفيف والعنصر لإنشاء like
شرط يفرض اسم المورد للبدء باسم مجموعة الموارد.
{
"if": {
"not": {
"field": "name",
"like": "[concat(resourceGroup().name,'*')]"
}
},
"then": {
"effect": "deny"
}
}
حدود قواعد النهج
الحدود المفروضة أثناء التأليف
يتم فرض حدود لبنية قواعد النهج أثناء تأليف النهج أو تعيينه. ستفشل محاولات إنشاء تعريفات النهج التي تتجاوز هذه الحدود أو تعيينها.
الحد | القيمة | التفاصيل الإضافية |
---|---|---|
تعبيرات الشرط في if الشرط |
4096 | |
تعبيرات الشرط في then الكتلة |
128 | ينطبق على النهج existenceCondition auditIfNotExists و deployIfNotExists |
وظائف النهج لكل قاعدة نهج | 2048 | |
عدد المعلمات لدالة النهج | 128 | مثال: [function('parameter1', 'parameter2', ...)] |
عمق دالات النهج المتداخلة | 64 | مثال: [function(nested1(nested2(...)))] |
طول سلسلة تعبير دالات النهج | 81920 | مثال: طول "[function(....)]" |
Field count التعبيرات لكل صفيف |
5 | |
Value count التعبيرات لكل قاعدة نهج |
10 | |
Value count عدد تكرار التعبيرات |
100 | بالنسبة للتعبيرات المتداخلة Value count ، يتضمن هذا أيضا عدد التكرارات للتعبير الأصل |
الحدود المفروضة أثناء التقييم
حدود لحجم العناصر التي تتم معالجتها بواسطة دالات النهج أثناء تقييم النهج. لا يمكن دائماً فرض هذه الحدود أثناء التأليف لأنها تعتمد على المحتوى الذي تم تقييمه. على سبيل المثال:
{
"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'))] |
تحذير
ستصبح السياسة التي تتجاوز الحدود المذكورة أعلاه أثناء التقييم سياسة بشكل deny
فعال ويمكنها حظر الطلبات الواردة.
عند كتابة النُهُج ذات الوظائف المعقدة، ضع في اعتبارك هذه الحدود، واختبر نهجك مقابل الموارد التي لديها القدرة على تجاوزها.
الخطوات التالية
- لمزيد من المعلومات حول بنية تعريف النهج، انتقل إلى الأساسيات والمعلمات والاسم المستعار.
- بالنسبة للمبادرات، انتقل إلى هيكل تعريف المبادرة.
- راجع الأمثلة في نماذج نهج Azure.
- راجع فهم تأثيرات النهج.
- التعرف على كيفية إنشاء النُهج برمجيًا.
- تعرف على كيفية الحصول على بيانات التوافق.
- تعرف على كيفية إصلاح الموارد غير المتوافقة.
- راجع المقصود بمجموعة الإدارة من خلال تنظيم مواردك باستخدام مجموعات إدارة Azure.