استخدام هوية حمل عمل Microsoft Entra مع خدمة Azure Kubernetes (AKS)

تتطلب أحمال العمل المنشورة على مجموعة Azure Kubernetes Services (AKS) بيانات اعتماد تطبيق Microsoft Entra أو الهويات المدارة للوصول إلى الموارد المحمية من Microsoft Entra، مثل Azure Key Vault وMicrosoft Graph. يتكامل هوية حمل عمل Microsoft Entra مع القدرات الأصلية ل Kubernetes للاتحاد مع موفري الهوية الخارجيين.

يستخدم هوية حمل عمل Microsoft Entra إسقاط وحدة تخزين رمز حساب الخدمة (أي حساب خدمة)، لتمكين pods من استخدام هوية Kubernetes. يتم إصدار رمز Kubernetes المميز ويمكن اتحاد OIDC تطبيقات Kubernetes من الوصول إلى موارد Azure بأمان باستخدام معرف Microsoft Entra، استنادا إلى حسابات الخدمة ذات التعليقات التوضيحية.

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

تساعدك هذه المقالة على فهم هوية حمل عمل Microsoft Entra، وتستعرض الخيارات المتاحة لتخطيط استراتيجية المشروع والترحيل المحتمل من الهوية المدارة بواسطة Microsoft Entra pod.

إشعار

يمكنك استخدام Service Connector لمساعدتك في تكوين بعض الخطوات تلقائيا. راجع أيضا: ما هو Service Connector؟

التبعيات

  • يدعم AKS هوية حمل عمل Microsoft Entra على الإصدار 1.22 والإصدارات الأحدث.
  • الإصدار 2.47.0 من Azure CLI أو أحدث. قم بتشغيل az --version للعثور على الإصدار، ثم قم بتشغيل az upgrade لترقية الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI.

مكتبات عميل الهوية Azure

في مكتبات عميل Azure Identity، اختر أحد الأساليب التالية:

  • استخدم DefaultAzureCredential، الذي يحاول استخدام WorkloadIdentityCredential.
  • إنشاء مثيل ChainedTokenCredential يتضمن WorkloadIdentityCredential.
  • استخدم WorkloadIdentityCredential مباشرة.

يوفر الجدول التالي الحد الأدنى من إصدار الحزمة المطلوبة لكل مكتبة عميل للنظام البنائي للغة.

النظام البنائي مكتبة الحد الأدنى للإصدار
.NET Azure.Identity 1.9.0
C++‎ azure-identity-cpp 1.6.0
انتقال الازداج 1.3.0
Java هوية azure 1.9.0
Node.js @azure/الهوية 3.2.0
Python هوية azure 1.13.0

في نماذج التعليمات البرمجية التالية، DefaultAzureCredential يتم استخدام. يستخدم نوع بيانات الاعتماد هذا متغيرات البيئة التي تم إدخالها بواسطة خطاف الويب الخاص بتحول هوية حمل العمل Azure للمصادقة مع Azure Key Vault.

using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

string keyVaultUrl = Environment.GetEnvironmentVariable("KEYVAULT_URL");
string secretName = Environment.GetEnvironmentVariable("SECRET_NAME");

var client = new SecretClient(
    new Uri(keyVaultUrl),
    new DefaultAzureCredential());

KeyVaultSecret secret = await client.GetSecretAsync(secretName);

مكتبة مصادقة Microsoft (MSAL)

مكتبات العميل التالية هي الحد الأدنى من الإصدار المطلوب.

النظام البنائي مكتبة الصورة مثال يحتوي على Windows
.NET Microsoft Authentication Library-for-dotnet ghcr.io/azure/azure-workload-identity/msal-net:latest الارتباط ‏‏نعم‬
انتقال مكتبة مصادقة Microsoft للاستخدام ghcr.io/azure/azure-workload-identity/msal-go:latest الارتباط ‏‏نعم‬
Java Microsoft Authentication Library-for-java ghcr.io/azure/azure-workload-identity/msal-java:latest الارتباط لا
JavaScript Microsoft Authentication Library-for-js ghcr.io/azure/azure-workload-identity/msal-node:latest الارتباط لا
Python Microsoft Authentication Library-for-python ghcr.io/azure/azure-workload-identity/msal-python:latest الارتباط لا

القيود

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

طريقة العمل

في نموذج الأمان هذا، يعمل نظام مجموعة AKS كمصدر للرمز المميز. يستخدم معرف Microsoft Entra OpenID Connect لاكتشاف مفاتيح التوقيع العامة والتحقق من صحة رمز حساب الخدمة المميز قبل تبادله مع رمز Microsoft Entra المميز. يمكن أن يتبادل حمل العمل الخاص بك رمزا مميزا لحساب الخدمة تم إسقاطه إلى وحدة التخزين الخاصة به للرمز المميز ل Microsoft Entra باستخدام مكتبة عميل Azure Identity أو مكتبة مصادقة Microsoft (MSAL).

