영어로 읽기

다음을 통해 공유


Azure Cosmos DB 계정에 대해 Microsoft Entra ID를 사용하여 역할 기반 액세스 제어 구성

적용 대상: NoSQL

참고

이 문서에서는 Azure Cosmos DB에서 데이터 평면 작업을 위한 역할 기반 액세스 제어에 대해 설명합니다. 관리 평면 작업을 사용하는 경우 해당 관리 평면 작업 문서에 적용되는 역할 기반 액세스 제어를 참조하세요.

Azure Cosmos DB에서 제공되는 기본 제공 역할 기반 액세스 제어 시스템을 통해 다음을 수행할 수 있습니다.

  • Microsoft Entra ID를 사용하여 데이터 요청을 인증합니다.
  • 세분화된 역할 기반 권한 모델을 사용하여 데이터 요청에 권한을 부여합니다.

개념

Azure Cosmos DB 데이터 평면 역할 기반 액세스 제어는 Azure 역할 기반 액세스 제어와 같은 다른 역할 기반 액세스 제어 시스템에서 일반적으로 발견되는 개념을 기반으로 합니다.

  • 권한 모델작업 집합으로 구성됩니다. 이러한 각 작업은 하나 이상의 데이터베이스 작업에 매핑됩니다. 일부 작업 예시에는 항목 읽기, 항목 쓰기, 쿼리 실행이 포함됩니다.
  • Azure Cosmos DB 사용자는 허용된 작업 목록을 포함하여 역할 정의를 만듭니다.
  • 역할 정의는 역할 할당을 통해 특정 Microsoft Entra ID에 할당됩니다. 역할 할당은 또한 역할 정의가 적용되는 범위를 정의합니다. 현재까지는 세 가지 범위가 지원됩니다.
    • Azure Cosmos DB 계정,
    • Azure Cosmos DB 데이터베이스,
    • Azure Cosmos DB 컨테이너.

역할 정의, 역할 할당 및 보안 주체를 비롯한 일반적인 역할 기반 액세스 제어 개념의 다이어그램.

권한 모델

중요

이 권한 모델은 데이터 읽기 및 쓰기와 관련된 데이터베이스 작업만 다룹니다. 다음과 같은 관리 리소스에 대한 모든 종류의 관리 작업은 다루지 않습니다.

  • 데이터베이스 만들기/바꾸기/삭제
  • 컨테이너 만들기/바꾸기/삭제
  • 컨테이너 처리량 읽기/바꾸기
  • 저장 프로시저 만들기/바꾸기/삭제/읽기
  • 트리거 만들기/바꾸기/삭제/읽기
  • 사용자 정의 함수 만들기/바꾸기/삭제/읽기

Microsoft Entra ID로 관리 작업을 인증하는 데는 Azure Cosmos DB 데이터 평면 SDK를 사용할 수 없습니다. 대신 다음 옵션 중 하나를 통해 Azure 역할 기반 액세스 제어를 사용해야 합니다.

데이터베이스 읽기 및 컨테이너 읽기는 메타데이터 요청으로 간주됩니다. 다음 섹션에 명시된 대로 이러한 작업에 대한 액세스 권한을 부여할 수 있습니다.

이 표에는 권한 모델에서 제공되는 모든 작업이 나열되어 있습니다.

이름 해당 데이터베이스 작업
Microsoft.DocumentDB/databaseAccounts/readMetadata 계정 메타데이터를 읽습니다. 자세한 내용은 메타데이터 요청을 참조하세요.
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/create 새 항목을 만듭니다.
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read 해당 ID 및 파티션 키로 개별 항목을 읽습니다(지점 읽기).
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/replace 기존 항목을 바꿉니다.
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/upsert 항목을 "Upsert"합니다. 이 작업은 항목이 아직 없는 경우 항목을 만들거나 항목이 있는 경우 대체합니다.
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/delete 항목을 삭제합니다.
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery SQL 쿼리를 실행합니다.
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/readChangeFeed 컨테이너의 변경 피드에서 읽습니다. SDK를 사용하여 SQL 쿼리를 실행합니다.
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeStoredProcedure 저장 프로시저를 실행합니다.
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/manageConflicts 다중 쓰기 지역 계정에 대한 충돌을 관리합니다. 즉, 항목을 나열하고 충돌 피드에서 삭제합니다.

