عندما تحتاج إلى توتيع المهام في Azure باستخدام النصوص والأدوات، هل تفكر في استخدام حسابات الخدمة أم مبادئ الخدمة في Azure؟ ليس من النادر أن يقوم البعض بإنشاء حساب خدمة جديد وإعطائه جميع الأدوار الإدارية التي تريدها واستثنائه من التوثيق المتعدد العوامل.
I know what you’re thinking – “that is a horrible idea”. Of course, it is! And for sure, your IT Sec will give you a lot of grief if you did all that.
ولكن ما هو البديل؟ كيف يمكنك استخدام اعتماد مميز ذو نطاق محدود ولا يحتاج إلى استثنائه من المصادقة المتعددة العوامل؟ لديك الحظ لأن هذا هو ما ستتعلمه من هذه المقالة.
في هذه المقالة، ستتعرف على مفهوم مبدأ الخدمة في Azure. ستتعلم كيفية إنشاء مبادئ الخدمة بأنواع مختلفة من بيانات الاعتماد، مثل كلمات المرور والمفاتيح السرية والشهادات.
هناك العديد من الأدوات لإنشاء مبادئ الخدمة في Azure. تشمل هذه استخدام بوابة Azure، مركز إدارة Azure Active Directory، Azure AD PowerShell، Azure CLI، و Azure PowerShell. الأداة التي ستكون محور هذه المقالة هي Azure PowerShell.
ما زلت مهتمًا؟ استمر في القراءة ولنبدأ!
المتطلبات
نظرًا لأن هذه المقالة هي مقالة تعلم عن طريق القيام ، فإليك بعض المتطلبات الأساسية حتى تتمكن من متابعة العملية.
- الوصول إلى اشتراك Azure. سيكون من الأفضل إذا كنت تعمل في بيئة اختبار. إذا لم يكن لديك واحدة ، يمكنك التسجيل للحصول على تجربة مجانية.
- الوصول إلى كمبيوتر يعمل بنظام التشغيل Windows 10 بإصدار PowerShell 5.1.
- يجب تثبيت وحدة Azure PowerShell.
حساب الخدمة الأمثل في Azure مقابل حساب الخدمة
. غالبًا ما تحتاج أدوات التشغيل الآلي والنصوص إلى وصول مسؤولي أو ممتلكات. مثل توفير حسابات التخزين أو بدء تشغيل وإيقاف تشغيل الأجهزة الظاهرية وفقًا لجدول زمني. وربما يستخدم معظم المسؤولين حساب مستخدم ممتلك بالكامل (يسمى حساب خدمة) لتهيئة متطلبات الاعتماد للنصوص.
A service account is essentially a privileged user account used to authenticate using a username and password. And, if used with automation, a service account is most likely excluded from any conditional access policies or multi-factor authentication.
من ناحية أخرى ، يمكن إعداد Principal الخدمة في Azure لاستخدام اسم مستخدم وكلمة مرور أو شهادة للمصادقة. اعتبره هوية مستخدم بدون مستخدم ، ولكن هوية لتطبيق.
يمكن تعيين Principal الخدمة في Azure بالحصول على وصول كافٍ فقط إلى مورد Azure واحد محدد. على سبيل المثال ، يمكنك إنشاء Principal الخدمة في Azure الذي لديه وصول يستند إلى الأدوار إلى اشتراك بأكمله أو جهاز افتراضي واحد فقط في Azure.
الاعتبارات الأساسية لإنشاء مبدأ خدمة Azure
قبل إنشاء مبدأ خدمة Azure ، يجب أن تعرف التفاصيل الأساسية التي تحتاج إلى التخطيط لها. قد تبدو هذه التفاصيل بسيطة ولكنها ستجعل إنشاء مبدأ خدمة Azure أكثر كفاءة وسهولة قدر الإمكان.
اسم العرض. يبدأ الأمر بالاسم، ويجب أن يكون لمبدأ خدمة Azure اسم. لا يوجد قاعدة هنا، ولكن قد تكون لمؤسستك تعليمات تسمية محددة.
- نوع الاعتماد للاستخدام. يمكنك اختيار إنشاء مبدأ خدمة Azure سيستخدم كلمة مرور أو شهادة للمصادقة. هذا لا يعني أنه يمكنك اختيار واحدة فقط، يمكنك استخدام كليهما.
بالنسبة لمبادئ الخدمة، يشار إلى اسم التطبيق والمفتاح السري باسم معرف التطبيق والمفتاح السري.
- فترة صلاحية الاعتمادات. سواء قمت بتعيين اعتماد كلمة مرور أو شهادة، يجب عليك تحديد تاريخ بدء وانتهاء صلاحيتها. مدى صلاحية الاعتماد عادةً يعتمد على تكرار تجديد الشهادات وكلمات المرور.
- نطاق الوصول. هل تقوم بإنشاء مبدأ خدمة Azure سيكون لديه وصول إلى اشتراك أو مجموعة موارد أو موارد محددة؟
- الدور. هناك عدة أدوار متاحة مثل المساهم ، القارئ ، و المالك ، لذا يجب عليك تحديد الدور الذي يكفي لمبدأ الخدمة.
إنشاء مبدأ خدمة Azure مع مفتاح سري مُخصص
قلب إنشاء مبدأ خدمة جديد في Azure هو cmdlet New-AzAdServicePrincipal
. في هذا المثال، سيتم إنشاء مبدأ خدمة جديد بالقيم التالية:
DisplayName: AzVM_Reader
Scope: AzVM1 (الجهاز الظاهري)
Role: قارئ
Password: <تم تعيينه تلقائيًا>
صلاحية الاعتماد: سنة واحدة
الحصول على معرّف نطاق الهدف (الجهاز الظاهري)
كما يمكن ملاحظة، فإن نطاق هذا المبدأ الجديد محدود فقط للجهاز الظاهري المسمى AzVM1. ومع ذلك، فإن معلمة -Scope
لا تقبل فقط الاسم، ولكن معرف المورد بأكمله. لذلك، في هذا المثال، أول شيء يجب الحصول عليه هو معرف الجهاز الظاهري AzVM1. للقيام بذلك، استخدم الكود أدناه.
عند تشغيل الكود أعلاه في PowerShell، يجب أن ترى قائمة بأسماء أجهزة الجهاز الظاهري ومعرّفاتها، مشابهة للصورة أدناه.