رسم تخطيطي لنموذج أمان هوية حمل عمل AKS.

يصف الجدول التالي نقاط نهاية مصدر OIDC المطلوبة هوية حمل عمل Microsoft Entra:

نقطة النهاية ‏‏الوصف
{IssuerURL}/.well-known/openid-configuration يعرف أيضا باسم مستند اكتشاف OIDC. يحتوي هذا على بيانات التعريف حول تكوينات المصدر.
{IssuerURL}/openid/v1/jwks يحتوي هذا على مفتاح (مفاتيح) التوقيع العام الذي يستخدمه معرف Microsoft Entra للتحقق من صحة الرمز المميز لحساب الخدمة.

يلخص الرسم التخطيطي التالي تسلسل المصادقة باستخدام OpenID Connect.

رسم تخطيطي لتسلسل مصادقة OIDC لهوية حمل عمل AKS.

التدوير التلقائي لشهادة إخطار على الويب

على غرار إضافات خطاف الويب الأخرى، يتم تدوير الشهادة بواسطة عملية التدوير التلقائي لشهادة نظام المجموعة.

تسميات حساب الخدمة والتعليقات التوضيحية

يدعم هوية حمل عمل Microsoft Entra التعيينات التالية المتعلقة بحساب الخدمة:

  • واحد لواحد، حيث يشير حساب الخدمة إلى كائن Microsoft Entra.
  • متعدد إلى واحد، حيث تشير حسابات خدمة متعددة إلى نفس كائن Microsoft Entra.
  • واحد إلى متعدد، حيث يشير حساب الخدمة إلى كائنات Microsoft Entra متعددة عن طريق تغيير التعليق التوضيحي لمعرف العميل. لمزيد من المعلومات، راجع كيفية توحيد هويات متعددة باستخدام حساب خدمة Kubernetes.

إشعار

إذا تم تحديث التعليقات التوضيحية لحساب الخدمة، يجب إعادة تشغيل pod حتى تسري التغييرات.

إذا كنت قد استخدمت هوية Microsoft Entra pod المدارة، ففكر في حساب الخدمة باعتباره أساس أمان Azure، باستثناء أن حساب الخدمة جزء من واجهة برمجة تطبيقات Kubernetes الأساسية، بدلا من تعريف الموارد المخصصة (CRD). تصف الأقسام التالية قائمة بالتسميات والتعليقات التوضيحية المتوفرة التي يمكن استخدامها لتكوين السلوك عند تبادل الرمز المميز لحساب الخدمة رمز الوصول المميز ل Microsoft Entra.

التعليقات التوضيحية لحساب الخدمة

جميع التعليقات التوضيحية اختيارية. إذا لم يتم تحديد التعليق التوضيحي، استخدام القيمة الافتراضية.

تعليق توضيحي ‏‏الوصف الإعداد الافتراضي
azure.workload.identity/client-id يمثل تطبيق Microsoft Entra
معرف العميل الذي سيتم استخدامه مع pod.
azure.workload.identity/tenant-id يمثل معرف مستأجر Azure حيث
تم تسجيل تطبيق Microsoft Entra.
تم استخراج متغير البيئة AZURE_TENANT_ID
من azure-wi-webhook-config ConfigMap.
azure.workload.identity/service-account-token-expiration يمثل الحقل الخاص ب expirationSeconds
الرمز المميز لحساب الخدمة المتوقع. إنه حقل اختياري تقوم بتكوينه لمنع وقت التعطل
بسبب أخطاء أثناء تحديث الرمز المميز لحساب الخدمة. لا ترتبط انتهاء صلاحية الرمز المميز لحساب خدمة Kubernetes بالرموز المميزة ل Microsoft Entra. تنتهي صلاحية رموز Microsoft Entra المميزة في 24 ساعة بعد إصدارها.
3600
النطاق المدعوم هو 3600-86400.

تسميات الجراب

إشعار

بالنسبة للتطبيقات التي تستخدم هوية حمل العمل، يلزم إضافة التسمية azure.workload.identity/use: "true" إلى مواصفات الجراب ل AKS لنقل هوية حمل العمل إلى سيناريو إغلاق الفشل لتوفير سلوك متسق وموثوق به للحجيرات التي تحتاج إلى استخدام هوية حمل العمل. وإلا تفشل القرون بعد إعادة تشغيلها.

