다음을 통해 공유


NoSQL용 Azure Cosmos DB에서 컨트롤 플레인 역할 기반 액세스 제어 사용

적용 대상: NoSQL

배포 가이드 시퀀스의 현재 위치('역할 기반 액세스 제어')를 다이어그램으로 표시합니다.

개요, 개념, 준비, 역할 기반 액세스 제어, 네트워크 및 참조 순서대로 이러한 위치를 포함하는 배포 가이드 시퀀스의 다이어그램 '역할 기반 액세스 제어' 위치가 현재 강조 표시되어 있습니다.

이 문서에서는 NoSQL용 Azure Cosmos DB 계정 및 해당 리소스를 관리하기 위한 ID 액세스 권한을 부여하는 단계를 안내합니다.

Important

이 문서의 단계에서는 계정 계층 구조에 있는 모든 리소스의 계정 자체에 대한 작업을 수행하기 위한 컨트롤 플레인 액세스만 다룹니다. 항목을 관리하고 데이터 평면에 대한 쿼리를 실행하는 방법을 알아보려면 데이터 평면 역할 기반 액세스 권한 부여를 참조하세요.

필수 조건

  • 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
  • 기존 Azure Cosmos DB 계정.
  • Microsoft Entra ID에 하나 이상의 기존 ID가 있습니다.

역할 정의 준비

먼저 Azure Cosmos DB에서 actions 계정 리소스를 관리하기 위한 액세스 권한을 부여할 목록을 사용하여 역할 정의를 준비해야 합니다.