참고

SDK를 통해 쿼리를 실행할 때 Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQueryMicrosoft.DocumentDB/databaseAccounts/sqlDatabases/containers/readChangeFeed 권한이 모두 필요합니다.

와일드카드는 컨테이너항목 수준 모두에서 지원됩니다.

  • Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*
  • Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*

메타데이터 요청

Azure Cosmos DB SDK는 초기화 중 읽기 전용 메타데이터 요청을 수행하고 특정 데이터 요청을 처리합니다. 이러한 요청은 다음과 같은 여러 구성 세부 정보를 페치합니다.

  • 계정을 사용할 수 있는 Azure 지역이 포함된 계정의 전역 구성.
  • 컨테이너의 파티션 키 또는 해당 인덱싱 정책.
  • 컨테이너 및 해당 주소를 구성하는 물리적 파티션 목록.

이것들은 계정에 저장된 데이터를 페치하지 않습니다.

권한 모델에 대해 최상의 투명성을 보장하기 위해 이러한 메타데이터 요청은 Microsoft.DocumentDB/databaseAccounts/readMetadata 작업으로 명시적으로 처리됩니다. 이 작업은 Azure Cosmos DB 계정이 Azure Cosmos DB SDK 중 하나를 통해 액세스되는 모든 경우에 허용됩니다. 계정, 데이터베이스 또는 컨테이너 등 Azure Cosmos DB 계층의 어느 수준에서든 역할 할당을 통해 할당될 수 있습니다.

Microsoft.DocumentDB/databaseAccounts/readMetadata 작업으로 허용되는 실제 메타데이터 요청은 작업이 할당된 범위에 따라 달라집니다.

범위 계정에서 허용되는 요청
계정 • 계정 아래의 데이터베이스 나열
• 계정의 각 데이터베이스에 대한 데이터베이스 범위에서 허용되는 작업
데이터베이스 • 데이터베이스 메타데이터 읽기
• 데이터베이스 아래의 컨테이너 나열
• 데이터베이스 아래의 각 컨테이너에 대한 컨테이너 범위에서 허용되는 작업
컨테이너 • 컨테이너 메타데이터 읽기
• 컨테이너 아래의 실제 파티션 나열
• 각 물리적 파티션의 주소 확인

중요

처리량은 이 작업의 메타데이터에 포함되지 않습니다.

기본 제공 역할 정의

Azure Cosmos DB는 두 가지 기본 제공 역할 정의를 노출합니다.

중요

여기서 역할 정의라는 용어는 Azure Cosmos DB 특정 역할 정의를 나타냅니다. 이는 Azure 역할 기반 액세스 제어 역할 정의와 다릅니다.

ID 이름 포함된 작업
00000000-0000-0000-0000-000000000001 Cosmos DB 기본 제공 데이터 판독기 Microsoft.DocumentDB/databaseAccounts/readMetadata
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/readChangeFeed
00000000-0000-0000-0000-000000000002 Cosmos DB 기본 제공 데이터 기여자 Microsoft.DocumentDB/databaseAccounts/readMetadata
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*
Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*

사용자 지정 역할 정의 만들기

사용자 지정 역할 정의를 만들 때는 다음을 제공해야 합니다.

  • Azure Cosmos DB 계정의 이름.
  • 계정이 포함된 리소스 그룹.
  • 역할 정의의 유형: CustomRole.
  • 역할 정의의 이름.
  • 역할에 허용할 작업 목록.
  • 역할 정의를 할당할 수 있는 하나 이상의 범위이며, 지원되는 범위는 다음과 같습니다.
    • /(계정 수준),
    • /dbs/<database-name>(데이터베이스 수준),
    • /dbs/<database-name>/colls/<container-name>(컨테이너 수준).

참고

설명된 작업은 다음에서 사용할 수 있습니다.

Azure PowerShell 사용

읽기 작업만 포함하는 MyReadOnlyRole라는 역할 만들기:

