MongoDB용 Azure Cosmos DB는 데이터 평면 작업을 위한 기본 제공 역할 기반 액세스 제어 시스템을 제공합니다. 역할 기반 액세스 제어를 사용하여 세분화된 역할 기반 권한으로 데이터 요청에 권한을 부여합니다. 이 가이드에서는 역할 기반 액세스 제어를 사용하도록 설정하고, 역할 및 사용자를 만들고, 지원되는 드라이버로 인증하는 방법을 보여 줍니다.
필수 조건
- Azure 구독
- MongoDB용 Azure Cosmos DB 계정(버전 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>"
)
일반 작업 수행
이제 MongoDB용 Azure Cosmos DB에서 역할 기반 액세스 제어 기능에 대한 몇 가지 일반적인 작업을 수행합니다.
다음 명령을 사용하여 모든 역할 정의를 표시합니다.
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