Azure Cosmos DB for MongoDB には、データ プレーン操作用の組み込みのロールベースのアクセス制御システムが用意されています。 ロールベースのアクセス制御を使用して、きめ細かいロールベースのアクセス許可でデータ要求を承認します。 このガイドでは、ロールベースのアクセス制御を有効にし、ロールとユーザーを作成し、サポートされているドライバーで認証する方法について説明します。
[前提条件]
- Azure サブスクリプション
- Azure Cosmos DB for MongoDB アカウント (バージョン 3.6 以降)
- 最新バージョンの Azure CLI
ロールベースのアクセス制御を有効にする
Azure Cosmos DB for MongoDB アカウントでロールベースのアクセス制御を有効にします。
Azure CLI にサインインします。
az loginデータベース アカウントでロールベースのアクセス制御機能を有効にします。
az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --kind "MongoDB" \ --capabilities "EnableMongoRoleBasedAccessControl"ヒント
Azure portal の [機能] タブからロールベースのアクセス制御を有効にすることもできます。
Azure portal で接続するユーザー用のデータベースを作成します。
ロールとユーザーを作成する
データベース アカウントへのアクセスを制御するカスタム ロールとユーザーを定義します。
ロール定義を作成します。
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": [] }ロールの割り当てを使用してユーザー定義を作成します。
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 のロールベースのアクセス制御機能に対して一般的な操作をいくつか実行します。
次のコマンドを使用して、すべてのロール定義を表示します。
az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>ID によってロールの存在を確認します。
az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_RoleID を使用してロール定義を削除します。
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 list --account-name <account-name> --resource-group <resource-group-name>ID でユーザーの存在を確認します。
az cosmosdb mongodb user definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.myNameID を使用してユーザー定義を削除します。
az cosmosdb mongodb user definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.myName