Настройка управления доступом на основе ролей в Azure Cosmos DB for MongoDB

Область применения: Mongodb

В этой статье описывается управление доступом на основе ролей для операций плоскости данных в Azure Cosmos DB для MongoDB.

Если вы используете операции плоскости управления, ознакомьтесь со статьей управления доступом на основе ролей, примененной к операциям плоскости управления.

Azure Cosmos DB для MongoDB предоставляет встроенную систему управления доступом на основе ролей (RBAC), которая позволяет авторизовать запросы данных с помощью детальной модели разрешений на основе ролей. Пользователи и роли находятся в базе данных и управляются с помощью Azure CLI, Azure PowerShell или Azure Resource Manager (ARM).

Основные понятия

Ресурс

Ресурс — это коллекция или база данных, к которой мы применяем правила управления доступом.

Привилегии

Привилегии — это действия, которые могут выполняться для определенного ресурса. Например, "доступ на чтение к коллекции xyz". Привилегии назначаются определенной роли.

Роль

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

Аудит журнала диагностики

В таблицу в компоненте диагностики портала Azure добавлен MongoRequests другой столбецuserId. Этот столбец определяет, какой пользователь выполнил операцию плана данных. Значение в этом столбце пусто, если RBAC не включен.

Доступные привилегии

Запрос и запись

  • поиск
  • Вставить
  • remove
  • обновить

Потоки изменений

  • changeStream

Управление базами данных

  • createCollection
  • createIndex
  • dropCollection
  • killCursors
  • killAnyCursor

Администратор установка сервера

  • dropDatabase
  • dropIndex
  • reIndex

Диагностика

  • collStats
  • dbStats
  • listDatabases
  • listCollections
  • listIndexes

Встроенные роли

Эти роли уже существуют в каждой базе данных и не нужно создавать.

чтение

Имеет следующие привилегии: changeStream, collStats, find, killCursors, listIndexes, listCollections

readWrite

Имеет следующие привилегии: collStats, createCollection, dropCollection, createIndex, dropIndex, find, insert, killCursors, listIndexes, listCollections, remove, update

dbAdmin

Имеет следующие привилегии: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndex

dbOwner

Имеет следующие привилегии: collStats, createCollection, createIndex, dbStats, dropCollection, dropDatabase, dropIndex, listCollections, listIndexes, reIndexes, find, insert, killCursors, listIndexes, listCollections, remove, update

Настройка Azure CLI (краткое руководство)

Мы рекомендуем использовать cmd при использовании Windows.

  1. Убедитесь, что последняя версия CLI (не расширение) установлена локально. попробуйте команду az upgrade.
  2. Подключение.
az cloud set -n  AzureCloud
az login
az account set --subscription <your subscription ID>
  1. Включите возможность RBAC в существующем API для учетной записи базы данных MongoDB. Необходимо добавить функцию EnableMongoRoleBasedAccessControl в учетную запись базы данных. RBAC также можно включить с помощью вкладки функций в портал Azure вместо этого. Если вместо этого вы предпочитаете использовать новую учетную запись базы данных, создайте такую учетную запись с возможностью RBAC, для которой задано значение true.
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
  1. Создайте базу данных для подключения пользователей на портале Azure.
  2. Создайте пользователя RBAC со встроенной ролью чтения.
az cosmosdb mongodb user definition create --account-name <YOUR_DB_ACCOUNT> --resource-group <YOUR_RG> --body {\"Id\":\"<YOUR_DB_NAME>.<YOUR_USERNAME>\",\"UserName\":\"<YOUR_USERNAME>\",\"Password\":\"<YOUR_PASSWORD>\",\"DatabaseName\":\"<YOUR_DB_NAME>\",\"CustomData\":\"Some_Random_Info\",\"Mechanisms\":\"SCRAM-SHA-256\",\"Roles\":[{\"Role\":\"read\",\"Db\":\"<YOUR_DB_NAME>\"}]}

Проверьте подлинность с помощью подписанного URL-адреса

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

Проверка подлинности с помощью драйвера Node.js

connectionString = "mongodb://" + "<YOUR_USER>" + ":" + "<YOUR_PASSWORD>" + "@" + "<YOUR_HOSTNAME>" + ":10255/" + "<YOUR_DATABASE>" +"?ssl=true&retrywrites=false&replicaSet=globaldb&authmechanism=SCRAM-SHA-256&appname=@" + "<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>" + "@";
var client = await mongodb.MongoClient.connect(connectionString, { useNewUrlParser: true, useUnifiedTopology: true });

Проверка подлинности с помощью драйвера Java

connectionString = "mongodb://" + "<YOUR_USER>" + ":" + "<YOUR_PASSWORD>" + "@" + "<YOUR_HOSTNAME>" + ":10255/" + "<YOUR_DATABASE>" +"?ssl=true&retrywrites=false&replicaSet=globaldb&authmechanism=SCRAM-SHA-256&appname=@" + "<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>" + "@";
MongoClientURI uri = new MongoClientURI(connectionString);
MongoClient client = new MongoClient(uri);

Проверка подлинности с помощью Mongosh

mongosh --authenticationDatabase <YOUR_DB> --authenticationMechanism SCRAM-SHA-256 "mongodb://<YOUR_USERNAME>:<YOUR_PASSWORD>@<YOUR_HOST>:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000"

Команды RBAC Azure CLI

Команды управления RBAC будут работать только с более новыми версиями установленного Azure CLI. Сведения о начале работы см. в кратком руководстве выше.

Создание определения роли

az cosmosdb mongodb role definition create --account-name <account-name> --resource-group <resource-group-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 --account-name <account-name> --resource-group <resource-group-name> --body role.json
Файл 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": []
}

Обновление определения роли

az cosmosdb mongodb role definition update --account-name <account-name> --resource-group <resource-group-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 update --account-name <account-name> --resource-group <resource-group-name> --body role.json
Файл 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": []
}

Вывод списка ролей

az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>

Проверьте, существует ли роль

az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role

Удалите роль

az cosmosdb mongodb role definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role

Создайте определение пользователя

az cosmosdb mongodb user definition create --account-name <account-name> --resource-group <resource-group-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 user definition create --account-name <account-name> --resource-group <resource-group-name> --body user.json
Файл 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"
	}]
}

Обновите определение пользователя

Чтобы обновить пароль пользователя, отправьте новый пароль в поле пароля.

az cosmosdb mongodb user definition update --account-name <account-name> --resource-group <resource-group-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 user definition update --account-name <account-name> --resource-group <resource-group-name> --body user.json
Файл 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"
	}]
}

Список пользователей

az cosmosdb mongodb user definition list --account-name <account-name> --resource-group <resource-group-name>

Проверьте, существует ли пользователь

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

Удаление пользователя

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

Ограничения

  • Число пользователей и ролей, которые можно создать, должно быть меньше 10 000.
  • Команды listCollections, listDatabases, killCursors и currentOp исключены из RBAC.
  • Пользователи и роли в базах данных не поддерживаются.
  • Пароль пользователя можно задать или сбросить только с помощью Azure CLI или Azure PowerShell.
  • Настройка пользователей и ролей поддерживается только с помощью Azure CLI или PowerShell.
  • Отключение проверки подлинности первичного и вторичного ключа не поддерживается. Рекомендуем сменить ключи, чтобы предотвратить доступ при включении RBAC.
  • Политики RBAC для Cosmos DB для Mongo DB не будут автоматически восстановлены после операции восстановления. После завершения процесса восстановления вам потребуется перенастроить эти политики.

Часто задаваемые вопросы

Можно ли управлять определениями и назначениями ролей на портале Azure?

портал Azure поддержка управления ролями недоступна. Но RBAC можно включить на вкладке функций на портале Azure.

Разделы справки по изменению пароля пользователя

Обновите определение пользователя новым паролем.

Какие версии Cosmos DB для MongoDB поддерживают управление доступом на основе ролей (RBAC)?

RBAC поддерживает версию 3.6 и более поздние версии.

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