Использование управления доступом на основе ролей на основе ролей в Azure Cosmos DB для NoSQL
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Схема последовательности руководства по развертыванию, включая следующие расположения: обзор, основные понятия, подготовка, управление доступом на основе ролей, сеть и справочник. В настоящее время выделено расположение управления доступом на основе ролей.
В этой статье описывается, как предоставить удостоверению доступ для управления учетной записью Azure Cosmos DB для NoSQL и ее ресурсами.
Внимание
Действия, описанные в этой статье, охватывают только доступ к плоскости управления для выполнения операций с самой учетной записью всех ресурсов в иерархии учетной записи. Чтобы узнать, как управлять элементами и выполнять запросы для плоскости данных, ознакомьтесь с предоставлением доступа на основе ролей плоскости данных.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно .
- Существующая учетная запись Azure Cosmos DB.
- Одно или несколько существующих удостоверений в идентификаторе Microsoft Entra.
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Если вы решили использовать Azure PowerShell локально:
- Установите последнюю версию модуля Az PowerShell.
- Подключитесь к учетной записи Azure с помощью командлета Connect-AzAccount.
- Если вы решили использовать Azure Cloud Shell:
- Дополнительные сведения см. в статье Общие сведения об Azure Cloud Shell.
Подготовка определения роли
Сначала необходимо подготовить определение роли со списком actions
предоставления доступа к ресурсам учетной записи в Azure Cosmos DB.
Список всех определений ролей, связанных с учетной записью Azure Cosmos DB, с помощью az role definition list
. Просмотрите выходные данные и найдите определение роли с именем Встроенный участник данных Cosmos DB. Выходные данные содержат уникальный идентификатор определения роли в свойстве id
. Запишите это значение, так как оно необходимо использовать на шаге назначения далее в этом руководстве.
az role definition list \
--name "Cosmos DB Operator"
[
{
"assignableScopes": [
"/"
],
"description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
"name": "230815da-be43-4aae-9cb4-875f7bd000aa",
"permissions": [
{
"actions": [
"Microsoft.DocumentDb/databaseAccounts/*",
"Microsoft.Insights/alertRules/*",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/deployments/*",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Support/*",
"Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
],
"condition": null,
"conditionVersion": null,
"dataActions": [],
"notActions": [
"Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
"Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
"Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
"Microsoft.DocumentDB/databaseAccounts/listKeys/*",
"Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
"Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
"Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
],
"notDataActions": []
}
],
"roleName": "Cosmos DB Operator",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions",
}
]
Примечание.
В этом примере id
значение будет./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера. Однако идентификатор (230815da-be43-4aae-9cb4-875f7bd000aa
) является глобально уникальным для всех определений ролей в Azure.
Войдите на портал Azure (https://portal.azure.com).
Введите группу ресурсов в глобальной строке поиска.
В службах выберите группы ресурсов.
В области групп ресурсов выберите существующую группу ресурсов.
Примечание.
В этом примере снимок экрана содержит группу
msdocs-identity-example
ресурсов. Фактическое имя группы ресурсов может отличаться.В области группы ресурсов выберите элемент управления доступом (IAM) в меню службы.
В области управления доступом (IAM) выберите роли.
В разделе "Роли" используйте фразу поиска Cosmos DB и найдите определение роли оператора Cosmos DB. Затем выберите параметр представления, связанный с этим определением.
В диалоговом окне определения роли оператора Cosmos DB просмотрите действия, назначенные в рамках этого определения роли.
Закройте диалоговое окно определения роли оператора Cosmos DB.
Используйте Get-AzRoleDefinition
для перечисления всех определений ролей, связанных с учетной записью Azure Cosmos DB. Просмотрите выходные данные и найдите определение роли с именем Встроенный участник данных Cosmos DB. Выходные данные содержат уникальный идентификатор определения роли в свойстве Id
. Запишите это значение, так как оно необходимо использовать на шаге назначения далее в этом руководстве.
$parameters = @{
Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
Name : Cosmos DB Operator
Id : 230815da-be43-4aae-9cb4-875f7bd000aa
IsCustom : False
Description : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
Actions : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
NotActions : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
DataActions : {}
NotDataActions : {}
AssignableScopes : {/}
Примечание.
В этом примере Id
значение будет.230815da-be43-4aae-9cb4-875f7bd000aa
Идентификатор глобально уникален во всех определениях ролей в Azure.
Назначение роли удостоверению
Теперь назначьте только что определенную роль идентификатору, чтобы приложения могли получать доступ к ресурсам в Azure Cosmos DB.
Внимание
Эта задача назначения требует, чтобы у вас уже был уникальный идентификатор любого удостоверения, который требуется предоставить разрешения на управление доступом на основе ролей.
Используйте
az group show
для повторного получения метаданных для текущей группы ресурсов.az group show \ --name "<name-of-existing-resource-group>"
Просмотрите выходные данные предыдущей команды. Запишите значение
id
свойства для этой группы ресурсов, так как оно необходимо использовать на следующем шаге.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }
Примечание.
В этом примере
id
значение будет./subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера. Это усеченный пример выходных данных.Назначьте новую роль с помощью
az role assignment create
. Используйте идентификатор группы ресурсов для--scope
аргумента, идентификатор роли для-role
аргумента и уникальный идентификатор удостоверения для аргумента--assignee
.az role assignment create \ --assignee "<your-principal-identifier>" \ --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \ --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
Примечание.
В этом примере команда
scope
была задана в вымышленном примере/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
из примера предыдущего шага. Идентификатор группы ресурсов будет отличаться от этого примера. Онrole
также был установлен для вымышленного/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
. Опять же, идентификатор роли будет отличаться.Просмотрите выходные данные команды . Выходные данные включают уникальный идентификатор назначения в свойстве
id
.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa", "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "resourceGroup": "msdocs-identity-example", "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "type": "Microsoft.Authorization/roleAssignments" }
Примечание.
В этом примере свойство является
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
еще одним вымышленным примеромid
.Повторите эти действия, чтобы предоставить доступ к учетной записи из любых других удостоверений, которые вы хотите использовать.
Совет
Эти действия можно повторить для столько удостоверений, сколько вы хотите. Как правило, эти шаги по крайней мере повторяются, чтобы разработчики могли получать доступ к учетной записи с помощью человеческого удостоверения и разрешать приложениям доступ с помощью управляемого удостоверения.
Создайте файл Bicep для определения назначения роли. Назовите файл control-plane-role-assignment.bicep.
metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.' @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 assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId) scope: resourceGroup() properties: { roleDefinitionId: roleDefinitionId principalId: identityId } }
Создайте файл параметров Bicep с именем control-plane-role-assignment..
bicepparam
В этом файле параметров; назначьте ранее записанные идентификаторыroleDefinitionId
определения ролей параметру и уникальный идентификатор удостоверения параметруidentityId
.using './control-plane-role-assignment.bicep' 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 control-plane-role-assignment.bicepparam \ --template-file control-plane-role-assignment.bicep
Повторите эти действия, чтобы предоставить доступ к учетной записи из любых других удостоверений, которые вы хотите использовать.
Совет
Эти действия можно повторить для столько удостоверений, сколько вы хотите. Как правило, эти шаги по крайней мере повторяются, чтобы разработчики могли получать доступ к учетной записи с помощью человеческого удостоверения и разрешать приложениям доступ с помощью управляемого удостоверения.
В области управления доступом (IAM) выберите "Добавить " и " Добавить назначение ролей".
На панели ролей найдите
Azure Cosmos DB
и выберите роль владельца уровня управления Azure Cosmos DB, созданную ранее в этом руководстве. Затем выберите Далее.Совет
При необходимости можно отфильтровать список ролей, чтобы включить только пользовательские роли.
В области "Элементы" выберите параметр "Выбрать участников". В диалоговом окне "Участники" выберите удостоверение, которое вы хотите предоставить этому уровню доступа для учетной записи Azure Cosmos DB, а затем используйте параметр Select , чтобы подтвердить выбор.
Примечание.
На этом снимке экрана показан пример пользователя с именем Kai Carter с субъектом
kai@adventure-works.com
.Вернитесь в область "Элементы" , просмотрите выбранные члены и нажмите кнопку "Проверить и назначить".
В области "Проверка и назначение" просмотрите указанные параметры для нового назначения ролей. Выберите Проверить и назначить.
Дождитесь завершения создания назначения роли на портале.
Назначьте новую роль с помощью
New-AzRoleAssignment
. Используйте имя роли дляRoleDefinitionName
параметра и уникальный идентификатор удостоверения дляObjectId
параметра.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
Просмотрите выходные данные команды . Выходные данные включают уникальный идентификатор назначения в свойстве
RoleAssignmentId
.RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example DisplayName : Kai Carter SignInName : <kai@adventure-works.com> RoleDefinitionName : Azure Cosmos DB Control Plane Owner RoleDefinitionId : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
Примечание.
В этом примере свойство является
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
еще одним вымышленным примеромRoleAssignmentId
. Это подмножество типичных выходных данных развертывания для ясности.Повторите эти действия, чтобы предоставить доступ к учетной записи из любых других удостоверений, которые вы хотите использовать.
Совет
Эти действия можно повторить для столько удостоверений, сколько вы хотите. Как правило, эти шаги по крайней мере повторяются, чтобы разработчики могли получать доступ к учетной записи с помощью человеческого удостоверения и разрешать приложениям доступ с помощью управляемого удостоверения.
Проверка доступа уровня управления в коде
Наконец, убедитесь, что вы правильно предоставили доступ с помощью кода приложения и пакета SDK для управления Azure на предпочитаемом языке программирования.
using Azure.Identity;
using Azure.ResourceManager;
DefaultAzureCredential credential = new();
ArmClient client = new(credential);
Внимание
В этом примере кода используются Azure.ResourceManager.CosmosDB
и Azure.Identity
библиотеки из NuGet.