$resourceGroupName = "<myResourceGroup>"
$accountName = "<myCosmosAccount>"
New-AzCosmosDBSqlRoleDefinition -AccountName $accountName `
    -ResourceGroupName $resourceGroupName `
    -Type CustomRole -RoleName MyReadOnlyRole `
    -DataAction @( `
        'Microsoft.DocumentDB/databaseAccounts/readMetadata',
        'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read', `
        'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery', `
        'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/readChangeFeed') `
    -AssignableScope "/"

모든 작업을 포함하는 MyReadWriteRole라는 역할 만들기:

New-AzCosmosDBSqlRoleDefinition -AccountName $accountName `
    -ResourceGroupName $resourceGroupName `
    -Type CustomRole -RoleName MyReadWriteRole `
    -DataAction @( `
        'Microsoft.DocumentDB/databaseAccounts/readMetadata',
        'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*', `
        'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*') `
    -AssignableScope "/"

ID를 페치하기 위해 만든 역할 정의 나열:

Get-AzCosmosDBSqlRoleDefinition -AccountName $accountName `
    -ResourceGroupName $resourceGroupName
RoleName         : MyReadWriteRole
Id               : /subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.DocumentDB/databaseAcc
                   ounts/<myCosmosAccount>/sqlRoleDefinitions/<roleDefinitionId>
Type             : CustomRole
Permissions      : {Microsoft.Azure.Management.CosmosDB.Models.Permission}
AssignableScopes : {/subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.DocumentDB/databaseAc
                   counts/<myCosmosAccount>}

RoleName         : MyReadOnlyRole
Id               : /subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.DocumentDB/databaseAcc
                   ounts/<myCosmosAccount>/sqlRoleDefinitions/<roleDefinitionId>
Type             : CustomRole
Permissions      : {Microsoft.Azure.Management.CosmosDB.Models.Permission}
AssignableScopes : {/subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.DocumentDB/databaseAc
                   counts/<myCosmosAccount>}

Azure CLI 사용

role-definition-ro.json이라는 파일의 읽기 작업만 포함하는 MyReadOnlyRole이라는 역할을 만듭니다.

{
    "RoleName": "MyReadOnlyRole",
    "Type": "CustomRole",
    "AssignableScopes": ["/"],
    "Permissions": [{
        "DataActions": [
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/readChangeFeed"
        ]
    }]
}
resourceGroupName='<myResourceGroup>'
accountName='<myCosmosAccount>'
az cosmosdb sql role definition create --account-name $accountName --resource-group $resourceGroupName --body @role-definition-ro.json 

role-definition-rw.json이라는 파일의 모든 작업을 포함하는 MyReadWriteRole이라는 역할을 만듭니다.

{
    "RoleName": "MyReadWriteRole",
    "Type": "CustomRole",
    "AssignableScopes": ["/"],
    "Permissions": [{
        "DataActions": [
            "Microsoft.DocumentDB/databaseAccounts/readMetadata",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*",
            "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*"
        ]
    }]
}
az cosmosdb sql role definition create --account-name $accountName --resource-group $resourceGroupName --body @role-definition-rw.json 

ID를 페치하기 위해 만든 역할 정의 나열:

az cosmosdb sql role definition list --account-name $accountName --resource-group $resourceGroupName
[
  {
    "assignableScopes": [
      "/subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.DocumentDB/databaseAccounts/<myCosmosAccount>"
    ],
    "id": "/subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.DocumentDB/databaseAccounts/<myCosmosAccount>/sqlRoleDefinitions/<roleDefinitionId>",
    "name": "<roleDefinitionId>",
    "permissions": [
      {
        "dataActions": [
          "Microsoft.DocumentDB/databaseAccounts/readMetadata",
          "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/*",
          "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/*"
        ],
        "notDataActions": []
      }
    ],
    "resourceGroup": "<myResourceGroup>",
    "roleName": "MyReadWriteRole",
    "sqlRoleDefinitionGetResultsType": "CustomRole",
    "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions"
  },
  {
    "assignableScopes": [
      "/subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.DocumentDB/databaseAccounts/<myCosmosAccount>"
    ],
    "id": "/subscriptions/<mySubscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.DocumentDB/databaseAccounts/<myCosmosAccount>/sqlRoleDefinitions/<roleDefinitionId>",
    "name": "<roleDefinitionId>",
    "permissions": [
      {
        "dataActions": [
          "Microsoft.DocumentDB/databaseAccounts/readMetadata",
          "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/items/read",
          "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/executeQuery",
          "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/readChangeFeed"
        ],
        "notDataActions": []
      }
    ],
    "resourceGroup": "<myResourceGroup>",
    "roleName": "MyReadOnlyRole",
    "sqlRoleDefinitionGetResultsType": "CustomRole",
    "type": "Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions"
  }
]

