Partilhar via


Usar o controle de acesso baseado em função do plano de controle com o Azure Cosmos DB para NoSQL

APLICA-SE A: NoSQL

Diagrama do local atual ('Controle de acesso baseado em função') na sequência do guia de implantação.

Diagrama da sequência do guia de implantação, incluindo esses locais, na ordem: Visão geral, Conceitos, Preparar, Controle de acesso baseado em função, Rede e Referência. O local 'Controle de acesso baseado em função' está atualmente realçado.

Este artigo descreve as etapas para conceder acesso a uma identidade para gerenciar uma conta do Azure Cosmos DB para NoSQL e seus recursos.

Importante

As etapas neste artigo abrangem apenas o acesso do plano de controle para executar operações na própria conta de quaisquer recursos na hierarquia da conta. Para saber como gerenciar itens e executar consultas para o plano de dados, consulte Conceder acesso baseado em função do plano de dados.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.
  • Uma conta existente do Azure Cosmos DB.
  • Uma ou mais identidades existentes no Microsoft Entra ID.
  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

Preparar a definição de função

Primeiro, você deve preparar uma definição de função com uma lista de para conceder acesso para gerenciar recursos de actions conta no Azure Cosmos DB.

Liste todas as definições de função associadas à sua conta do Azure Cosmos DB usando az role definition listo . Revise a saída e localize a definição de função chamada Colaborador de Dados Interno do Cosmos DB. A saída contém o identificador exclusivo da definição de função na id propriedade. Registre esse valor conforme ele é necessário usar na etapa de atribuição mais adiante neste guia.

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",
  }
]

Nota

