البرنامج التعليمي: إنشاء تعريف نهج مخصص

يسمح تعريف نهج مخصص للعملاء بتعريف قواعدهم الخاصة لاستخدام Azure. تُفرض غالباً هذه القواعد:

  • الممارسات الأمنية
  • إدارة التكلفة
  • قواعد خاصة بالمؤسسة (مثل التسمية أو المواقع)

أياً كان بمحرك الأعمال لإنشاء نهج مخصص، فإن الخطوات هي نفسها لتعريف النهج المخصص الجديد.

قبل إنشاء نهج مخصص، تحقق من نماذج النهج لمعرفة ما إذا كان هناك نهج يطابق احتياجاتك بالفعل.

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

  • تحديد متطلبات عملك
  • تعيين كل مطلب إلى خاصية مورد Azure
  • تعيين الخاصية إلى اسم مستعار
  • تحديد التأثير الذي يجب استخدامه
  • وضع تعريف النهج

المتطلبات الأساسية

إذا لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.

تعريف المتطلبات

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

  • يجب تمكين كل حساب تخزين فيما يتعلق بـ HTTPS
  • يجب تعطيل كل حساب تخزين فيما يتعلق بـ HTTP

يجب أن تحدد متطلباتك بوضوح كل من حالات الموارد التي "يتم إدراجها" ولن "يتم إدراجها".

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

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

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

يوجد العديد من الطرق لتحديد خصائص مورد Azure. نلقي نظرة على كل منها فيما يخص لهذا البرنامج التعليمي:

  • ملحق نهج Azure لـVS Code
  • قوالب Azure Resource Manager (قوالب ARM)
    • تصدير المورد الموجود
    • تجربة الإنشاء
    • نماذج التشغيل السريع (GitHub)
    • مستندات نماذج المراجع
  • مستكشف موارد Azure

عرض الموارد في ملحق VS Code

يمكن استخدام ملحق VS Code لاستعراض الموارد في البيئة الخاصة بك ورؤية خصائص إدارة الموارد على كل مورد.

قوالب ARM

يوجد عدة طرق للنظر إلى نموذج ARM يتضمن الخاصية التي تبحث عن إدارتها.

المورد الموجود في المدخل

تُعد أبسط طريقة للعثور على الخصائص هي النظر إلى مورد موجود من نفس النوع. توفر الموارد التي تم تكوينها مسبقاً مع الإعداد الذي تريد فرض أيضاً القيمة للمقارنة مقابل. انظر إلى صفحة نموذج التصدير (أسفل الإعدادات) في مدخل Azure لهذا المورد المحدد.

تحذير

لا يمكن توصيل نموذج ARM الذي تم تصديره بواسطة مدخل Azure مباشرة إلى deployment الخاصية الخاصة بنموذج ARM في تعريف نهج "deployIfNotExists".

لقطة شاشة لصفحة قالب التصدير على مورد موجود في مدخل Azure.

القيام بذلك لحساب تخزين يكشف قالب مشابه لهذا المثال:

...
"resources": [{
    "comments": "Generalized from resource: '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount'.",
    "type": "Microsoft.Storage/storageAccounts",
    "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
    },
    "kind": "Storage",
    "name": "[parameters('storageAccounts_mystorageaccount_name')]",
    "apiVersion": "2018-07-01",
    "location": "westus",
    "tags": {
        "ms-resource-usage": "azure-cloud-shell"
    },
    "scale": null,
    "properties": {
        "networkAcls": {
            "bypass": "AzureServices",
            "virtualNetworkRules": [],
            "ipRules": [],
            "defaultAction": "Allow"
        },
        "supportsHttpsTrafficOnly": false,
        "encryption": {
            "services": {
                "file": {
                    "enabled": true
                },
                "blob": {
                    "enabled": true
                }
            },
            "keySource": "Microsoft.Storage"
        }
    },
    "dependsOn": []
}]
...

يوجد تحت "properties" قيمة تسمى "supportsHttpsTrafficOnly" تعيين إلى خطأ. يبدو أن هذه الخاصة قد تكون الخاصية التي نبحث عنها. أيضاً، نوع المورد Microsoft.Storage/storageCounts. يتيح لنا النوع تحديد النهج إلى موارد من هذا النوع فقط.

