Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
В этой статье подробно описываются шаги по предоставлению идентификатору доступа для управления данными в учетной записи Azure Cosmos DB для NoSQL.
Это важно
Действия, описанные в этой статье, охватывают только доступ к плоскости данных для выполнения операций с отдельными элементами и выполнения запросов. Чтобы узнать, как управлять базами данных и контейнерами для контрольной плоскости, ознакомьтесь с предоставлением ролевого доступа для контрольной плоскости.
Предпосылки
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.
- Существующая учетная запись Azure Cosmos DB для NoSQL.
- Одно или несколько существующих идентичностей в Microsoft Entra ID.
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете локально запускать справочные команды CLI, установите Azure CLI. Если вы работаете в Windows или macOS, подумайте о запуске Azure CLI в контейнере Docker. Дополнительные сведения см. в статье о запуске Azure CLI в контейнере Docker.
Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login . Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье "Использование расширений и управление ими" с помощью Azure CLI.
Запустите az version , чтобы найти установленные версии и зависимые библиотеки. Чтобы обновить до последней версии, выполните az upgrade.
- Если вы решили использовать Azure PowerShell локально:
- Установите последнюю версию модуля Az PowerShell.
- Подключитесь к учетной записи Azure с помощью командлета Connect-AzAccount .
- Если вы решили использовать Azure Cloud Shell:
- Дополнительные сведения см. в обзоре Azure Cloud Shell .
Подготовка определения роли
Сначала необходимо подготовить определение роли со списком dataActions
, чтобы предоставить доступ к чтению, запросу и управлению данными в Azure Cosmos DB for NoSQL.
Это важно
Для получения существующего определения роли плоскости данных требуются следующие разрешения уровня управления:
Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/read
Дополнительные сведения см. в разделе "Предоставление доступа на основе ролей уровня управления".
Перечислите все определения ролей, связанные с вашей учетной записью Azure Cosmos DB для NoSQL, используя az cosmosdb sql role definition list
. Просмотрите выходные данные и найдите определение роли с именем Встроенный участник данных Cosmos DB. Выходные данные содержат уникальный идентификатор определения роли в свойстве 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. Выходные данные содержат уникальный идентификатор определения роли в свойстве 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 ad signed-in-user show
Дополнительные сведения см. в разделе
az ad signed-in-user
.Используйте
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 = deployer().objectId 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
. В этом файле параметров назначьте параметруaccountName
имя вашей существующей учетной записи Azure Cosmos DB для NoSQL, параметру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>'
Подсказка
Если вы пытаетесь предоставить управление доступом на основе ролей плоскости данных вашему удостоверению, можно опустить
identityId
этот параметр. Затем шаблон Bicep будет использоватьdeployer().objectId
для получения удостоверения участника, который развернул шаблон. Дополнительные сведения см. в разделеdeployer
.Разверните шаблон 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
Подсказка
Если вы пытаетесь предоставить вашей учетной записи управление доступом на основе ролей на канальном уровне, вы можете использовать эту команду, чтобы узнать свою учетную запись:
Get-AzADUser -SignedIn | Format-List ` -Property Id, DisplayName, Mail, UserPrincipalName
Дополнительные сведения см. в разделе
Get-AzADUser
.Перечислите все назначения ролей для вашей учетной записи Azure Cosmos DB для NoSQL, используя
Get-AzCosmosDBSqlRoleAssignment
. Просмотрите выходные данные, чтобы убедиться, что назначение роли было создано.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" AccountName = "<name-of-existing-nosql-account>" } Get-AzCosmosDBSqlRoleAssignment @parameters
Проверка доступа к плоскости передачи данных в коде
Наконец, убедитесь, что вы правильно предоставили доступ с помощью кода приложения и пакета SDK Azure на предпочитаемом языке программирования.
using Azure.Core;
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "<account-endpoint>";
TokenCredential credential = new DefaultAzureCredential();
CosmosClient client = new(endpoint, credential);
Container container = client.GetContainer("<database-name>", "<container-name>");
await container.ReadItemAsync<dynamic>("<item-id>", new PartitionKey("<partition-key>"));
Это важно
В этом примере кода используются Microsoft.Azure.Cosmos
и Azure.Identity
библиотеки из NuGet.