Azure Cosmos DB for MongoDB でロールベースのアクセス制御を構成する
適用対象: MongoDB
この記事では、Azure Cosmos DB for MongoDB でのデータ プレーン操作に対するロールベースのアクセス制御について説明します。
管理プレーン操作を使用している場合は、管理プレーン操作に適用されるロールベースのアクセス制御に関する記事を参照してください。
Azure Cosmos DB for MongoDB では、ロールベースのアクセス制御 (RBAC) システムが組み込まれており、きめ細かいロールベースのアクセス許可モデルを使用してデータ要求を承認できます。 ユーザーとロールはデータベース内に存在し、Azure CLI、Azure PowerShell、または Azure Resource Manager (ARM) を使用して管理されます。
概念
リソース
リソースは、アクセス制御規則が適用されるコレクションまたはデータベースです。
特権
特権は、特定のリソースに対して実行できるアクションです。 たとえば、"コレクションxyzへの読み取りアクセス"などです。 特権は特定のロールに割り当てられます。
Role
ロールには1つ以上の特権があります。 ロールはユーザー(0個以上)に割り当てられ、それらの特権で定義されているアクションを実行できるようになります。 ロールは1つのデータベース内に格納されます。
診断ログの監査
userId
という名前の別の列が、Azure portal 診断機能の MongoRequests
テーブルに追加されました。 この列は、どのユーザーがどのデータ プレーン操作を実行したかを示します。 RBAC が有効になっていない場合、この列の値は空です。
使用可能な特権
クエリと書き込み
- 検索
- insert
- remove
- update
ストリームの変更
- changeStream
データベースの管理
- createCollection
- createIndex
- dropCollection
- killCursors
- killAnyCursor
サーバー管理
- dropDatabase
- dropIndex
- reIndex
診断
- collStats
- dbStats
- listDatabases
- listCollections
- listIndexes
組み込みの役割
これらのロールはすべてのデータベースに既に存在するため、作成する必要はありません。
read |
readWrite |
dbAdmin |
dbOwner |
|
---|---|---|---|---|
changeStream |
✅ はい | ✅ はい | ✅ はい | ✅ はい |
collStats |
✅ はい | ✅ はい | ✅ はい | ✅ はい |
listCollections |
✅ はい | ✅ はい | ✅ はい | ✅ はい |
listIndexes |
✅ はい | ✅ はい | ✅ はい | ✅ はい |
createCollection |
✖️ いいえ | ✅ はい | ✅ はい | ✅ はい |
createIndex |
✖️ いいえ | ✅ はい | ✅ はい | ✅ はい |
dropCollection |
✖️ いいえ | ✅ はい | ✅ はい | ✅ はい |
dbStats |
✖️ いいえ | ✖️ いいえ | ✅ はい | ✅ はい |
dropDatabase |
✖️ いいえ | ✖️ いいえ | ✅ はい | ✅ はい |
reIndex |
✖️ いいえ | ✖️ いいえ | ✅ はい | ✅ はい |
find |
✅ はい | ✅ はい | ✖️ いいえ | ✅ はい |
killCursors |
✅ はい | ✅ はい | ✖️ いいえ | ✅ はい |
dropIndex |
✖️ いいえ | ✅ はい | ✅ はい | ✅ はい |
insert |
✖️ いいえ | ✅ はい | ✖️ いいえ | ✅ はい |
remove |
✖️ いいえ | ✅ はい | ✖️ いいえ | ✅ はい |
update |
✖️ いいえ | ✅ はい | ✖️ いいえ | ✅ はい |
Azure CLI のセットアップ (クイックスタート)
Windowsを使用する場合は、cmdを使用することをお勧めします。
- 最新のCLIバージョン(拡張機能ではない)がローカルにインストールされていることを確認します。
az upgrade
コマンドを試します。 - サブスクリプションに接続します。
az cloud set -n AzureCloud
az login
az account set --subscription <your subscription ID>
- 既存のMongoDBデータベースアカウント用APIでRBAC機能を有効にします。 データベース アカウントに "EnableMongoRoleBasedAccessControl" 機能を追加する必要があります。 代わりに、Azure portal の [機能] タブを使用して RBAC を有効にすることもできます。 代わりに新しいデータベース アカウントを使用する場合は、RBAC 機能が true に設定された新しいデータベース アカウントを作成します。
az cosmosdb create -n <account_name> -g <azure_resource_group> --kind MongoDB --capabilities EnableMongoRoleBasedAccessControl
- ユーザーがAzure portalで接続するためのデータベースを作成します。
- 読み取りロールが組み込まれた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>\"}]}
pymongoを使用して認証する
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"
MongoDB Compass と Azure Data Studio を使用して認証を行う
connectionString = "mongodb://" + "<YOUR_USER>" + ":" + "<YOUR_PASSWORD>" + "@" + "<YOUR_HOSTNAME>" + ":10255/" + "?ssl=true&retrywrites=false&replicaSet=globaldb&authmechanism=SCRAM-SHA-256&appname=@" + "<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>" + "@"
+"&authSource=" +"<YOUR_DATABASE>";
Azure CLI RBACコマンド
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"
}]
}
List users
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 を有効にするときにアクセスできないように、キーをローテーションすることをお勧めします。
- Cosmos DB for Mongo DB RU の RBAC ポリシーは、復元操作後に自動的に復帰されません。 これらのポリシーは、復元プロセスの完了後に再構成する必要があります。
よく寄せられる質問 (FAQ)
Azure portal からロールの定義とロールの割り当てを管理することはできますか。
Azure portal によるロール管理のサポートは利用できません。 ただし、Azure portal の [機能] タブを使用して RBAC を有効にすることはできます。
ユーザーのパスワードを変更する方法
ユーザー定義を新しいパスワードで更新します。
ロールベースのアクセス制御 (RBAC) はどの Cosmos DB for MongoDB バージョンでサポートされていますか?
RBAC はバージョン 3.6 以降でサポートされています。
次のステップ
- 詳細については、Azure Cosmos DB 管理の RBAC に関するページを参照してください。