Azure Resource Manager 템플릿 사용

Azure Resource Manager 템플릿을 사용하여 역할 정의를 만드는 참조 및 예제는 Microsoft.DocumentDB databaseAccounts/sqlRoleDefinitions를 참조하세요.

역할 할당 만들기

기본 제공 또는 사용자 지정 역할 정의를 Microsoft Entra ID와 연결할 수 있습니다. 역할 할당을 만들 때 다음을 제공해야 합니다.

  • Azure Cosmos DB 계정의 이름.

  • 계정이 포함된 리소스 그룹.

  • 할당할 역할 정의의 ID입니다.

  • 역할 정의를 할당할 ID의 보안 주체 ID입니다.

  • 역할 할당의 범위입니다. 지원되는 범위:

    • /(계정 수준)
    • /dbs/<database-name>(데이터베이스 수준)
    • /dbs/<database-name>/colls/<container-name>(컨테이너 수준)

    범위는 역할 정의의 할당 가능한 범위 중 하나의 하위 범위이거나 이와 일치해야 합니다.

참고

서비스 주체에 대한 역할 할당을 만들려면 Microsoft Entra ID 포털 블레이드의 엔터프라이즈 애플리케이션 섹션에 있는 개체 ID를 사용해야 합니다.

참고

설명된 작업은 다음에서 사용할 수 있습니다.

Azure PowerShell 사용

ID에 역할 할당:

$resourceGroupName = "<myResourceGroup>"
$accountName = "<myCosmosAccount>"
$readOnlyRoleDefinitionId = "<roleDefinitionId>" # as fetched above
# For Service Principals make sure to use the Object ID as found in the Enterprise applications section of the Azure Active Directory portal blade.
$principalId = "<aadPrincipalId>"
New-AzCosmosDBSqlRoleAssignment -AccountName $accountName `
    -ResourceGroupName $resourceGroupName `
    -RoleDefinitionId $readOnlyRoleDefinitionId `
    -Scope "/" `
    -PrincipalId $principalId

Azure CLI 사용

ID에 역할 할당:

resourceGroupName='<myResourceGroup>'
accountName='<myCosmosAccount>'
readOnlyRoleDefinitionId='<roleDefinitionId>' # as fetched above
# For Service Principals make sure to use the Object ID as found in the Enterprise applications section of the Azure Active Directory portal blade.
principalId='<aadPrincipalId>'
az cosmosdb sql role assignment create --account-name $accountName --resource-group $resourceGroupName --scope "/" --principal-id $principalId --role-definition-id $readOnlyRoleDefinitionId --principal-type "ServicePrincipal"

Bicep/Azure Resource Manager 템플릿 사용

Bicep 템플릿을 사용하는 기본 제공 할당의 경우:

resource sqlRoleAssignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2023-04-15' = {
  name: guid(<roleDefinitionId>, <aadPrincipalId>, <databaseAccountResourceId>)
  parent: databaseAccount
  properties:{
    principalId: <aadPrincipalId>
    roleDefinitionId: '/${subscription().id}/resourceGroups/<databaseAccountResourceGroup>/providers/Microsoft.DocumentDB/databaseAccounts/<myCosmosAccount>/sqlRoleDefinitions/<roleDefinitionId>'
    scope: <databaseAccountResourceId>
  }
}

Azure Resource Manager 템플릿을 사용하여 역할 할당을 만드는 참조 및 예제는 Microsoft.DocumentDB databaseAccounts/sqlRoleAssignments를 참조하세요.

Microsoft Entra ID를 사용하여 SDK 초기화

애플리케이션에서 Azure Cosmos DB 역할 기반 액세스 제어를 사용하려면 Azure Cosmos DB SDK를 초기화하는 방법을 업데이트해야 합니다. 계정의 기본 키를 전달하는 대신 TokenCredential 클래스의 인스턴스를 전달해야 합니다. 이 인스턴스는 사용하려는 ID를 대신하여 Microsoft Entra 토큰을 가져오는 데 필요한 컨텍스트를 Azure Cosmos DB SDK에 제공합니다.

TokenCredential 인스턴스를 만드는 방법은 이 문서의 범위를 벗어납니다. 사용하려는 Microsoft Entra ID 유형(사용자 계정, 서비스 주체, 그룹 등)에 따라 이러한 인스턴스를 만드는 방법은 여러 가지가 있습니다. 가장 중요한 것은 TokenCredential 인스턴스가 역할이 할당된 ID(보안 주체 ID)로 확인되어야 한다는 것입니다. 다음 위치에서 TokenCredential 클래스 만들기 예시를 찾아볼 수 있습니다.

다음 예제에서는 ClientSecretCredential 인스턴스에서 서비스 보안 주체를 사용합니다.

.NET에서

Azure Cosmos DB 역할 기반 액세스 제어는 현재 .NET SDK V3에서 지원됩니다.

TokenCredential servicePrincipal = new ClientSecretCredential(
    "<azure-ad-tenant-id>",
    "<client-application-id>",
    "<client-application-secret>");
CosmosClient client = new CosmosClient("<account-endpoint>", servicePrincipal);

Java

Azure Cosmos DB 역할 기반 액세스 제어는 현재 Java SDK V4에서 지원됩니다.

TokenCredential ServicePrincipal = new ClientSecretCredentialBuilder()
    .authorityHost("https://login.microsoftonline.com")
    .tenantId("<azure-ad-tenant-id>")
    .clientId("<client-application-id>")
    .clientSecret("<client-application-secret>")
    .build();
CosmosAsyncClient Client = new CosmosClientBuilder()
    .endpoint("<account-endpoint>")
    .credential(ServicePrincipal)
    .build();

JavaScript

Azure Cosmos DB 역할 기반 액세스 제어는 현재 JavaScript SDK V3에서 지원됩니다.

const servicePrincipal = new ClientSecretCredential(
    "<azure-ad-tenant-id>",
    "<client-application-id>",
    "<client-application-secret>");
const client = new CosmosClient({
    endpoint: "<account-endpoint>",
    aadCredentials: servicePrincipal
});

Python에서

Azure Cosmos DB 역할 기반 액세스 제어는 Python SDK 버전 4.3.0b4 이상에서 지원됩니다.

aad_credentials = ClientSecretCredential(
    tenant_id="<azure-ad-tenant-id>",
    client_id="<client-application-id>",
    client_secret="<client-application-secret>")
client = CosmosClient("<account-endpoint>", aad_credentials)

REST API에서 요청 인증

REST API 인증 헤더를 구성할 때 다음 예와 같이 type 매개 변수를 Microsoft Entra ID로 설정하고 해시 서명(sig)OAuth 토큰으로 설정합니다.

type=aad&ver=1.0&sig=<token-from-oauth>

데이터 탐색기 사용

Data Explorer 내에서 Azure Cosmos DB 역할 기반 액세스 제어(Azure Portal 또는 https://cosmos.azure.com에 표시됨) 사용은 Entra ID RBAC 사용 설정에 따라 결정됩니다. 데이터 탐색기 인터페이스의 오른쪽 상단에 있는 "휠" 아이콘을 통해 이 설정에 액세스할 수 있습니다.

설정에는 세 가지 가능한 값이 있습니다.

  • 자동(기본값): 이 모드에서는 계정이 키 사용을 사용하지 않도록 설정한 경우 역할 기반 액세스 제어가 자동으로 사용됩니다. 그렇지 않으면 데이터 탐색기는 데이터 요청에 계정 키를 사용합니다.

  • True: 이 모드에서는 데이터 탐색기 데이터 요청에 역할 기반 액세스가 항상 사용됩니다. 역할 기반 액세스에 대해 계정이 사용하도록 설정되지 않은 경우 요청이 실패합니다.

  • False: 이 모드에서는 데이터 탐색기 데이터 요청에 계정 키가 항상 사용됩니다. 계정에서 키 사용을 사용하지 않도록 설정한 경우 요청이 실패합니다.

Azure Portal 데이터 탐색기에서 역할 기반 액세스를 사용하도록 설정하는 모드를 사용하는 경우 데이터를 요청하기 전에 Entra ID RBAC에 로그인 단추(데이터 탐색기 명령 모음에 있음)를 클릭해야 합니다. cosmos.azure.com에서 Cosmos Explorer를 사용하는 경우에는 필요하지 않습니다. 데이터 액세스를 사용하도록 설정하려면 로그인한 ID에 적절한 역할 정의가 할당되었는지 확인하세요.

또한 계정 키를 사용하는 모드로 모드를 변경하면 로그인된 ID를 대신하여 기본 키를 가져오는 요청이 트리거될 수 있습니다.

참고

이전에는 역할 기반 액세스가 https://cosmos.azure.com/?feature.enableAadDataPlane=true를 사용하는 Cosmos Explorer에서만 지원되었습니다. 이는 여전히 지원되며 Entra ID RBAC 사용 설정 값을 재정의합니다. 이 쿼리 매개 변수를 사용하는 것은 위에서 언급한 'True' 모드를 사용하는 것과 동등합니다.

데이터 요청 감사

진단 로그는 Azure Cosmos DB 역할 기반 액세스 제어를 사용할 때 각 데이터 작업에 대한 ID 및 권한 부여 정보로 강화됩니다. 이 기능 강화를 통해 자세한 감사를 수행하고 Azure Cosmos DB 계정으로 전송된 모든 데이터 요청에 사용되는 Microsoft Entra ID를 검색할 수 있습니다.

이 추가 정보는 DataPlaneRequests 로그 범주에 들어가며, 두 가지 추가 열로 구성됩니다.

  • aadPrincipalId_g는 요청을 인증하는 데 사용된 Microsoft Entra ID의 주체 ID를 표시합니다.
  • aadAppliedRoleAssignmentId_g는 요청을 인증할 때 적용된 역할 할당을 보여줍니다.

유일한 인증 방법으로 역할 기반 액세스 제어 적용

클라이언트가 역할 기반 액세스 제어를 통해서만 Azure Cosmos DB에 연결하도록 하려는 상황에서는 계정의 기본/보조 키를 사용하지 않도록 설정할 수 있습니다. 이렇게 하면 기본/보조 키 또는 리소스 토큰을 사용하는 들어오는 모든 요청이 적극적으로 거부됩니다.

Azure 리소스 관리자 템플릿 사용

Azure Resource Manager 템플릿을 사용하여 Azure Cosmos DB 계정을 만들거나 업데이트할 때 disableLocalAuth 속성을 true로 설정합니다.

"resources": [
    {
        "type": " Microsoft.DocumentDB/databaseAccounts",
        "properties": {
            "disableLocalAuth": true,
            // ...
        },
        // ...
    },
    // ...
 ]

제한

  • Azure Cosmos DB 계정당 최대 100개의 역할 정의와 2,000개의 역할 할당을 만들 수 있습니다.
  • Azure Cosmos DB 계정과 동일한 Microsoft Entra 테넌트에 속하는 Microsoft Entra ID에만 역할 정의를 할당할 수 있습니다.
  • Microsoft Entra 그룹 확인은 현재 200개 이상의 그룹에 속한 ID에 대해 지원되지 않습니다.
  • Microsoft Entra 토큰은 현재 Azure Cosmos DB 서비스로 전송된 각 개별 요청과 함께 헤더로 전달되어 전체 페이로드 크기를 늘립니다.

자주 묻는 질문

이 섹션에는 역할 기반 액세스 제어 및 Azure Cosmos DB에 대한 질문과 대답이 포함되어 있습니다.

데이터 평면 역할 기반 액세스 제어를 지원하는 Azure Cosmos DB API는 무엇인가요?

현재는 NoSQL API만 지원됩니다.

Azure Portal에서 역할 정의 및 역할 할당을 관리할 수 있나요?

역할 관리에 대한 Azure Portal 지원은 아직 사용할 수 없습니다.

Azure Cosmos DB API for NoSQL에서 역할 기반 액세스 제어를 지원하는 SDK는 무엇인가요?

.NET V3, Java V4, JavaScript V3Python V4.3+ SDK는 현재 지원됩니다.

Microsoft Entra 토큰이 만료되면 Azure Cosmos DB SDK에 의해 자동으로 토큰이 갱신되나요?

예.

역할 기반 액세스 제어를 사용할 때 계정의 기본/보조 키를 사용하지 않도록 설정할 수 있나요?

예, 유일한 인증 방법으로 역할 기반 액세스 제어 적용을 참조하세요.

다음 단계