Поделиться через


Использование управления доступом на основе ролей на основе ролей в 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.

Подготовка определения роли

Сначала необходимо подготовить определение роли со списком 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.

  1. Войдите на портал Azure (https://portal.azure.com).

  2. Введите группу ресурсов в глобальной строке поиска.

    Снимок экрана: глобальная панель поиска в портал Azure.

  3. В службах выберите группы ресурсов.

    Снимок экрана: параметр

  4. В области групп ресурсов выберите существующую группу ресурсов.

    Снимок экрана: существующая группа ресурсов в списке групп ресурсов для подписки.

    Примечание.

    В этом примере снимок экрана содержит группу msdocs-identity-example ресурсов. Фактическое имя группы ресурсов может отличаться.

  5. В области группы ресурсов выберите элемент управления доступом (IAM) в меню службы.

    Снимок экрана: параметр

  6. В области управления доступом (IAM) выберите роли.

    Снимок экрана: параметр

  7. В разделе "Роли" используйте фразу поиска Cosmos DB и найдите определение роли оператора Cosmos DB. Затем выберите параметр представления, связанный с этим определением.

    Снимок экрана: список определений ролей в текущей области, отфильтрованной для включения только определений с

  8. В диалоговом окне определения роли оператора Cosmos DB просмотрите действия, назначенные в рамках этого определения роли.

    Снимок экрана: диалоговое окно

  9. Закройте диалоговое окно определения роли оператора 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.

Внимание

Эта задача назначения требует, чтобы у вас уже был уникальный идентификатор любого удостоверения, который требуется предоставить разрешения на управление доступом на основе ролей.

  1. Используйте az group show для повторного получения метаданных для текущей группы ресурсов.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. Просмотрите выходные данные предыдущей команды. Запишите значение 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 В этом примере используются вымышленные данные, и идентификатор будет отличаться от этого примера. Это усеченный пример выходных данных.

  3. Назначьте новую роль с помощью 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. Опять же, идентификатор роли будет отличаться.

  4. Просмотрите выходные данные команды . Выходные данные включают уникальный идентификатор назначения в свойстве 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.

  5. Повторите эти действия, чтобы предоставить доступ к учетной записи из любых других удостоверений, которые вы хотите использовать.

    Совет

    Эти действия можно повторить для столько удостоверений, сколько вы хотите. Как правило, эти шаги по крайней мере повторяются, чтобы разработчики могли получать доступ к учетной записи с помощью человеческого удостоверения и разрешать приложениям доступ с помощью управляемого удостоверения.

  1. Создайте файл 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
      }
    }
    
  2. Создайте файл параметров 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>'
    
  3. Разверните этот шаблон 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
    
  4. Повторите эти действия, чтобы предоставить доступ к учетной записи из любых других удостоверений, которые вы хотите использовать.

    Совет

    Эти действия можно повторить для столько удостоверений, сколько вы хотите. Как правило, эти шаги по крайней мере повторяются, чтобы разработчики могли получать доступ к учетной записи с помощью человеческого удостоверения и разрешать приложениям доступ с помощью управляемого удостоверения.

  1. В области управления доступом (IAM) выберите "Добавить " и " Добавить назначение ролей".

    Снимок экрана: параметр

  2. На панели ролей найдите Azure Cosmos DB и выберите роль владельца уровня управления Azure Cosmos DB, созданную ранее в этом руководстве. Затем выберите Далее.

    Снимок экрана: панель

    Совет

    При необходимости можно отфильтровать список ролей, чтобы включить только пользовательские роли.

  3. В области "Элементы" выберите параметр "Выбрать участников". В диалоговом окне "Участники" выберите удостоверение, которое вы хотите предоставить этому уровню доступа для учетной записи Azure Cosmos DB, а затем используйте параметр Select , чтобы подтвердить выбор.

    Снимок экрана: панель

    Снимок экрана: диалоговое окно выбора удостоверения для добавления назначения роли.

    Примечание.

    На этом снимке экрана показан пример пользователя с именем Kai Carter с субъектом kai@adventure-works.com.

  4. Вернитесь в область "Элементы" , просмотрите выбранные члены и нажмите кнопку "Проверить и назначить".

    Снимок экрана: панель

  5. В области "Проверка и назначение" просмотрите указанные параметры для нового назначения ролей. Выберите Проверить и назначить.

    Снимок экрана: панель

  6. Дождитесь завершения создания назначения роли на портале.

  1. Назначьте новую роль с помощью 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
    
  2. Просмотрите выходные данные команды . Выходные данные включают уникальный идентификатор назначения в свойстве 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. Это подмножество типичных выходных данных развертывания для ясности.

  3. Повторите эти действия, чтобы предоставить доступ к учетной записи из любых других удостоверений, которые вы хотите использовать.

    Совет

    Эти действия можно повторить для столько удостоверений, сколько вы хотите. Как правило, эти шаги по крайней мере повторяются, чтобы разработчики могли получать доступ к учетной записи с помощью человеческого удостоверения и разрешать приложениям доступ с помощью управляемого удостоверения.

Проверка доступа уровня управления в коде

Наконец, убедитесь, что вы правильно предоставили доступ с помощью кода приложения и пакета SDK для управления Azure на предпочитаемом языке программирования.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

Внимание

В этом примере кода используются Azure.ResourceManager.CosmosDB и Azure.Identity библиотеки из NuGet.

Следующий шаг