Compartilhar via


Configurar o controle de acesso baseado em função no Azure Cosmos DB para MongoDB

O Azure Cosmos DB for MongoDB fornece um sistema de controle de acesso baseado em função interno para operações de plano de dados. Use o controle de acesso baseado em função para autorizar solicitações de dados com permissões refinadas e baseadas em função. Este guia mostra como habilitar o controle de acesso baseado em função, criar funções e usuários e autenticar com drivers com suporte.

Pré-requisitos

  • Uma assinatura do Azure
  • Uma conta do Azure Cosmos DB para MongoDB (versão 3.6 ou superior)
  • Versão mais recente da CLI do Azure

Habilitar o controle de acesso baseado em função

Habilite o controle de acesso baseado em função em sua conta do Azure Cosmos DB para MongoDB.

  1. Entre na CLI do Azure.

    az login
    
  2. Habilite o recurso de controle de acesso baseado em função em sua conta de banco de dados.

    az cosmosdb create \
        --resource-group "<resource-group-name>" \
        --name "<account-name>" \
        --kind "MongoDB" \
        --capabilities "EnableMongoRoleBasedAccessControl"
    

    Dica

    Você também pode habilitar o controle de acesso baseado em função na guia Recursos no portal do Azure.

  3. Crie um banco de dados para os usuários se conectarem no portal do Azure.

Criar funções e usuários

Defina funções personalizadas e usuários para controlar o acesso à sua conta de banco de dados.

  1. Crie uma definição de função.

    az cosmosdb mongodb role definition create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
        --body {\"Id\":\"test.My_Read_Only_Role101\",\"RoleName\":\"My_Read_Only_Role101\",\"Type\":\"CustomRole\",\"DatabaseName\":\"test\",\"Privileges\":[{\"Resource\":{\"Db\":\"test\",\"Collection\":\"test\"},\"Actions\":[\"insert\",\"find\"]}],\"Roles\":[]}
    

    Dica

    Como alternativa, use um arquivo JSON:

    az cosmosdb mongodb role definition create \
       --resource-group "<resource-group-name>" \
       --account-name "<account-name>" \
       --body @role.json
    
    {
      "Id": "test.My_Read_Only_Role101",
      "RoleName": "My_Read_Only_Role101",
      "Type": "CustomRole",
      "DatabaseName": "test",
      "Privileges": [{
        "Resource": {
          "Db": "test",
          "Collection": "test"
        },
        "Actions": ["insert", "find"]
      }],
      "Roles": []
    }
    
  2. Crie uma definição de usuário com uma atribuição de função.

    az cosmosdb mongodb user definition create \
        --resource-group "<resource-group-name>" \
        --account-name "<account-name>" \
     			--body {\"Id\":\"test.myName\",\"UserName\":\"myName\",\"Password\":\"pass\",\"DatabaseName\":\"test\",\"CustomData\":\"Some_Random_Info\",\"Mechanisms\":\"SCRAM-SHA-256\",\"Roles\":[{\"Role\":\"My_Read_Only_Role101\",\"Db\":\"test\"}]}
    

    Dica

    Como alternativa, use um arquivo JSON:

    az cosmosdb mongodb role definition create \
       --resource-group "<resource-group-name>" \
       --account-name "<account-name>" \
       --body @role.json
    
    {
      "Id": "test.myName",
      "UserName": "myName",
      "Password": "pass",
      "DatabaseName": "test",
      "CustomData": "Some_Random_Info",
      "Mechanisms": "SCRAM-SHA-256",
      "Roles": [{
        "Role": "My_Read_Only_Role101",
        "Db": "test"
      }]
    }
    

Autenticar com drivers

Conecte-se ao banco de dados usando drivers compatíveis e credenciais de controle de acesso baseadas em função.

from pymongo import MongoClient
client = MongoClient(
    "mongodb://<YOUR_HOSTNAME>:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000",
    username="<YOUR_USER>",
    password="<YOUR_PASSWORD>",
    authSource='<YOUR_DATABASE>',
    authMechanism='SCRAM-SHA-256',
    appName="<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>"
)

Executar operações comuns

Agora, execute algumas operações comuns para recursos de controle de acesso baseados em função no Azure Cosmos DB para MongoDB.

  1. Use o comando a seguir para exibir todas as definições de função.

    az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>
    
  2. Verifique a existência de uma função por sua ID.

    az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
    
  3. Remova uma definição de função usando sua ID.

    az cosmosdb mongodb role definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
    
  4. Exiba todas as definições de usuário.

    az cosmosdb mongodb user definition list --account-name <account-name> --resource-group <resource-group-name>
    
  5. Verifique a existência de um usuário por sua ID.

    az cosmosdb mongodb user definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.myName
    
  6. Remova uma definição de usuário usando sua ID.

    az cosmosdb mongodb user definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.myName