إنشاء مبدأ خدمة Azure مع مفتاح سري
الآن بعد الحصول على معرّف نطاق الهدف، وهو معرّف الجهاز الظاهري AzVM1، يمكنك استخدام الأمر أدناه لإنشاء المبدأ الجديد للخدمة الأساسية الذي يحمل دور “القارئ”. ستتم تخزين خصائص المبدأ الخدمي الجديد في المتغير $sp
.
نتيجة للأمر أعلاه، تم إنشاء المبدأ الخدمي بالقيم التالية أدناه.

فك تشفير المفتاح السري
الآن لديك معرف التطبيق و السرّ، والتي تعتبر اسم المستخدم وكلمة المرور للمستخدم الممثل للخدمة. ومع ذلك، يتم عرض قيمة السرّ على أنها System.Security.SecureString. ستحتاج إلى معرفة ماهية هذا السرّ. لذا، استخدم الأمر التالي لتحويل السرّ إلى نص عادي.
الأمر السابق يقوم بتحويل السلسلة المؤمنة المشفرة من $sp.Secret
إلى نص عادي. راجع الصورة أدناه كمرجع.

التحقق من تعيين دور مبدأ الخدمة في Azure
كيف تعرف أن هذا عمل؟ يمكنك التحقق من قائمة التحكم في وصول الموارد باستخدام بوابة Azure. على سبيل المثال، في الصورة أدناه، يمكنك رؤية أن مبدأ الخدمة AzVM_Reader يمتلك الآن وصولًا بصلاحيات القارئ إلى الجهاز الظاهري AzVM1.

أيضًا، يمكنك استخدام الأمر Get-AzRoleAssignment -ObjectID $sp.id
للحصول على تعيينات الأدوار لمبدأ الخدمة في Azure. راجع لقطة الشاشة أدناه كمثال.

إنشاء مبدأ خدمة Azure مع كلمة مرور
إذا كنت ترغب في مزيد من التحكم في كلمة المرور أو المفتاح السري المخصص لمبدأ الخدمة في Azure الخاص بك، استخدم معلمة -PasswordCredential
أثناء إنشاء مبدأ الخدمة. هذا مفيد بشكل خاص إذا كانت كلمة المرور يجب أن تلبي متطلبات التعقيد.
في هذا المثال، سيتم إنشاء مبدأ الخدمة الجديد في Azure بهذه القيم:
DisplayName: ATA_RG_Contributor
النطاق: ATA (مجموعة الموارد)
الدور: المساهم
كلمة المرور: تحتوي على 20 حرفًا مع 6 حروف غير أبجدية أو أرقام
صلاحية الاعتماد: 5 سنوات
الحصول على معرف نطاق الهدف (مجموعة الموارد)
نطاق هذا الحساب الرئيسي الجديد يغطي مجموعة الموارد بأكملها بالاسم ATA. أول خطوة للحصول على معرف مجموعة الموارد ATA هي استخدام الكود أدناه ولكن تأكد من تغيير قيمة المعلمة -Name
إلى اسم مجموعة الموارد الخاصة بك.
بعد ذلك ، يجب أن ترى ResourceID
لمجموعة الموارد التي تم تخزينها الآن في المتغير $Scope
.

إنشاء كلمة المرور
الخطوة التالية هي إنشاء كلمة المرور التي تتبع تعقيد تحتوي على 20 حرفًا مع 6 حروف غير أبجدية أو أرقام. يمكنك استخدام طريقة .NET الثابتة GeneratePassword()
لذلك.
في الكود أعلاه GeneratePassword(20, 6)
، القيمة الأولى تعني طول كلمة المرور ، والقيمة الثانية تعني عدد الحروف غير الأبجدية أو الأرقام التي يجب تضمينها. يتم عرض النتيجة في الصورة أدناه.

GeneratePassword()
static methodإنشاء كائن اعتماد كلمة المرور
الآن بمجرد أن لديك سلسلة كلمة المرور، الخطوة التالية هي إنشاء كائن Microsoft.Azure.Commands.ActiveDirectory.PSADPasswordCredential
. سيحتوي هذا الكائن على سلسلة كلمة المرور المخزنة في المتغير $password
وفترة الصلاحية لمدة 5 سنوات. انسخ الكود أدناه وقم بتشغيله في جلسة Azure PowerShell الخاصة بك.
تشغيل الكود أعلاه في PowerShell سيقوم بتخزين كائن الاعتماد في المتغير $PasswordCredential
. يجب أن يكون النتيجة المتوقعة مشابهة للنتيجة المعروضة أدناه.

إنشاء الممثل الخدمي مع كلمة المرور
لديك الآن قيم المعلمة المطلوبة جاهزة لإنشاء الممثل الخدمي في Azure. الكود أدناه سيقوم بإنشاء الممثل الخدمي بعرض الاسم ATA_RG_Contributor واستخدام كلمة المرور المخزنة في المتغير $PasswordCredential
.
بعد تشغيل الكود، يجب أن يتم إنشاء الممثل الخدمي الجديد وتخزين الخصائص في المتغير $sp
. انظر إلى النتيجة المثالية أدناه.

تعيين الدور ونطاق العمل
تم إنشاء الممثل الخدمي في الجزء السابق، ولكن بدون دور ونطاق العمل. هذا يعود إلى عدم إمكانية استخدام المعلمة -Role
و-Scope
مع المعلمة -PasswordCredential
. هذا يعني أن خطوة إضافية مطلوبة لتعيين الدور ونطاق العمل للممثل الخدمي.
الكود أدناه يستخدم الأمر “New-AzRoleAssignment” لتعيين نطاق ودور للممثل الخدمي في Azure.
الصورة أدناه تُظهر النتيجة المتوقعة بعد تعيين الدور والنطاق للممثل الخدمي في Azure.

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

إنشاء معرف Azure Service Principal بشهادة
بالإضافة إلى اعتمادات كلمة المرور ، يمكن لـ Azure Service Principal أن يحتوي أيضًا على اعتمادات قائمة على الشهادة. يمكن أن تكون الشهادة المرتبطة إما من شهادة السلطة المصدرة أو توقيع الذاتي.
في هذا المثال ، سيتم إنشاء معرف Azure Service Principal الجديد بهذه القيم:
DisplayName: VSE3_SUB_OWNER
Scope: VSE3 (الاشتراك)
Role: Owner
صلاحية الشهادة: 2 سنوات
الحصول على معرف النطاق المستهدف (الاشتراك)
نطاق هذا المعرف الجديد للخدمة يشمل اشتراك Azure المسمى VSE3. أول شيء يجب الحصول عليه هو معرف الاشتراك VSE3. للقيام بذلك ، استخدم الشفرة أدناه ولكن تأكد من تغيير قيمة المعامل -SubscriptionName
إلى اسم مجموعة الموارد الخاصة بك.
بعد ذلك ، حدد اسم معرف Azure Service Principal الجديد والشهادة الموقعة ذاتيًا التي ستتم إنشاؤها.
إنشاء الشهادة الموقعة ذاتيًا
الكود أدناه ينشئ كلمة مرور ذاتية التوقيع في متجر الشهادات الشخصية بالاسم CN=VSE3_SUB_OWNER. صلاحية الشهادة محددة لمدة عامين. يتم حفظ خصائص الشهادة في المتغير $cert
.
الشاشة أدناه توضح أن الشهادة تم إنشاؤها.