التسمية ‏‏الوصف القيمة الموصى بها المطلوب
azure.workload.identity/use هذه التسمية مطلوبة في مواصفات قالب الجراب. يتم تغيير الحجيرات التي تحتوي على هذه التسمية فقط بواسطة خطاف ويب القبول المتغير ل azure-workload-identity لإدخال متغيرات البيئة الخاصة ب Azure وحجم الرمز المميز لحساب الخدمة المتوقع. صحيح ‏‏نعم‬

التعليقات التوضيحية للجراب

جميع التعليقات التوضيحية اختيارية. إذا لم يتم تحديد التعليق التوضيحي، استخدام القيمة الافتراضية.

تعليق توضيحي ‏‏الوصف الإعداد الافتراضي
azure.workload.identity/service-account-token-expiration expirationSeconds يمثل الحقل الخاص بالرمز المميز لحساب الخدمة المتوقع. إنه حقل اختياري تقوم بتكوينه لمنع أي وقت تعطل ناتج عن أخطاء أثناء تحديث الرمز المميز لحساب الخدمة. لا ترتبط انتهاء صلاحية الرمز المميز لحساب خدمة Kubernetes بالرموز المميزة ل Microsoft Entra. تنتهي صلاحية رموز Microsoft Entra المميزة في 24 ساعة بعد إصدارها. 1 3600
النطاق المدعوم هو 3600-86400.
azure.workload.identity/skip-containers يمثل قائمة مفصولة بفواصل منقوطة من الحاويات لتخطي إضافة وحدة تخزين الرمز المميز لحساب الخدمة المتوقع. على سبيل المثال، container1;container2 بشكل افتراضي، تتم إضافة وحدة تخزين الرمز المميز لحساب الخدمة المتوقعة إلى جميع الحاويات إذا تم تسمية حساب الخدمة ب azure.workload.identity/use: true.
azure.workload.identity/inject-proxy-sidecar إدخال حاوية init وكيل ووكيل sidecar في الجراب. يتم استخدام sidecar الوكيل لاعتراض طلبات الرمز المميز إلى IMDS والحصول على رمز Microsoft Entra المميز نيابة عن المستخدم مع بيانات اعتماد الهوية الموحدة. صحيح
azure.workload.identity/proxy-sidecar-port يمثل منفذ sidecar الوكيل. 8000

1 لها الأسبقية إذا تم أيضا إضافة تعليق توضيحي إلى حساب الخدمة.

كيفية الترحيل إلى هوية حمل عمل Microsoft Entra

على نظام مجموعة يقوم بالفعل بتشغيل هوية مدارة بواسطة pod، يمكنك تكوينها لاستخدام هوية حمل العمل بإحدى طريقتين. يسمح لك الخيار الأول باستخدام نفس التكوين الذي قمت بتنفيذه للهوية المدارة بواسطة pod. يمكنك إضافة تعليق توضيحي إلى حساب الخدمة داخل مساحة الاسم باستخدام الهوية لتمكين هوية حمل عمل Microsoft Entra وإدراج التعليقات التوضيحية في pods.

الخيار الثاني هو إعادة كتابة التطبيق الخاص بك لاستخدام أحدث إصدار من مكتبة عميل Azure Identity.

للمساعدة في تبسيط عملية الترحيل وتسهيلها، قمنا بتطوير مخطط جانبي للترحيل يحول معاملات IMDS التي يقوم تطبيقك بها إلى OpenID Connect (OIDC). لا يقصد من جانب الترحيل أن يكون حلا طويل الأجل، ولكنه طريقة للحصول على هوية حمل العمل وتشغيلها بسرعة. تشغيل جانب الترحيل داخل التطبيق الخاص بك وكلاء معاملات IMDS التطبيق عبر إلى OIDC. النهج البديل هو الترقية إلى إصدار مدعوم من مكتبة عميل Azure Identity ، والتي تدعم مصادقة OIDC.

يلخص الجدول التالي توصيات الترحيل أو النشر لهوية حمل العمل.

السيناريو ‏‏الوصف
يقوم نشر نظام المجموعة الجديد أو الحالي بتشغيل إصدار مدعوم من مكتبة عميل Azure Identity لا توجد خطوات ترحيل مطلوبة.
عينة موارد النشر: نشر هوية حمل العمل وتكوينها على نظام مجموعة جديد
يعمل نشر نظام المجموعة الجديد أو الحالي على تشغيل إصدار غير مدعوم من مكتبة عميل Azure Identity قم بتحديث صورة الحاوية لاستخدام إصدار مدعوم من Azure Identity SDK، أو استخدم جانب الترحيل.

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