تطبيق Azure المدار بهوية مدارة
إشعار
دعم الهوية المدارة لتطبيقات Azure المدارة قيد المعاينة حاليا. استخدم إصدار واجهة برمجة التطبيقات 2018-09-01-preview للاستفادة من الهوية المدارة.
تعرف على كيفية تكوين تطبيق مدار لاحتواء هوية مدارة. يمكن استخدام هوية مدارة للسماح للعميل بمنح التطبيق المدار حق الوصول إلى الموارد الموجودة. يدير النظام الأساسي Azure الهوية ولا يتطلب منك توفير أي أسرار أو تدويرها. لمزيد من الاطلاع على الهويات المدارة في معرف Microsoft Entra، راجع الهويات المدارة لموارد Azure.
يمكن منح طلبك نوعين من الهويات:
- ترتبط الهوية المدارة المعينة من قبل النظام بتطبيقك ويتم حذفها إذا تم حذف تطبيقك. يمكن أن يكون للتطبيق هوية مدارة واحدة فقط يعينها النظام.
- الهوية المدارة المعينة من قبل المستخدم هي مورد Azure مستقل يمكن تعيينه لتطبيقك. يمكن أن يكون للتطبيق هويات مدارة متعددة يعينها المستخدم.
كيفية استخدام الهوية المدارة
تمكن الهوية المدارة العديد من السيناريوهات للتطبيقات المدارة. بعض السيناريوهات الشائعة التي يمكن حلها هي كما يلي:
- نشر تطبيق مدار مرتبط بموارد Azure الموجودة. مثال على ذلك هو نشر جهاز ظاهري Azure (VM) داخل التطبيق المدار المرفق بواجهة شبكة موجودة.
- منح التطبيق المدار ووصول الناشر إلى موارد Azure خارج مجموعة الموارد المدارة.
- توفير هوية تشغيلية للتطبيقات المدارة ل Activity Log والخدمات الأخرى داخل Azure.
إضافة هوية مدارة
يتطلب إنشاء تطبيق مدار بهوية مدارة تعيين خاصية أخرى على مورد Azure. يوضح المثال التالي عينة من خاصية الهوية:
{
"identity": {
"type": "SystemAssigned, UserAssigned",
"userAssignedIdentities": {
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
}
}
}
هناك طريقتان شائعتان لإنشاء تطبيق مدار باستخدام identity
: createUiDefinition.json وقوالب Azure Resource Manager. بالنسبة لسيناريوهات الإنشاء الفردية البسيطة، يجب استخدام createUiDefinition لتمكين الهوية المدارة، لأنها توفر تجربة أكثر ثراء. ومع ذلك، عند التعامل مع الأنظمة المتقدمة أو المعقدة التي تتطلب عمليات نشر تطبيقات مدارة تلقائية أو متعددة، يمكن استخدام القوالب.
استخدام createUiDefinition
يمكن تكوين تطبيق مدار بهوية مدارة من خلال createUiDefinition.json. في قسم المخرجات، يمكن استخدام المفتاح managedIdentity
لتجاوز خاصية الهوية لقالب التطبيق المدار. تمكن العينة التالية هوية مدارة معينة من قبل النظام على التطبيق المدار. يمكن تشكيل كائنات هوية أكثر تعقيدا باستخدام عناصر createUiDefinition لطلب المدخلات من المستهلك. يمكن استخدام هذه المدخلات لإنشاء تطبيقات مدارة بهوية مدارة يعينها المستخدم.
"outputs": {
"managedIdentity": { "Type": "SystemAssigned" }
}
متى تستخدم createUiDefinition للهوية المدارة
فيما يلي بعض التوصيات حول وقت استخدام createUiDefinition لتمكين هوية مدارة على التطبيقات المدارة.
- يمر إنشاء التطبيق المدار عبر مدخل Microsoft Azure أو Azure Marketplace.
- تتطلب الهوية المدارة إدخالا معقدا للمستهلك.
- الهوية المدارة مطلوبة عند إنشاء التطبيق المدار.
التحكم في الهوية المدارة createUiDefinition
يدعم createUiDefinition.json عنصر تحكم هوية مدار مضمن.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [],
"steps": [
{
"name": "applicationSettings",
"label": "Application Settings",
"subLabel": {
"preValidation": "Configure your application settings",
"postValidation": "Done"
},
"bladeTitle": "Application Settings",
"elements": [
{
"name": "appName",
"type": "Microsoft.Common.TextBox",
"label": "Managed application Name",
"toolTip": "Managed application instance name",
"visible": true
},
{
"name": "appIdentity",
"type": "Microsoft.ManagedIdentity.IdentitySelector",
"label": "Managed Identity Configuration",
"toolTip": {
"systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
"userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
},
"defaultValue": {
"systemAssignedIdentity": "Off"
},
"options": {
"hideSystemAssignedIdentity": false,
"hideUserAssignedIdentity": false,
"readOnlySystemAssignedIdentity": false
},
"visible": true
}
]
}
],
"outputs": {
"applicationResourceName": "[steps('applicationSettings').appName]",
"location": "[location()]",
"managedIdentity": "[steps('applicationSettings').appIdentity]"
}
}
}
استخدام قوالب Azure Resource Manager
إشعار
يتم إنشاء قوالب التطبيقات المدارة من Marketplace تلقائيا للعملاء الذين يمرون بتجربة إنشاء مدخل Microsoft Azure.
بالنسبة لهذه السيناريوهات، managedIdentity
يجب استخدام مفتاح الإخراج على createUiDefinition لتمكين الهوية.
يمكن أيضا تمكين الهوية المدارة من خلال قوالب Azure Resource Manager. تمكن العينة التالية هوية مدارة معينة من قبل النظام على التطبيق المدار. يمكن تكوين عناصر هوية أكثر تعقيدًا باستخدام معلمات قالب Azure Resource Manager لتوفير المدخلات. يمكن استخدام هذه المدخلات لإنشاء تطبيقات مدارة بهوية مدارة يعينها المستخدم.
متى تستخدم قوالب Azure Resource Manager للهوية المدارة
فيما يلي بعض التوصيات حول وقت استخدام قوالب Azure Resource Manager لتمكين الهوية المدارة على التطبيقات المدارة.
- يمكن نشر التطبيقات المدارة برمجيا استنادا إلى قالب.
- هناك حاجة إلى تعيينات دور مخصصة للهوية المدارة لتوفير التطبيق المدار.
- لا يحتاج التطبيق المدار إلى مدخل Microsoft Azure وتدفق إنشاء Marketplace.
قالب معين عن طريق النظام
قالب Azure Resource Manager أساسي ينشر تطبيقا مدارا بهوية مدارة يعينها النظام.
"resources": [
{
"type": "Microsoft.Solutions/applications",
"name": "[parameters('applicationName')]",
"apiVersion": "2018-09-01-preview",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
"parameters": { }
}
}
]
قالب معين من جانب المستخدم
قالب Azure Resource Manager أساسي ينشر تطبيقا مدارا بهوية مدارة يعينها المستخدم.
"resources": [
{
"type": "Microsoft.ManagedIdentity/userAssignedIdentities",
"name": "[parameters('managedIdentityName')]",
"apiVersion": "2018-11-30",
"location": "[parameters('location')]"
},
{
"type": "Microsoft.Solutions/applications",
"name": "[parameters('applicationName')]",
"apiVersion": "2018-09-01-preview",
"location": "[parameters('location')]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('managedIdentityName'))]": {}
}
},
"properties": {
"ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
"parameters": { }
}
}
]
إدارة الوصول إلى موارد Azure
بمجرد منح تطبيق مدار هوية، يمكن منحه حق الوصول إلى موارد Azure الموجودة عن طريق إنشاء تعيين دور.
للقيام بذلك، ابحث عن وحدد اسم التطبيق المدار أو الهوية المدارة المعينة من قبل المستخدم، ثم حدد Access control (IAM). للحصول على خطوات تفصيلية، راجع تعيين أدوار Azure باستخدام مدخل Azure.
ربط موارد Azure الحالية
إشعار
يجب تكوين هوية مدارة يعينها المستخدم قبل نشر التطبيق المدار. بالإضافة إلى ذلك، يتم دعم نشر الموارد المرتبطة للتطبيقات المدارة فقط لنوع Marketplace .
يمكن أيضا استخدام الهوية المدارة لنشر تطبيق مدار يتطلب الوصول إلى الموارد الموجودة أثناء توزيعه. عندما يقوم العميل بتوفير التطبيق المدار، يمكن إضافة الهويات المدارة المعينة من قبل المستخدم لتوفير المزيد من التخويلات لتوزيع mainTemplate .
تأليف createUiDefinition مع مورد مرتبط
عند ربط نشر التطبيق المدار بالموارد الموجودة، يجب توفير كل من مورد Azure الحالي والهوية المدارة المعينة من قبل المستخدم مع تعيين الدور القابل للتطبيق على هذا المورد.
نموذج createUiDefinition.json يتطلب إدخالين: معرف مورد واجهة الشبكة ومعرف مورد هوية مدار معين من قبل المستخدم.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{}
],
"steps": [
{
"name": "managedApplicationSetting",
"label": "Managed Application Settings",
"subLabel": {
"preValidation": "Managed Application Settings",
"postValidation": "Done"
},
"bladeTitle": "Managed Application Settings",
"elements": [
{
"name": "networkInterfaceId",
"type": "Microsoft.Common.TextBox",
"label": "Network interface resource ID",
"defaultValue": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.Network/networkInterfaces/existingnetworkinterface",
"toolTip": "Must represent the identity as an Azure Resource Manager resource identifier format ex. /subscriptions/sub1/resourcegroups/myGroup/providers/Microsoft.Network/networkInterfaces/networkinterface1",
"visible": true
},
{
"name": "userAssignedId",
"type": "Microsoft.Common.TextBox",
"label": "User-assigned managed identity resource ID",
"defaultValue": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity",
"toolTip": "Must represent the identity as an Azure Resource Manager resource identifier format ex. /subscriptions/sub1/resourcegroups/myGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity1",
"visible": true
}
]
}
],
"outputs": {
"existingNetworkInterfaceId": "[steps('managedApplicationSetting').networkInterfaceId]",
"managedIdentity": "[parse(concat('{\"Type\":\"UserAssigned\",\"UserAssignedIdentities\":{',string(steps('managedApplicationSetting').userAssignedId),':{}}}'))]"
}
}
}
ينشئ هذا createUiDefinition.json تجربة مستخدم إنشاء لها حقلان. يسمح الحقل الأول للمستخدم بإدخال معرف مورد Azure للمورد المرتبط بنشر التطبيق المدار. والثاني هو أن يقوم المستهلك بإدخال معرف مورد Azure للهوية المدارة المعين من قبل المستخدم، والذي لديه حق الوصول إلى مورد Azure المرتبط. ستبدو التجربة التي تم إنشاؤها على نحو ما يلي:
تأليف القالب الرئيسي باستخدام مورد مرتبط
بالإضافة إلى تحديث createUiDefinition، يجب أيضا تحديث القالب الرئيسي لقبول معرف المورد المرتبط الذي تم تمريره. يمكن تحديث القالب الرئيسي لقبول الإخراج الجديد بإضافة معلمة جديدة. managedIdentity
نظرا لأن الإخراج يتجاوز القيمة على قالب التطبيق المدار الذي تم إنشاؤه، فإنه لا يتم تمريره إلى القالب الرئيسي ولا يجب تضمينه في قسم المعلمات.
نموذج قالب رئيسي يعين ملف تعريف الشبكة إلى واجهة شبكة موجودة توفرها createUiDefinition.json.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"existingNetworkInterfaceId": { "type": "string" }
},
"variables": {
},
"resources": [
{
"apiVersion": "2016-04-30-preview",
"type": "Microsoft.Compute/virtualMachines",
"name": "myLinkedResourceVM",
"location": "[resourceGroup().location]",
"properties": {
…,
"networkProfile": {
"networkInterfaces": [
{
"id": "[parameters('existingNetworkInterfaceId')]"
}
]
}
}
}
]
}
استهلاك التطبيق المدار مع مورد مرتبط
بمجرد إنشاء حزمة التطبيق المدارة، يمكن استهلاك التطبيق المدار من خلال مدخل Microsoft Azure. قبل أن يتم استهلاكه، هناك عدة خطوات أساسية.
- يجب إنشاء مثيل لمورد Azure المرتبط المطلوب.
- يجب إنشاء الهوية المدارة المعينة من قبل المستخدم ومنح تعيينات الأدوار للمورد المرتبط.
- يتم توفير معرف المورد المرتبط الحالي ومعرف الهوية المدارة المعين من قبل المستخدم إلى createUiDefinition.
الوصول إلى الرمز المميز للهوية المدارة
يمكن الآن الوصول إلى الرمز المميز للتطبيق المدار من خلال listTokens
واجهة برمجة التطبيقات من مستأجر الناشر. قد يبدو طلب المثال كما يلي:
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Solutions/applications/{applicationName}/listTokens?api-version=2018-09-01-preview HTTP/1.1
{
"authorizationAudience": "https://management.azure.com/",
"userAssignedIdentities": [
"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userAssignedIdentityName}"
]
}
طلب معلمات النص الأساسي على نحو ما يلي:
المعلمة | المطلوب | الوصف |
---|---|---|
authorizationAudience |
no | URI معرف التطبيق للمورد المستهدف. وهي أيضًا مطالبة (الجمهور) aud بالرمز الذي تم إصداره. القيمة الافتراضية هي "https://management.azure.com/" |
userAssignedIdentities |
no | قائمة الهويات المُدارة المعينة من قبل المستخدم لاسترداد رمز مميز لـ. إذا لم يتم تحديده، listTokens فسترجع الرمز المميز للهوية المدارة المعينة من قبل النظام. |
قد تبدو عينة الاستجابة كما يلي:
HTTP/1.1 200 OK
Content-Type: application/json
{
"value": [
{
"access_token": "eyJ0eXAi…",
"expires_in": "2…",
"expires_on": "1557…",
"not_before": "1557…",
"authorizationAudience": "https://management.azure.com/",
"resourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Solutions/applications/{applicationName}",
"token_type": "Bearer"
}
]
}
تحتوي الاستجابة على صفيف من الرموز المميزة ضمن الخاصية value
:
المعلمة | الوصف |
---|---|
access_token |
رمز الوصول المميز المطلوب. |
expires_in |
عدد الثوانى التي يكون فيها الرمز المميز للوصول صالحا. |
expires_on |
الفترة الزمنية التي تنتهي فيها صلاحية رمز الوصول. يتم تمثيل هذه القيمة على أنها عدد الثوان من الفترة. |
not_before |
الفترة الزمنية التي يصبح فيها رمز الوصول ساري المفعول. يتم تمثيل هذه القيمة على أنها عدد الثوان من الفترة. |
authorizationAudience |
(الجمهور) aud الذي تم طلب رمز الوصول له. هذه القيمة هي نفس ما تم توفيره listTokens في الطلب. |
resourceId |
معرف مورد Azure للرمز الذي تم إصداره. هذه القيمة هي إما معرف التطبيق المدار أو معرف الهوية المدارة المعين من قبل المستخدم. |
token_type |
فئة الرمز المميز. |