를 사용하여 az role definition listAzure 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의 모든 역할 정의에서 전역적으로 고유합니다.

  1. Azure Portal에 로그인합니다(https://portal.azure.com).

  2. 전역 검색 창에 리소스 그룹을 입력합니다.

    Azure Portal에서 전역 검색 창의 스크린샷.

  3. 서비스 내에서 리소스 그룹을 선택합니다.

    검색 메뉴에서 선택한 '리소스 그룹' 옵션의 스크린샷.

  4. 리소스 그룹 창에서 기존 리소스 그룹을 선택합니다.

    구독에 대한 리소스 그룹 목록에 있는 기존 리소스 그룹의 스크린샷

    참고 항목

    이 예제 스크린샷에는 리소스 그룹이 포함되어 msdocs-identity-example 있습니다. 실제 리소스 그룹 이름은 다를 수 있습니다.

  5. 리소스 그룹의 창 내에서 서비스 메뉴에서 액세스 제어(IAM)를 선택합니다.

    리소스 그룹에 대한 서비스 메뉴의 '액세스 제어(IAM)' 옵션 스크린샷

  6. 액세스 제어(IAM) 창에서 역할을 선택합니다.

    '액세스 제어(IAM)' 창의 '역할' 옵션 스크린샷

  7. 역할 섹션에서 검색 구 Cosmos DB를 사용하고 Cosmos DB 운영자 역할 정의를 찾습니다. 그런 다음 해당 정의와 연결된 보기 옵션을 선택합니다.

    타이틀에 'Cosmos DB'가 있는 정의만 포함하도록 필터링된 현재 할당 가능한 범위의 역할 정의 목록 스크린샷

  8. Cosmos DB 운영자 역할 정의 대화 상자에서 이 역할 정의의 일부로 할당된 작업을 관찰합니다.

    기본 제공 역할 정의에 대한 세부 정보가 포함된 'Cosmos DB 연산자' 대화 상자의 스크린샷

  9. 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의 고유 식별자가 이미 있어야 합니다.

  1. 현재 리소스 그룹에 대한 메타데이터를 다시 가져오는 데 사용합니다 az group show .

    az group show \
        --name "<name-of-existing-resource-group>"
    
  2. 이전 명령의 출력을 관찰합니다. 다음 단계에서 사용하는 데 필요하기 때문에 이 리소스 그룹의 속성 값을 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입니다. 이 예제에서는 가상 데이터를 사용하며 식별자는 이 예제와 다릅니다. 출력의 잘린 예입니다.

  3. 를 사용하여 새 역할을 할당합니다 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. 다시 말하지만 역할 식별자는 고유합니다.

  4. 명령의 출력을 살펴봅니다. 출력에는 속성의 할당 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 또 다른 가상의 예입니다.

  5. 이 단계를 반복하여 사용하려는 다른 ID에서 계정에 대한 액세스 권한을 부여합니다.

    원하는 만큼 ID에 대해 이러한 단계를 반복할 수 있습니다. 일반적으로 이러한 단계는 개발자가 사용자 ID를 사용하여 계정에 액세스할 수 있도록 허용하고 관리 ID를 사용하여 애플리케이션에 액세스할 수 있도록 하기 위해 적어도 반복됩니다.

  1. 새 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
      }
    }
    
  2. control-plane-role-assignmentbicepparam라는 새 Bicep 매개 변수 파일을 만듭니다. 이 매개 변수 파일에서; 이전에 기록된 역할 정의 식별자를 매개 변수에 roleDefinitionId 할당하고 ID의 고유 식별자를 매개 변수에 identityId 할당합니다.

    using './control-plane-role-assignment.bicep'
    
    param roleDefinitionId = '<id-of-new-role-definition>'
    param identityId = '<id-of-existing-identity>'
    
  3. 를 사용하여 이 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
    
  4. 이 단계를 반복하여 사용하려는 다른 ID에서 계정에 대한 액세스 권한을 부여합니다.

    원하는 만큼 ID에 대해 이러한 단계를 반복할 수 있습니다. 일반적으로 이러한 단계는 개발자가 사용자 ID를 사용하여 계정에 액세스할 수 있도록 허용하고 관리 ID를 사용하여 애플리케이션에 액세스할 수 있도록 하기 위해 적어도 반복됩니다.

  1. 액세스 제어(IAM) 창에서 추가역할 할당 추가를 선택합니다.

    '추가' 옵션에 대한 '액세스 제어(IAM)' 메뉴의 '역할 할당 추가' 옵션 스크린샷

  2. 역할 창에서 이 가이드의 앞부분에서 만든 Azure Cosmos DB 컨트롤 플레인 소유자 역할을 검색 Azure Cosmos DB 한 다음 선택합니다. 그런 후에 다음을 선택합니다.

    역할 할당을 추가하기 위한 '역할' 창의 스크린샷

    필요에 따라 사용자 지정 역할만 포함하도록 역할 목록을 필터링할 수 있습니다.

  3. 구성원 창에서 구성원 선택 옵션을 선택합니다. 멤버 대화 상자에서 Azure Cosmos DB 계정에 대해 이 수준의 액세스 권한을 부여하려는 ID를 선택한 다음 선택 옵션을 사용하여 선택을 확인합니다.

    역할 할당을 추가하기 위한 '멤버' 창의 스크린샷.

    역할 할당을 추가하기 위한 ID 선택 대화 상자의 스크린샷

    참고 항목

    이 스크린샷은 kai@adventure-works.com의 보안 주체가 있는 "Kai Carter"라는 예제 사용자를 보여줍니다.

  4. 구성원 창으로 돌아가서 선택한 멤버를 검토한 다음 검토 + 할당을 선택합니다.

    역할 할당에 대해 선택한 ID가 있는 '멤버' 창의 스크린샷

  5. 검토 + 할당 창에서 새 역할 할당에 대해 지정된 옵션을 검토합니다. 마지막으로, 검토 + 할당을 선택합니다.

    역할 할당에 대한 '검토 + 만들기' 창의 스크린샷

  6. 포털이 역할 할당 만들기를 완료할 때까지 기다립니다.

  1. 를 사용하여 새 역할을 할당합니다 New-AzRoleAssignment. 매개 변수의 역할 이름과 매개 변수에 RoleDefinitionName 대한 ID ObjectId 의 고유 식별자를 사용합니다.

    $parameters = @{
        ResourceGroupName = "<name-of-existing-resource-group>"
        ObjectId = "<your-principal-identifier>"
        RoleDefinitionName = "Azure Cosmos DB Control Plane Owner"
    }
    New-AzRoleAssignment @parameters
    
  2. 명령의 출력을 살펴봅니다. 출력에는 속성의 할당 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 또 다른 가상의 예입니다. 이는 명확성을 위해 배포의 일반적인 출력의 하위 집합입니다.

  3. 이 단계를 반복하여 사용하려는 다른 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 라이브러리를 사용합니다.

다음 단계