استخدام التحكم في الوصول استنادا إلى دور مستوى البيانات مع Azure Cosmos DB ل NoSQL
ينطبق على: NoSQL
رسم تخطيطي لتسلسل دليل النشر بما في ذلك هذه المواقع، بالترتيب: نظرة عامة ومفاهيم وإعداد والتحكم في الوصول المستند إلى الدور والشبكة والمرجع. تم تمييز موقع "التحكم في الوصول استنادا إلى الدور" حاليا.
تلميح
تفضل بزيارة معرض العينات الجديد للحصول على أحدث العينات لإنشاء تطبيقات جديدة
تتناول هذه المقالة خطوات منح هوية الوصول لإدارة البيانات في Azure Cosmos DB لحساب NoSQL.
هام
تغطي الخطوات الواردة في هذه المقالة فقط الوصول إلى مستوى البيانات لتنفيذ العمليات على العناصر الفردية وتشغيل الاستعلامات. لمعرفة كيفية إدارة الأدوار والتعريفات والتعيينات لمستوى التحكم، راجع منح الوصول المستند إلى دور وحدة التحكم.
المتطلبات الأساسية
- حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
- حساب Azure Cosmos DB ل NoSQL موجود.
- هوية واحدة أو أكثر موجودة في معرف Microsoft Entra.
استخدم بيئة Bash في Azure Cloud Shell. لمزيد من المعلومات، راجع التشغيل السريع ل Bash في Azure Cloud Shell.
إذا كنت تفضل تشغيل أوامر مرجع CLI محلياً قم بتثبيت CLI Azure. إذا كنت تعمل على نظام تشغيل Windows أو macOS، ففكر في تشغيل Azure CLI في حاوية Docker. لمزيد من المعلومات، راجع كيفية تشغيل Azure CLI في حاوية Docker.
إذا كنت تستخدم تثبيت محلي، يُرجى تسجيل الدخول إلى Azure CLI مستخدمًا أمر az login. لإنهاء عملية المصادقة، اتبع الخطوات المعروضة في جهازك. للحصول على خيارات أخرى لتسجيل دخول، راجع تسجيل الدخول باستخدام Azure CLI.
عندما يُطلب منك، قم بتثبيت ملحق Azure CLI عند الاستخدام لأول مرة. لمزيد من المعلومات بشأن الامتدادات، راجع استخدام امتدادات مع Azure CLI.
يُرجى تشغيل إصدار az للوصول إلى الإصدار والمكتبات التابعة التي تم تثبيتها. للتحديث لآخر إصدار، يُرجى تشغيل تحديث az.
- إذا اخترت استخدام Azure PowerShell محليا:
- تثبيت أحدث إصدار من الوحدة النمطية Az PowerShell.
- اتصل بحساب Azure الخاص بك باستخدامConnect-AzAccount cmdlet.
- إذا اخترت استخدام Azure Cloud Shell:
- لمزيد من المعلومات، راجع نظرة عامة على Azure Cloud Shell.
إعداد تعريف الدور
أولا، يجب إعداد تعريف دور مع قائمة dataActions
لمنح حق الوصول لقراءة البيانات والاستعلام عنها وإدارتها في Azure Cosmos DB ل NoSQL.
هام
يتطلب الحصول على تعريف دور مستوى بيانات موجود أذونات وحدة التحكم هذه:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
لمزيد من المعلومات، راجع منح الوصول المستند إلى الدور لمستوى التحكم.
سرد جميع تعريفات الدور المقترنة بحساب Azure Cosmos DB الخاص بك ل NoSQL باستخدام az cosmosdb sql role definition list
. راجع الإخراج وحدد موقع تعريف الدور المسمى Cosmos DB Built-in Data Contributor. يحتوي الإخراج على المعرف الفريد لتعريف الدور في الخاصية id
. سجل هذه القيمة كما هو مطلوب لاستخدامها في خطوة التعيين لاحقا في هذا الدليل.
az cosmosdb sql role definition list \
--resource-group "<name-of-existing-resource-group>" \
--account-name "<name-of-existing-nosql-account>"
[
...,
{
"assignableScopes": [
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
],
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002",
"name": "00000000-0000-0000-0000-000000000002",
"permissions": [
{
"dataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*",
"Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*"
],
"notDataActions": []
}
],
"resourceGroup": "msdocs-identity-example",
"roleName": "Cosmos DB Built-in Data Contributor",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions",
"typePropertiesType": "BuiltInRole"
}
...
]
إشعار
في هذا المثال، id
ستكون /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
القيمة . يستخدم هذا المثال بيانات وهمية وسيكون المعرف الخاص بك مميزا عن هذا المثال.
استخدم Get-AzCosmosDBSqlRoleDefinition
لسرد جميع تعريفات الأدوار المقترنة بحساب Azure Cosmos DB ل NoSQL. راجع الإخراج وحدد موقع تعريف الدور المسمى Cosmos DB Built-in Data Contributor. يحتوي الإخراج على المعرف الفريد لتعريف الدور في الخاصية Id
. سجل هذه القيمة كما هو مطلوب لاستخدامها في خطوة التعيين لاحقا في هذا الدليل.
$parameters = @{
ResourceGroupName = "<name-of-existing-resource-group>"
AccountName = "<name-of-existing-nosql-account>"
}
Get-AzCosmosDBSqlRoleDefinition @parameters
Id : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
RoleName : Cosmos DB Built-in Data Contributor
Type : BuiltInRole
AssignableScopes : {/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccountsmsdocs-identity-example-nosql}
Permissions.DataActions : {Microsoft.DocumentDB/databaseAccounts/readMetadata, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*, Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*}
Permissions.NotDataActions :
إشعار
في هذا المثال، Id
ستكون /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/sqlRoleDefinitions/00000000-0000-0000-0000-000000000002
القيمة . يستخدم هذا المثال بيانات وهمية وسيكون المعرف الخاص بك مميزا عن هذا المثال. ومع ذلك، فإن المعرف (00000000-0000-0000-0000-000000000002
) فريد عبر جميع تعريفات الأدوار في حسابك.
تعيين دور للهوية
الآن، قم بتعيين الدور المحدد حديثا إلى هوية بحيث يمكن للتطبيقات الخاصة بك الوصول إلى البيانات في Azure Cosmos DB ل NoSQL.
هام
يتطلب إنشاء تعيين دور مستوى بيانات جديد أذونات وحدة التحكم هذه:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/read
Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write
لمزيد من المعلومات، راجع منح الوصول المستند إلى الدور لمستوى التحكم.
استخدم
az cosmosdb show
للحصول على المعرف الفريد لحسابك الحالي.az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-nosql-account>" \ --query "{id:id}"
لاحظ إخراج الأمر السابق. سجل قيمة الخاصية
id
لهذا الحساب كما هو مطلوب للاستخدام في الخطوة التالية.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" }
إشعار
في هذا المثال،
id
ستكون/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
القيمة . يستخدم هذا المثال بيانات وهمية وسيكون المعرف الخاص بك مميزا عن هذا المثال.تعيين الدور الجديد باستخدام
az cosmosdb sql role assignment create
. استخدم معرفات تعريف الدور المسجلة مسبقا للوسيطة--role-definition-id
، والمعرف الفريد لهويتك للوسيطة--principal-id
. وأخيرا، استخدم معرف حسابك للوسيطة--scope
.az cosmosdb sql role assignment create \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>" \ --role-definition-id "<id-of-new-role-definition>" \ --principal-id "<id-of-existing-identity>" \ --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
استخدم
az cosmosdb sql role assignment list
لسرد جميع تعيينات الأدوار لحساب Azure Cosmos DB الخاص بك ل NoSQL. راجع الإخراج للتأكد من إنشاء تعيين الدور الخاص بك.az cosmosdb sql role assignment list \ --resource-group "<name-of-existing-resource-group>" \ --account-name "<name-of-existing-nosql-account>"
إنشاء ملف Bicep جديد لتعريف تعيين الدور الخاص بك. قم بتسمية الملف data-plane-role-assignment.bicep.
metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for NoSQL.' @description('Name of the Azure Cosmos DB for NoSQL account.') param accountName string @description('Id of the role definition to assign to the targeted principal in the context of the account.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the account.') param identityId string resource account 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' existing = { name: accountName } resource assignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2024-05-15' = { name: guid(roleDefinitionId, identityId, account.id) parent: account properties: { principalId: identityId roleDefinitionId: roleDefinitionId scope: account.id } } output assignmentId string = assignment.id
إنشاء ملف معلمات Bicep جديد يسمى data-plane-role-assignment.
bicepparam
. في ملف المعلمات هذا، قم بتعيين اسم حساب Azure Cosmos DB الحالي ل NoSQL إلىaccountName
المعلمة، ومعرفات تعريف الدور المسجلة مسبقا إلىroleDefinitionId
المعلمة، والمعرف الفريد لهويتك إلى المعلمةidentityId
.using './data-plane-role-assignment.bicep' param accountName = '<name-of-existing-nosql-account>' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
انشر قالب Bicep باستخدام
az deployment group create
.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters data-plane-role-assignment.bicepparam \ --template-file data-plane-role-assignment.bicep
كرر هذه الخطوات لمنح حق الوصول إلى الحساب من أي هويات أخرى ترغب في استخدامها.
تلميح
يمكنك تكرار هذه الخطوات للعديد من الهويات التي تريدها. عادة ما تتكرر هذه الخطوات على الأقل للسماح للمطورين بالوصول إلى حساب باستخدام هويتهم البشرية والسماح للتطبيقات بالوصول باستخدام هوية مدارة.
استخدم
Get-AzCosmosDBAccount
للحصول على بيانات التعريف لحسابك الحالي.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-nosql-account>" } Get-AzCosmosDBAccount @parameters | Select -Property Id
لاحظ إخراج الأمر السابق. سجل قيمة الخاصية
Id
لهذا الحساب كما هو مطلوب للاستخدام في الخطوة التالية.Id -- /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
إشعار
في هذا المثال،
Id
ستكون/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
القيمة . يستخدم هذا المثال بيانات وهمية وسيكون المعرف الخاص بك مميزا عن هذا المثال.استخدم
New-AzCosmosDBSqlRoleAssignment
لتعيين الدور الجديد. استخدم معرفات تعريف الدور المسجلة مسبقا إلى المعلمةRoleDefinitionId
، والمعرف الفريد لهويتك إلى المعلمةPrincipalId
. وأخيرا، استخدم معرف حسابك للمعلمةScope
.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" RoleDefinitionId = "<id-of-new-role-definition>" PrincipalId = "<id-of-existing-identity>" Scope = "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" } New-AzCosmosDBSqlRoleAssignment @parameters
سرد جميع تعيينات الأدوار لحساب Azure Cosmos DB الخاص بك ل NoSQL باستخدام
Get-AzCosmosDBSqlRoleAssignment
. راجع الإخراج للتأكد من إنشاء تعيين الدور الخاص بك.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" } Get-AzCosmosDBSqlRoleAssignment @parameters
التحقق من صحة الوصول إلى مستوى البيانات في التعليمات البرمجية
وأخيرا، تحقق من أنك منحت حق الوصول بشكل صحيح باستخدام التعليمات البرمجية للتطبيق وAzure SDK بلغة البرمجة المفضلة لديك.
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "<account-endpoint>";
TokenCredential credential = new DefaultAzureCredential();
CosmosClient client = new(endpoint, credential);
هام
يستخدم نموذج التعليمات البرمجية Microsoft.Azure.Cosmos
هذا المكتبات و Azure.Identity
من NuGet.