Neste exemplo, o id valor seria /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa. Este exemplo usa dados fictícios e seu identificador seria diferente deste exemplo. No entanto, o identificador (230815da-be43-4aae-9cb4-875f7bd000aa) é globalmente exclusivo em todas as definições de função no Azure.

  1. Entre no portal do Azure (https://portal.azure.com).

  2. Insira Grupo de recursos na barra de pesquisa global.

    Captura de ecrã da barra de pesquisa global no portal do Azure.

  3. Em Serviços, selecione Grupos de recursos.

    Captura de ecrã da opção 'Grupos de recursos' selecionada no menu de pesquisa.

  4. No painel Grupos de recursos, selecione o grupo de recursos existente.

    Captura de ecrã de um grupo de recursos existente na lista de grupos de recursos para a subscrição.

    Nota

    Este exemplo de captura de tela inclui o msdocs-identity-example grupo de recursos. O nome real do grupo de recursos pode ser diferente.

  5. No painel do grupo de recursos, selecione Controle de acesso (IAM) no menu de serviço.

    Captura de ecrã da opção 'Controlo de Acesso (IAM)' no menu de serviço de um grupo de recursos.

  6. No painel Controle de acesso (IAM), selecione Funções.

    Captura de ecrã da opção 'Funções' no painel 'Controlo de Acesso (IAM)'.

  7. Na seção Funções, use a frase de pesquisa Cosmos DB e localize a definição da função Operador do Cosmos DB. Em seguida, selecione a opção Exibir associada a essa definição.

    Captura de tela de uma lista de definições de função no escopo atribuível atual filtrada para incluir apenas definições com 'Cosmos DB' no título.

  8. Na caixa de diálogo Definição de função do Operador do Cosmos DB, observe as ações atribuídas como parte dessa definição de função.

    Captura de tela da caixa de diálogo 'Operador do Cosmos DB' com detalhes sobre a definição de função interna.

  9. Feche a caixa de diálogo de definição de função do Operador do Cosmos DB.

Use Get-AzRoleDefinition para listar todas as definições de função associadas à sua conta do Azure Cosmos DB. Revise a saída e localize a definição de função chamada Colaborador de Dados Interno do Cosmos DB. A saída contém o identificador exclusivo da definição de função na Id propriedade. Registre esse valor conforme ele é necessário usar na etapa de atribuição mais adiante neste guia.

$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 : {/}

Nota

Neste exemplo, o Id valor seria 230815da-be43-4aae-9cb4-875f7bd000aa. O identificador é globalmente exclusivo em todas as definições de função no Azure.

Atribuir função à identidade

Agora, atribua a função recém-definida a uma identidade para que seus aplicativos possam acessar recursos no Azure Cosmos DB.

Importante

Esta tarefa de atribuição requer que você já tenha o identificador exclusivo de qualquer identidade que você deseja conceder permissões de controle de acesso baseadas em função.

  1. Use az group show para obter os metadados para seu grupo de recursos atual novamente.

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. Observe a saída do comando anterior. Registre o id valor da propriedade para esse grupo de recursos conforme ele é necessário usar na próxima etapa.

    {
      "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example",
      "location": "westus",
      "name": "msdocs-identity-example",
      "type": "Microsoft.Resources/resourceGroups"
    }
    

    Nota

    Neste exemplo, o id valor seria /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example. Este exemplo usa dados fictícios e seu identificador seria diferente deste exemplo. Este é um exemplo truncado da saída.

  3. Atribua a nova função usando az role assignment createo . Use o identificador do seu grupo de recursos para o --scope argumento, o identificador da função para o -role argumento e o identificador exclusivo para sua identidade para o --assignee argumento.

    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"
    

    Nota

    Neste comando de exemplo, o scope foi definido como o exemplo /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example fictício do exemplo da etapa anterior. O identificador do seu grupo de recursos seria distinto deste exemplo. O role também foi definido para o fictício /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0. Novamente, seu identificador de função seria distinto.

  4. Observe a saída do comando. A saída inclui um identificador exclusivo para a atribuição na id propriedade.

    {
      "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"
    }
    

    Nota

    Neste exemplo, a id propriedade é /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 outro exemplo fictício.

  5. Repita estas etapas para conceder acesso à conta a partir de quaisquer outras identidades que você gostaria de usar.

    Gorjeta

    Você pode repetir essas etapas para quantas identidades desejar. Normalmente, essas etapas são pelo menos repetidas para permitir que os desenvolvedores acessem uma conta usando sua identidade humana e para permitir o acesso de aplicativos usando uma identidade gerenciada.

  1. Crie um novo arquivo Bicep para definir sua atribuição de função. Nomeie o arquivo 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. Crie um novo arquivo de parâmetros do Bicep chamado control-plane-role-assignment.bicepparam. Neste arquivo de parâmetros; Atribua os identificadores de definição de função registrados anteriormente ao roleDefinitionId parâmetro e o identificador exclusivo de sua identidade ao identityId parâmetro.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. Implante este modelo Bicep usando az deployment group createo .

    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. Repita estas etapas para conceder acesso à conta a partir de quaisquer outras identidades que você gostaria de usar.

    Gorjeta

    Você pode repetir essas etapas para quantas identidades desejar. Normalmente, essas etapas são pelo menos repetidas para permitir que os desenvolvedores acessem uma conta usando sua identidade humana e para permitir o acesso de aplicativos usando uma identidade gerenciada.

  1. No painel Controle de acesso (IAM), selecione Adicionar e, em seguida, Adicionar atribuição de função.

    Captura de ecrã da opção 'Adicionar atribuição de função' no menu 'Controlo de Acesso (IAM)' para a opção 'Adicionar'.

  2. No painel Função, procure Azure Cosmos DB e selecione a função Proprietário do Plano de Controle do Azure Cosmos DB criada anteriormente neste guia. Em seguida, selecione Seguinte.

    Captura de ecrã do painel 'Função' para adicionar uma atribuição de função.

    Gorjeta

    Opcionalmente, você pode filtrar a lista de funções para incluir apenas funções personalizadas.

  3. No painel Membros, selecione a opção Selecionar membros. Na caixa de diálogo membros, selecione a identidade que você deseja conceder esse nível de acesso para sua conta do Azure Cosmos DB e use a opção Selecionar para confirmar sua escolha.

    Captura de ecrã do painel 'Membros' para adicionar uma atribuição de função.

    Captura de tela da caixa de diálogo de seleção de identidade para adicionar uma atribuição de função.

    Nota

    Esta captura de tela ilustra um usuário de exemplo chamado "Kai Carter" com um principal de kai@adventure-works.com.

  4. De volta ao painel Membros , revise o(s) membro(s) selecionado(s) e selecione Revisar + atribuir.

    Captura de ecrã do painel 'Membros' com uma identidade selecionada para uma atribuição de função.

  5. No painel Rever + atribuir, reveja as opções especificadas para a nova atribuição de função. Por fim, selecione Rever + atribuir.

    Captura de ecrã do painel 'Rever + criar' para uma atribuição de função.

  6. Aguarde até que o portal termine de criar a atribuição de função.

  1. Atribua a nova função usando New-AzRoleAssignmento . Use o nome da função para o RoleDefinitionName parâmetro e o identificador exclusivo para sua identidade para o ObjectId parâmetro.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. Observe a saída do comando. A saída inclui um identificador exclusivo para a atribuição na RoleAssignmentId propriedade.

    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
    

    Nota

    Neste exemplo, a RoleAssignmentId propriedade é /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 outro exemplo fictício. Este é um subconjunto da saída típica da implantação para clareza.

  3. Repita estas etapas para conceder acesso à conta a partir de quaisquer outras identidades que você gostaria de usar.

    Gorjeta

    Você pode repetir essas etapas para quantas identidades desejar. Normalmente, essas etapas são pelo menos repetidas para permitir que os desenvolvedores acessem uma conta usando sua identidade humana e para permitir o acesso de aplicativos usando uma identidade gerenciada.

Validar o acesso ao plano de controle no código

Por fim, valide se você concedeu acesso corretamente usando o código do aplicativo e o SDK de Gerenciamento do Azure em sua linguagem de programação preferida.

using Azure.Identity;
using Azure.ResourceManager;

DefaultAzureCredential credential = new();

ArmClient client = new(credential);

Importante

Este exemplo de código usa as bibliotecas e Azure.Identity do Azure.ResourceManager.CosmosDB NuGet.

Próximo passo