إنشاء مورد في بوابة Azure

يوجد طريقة أخرى من خلال المدخل وهي تجربة إنشاء المورد. أثناء إنشاء حساب تخزين من خلال المدخل، يكون الخيار ضمن علامة التبويب Advanced هو Security transfer required. تحتوي هذه الخاصية على خيارات Disabled وEnabled. يحتوي رمز المعلومات على نص إضافي يؤكد أن هذا الخيار هو على الأرجح الخاصية التي نريدها. ومع ذلك، لا يخبرنا المدخل اسم الخاصية على هذه الشاشة.

في علامة التبويب "Review + create" ، يوجد رابط أسفل الصفحة لتنزيل نموذج للأتمتة. يؤدي تحديد الرابط إلى فتح النموذج الذي ينشئ المورد الذي قمنا بتكوينه. في هذه الحالة، نرى قطعتين رئيسيتين من المعلومات:

...
"supportsHttpsTrafficOnly": {
    "type": "bool"
}
...
"properties": {
    "accessTier": "[parameters('accessTier')]",
    "supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...

تخبرنا هذه المعلومات بنوع الخاصية وتؤكد أيضاً أنsupportsHttpsTrafficOnly هي الخاصية التي نبحث عنها.

نماذج التشغيل السريع على GitHub

تحتوي نماذج التشغيل السريع الخاصة بـAzure على GitHub على مئات نماذج ARM التي تم إنشاؤها للموارد المختلفة. يمكن أن تكون هذه النماذج طريقة ممتازة لإيجاد خاصية المورد التي تبحث عنها. قد تبدو بعض الخصائص كما تبحث عنها، ولكن يمكنك التحكم في شيء آخر.

مستندات مرجع المورد

للتحقق من صحة خاصية supportsHttpsTrafficOnly، تحقق من مرجع نموذج ARM لمورد حساب التخزين على موفر التخزين. يحتوي كائن الخصائص على قائمة معلمات صالحة. يظهر تحديد ارتباط StorageAccountPropertiesCreateParameters-object جدول خصائص مقبولة. يوجدsupportsHttpsTrafficOnly ويطابق وصف ما نبحث عنه لتلبية متطلبات الأعمال.

مستكشف موارد Azure

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

حدد موقع مورد حساب تخزين وانظر إلى الخصائص. نرى خاصية supportsHttpsTrafficOnly هنا أيضاً. تحديد علامة التبويب Documentation، ونرى أن وصف الخاصية يطابق ما وجدناه في مستندات المرجع في وقت سابق.

البحث عن الاسم المستعار للخاصية

لقد حددنا خاصية المورد، ولكننا بحاجة إلى تعيين تلك الخاصية إلى اسم مستعار.

يوجد بعض الطرق لتحديد الأسماء المستعارة لمورد Azure. نلقي نظرة على كل منها فيما يخص لهذا البرنامج التعليمي:

  • ملحق نهج Azure لـVS Code
  • Azure CLI
  • Azure PowerShell

الحصول على أسماء مستعارة في ملحق VS Code

يُسهل ملحق نهج Azure لملحق VS Code استعراض الموارد واكتشاف الأسماء المستعارة.

ملاحظة

يعرض ملحق VS Code خصائص وضع إدارة الموارد فقط ولا يعرض أي خصائص وضع موفر الموارد.

Azure CLI

في Azure CLI، az provider يتم استخدام مجموعة الأوامر للبحث عن أسماء مستعارة للمورد. نقوم بتصفية مساحة الاسم Microsoft.Storage استناداً إلى التفاصيل التي حصلنا عليها حول مورد Azure في وقت سابق.

# Login first with az login if not using Cloud Shell

# Get Azure Policy aliases for type Microsoft.Storage
az provider show --namespace Microsoft.Storage --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"

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

Azure PowerShell

في Azure PowerShel، Get-AzPolicyAlias يتم استخدام مجموعة الأوامر للبحث عن أسماء مستعارة للمورد. نقوم بتصفية مساحة الاسم Microsoft.Storage استناداً إلى التفاصيل التي حصلنا عليها حول مورد Azure في وقت سابق.

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

# Use Get-AzPolicyAlias to list aliases for Microsoft.Storage
(Get-AzPolicyAlias -NamespaceMatch 'Microsoft.Storage').Aliases

مثل Azure CLI، تظهر النتائج اسماً مستعاراً مدعوماً من حسابات التخزين المسماة supportsHttpsTrafficOnly.

تحديد التأثير الذي يجب استخدامه

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

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

إنشاء التعريف

لدينا الآن تفاصيل الخاصية والأسماء المستعارة لما نخطط لإدارته. أيضاً، نضع قاعدة النهج نفسها. إذا لم تكن على دراية بلغة النهج، يمكنك الرجوع إلى بنية تعريف النهج لكيفية هيكلة تعريف النهج. فيما يلي نموذج فارغ لما يبدو عليه تعريف النهج:

{
    "properties": {
        "displayName": "<displayName>",
        "description": "<description>",
        "mode": "<mode>",
        "parameters": {
                <parameters>
        },
        "policyRule": {
            "if": {
                <rule>
            },
            "then": {
                "effect": "<effect>"
            }
        }
    }
}

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

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

"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",

المعلمات

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

"parameters": {
    "effectType": {
        "type": "string",
        "defaultValue": "Deny",
        "allowedValues": [
            "Deny",
            "Disabled"
        ],
        "metadata": {
            "displayName": "Effect",
            "description": "Enable or disable the execution of the policy"
        }
    }
},

قاعدة النهج

يُعد وضع قاعدة النهج هو الخطوة الأخيرة في بناء تعريف نهجنا المخصص. لقد حددنا عبارتين لاختبارهما:

  • نوع حساب التخزين Microsoft.Storage/storageAccounts
  • حساب التخزين supportsHttpsTrafficOnly غير صحيح

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

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
        },
        {
            "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
            "notEquals": "true"
        }
    ]
},
"then": {
    "effect": "[parameters('effectType')]"
}