إذا كنت ترغب في رؤية الشهادة الجديدة بصورة أكثر تعرفًا (واجهة المستخدم الرسومية) ، فيمكنك العثور عليها في واجهة إدارة الشهادات (certmgr.mmc). يُرجى الإشارة إلى الصورة أدناه التي تُظهر الشهادة.

الخطوة التالية هي الحصول على القيمة المشفرة بترميز Base64 للشهادة ذاتية التوقيع وحفظها في المتغير $keyValue
.
إنشاء Service Principal مع الشهادة
الآن بعد إنشاء الشهادة ، الخطوة التالية هي إنشاء Azure service principal الجديد. الكود أدناه سينشئ Azure service principal الذي سيستخدم الشهادة ذاتية التوقيع كاعتمادات له. فترة صلاحية الاعتماد تتزامن مع فترة صلاحية الشهادة.
ستحصل على نتيجة مماثلة كما هو موضح في الصورة أدناه.

تعيين الدور والنطاق
تم إنشاء Azure service principal ، ولكن لم يتم تعيين أي دور و نطاق له حتى الآن. هذا يعني أن خطوة إضافية مطلوبة لتعيين الدور والنطاق لـ service principal.
يستخدم الكود أدناه الأمر New-AzRoleAssignment
لتعيين دور المالك لاشتراك VSE3 في المبدأ الخدمي.
عند تشغيل الكود، يُعرض التأكيد في الصورة أدناه بأن عملية تعيين الدور تمت بنجاح.

الاتصال بخدمة Azure باستخدام شهادة المبدأ الخدمي
الآن لديك مبدأ الخدمة الذي تم إنشاؤه باستخدام بيانات اعتماد مستندة إلى شهادة. هذا يعني أنه يمكنك استخدامه للاتصال بـ Azure دون الحاجة إلى كلمة مرور. بدلاً من ذلك، ستستخدم الشهادة المتاحة على جهاز الكمبيوتر الخاص بك كوسيلة مصادقة.
في هذا المثال، اسم العرض لمبدأ الخدمة هو VSE3_SUB_OWNER، واسم الشهادة هو CN=VSE3_SUB_OWNER. يستخدم الكود أدناه بصمة الشهادة من مخزن الشهادات الشخصية كطريقة دخول.
تُظهر الصورة أدناه أن استخدام الكود أعلاه، تم تسجيل الدخول إلى Azure PowerShell بنجاح باستخدام ApplicationID، Tenant، وشهادة ThumbPrint فقط.

الاستنتاج
يعد مبدأ خدمة Azure هو المبدأ الأمني الذي يجب مراعاته عند إنشاء بيانات اعتماد لمهام الأتمتة والأدوات التي تواصل مع موارد Azure. يمكن اختيار النطاق والدور المراد تطبيقه لمنح أذونات “بالقدر الكافي” للوصول.
في هذه المقالة، تعلمت كيفية إنشاء ممثل خدمة Azure باستخدام PowerShell. يمكن أن تحتوي ممثلات خدمة Azure على كلمة مرور أو مفتاح سري أو اعتمادات مستندة إلى شهادة. لكل من هذه الأنواع من الاعتمادات ميزة وسيناريو استخدام قابل للتطبيق.
ممثلات الخدمة بكلمة مرور أو مفتاح سري أكثر قابلية للنقل ولكنها تعتبر أقل أمانًا لأنه يمكن مشاركة الاعتماد على هيئة نص عادي. من ناحية أخرى، الاعتمادات المستندة إلى الشهادة هي الخيار الأكثر أمانًا ولكنها تتطلب بعض الجهد للحفاظ عليها.
التقنيات التي تعلمتها في هذه المقالة تغطي فقط الأساسيات للبدء في استخدام ممثلات خدمة Azure في الأتمتة الخاصة بك. هناك طرق أخرى كثيرة لتكوين ممثلات خدمة Azure مثل إضافة وإزالة وإعادة تعيين الاعتمادات. من مسؤوليتك اكتشافها بمرور الوقت.
شكرًا لقراءتك!
موارد تعلم إضافية
إليك بعض الموارد التي قد تكون مفيدة لمرافقة هذه المقالة.
- Connect-AzAccount: بوابتك إلى Azure باستخدام PowerShell
- Connect-AzAccount: بوابتك إلى Azure باستخدام PowerShell
- كيفية إنشاء كلمة مرور عشوائية باستخدام PowerShell
- ما هو التحكم في الوصول القائم على الأدوار في Azure (Azure RBAC)؟
- توضيح المبادئ الخدمية في Azure AD
- كيفية إنشاء المبدأ الأساسي للخدمة في Azure عبر Azure CLI 2.0
- كيفية التحكم في الوصول إلى خدمات Office 365 باستخدام MFA
Source:
https://adamtheautomator.com/azure-service-principal/