NoSQL용 Azure Cosmos DB에서 컨트롤 플레인 역할 기반 액세스 제어 사용
적용 대상: NoSQL
개요, 개념, 준비, 역할 기반 액세스 제어, 네트워크 및 참조 순서대로 이러한 위치를 포함하는 배포 가이드 시퀀스의 다이어그램 '역할 기반 액세스 제어' 위치가 현재 강조 표시되어 있습니다.
이 문서에서는 NoSQL용 Azure Cosmos DB 계정 및 해당 리소스를 관리하기 위한 ID 액세스 권한을 부여하는 단계를 안내합니다.
Important
이 문서의 단계에서는 계정 계층 구조에 있는 모든 리소스의 계정 자체에 대한 작업을 수행하기 위한 컨트롤 플레인 액세스만 다룹니다. 항목을 관리하고 데이터 평면에 대한 쿼리를 실행하는 방법을 알아보려면 데이터 평면 역할 기반 액세스 권한 부여를 참조하세요.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 기존 Azure Cosmos DB 계정.
- Microsoft Entra ID에 하나 이상의 기존 ID가 있습니다.
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell의 Bash에 대한 빠른 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 로그인을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI에서 확장 사용을 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
- Azure PowerShell을 로컬로 사용하도록 선택하는 경우:
- 최신 버전의 Az PowerShell 모듈을 설치합니다.
- Connect-AzAccount cmdlet을 사용하여 Azure 계정에 로그인합니다.
- Azure Cloud Shell을 사용하도록 선택하는 경우:
- 자세한 내용은 Azure Cloud Shell 개요를 참조하세요.
역할 정의 준비
먼저 Azure Cosmos DB에서 actions
계정 리소스를 관리하기 위한 액세스 권한을 부여할 목록을 사용하여 역할 정의를 준비해야 합니다.
를 사용하여 az role definition list
Azure Cosmos DB 계정과 연결된 모든 역할 정의를 나열합니다. 출력을 검토하고 Cosmos DB 기본 제공 데이터 기여자라는 역할 정의를 찾습니다. 출력에는 속성에 있는 역할 정의 id
의 고유 식별자가 포함됩니다. 이 가이드의 뒷부분에 있는 할당 단계에서 사용하는 데 필요하기 때문에 이 값을 기록합니다.
az role definition list \
--name "Cosmos DB Operator"
[
{
"assignableScopes": [
"/"
],
"description": "Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.",
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa",
"name": "230815da-be43-4aae-9cb4-875f7bd000aa",
"permissions": [
{
"actions": [
"Microsoft.DocumentDb/databaseAccounts/*",
"Microsoft.Insights/alertRules/*",
"Microsoft.Authorization/*/read",
"Microsoft.ResourceHealth/availabilityStatuses/read",
"Microsoft.Resources/deployments/*",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Support/*",
"Microsoft.Network/virtualNetworks/subnets/joinViaServiceEndpoint/action"
],
"condition": null,
"conditionVersion": null,
"dataActions": [],
"notActions": [
"Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*",
"Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*",
"Microsoft.DocumentDB/databaseAccounts/regenerateKey/*",
"Microsoft.DocumentDB/databaseAccounts/listKeys/*",
"Microsoft.DocumentDB/databaseAccounts/listConnectionStrings/*",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions/delete",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/write",
"Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments/delete",
"Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/delete",
"Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write",
"Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/delete"
],
"notDataActions": []
}
],
"roleName": "Cosmos DB Operator",
"roleType": "BuiltInRole",
"type": "Microsoft.Authorization/roleDefinitions",
}
]
참고 항목
예를 들어 id
값은 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/roleDefinitions/230815da-be43-4aae-9cb4-875f7bd000aa
입니다. 이 예제에서는 가상 데이터를 사용하며 식별자는 이 예제와 다릅니다. 그러나 식별자(230815da-be43-4aae-9cb4-875f7bd000aa
)는 Azure의 모든 역할 정의에서 전역적으로 고유합니다.
Azure Portal에 로그인합니다(https://portal.azure.com).
전역 검색 창에 리소스 그룹을 입력합니다.
서비스 내에서 리소스 그룹을 선택합니다.
리소스 그룹 창에서 기존 리소스 그룹을 선택합니다.
참고 항목
이 예제 스크린샷에는 리소스 그룹이 포함되어
msdocs-identity-example
있습니다. 실제 리소스 그룹 이름은 다를 수 있습니다.리소스 그룹의 창 내에서 서비스 메뉴에서 액세스 제어(IAM)를 선택합니다.
액세스 제어(IAM) 창에서 역할을 선택합니다.
역할 섹션에서 검색 구 Cosmos DB를 사용하고 Cosmos DB 운영자 역할 정의를 찾습니다. 그런 다음 해당 정의와 연결된 보기 옵션을 선택합니다.
Cosmos DB 운영자 역할 정의 대화 상자에서 이 역할 정의의 일부로 할당된 작업을 관찰합니다.
Cosmos DB 연산자 역할 정의 대화 상자를 닫습니다.
Azure Cosmos DB 계정과 연결된 모든 역할 정의를 나열하는 데 사용합니다 Get-AzRoleDefinition
. 출력을 검토하고 Cosmos DB 기본 제공 데이터 기여자라는 역할 정의를 찾습니다. 출력에는 속성에 있는 역할 정의 Id
의 고유 식별자가 포함됩니다. 이 가이드의 뒷부분에 있는 할당 단계에서 사용하는 데 필요하기 때문에 이 값을 기록합니다.
$parameters = @{
Name = "Cosmos DB Operator"
}
Get-AzRoleDefinition @parameters
Name : Cosmos DB Operator
Id : 230815da-be43-4aae-9cb4-875f7bd000aa
IsCustom : False
Description : Lets you manage Azure Cosmos DB accounts, but not access data in them. Prevents access to account keys and connection strings.
Actions : {Microsoft.DocumentDb/databaseAccounts/*, Microsoft.Insights/alertRules/*, Microsoft.Authorization/*/read, Microsoft.ResourceHealth/availabilityStatuses/read…}
NotActions : {Microsoft.DocumentDB/databaseAccounts/dataTransferJobs/*, Microsoft.DocumentDB/databaseAccounts/readonlyKeys/*, Microsoft.DocumentDB/databaseAccounts/regenerateKey/*, Microsoft.DocumentDB/databaseAccounts/listKeys/*…}
DataActions : {}
NotDataActions : {}
AssignableScopes : {/}
참고 항목
예를 들어 Id
값은 230815da-be43-4aae-9cb4-875f7bd000aa
입니다. 식별자는 Azure의 모든 역할 정의에서 전역적으로 고유합니다.
ID에 역할 할당
이제 애플리케이션이 Azure Cosmos DB의 리소스에 액세스할 수 있도록 ID에 새로 정의된 역할을 할당합니다.
Important
이 할당 작업을 수행하려면 역할 기반 액세스 제어 권한을 부여하려는 ID의 고유 식별자가 이미 있어야 합니다.
현재 리소스 그룹에 대한 메타데이터를 다시 가져오는 데 사용합니다
az group show
.az group show \ --name "<name-of-existing-resource-group>"
이전 명령의 출력을 관찰합니다. 다음 단계에서 사용하는 데 필요하기 때문에 이 리소스 그룹의 속성 값을
id
기록합니다.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "location": "westus", "name": "msdocs-identity-example", "type": "Microsoft.Resources/resourceGroups" }
참고 항목
예를 들어
id
값은/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
입니다. 이 예제에서는 가상 데이터를 사용하며 식별자는 이 예제와 다릅니다. 출력의 잘린 예입니다.를 사용하여 새 역할을 할당합니다
az role assignment create
. 인수에 리소스--scope
그룹의 식별자, 인수에 대한-role
역할의 식별자 및 인수에 대한 ID--assignee
의 고유 식별자를 사용합니다.az role assignment create \ --assignee "<your-principal-identifier>" \ --role "subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0" \ --scope "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example"
참고 항목
이 예제 명령
scope
에서는 이전 단계의 예제에서 가상의 예제/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example
로 설정되었습니다. 리소스 그룹의 식별자는 이 예제와 구별됩니다. 또한role
가상으로 설정되었습니다/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
. 다시 말하지만 역할 식별자는 고유합니다.명령의 출력을 살펴봅니다. 출력에는 속성의 할당
id
에 대한 고유 식별자가 포함됩니다.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "name": "ffffffff-5555-6666-7777-aaaaaaaaaaaa", "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "resourceGroup": "msdocs-identity-example", "roleDefinitionId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleDefinitions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0", "scope": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example", "type": "Microsoft.Authorization/roleAssignments" }
참고 항목
이 예제
id
에서 속성은/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
또 다른 가상의 예입니다.이 단계를 반복하여 사용하려는 다른 ID에서 계정에 대한 액세스 권한을 부여합니다.
팁
원하는 만큼 ID에 대해 이러한 단계를 반복할 수 있습니다. 일반적으로 이러한 단계는 개발자가 사용자 ID를 사용하여 계정에 액세스할 수 있도록 허용하고 관리 ID를 사용하여 애플리케이션에 액세스할 수 있도록 하기 위해 적어도 반복됩니다.
새 Bicep 파일을 만들어 역할 할당을 정의합니다. 파일 컨트롤-평면-role-assignment.bicep의 이름을 지정합니다.
metadata description = 'Assign RBAC role for control plane access to Azure Cosmos DB.' @description('Id of the role definition to assign to the targeted principal in the context of the account.') param roleDefinitionId string @description('Id of the identity/principal to assign this role in the context of the account.') param identityId string resource assignment 'Microsoft.Authorization/roleAssignments@2022-04-01' = { name: guid(subscription().id, resourceGroup().id, roleDefinitionId, identityId) scope: resourceGroup() properties: { roleDefinitionId: roleDefinitionId principalId: identityId } }
control-plane-role-assignment
bicepparam
라는 새 Bicep 매개 변수 파일을 만듭니다. 이 매개 변수 파일에서; 이전에 기록된 역할 정의 식별자를 매개 변수에roleDefinitionId
할당하고 ID의 고유 식별자를 매개 변수에identityId
할당합니다.using './control-plane-role-assignment.bicep' param roleDefinitionId = '<id-of-new-role-definition>' param identityId = '<id-of-existing-identity>'
를 사용하여 이 Bicep 템플릿을 배포합니다
az deployment group create
.az deployment group create \ --resource-group "<name-of-existing-resource-group>" \ --parameters control-plane-role-assignment.bicepparam \ --template-file control-plane-role-assignment.bicep
이 단계를 반복하여 사용하려는 다른 ID에서 계정에 대한 액세스 권한을 부여합니다.
팁
원하는 만큼 ID에 대해 이러한 단계를 반복할 수 있습니다. 일반적으로 이러한 단계는 개발자가 사용자 ID를 사용하여 계정에 액세스할 수 있도록 허용하고 관리 ID를 사용하여 애플리케이션에 액세스할 수 있도록 하기 위해 적어도 반복됩니다.
액세스 제어(IAM) 창에서 추가 및 역할 할당 추가를 선택합니다.
역할 창에서 이 가이드의 앞부분에서 만든 Azure Cosmos DB 컨트롤 플레인 소유자 역할을 검색
Azure Cosmos DB
한 다음 선택합니다. 그런 후에 다음을 선택합니다.팁
필요에 따라 사용자 지정 역할만 포함하도록 역할 목록을 필터링할 수 있습니다.
구성원 창에서 구성원 선택 옵션을 선택합니다. 멤버 대화 상자에서 Azure Cosmos DB 계정에 대해 이 수준의 액세스 권한을 부여하려는 ID를 선택한 다음 선택 옵션을 사용하여 선택을 확인합니다.
참고 항목
이 스크린샷은
kai@adventure-works.com
의 보안 주체가 있는 "Kai Carter"라는 예제 사용자를 보여줍니다.구성원 창으로 돌아가서 선택한 멤버를 검토한 다음 검토 + 할당을 선택합니다.
검토 + 할당 창에서 새 역할 할당에 대해 지정된 옵션을 검토합니다. 마지막으로, 검토 + 할당을 선택합니다.
포털이 역할 할당 만들기를 완료할 때까지 기다립니다.
를 사용하여 새 역할을 할당합니다
New-AzRoleAssignment
. 매개 변수의 역할 이름과 매개 변수에RoleDefinitionName
대한 IDObjectId
의 고유 식별자를 사용합니다.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" ObjectId = "<your-principal-identifier>" RoleDefinitionName = "Azure Cosmos DB Control Plane Owner" } New-AzRoleAssignment @parameters
명령의 출력을 살펴봅니다. 출력에는 속성의 할당
RoleAssignmentId
에 대한 고유 식별자가 포함됩니다.RoleAssignmentName : ffffffff-5555-6666-7777-aaaaaaaaaaaa RoleAssignmentId : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0 Scope : /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example DisplayName : Kai Carter SignInName : <kai@adventure-works.com> RoleDefinitionName : Azure Cosmos DB Control Plane Owner RoleDefinitionId : e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
참고 항목
이 예제
RoleAssignmentId
에서 속성은/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/msdocs-identity-example/providers/Microsoft.Authorization/roleAssignments/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0
또 다른 가상의 예입니다. 이는 명확성을 위해 배포의 일반적인 출력의 하위 집합입니다.이 단계를 반복하여 사용하려는 다른 ID에서 계정에 대한 액세스 권한을 부여합니다.
팁
원하는 만큼 ID에 대해 이러한 단계를 반복할 수 있습니다. 일반적으로 이러한 단계는 개발자가 사용자 ID를 사용하여 계정에 액세스할 수 있도록 허용하고 관리 ID를 사용하여 애플리케이션에 액세스할 수 있도록 하기 위해 적어도 반복됩니다.
코드에서 컨트롤 플레인 액세스 유효성 검사
마지막으로 기본 프로그래밍 언어로 애플리케이션 코드 및 Azure Management SDK를 사용하여 액세스 권한을 올바르게 부여했는지 확인합니다.
using Azure.Identity;
using Azure.ResourceManager;
DefaultAzureCredential credential = new();
ArmClient client = new(credential);
Important
이 코드 샘플에서는 NuGet의 Azure.ResourceManager.CosmosDB
라이브러리 및 Azure.Identity
라이브러리를 사용합니다.