تعريف كامل

مع تحديد الأجزاء الثلاثة من النهج، نقدم لك تعريفنا المكتمل:

{
    "properties": {
        "displayName": "Deny storage accounts not using only HTTPS",
        "description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
        "mode": "all",
        "parameters": {
            "effectType": {
                "type": "string",
                "defaultValue": "Deny",
                "allowedValues": [
                    "Deny",
                    "Disabled"
                ],
                "metadata": {
                    "displayName": "Effect",
                    "description": "Enable or disable the execution of the policy"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
                        "notEquals": "true"
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effectType')]"
            }
        }
    }
}

يمكن استخدام التعريف المكتمل لإنشاء نهج جديد. يقبل المدخل وكل SDK (Azure CLI، وAzure PowerShell، وواجهة برمجة التطبيقاتREST) التعريف بطرق مختلفة، لذا راجع الأوامر لكل منها للتحقق من الاستخدام الصحيح. ثم قم بتعيينه، باستخدام التأثير ذي المعلمات، إلى الموارد المناسبة لإدارة أمان حسابات التخزين الخاصة بك.

تنظيف الموارد

إذا انتهيت من العمل بالموارد من هذا البرنامج التعليمي، فاتبع الخطوات التالية لحذف أي من التعيينات أو التعريفات المنشأة أعلاه:

  1. حدد "Definitions" (أو "Assignments" إذا كنت تحاول حذف تعيين) ضمن "Authoring" في الجانب الأيسر من صفحة Azure Policy.

  2. ابحث عن المبادرة الجديدة أو معرف النهج (أو التعيين) الذي تريد إزالته.

  3. انقر بزر الماوس الأيمن فوق الصف أو حدد علامة القطع في نهاية التعريف (أو التعيين)، ثم حدد ⁧⁩"Delete definition"⁧⁩ (أو ⁧⁩"Delete assignment"⁧⁩).

مراجعة

في هذا البرنامج التعليمي، أنجزت بنجاح المهام التالية:

  • تحديد متطلبات عملك
  • تعيين كل مطلب إلى خاصية مورد Azure
  • تعيين الخاصية إلى اسم مستعار
  • تحديد التأثير الذي يجب استخدامه
  • وضع تعريف النهج

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

أيضاً، استخدم تعريف النهج المخصص لإنشاء نهج وتعيينه: