你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Cosmos DB for MongoDB 中配置基于角色的访问控制

Azure Cosmos DB for MongoDB 为数据平面作提供内置的基于角色的访问控制系统。 使用基于角色的访问控制通过精细的基于角色的权限授权数据请求。 本指南介绍如何启用基于角色的访问控制、创建角色和用户,以及使用支持的驱动程序进行身份验证。

先决条件

  • Azure 订阅服务
  • 用于 MongoDB 的 Azure Cosmos DB 帐户(版本 3.6 或更高版本)
  • 最新版本的 Azure CLI

启用基于角色的访问控制

在 Azure Cosmos DB for MongoDB 帐户上启用基于角色的访问控制。

  1. 登录到 Azure CLI。

    az login
    
  2. 在数据库帐户上启用基于角色的访问控制功能。

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

    小窍门

    还可以从 Azure 门户中的“功能”选项卡启用基于角色的访问控制。

  3. 创建一个数据库,供用户在 Azure 门户中连接到该数据库。

创建角色和用户

定义自定义角色和用户以控制对数据库帐户的访问。

  1. 创建角色定义。

    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\":[]}
    

    小窍门

    或者,使用 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. 使用角色分配创建用户定义。

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

    小窍门

    或者,使用 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"
      }]
    }
    

使用驱动程序进行身份验证

使用支持的驱动程序和基于角色的访问控制凭据连接到数据库。

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>"
)

执行常见操作

现在,对 Azure Cosmos DB for MongoDB 中基于角色的访问控制功能执行一些常见作。

  1. 使用以下命令显示所有角色定义。

    az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>
    
  2. 按角色 ID 验证角色是否存在。

    az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
    
  3. 使用角色定义 ID 删除角色定义。

    az cosmosdb mongodb role definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role
    
  4. 显示所有用户定义。

    az cosmosdb mongodb user definition list --account-name <account-name> --resource-group <resource-group-name>
    
  5. 通过 ID 验证用户是否存在。

    az cosmosdb mongodb user definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.myName
    
  6. 使用其 ID 删除用户定义。

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