إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يوفر Azure Key Vault طريقة لتخزين بيانات الاعتماد والأسرار الأخرى مع زيادة الأمان. لكن الكود الخاص بك يحتاج إلى التحقق من صحته في Key Vault لاسترجاعه. تساعد Managed Identityentities for Azure Resources في حل هذه المشكلة من خلال منح خدمات Azure هوية مدارة تلقائيا في Microsoft Entra ID. يمكنك استخدام هذه الهوية للمصادقة على أي خدمة تدعم مصادقة Microsoft Entra، بما في ذلك Key Vault، دون الحاجة لعرض بيانات الاعتماد في الكود.
في هذا الدرس، ستقوم بإنشاء ونشر تطبيق ويب Azure على "Azure App Service". ستستخدم هوية مدارة لتوثيق تطبيق الويب Azure الخاص بك باستخدام Azure key vault باستخدام مكتبة عملاء سرية Azure Key Vault ل .NET وAzure CLI. تنطبق نفس المبادئ الأساسية عند استخدام لغة التطوير التي تختارها، Azure PowerShell، و/أو بوابة Azure.
لمزيد من المعلومات حول تطبيقات الويب لخدمة Azure App ونشرها المعروضة في هذا الدرس، انظر:
- نظرة عامة على App Service
- أنشئ تطبيق ويب ASP.NET Core في "Azure App Service"
- نشر Git المحلي إلى "Azure App Service"
المتطلبات
لإكمال هذا البرنامج التعليمي، تحتاج إلى:
- اشتراك في Azure. أنشئ حسابًا مجانًا.
- حزمة تطوير .NET 8.0 (أو أحدث).
- تثبيت Git بإصدار 2.28.0 أو ما هو أحدث.
- Azure CLI أو Azure PowerShell.
- Azure Key Vault. يمكنك إنشاء خزنة مفاتيح باستخدام Azure portal، أو Azure CLI، أو Azure PowerShell.
- Key Vault secret. يمكنك إنشاء سر باستخدام Azure portal، PowerShell، أو Azure CLI.
إذا كان لديك بالفعل تطبيق الويب الخاص بك منشور في عام "Azure App Service"، يمكنك تخطي configure الوصول إلى قسم خزنة المفاتيح وأقسام تعديل كود تطبيقات الويب.
إنشاء تطبيق .NET Core
في هذه الخطوة، ستقوم بإعداد مشروع .NET Core المحلي.
من النافذة النهائية على جهازك، أنشئ دليلاً باسم akvwebapp واجعله الدليل الحالي:
mkdir akvwebapp
cd akvwebapp
أنشئ تطبيق .NET Core باستخدام أمر dotnet new web:
dotnet new web
شغل التطبيق محليا حتى تعرف كيف يجب أن يبدو عند نشره على Azure:
dotnet run
في متصفح الويب، انتقل إلى التطبيق في http://localhost:5000.
سترى رسالة "مرحبًا بالعالم!" من التطبيق النموذجي معروضة على الصفحة.
لمزيد من المعلومات حول إنشاء تطبيقات الويب ل Azure، راجع إنشاء تطبيق ويب ASP.NET Core في "Azure App Service"
نشر التطبيق على Azure
في هذه الخطوة، ستقوم بنشر تطبيق .NET Core الخاص بك على "Azure App Service" باستخدام Git المحلي. لمزيد من المعلومات حول كيفية إنشاء ونشر التطبيقات، راجع إنشاء تطبيق ويب ASP.NET Core في Azure.
تهيئة نشر تطبيق Git المحلي
من النافذة النهائية، حدد Ctrl+C لإغلاق خادم الويب. تهيئة مستودع Git لمشروع .NET Core:
git init --initial-branch=main
git add .
git commit -m "first commit"
يمكنك استخدام FTP وGit المحلي لنشر تطبيق ويب Azure باستخدام deployment user. بعد أن تقوم بتكوين مستخدم النشر الخاص بك، يمكنك استخدامه لجميع عمليات نشر Azure الخاصة بك. اسم المستخدم وكلمة المرور على مستوى الحساب يختلف عن بيانات اعتماد اشتراكك في Azure.
لتكوين مستخدم النشر، شغل الأمر az webapp deployment user set. اختر اسم مستخدم وكلمة مرور يتوافقان مع هذه الإرشادات:
- يجب أن يكون اسم المستخدم فريدا داخل Azure. فيما يخص الدفعات المحلية من Git، لا يمكن أن تحتوي على رمز علامة (@).
- يجب أن تحتوي كلمة المرور على ثمانية أحرف على الأقل، مع اثنين من العناصر الثلاثة التالية: الأحرف والأرقام والرموز.
az webapp deployment user set --user-name "<username>" --password "<password>"
يظهر إخراج JSON كلمة المرور كـ null. إذا واجهت خطأ 'Conflict'. Details: 409، فغير اسم المستخدم. إذا واجهت خطأ 'Bad Request'. Details: 400، فاستخدم كلمة مرور أقوى.
سجل اسم المستخدم وكلمة المرور حتى يتسنى لك استخدامهما لنشر تطبيقاتك عبر الويب.
إنشاء مجموعة موارد
مجموعة الموارد هي حاوية منطقية تقوم فيها بنشر موارد Azure وإدارتها. إنشاء مجموعة موارد تحتوي على كل من Key Vault وتطبيقك عبر الويب باستخدام أمر az group create:
az group create --name "<resource-group>" -l "EastUS"
إنشاء خطة App Service
أنشئ خطة خدمة App Service باستخدام أمر Azure CLI az appservice plan create. ينشئ المثال التالي خطة App Service تُسمى myAppServicePlanفي طبقة التسعيرFREE:
az appservice plan create --name myAppServicePlan --resource-group <resource-group> --sku FREE
عند إنشاء خطة خدمة التطبيقات، يعرض Azure CLI معلومات مشابهة لما تراه هنا:
{
"adminSiteName": null,
"appServicePlanName": "myAppServicePlan",
"geoRegion": "West Europe",
"hostingEnvironmentProfile": null,
"id": "/subscriptions/0000-0000/resourceGroups/<resource-group>/providers/Microsoft.Web/serverfarms/myAppServicePlan",
"kind": "app",
"location": "West Europe",
"maximumNumberOfWorkers": 1,
"name": "myAppServicePlan",
< JSON data removed for brevity. >
"targetWorkerSizeId": 0,
"type": "Microsoft.Web/serverfarms",
"workerTierName": null
}
لمزيد من المعلومات، راجع إدارة خطة خدمة التطبيقات في Azure.
أنشئ تطبيق ويب
أنشئ تطبيق ويب Azure في خطة خدمة التطبيقات myAppServicePlan.
مهم
مثل خزنة المفاتيح، يجب أن يكون لتطبيق الويب Azure اسم فريد. استبدل <webapp-name> باسم تطبيقك عبر الويب في الأمثلة التالية.
az webapp create --resource-group "<resource-group>" --plan "myAppServicePlan" --name "<webapp-name>" --deployment-local-git
عند إنشاء تطبيق الويب، يظهر Azure CLI مخرجا مشابها لما تراه هنا:
Local git is configured with url of 'https://<username>@<your-webapp-name>.scm.azurewebsites.net/<ayour-webapp-name>.git'
{
"availabilityState": "Normal",
"clientAffinityEnabled": true,
"clientCertEnabled": false,
"clientCertExclusionPaths": null,
"cloningInfo": null,
"containerSize": 0,
"dailyMemoryTimeQuota": 0,
"defaultHostName": "<your-webapp-name>.azurewebsites.net",
"deploymentLocalGitUrl": "https://<username>@<your-webapp-name>.scm.azurewebsites.net/<your-webapp-name>.git",
"enabled": true,
< JSON data removed for brevity. >
}
يظهر عنوان "URL" لبرنامج Git عن بعد في خاصية deploymentLocalGitUrl، في التنسيق https://<username>@<webapp-name>.scm.azurewebsites.net/<webapp-name>.git. حفظ عنوان URL. ستحتاج إليه لاحقا.
الآن هيئ تطبيق الويب للنشر من الفرع main:
az webapp config appsettings set -g MyResourceGroup --name "<webapp-name>" --settings deployment_branch=main
اذهب إلى تطبيقك باستخدام الأمر التالي. استبدل <webapp-name> باسم حسابك.
https://<webapp-name>.azurewebsites.net
سترى الصفحة الافتراضية لتطبيق ويب جديد على Azure.
نشر التطبيق المحلي
في نافذة الطرفية المحلية، أضف جهاز تحكم Azure إلى مستودع Git المحلي الخاص بك. في الأمر التالي، استبدل <deployment-url> بعنوان URL الخاص بجهاز التحكم عن بعد لبرنامج Git الذي حفظته في قسم Create a web app.
git remote add azure <deployment-url>
استخدم الأمر التالي للدفع إلى جهاز Azure remote لنشر تطبيقك. عندما تطالبك "إدارة بيانات اعتماد Git" ببيانات اعتمادك، استخدم بيانات الاعتماد التي أنشأتها في القسم Configure the local Git deployment.
git push azure main
ولربما يستغرق التشغيل بضع دقائق. أثناء تشغيله، يعرض معلومات مشابهة لما تراه هنا:
Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 285 bytes | 95.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Deploy Async remote: Updating branch 'main'. remote: Updating submodules. remote: Preparing deployment for commit id 'd6b54472f7'. remote: Repository path is /home/site/repository remote: Running oryx build... remote: Build orchestrated by Microsoft Oryx, https://github.com/Microsoft/Oryx remote: You can report issues at https://github.com/Microsoft/Oryx/issues remote: remote: Oryx Version : 0.2.20200114.13, Commit: 204922f30f8e8d41f5241b8c218425ef89106d1d, ReleaseTagName: 20200114.13 remote: Build Operation ID: |imoMY2y77/s=.40ca2a87_ remote: Repository Commit : d6b54472f7e8e9fd885ffafaa64522e74cf370e1 . . . remote: Deployment successful. remote: Deployment Logs : 'https://<your-webapp-name>.scm.azurewebsites.net/newui/jsonviewer?view_url=/api/deployments/d6b54472f7e8e9fd885ffafaa64522e74cf370e1/log' To https://<your-webapp-name>.scm.azurewebsites.net:443/<your-webapp-name>.git d87e6ca..d6b5447 main -> main
انتقل إلى التطبيق المنشور(أو حدثه) باستخدام متصفح الويب:
http://<webapp-name>.azurewebsites.net
سترى رسالة "مرحبًا بالعالم!" التي رأيتها سابقا عند زيارتك http://localhost:5000.
لمزيد من المعلومات حول نشر تطبيقات الويب باستخدام Git، راجع Local Git deployment to "Azure App Service"
قم بتكوين تطبيق الويب للاتصال ب Key Vault
في هذا القسم، ستقوم بتكوين الوصول إلى الويب إلى Key Vault وتحديث كود التطبيق الخاص بك لاسترجاع سر من Key Vault.
إنشاء حق الوصول إلى هوية مدارة وتعيينه
في هذا الدرس، سنستخدم managed identity للمصادقة مع Key Vault. تدير الهوية المدارة بيانات اعتماد التطبيق تلقائياً.
في Azure CLI، لإنشاء هوية التطبيق، قم بتشغيل أمر az webapp-identity assign:
az webapp identity assign --name "<webapp-name>" --resource-group "<resource-group>"
يُعيد الأمر قصاصة JSON:
{
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"type": "SystemAssigned"
}
للحصول على صلاحيات لخزنة المفاتيح الخاصة بك عبر Role-Based Access Control (RBAC)، قم بتعيين دور إلى "اسم المستخدم الرئيسي" (UPN) باستخدام أمر Azure CLI az role assignment create.
az role assignment create --role "Key Vault Secrets User" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
استبدل <upn>، <subscription-id>، ومع <vault-name> قيمك الفعلية. إذا استخدمت اسم مجموعة موارد مختلف، استبدل "myResourceGroup" أيضا. سيكون UPN الخاص بك عادة بتنسيق عنوان بريد إلكتروني (على سبيل المثال، username@domain.com).
تعديل التطبيق للوصول إلى key vault
في هذا الدرس، ستستخدم Azure Key Vault مكتبة العملاء السرية لأغراض العرض التوضيحي. يمكنك أيضا استخدام Azure Key Vault مكتبة عميل الشهادة، أو Azure Key Vault مكتبة العميل الرئيسية.
قم بتثبيت الحِزَم
من نافذة الطرفية، قم بتثبيت مكتبة العملاء السرية Azure Key Vault لحزم مكتبة عملاء .NET و Azure Identity:
dotnet add package Azure.Identity
dotnet add package Azure.Security.KeyVault.Secrets
حدث الكود
ابحث وافتح ملف Startup.cs ل .NET 5.0 أو أقدم، أو ملف Program.cs ل .NET 6.0 في مشروع akvwebapp الخاص بك.
أضف هذه الأسطر إلى الرأس:
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
using Azure.Core;
أضف الأسطر التالية قبل مكالمة app.UseEndpoints (.NET 5.0 أو قبل) أو app.MapGet (.NET 6.0)، مع تحديث URI ليعكس vaultUri لخزنة مفاتيحك. يستخدم هذا الكود DefaultAzureCredential() للمصادقة إلى Key Vault، والذي يستخدم رمزا من الهوية المدارة للمصادقة. لمزيد من المعلومات حول المصادقة على Key Vault، راجع ><دليل المطورين. يستخدم الكود أيضا التراجع الأسي لإعادة المحاولة في حال تم تقليل سرعة Key Vault. لمزيد من المعلومات حول حدود Key Vault المعاملات، راجع Azure Key Vault إرشادات التقييد .
SecretClientOptions options = new SecretClientOptions()
{
Retry =
{
Delay= TimeSpan.FromSeconds(2),
MaxDelay = TimeSpan.FromSeconds(16),
MaxRetries = 5,
Mode = RetryMode.Exponential
}
};
var client = new SecretClient(new Uri("https://<vault-name>.vault.azure.net/"), new DefaultAzureCredential(),options);
KeyVaultSecret secret = client.GetSecret("<secret-name>");
string secretValue = secret.Value;
.NET 5.0 أو أقدم
قم بتحديث السطر await context.Response.WriteAsync("مرحبًا بالعالم!"); ليبدو مثل هذا السطر:
await context.Response.WriteAsync(secretValue);
.NET 6.0
قم بتحديث السطر app.MapGet("/", () => "مرحبًا بالعالم!"); ليبدو مثل هذا السطر:
app.MapGet("/", () => secretValue);
تأكد من حفظ التغييرات قبل المتابعة إلى الخطوة التالية.
إعادة نشر تطبيق الويب الخاص بك
الآن بعد أن قمت بتحديث الكود، يمكنك إعادة نشره إلى Azure باستخدام أوامر Git هذه:
git add .
git commit -m "Updated web app to access my key vault"
git push azure main
الانتقال إلى تطبيقك المكتمل عبر الويب
http://<webapp-name>.azurewebsites.net
حيث كنت ترى "مرحبًا بالعالم!" سابقا، يجب أن ترى الآن قيمة سرك معروضة.