البرنامج التعليمي: اتصال الخدمة المعرفية الآمنة من .NET App Service باستخدام Key Vault

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

تلميح

تدعم خدمات Azure الذكاء الاصطناعي المصادقة من خلال الهويات المدارة، ولكن يستخدم هذا البرنامج التعليمي مصادقة مفتاح الاشتراك لتوضيح كيفية الاتصال بخدمة Azure التي لا تدعم الهويات المدارة من App Services.

Architecture diagram for tutorial scenario.

من خلال هذا البناء:

  • يُؤمن الاتصال بـ Key Vault بواسطة الهويات المدارة
  • تصل خدمة التطبيقات إلى الأسرار باستخدام مراجع Key Vault باعتبارها إعدادات للتطبيق.
  • يقتصر الوصول إلى Key Vault على التطبيق. قد يكون للمساهمين في التطبيقات، مثل المسؤولين، سيطرة كاملة على موارد خدمة التطبيقات، في حين قد لا يمكنهم الوصول في الوقت ذاته إلى أسرار Key Vault.
  • إذا كان رمز التطبيق يصل بالفعل إلى أسرار الاتصال مع إعدادات التطبيق، فلا يلزم إجراء أي تغيير.

سوف تتعلم ما يلي:

  • تمكين هويات مُدارة
  • استخدام الهويات المدارة للاتصال بـ Key Vault
  • استخدام مراجع Key Vault
  • الوصول إلى خدمات Azure الذكاء الاصطناعي

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

تحضير البيئة الخاصة بك لـAzure CLI.

إنشاء تطبيق مع الاتصال بخدمات Azure الذكاء الاصطناعي

  1. إنشاء مجموعة موارد لاحتواء كافة مواردك:

    # Save resource group name as variable for convenience
    groupName=myKVResourceGroup
    region=westeurope
    
    az group create --name $groupName --location $region
    
  2. إنشاء مورد خدمات Azure الذكاء الاصطناعي. استبدال <cs-resource-name> مع اسم فريد من اختيارك.

    # Save resource name as variable for convenience. 
    csResourceName=<cs-resource-name>
    
    az cognitiveservices account create --resource-group $groupName --name $csResourceName --location $region --kind TextAnalytics --sku F0 --custom-domain $csResourceName
    

    إشعار

    --sku F0 ينشئ مورد خدمات Azure الذكاء الاصطناعي من المستوى المجاني. يقتصر كل اشتراك على حصة نسبية من مورد واحد TextAnalyticsحر المستوى. إذا تجاوزتَ الحصة النسبية بالفعل، فاستخدمها --sku S بدلا من ذلك.

تكوين تطبيق .NET

استنسخ نموذج مستودع محليا ووزع نموذج التطبيق على خدمة التطبيقات. استبدال <app-name> باسم فريد.

# Save app name as variable for convenience
appName=<app-name>

# Clone sample application
git clone https://github.com/Azure-Samples/app-service-language-detector.git
cd app-service-language-detector/dotnet

az webapp up --sku F1 --resource-group $groupName --name $appName --plan $appName --location $region

تكوين البيانات السرية كإعدادات للتطبيق

  1. تكوين أسرار خدمات Azure الذكاء الاصطناعي كإعدادات CS_ACCOUNT_NAME تطبيق و CS_ACCOUNT_KEY.

    # Get subscription key for Cognitive Services resource
    csKey1=$(az cognitiveservices account keys list --resource-group $groupName --name $csResourceName --query key1 --output tsv)
    
    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="$csResourceName" CS_ACCOUNT_KEY="$csKey1"
    
  2. في المستعرض، انتقل إلى تطبيق التوزيع <app-name>.azurewebsites.net وافحص كاشف اللغة مع السلاسل بلغات مختلفة.

    Screenshot that shows deployed language detector app in App Service.

    إذا نظرت إلى التعليمات البرمجية للتطبيق، قد تلاحظ أن إخراج التصحيح لنتائج الكشف قد نُفِّذ بنفس لون الخط المستخدم في الخلفية. يمكنك رؤيتها من خلال محاولة تمييز المساحة البيضاء أسفل النتيجة مباشرة.

اتصال خلفي آمن

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

  1. إنشاء مخزن رئيسي. استبدال <vault-name> باسم فريد.

    # Save app name as variable for convenience
    vaultName=<vault-name>
    
    az keyvault create --resource-group $groupName --name $vaultName --location $region --sku standard --enable-rbac-authorization
    

    --enable-rbac-authorizationتُعين المعلمةُ عنصر التحكم في الوصول المستند إلى دور Azure (RBAC) كنموذج تصريح. يُبطل هذا الإعداد المنفذ بشكل افتراضي كافة أذونات سياسات الوصول.

  2. أعطِ لنفسك دور عنصر التحكم في الوصول المستند إلى دور Azure (RBAC) Key Vault Secrets Officer للمخزن.

    vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv)
    myId=$(az ad signed-in-user show --query id --output tsv)
    az role assignment create --role "Key Vault Secrets Officer" --assignee-object-id $myId --assignee-principal-type User --scope $vaultResourceId
    
  3. مكِّن الهوية المدارة والمحددة من قبل النظام لتطبيقك، وأعطه دور RBAC Key Vault Secrets User للمخزن.

    az webapp identity assign --resource-group $groupName --name $appName --scope $vaultResourceId --role  "Key Vault Secrets User"
    
  4. أضف اسم مورد خدمات Azure الذكاء الاصطناعي ومفتاح الاشتراك كأسرار إلى المخزن، واحفظ معرفاتها كمتغيرات بيئة للخطوة التالية.

    csResourceKVUri=$(az keyvault secret set --vault-name $vaultName --name csresource --value $csResourceName --query id --output tsv)
    csKeyKVUri=$(az keyvault secret set --vault-name $vaultName --name cskey --value $csKey1 --query id --output tsv)
    
  5. عيّنت في السابق الأسرار كإعدادات للتطبيق CS_ACCOUNT_NAME وCS_ACCOUNT_KEY في تطبيقك. الآن، عيّنها كمراجع Key Vault بدلا من ذلك.

    az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
    
  6. في مستعرض ويب، انتقل إلى ⁧<app-name>.azurewebsites.net مرة أخرى. ⁩ إذا حصلت على نتائج الكشف مرة أخرى، فأنت تتصل بنقطة نهاية خدمات Azure الذكاء الاصطناعي مع مراجع مخزن المفاتيح.

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

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

في الخطوات السابقة، أنشأت موارد Azure في إحدى مجموعات الموارد. إذا لم تتوقع احتياجك لهذه الموارد في المستقبل، فاحذف مجموعة الموارد من خلال تشغيل الأمر التالي في Cloud Shell:

az group delete --name $groupName

ربما يستغرق الأمر بضع دقائق للتشغيل.

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