Azure Cosmos DB for Table에서 역할 기반 액세스 제어 사용(미리 보기)
적용 대상: 테이블
개요, 개념, 준비, 역할 기반 액세스 제어 및 참조 순서대로 이러한 위치를 포함하는 배포 가이드 시퀀스의 다이어그램. '역할 기반 액세스 제어' 위치가 현재 강조 표시되어 있습니다.
이 문서에서는 Azure Cosmos DB for Table 계정의 데이터를 관리하기 위한 ID 액세스 권한을 부여하는 단계를 안내합니다. 이 문서의 단계에서는 개별 항목에 대한 작업을 수행하고 쿼리를 실행하기 위한 데이터 평면 액세스만 다룹니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- 기존 Azure Cosmos DB for Table 계정입니다.
- 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 Cosmos DB for Table에서 dataActions
데이터를 읽고 쿼리하고 관리할 수 있는 액세스 권한을 부여하는 목록을 사용하여 역할 정의를 준비해야 합니다.
먼저 기존 Azure Cosmos DB for Table 계정의 리소스 식별자를 가져와 az cosmsodb show
변수에 저장합니다. 그런 다음 , 를 사용하여 az rest
Azure Cosmos DB for Table 계정과 연결된 모든 역할 정의를 나열합니다. 마지막으로 출력을 검토하고 Cosmos DB 기본 제공 데이터 기여자라는 역할 정의를 찾습니다. 출력에는 속성에 있는 역할 정의 id
의 고유 식별자가 포함됩니다. 이 가이드의 뒷부분에 있는 할당 단계에서 사용하는 데 필요하기 때문에 이 값을 기록합니다.
resourceId=$( \
az cosmosdb show \
--resource-group "<name-of-existing-resource-group>" \
--name "<name-of-existing-table-account>" \
--query "id" \
--output tsv \
)
az rest \
--method "GET" \
--url $resourceId/tableRoleDefinitions?api-version=2023-04-15
[
...,
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/tableRoleDefinitions/00000000-0000-0000-0000-000000000002",
"name": "00000000-0000-0000-0000-000000000002",
"properties": {
"assignableScopes": [
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
],
"permissions": [
{
"dataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/tables/*",
"Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
],
"notDataActions": []
}
],
"roleName": "Cosmos DB Built-in Data Contributor",
"type": "BuiltInRole"
},
"type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions"
}
...
]
참고 항목
예를 들어 id
값은 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/tableRoleDefinitions/00000000-0000-0000-0000-000000000002
입니다. 이 예제에서는 가상 데이터를 사용하며 식별자는 이 예제와 다릅니다. 이 예제 출력은 잘립니다.
기존 Azure Cosmos DB for Table 계정의 리소스 식별자를 가져와 변수에 저장하는 데 사용합니다 Get-AzCosmosDBAccount
. 그런 다음 Azure Invoke-AzRestMethod
Cosmos DB for Table 계정과 연결된 모든 역할 정의를 나열합니다. 출력을 검토하고 Cosmos DB 기본 제공 데이터 기여자라는 역할 정의를 찾습니다. 출력에는 속성에 있는 역할 정의 Id
의 고유 식별자가 포함됩니다. 이 가이드의 뒷부분에 있는 할당 단계에서 사용하는 데 필요하기 때문에 이 값을 기록합니다.
$parameters = @{
ResourceGroupName = "<name-of-existing-resource-group>"
Name = "<name-of-existing-table-account>"
}
$resourceId = (
Get-AzCosmosDBAccount @parameters |
Select-Object -Property Id -First 1
).Id
$parameters = @{
Path = "$resourceId/tableRoleDefinitions?api-version=2023-04-15"
Method = "GET"
}
Invoke-AzRestMethod @parameters
StatusCode : 200
Content : {
"value": [
...,
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/tableRoleDefinitions/00000000-0000-0000-0000-000000000002",
"name": "00000000-0000-0000-0000-000000000002",
"properties": {
"assignableScopes": [
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql"
],
"permissions": [
{
"dataActions": [
"Microsoft.DocumentDB/databaseAccounts/readMetadata",
"Microsoft.DocumentDB/databaseAccounts/tables/*",
"Microsoft.DocumentDB/databaseAccounts/tables/containers/entities/*"
],
"notDataActions": []
}
],
"roleName": "Cosmos DB Built-in Data Contributor",
"type": "BuiltInRole"
},
"type": "Microsoft.DocumentDB/databaseAccounts/tableRoleDefinitions"
}
...
]
}
...
참고 항목
예를 들어 Id
값은 /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql/tableRoleDefinitions/00000000-0000-0000-0000-000000000002
입니다. 이 예제에서는 가상 데이터를 사용하며 식별자는 이 예제와 다릅니다. 이 예제 출력은 잘립니다.
ID에 역할 할당
이제 애플리케이션이 Azure Cosmos DB for Table의 데이터에 액세스할 수 있도록 ID에 새로 정의된 역할을 할당합니다.
Important
이 할당 작업을 수행하려면 역할 기반 액세스 제어 권한을 부여하려는 ID의 고유 식별자가 있어야 합니다. ID에 대한 고유 식별자가 없는 경우 관리 ID 만들기의 지침을 따르거나 로그인한 ID 가이드를 가져옵니다.
현재 계정에 대한 고유 식별자를 가져오는 데 사용합니다
az cosmosdb show
.az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-resource-group>" \ --query "{id:id}"
이전 명령의 출력을 관찰합니다. 다음 단계에서 사용해야 하며 이 계정의
id
속성 값을 기록합니다.{ "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql" }
참고 항목
예를 들어
id
값은/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
입니다. 이 예제에서는 가상 데이터를 사용하며 식별자는 이 예제와 다릅니다.role-assignment.json 새 JSON 파일을 만듭니다. JSON 파일에서 ID에 대한 고유 식별자와 계정 리소스에 대한 고유 식별자를 추가합니다.
{ "properties": { "roleDefinitionId": "<account-resource-id>/tableRoleDefinitions/d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4", "scope": "<account-resource-id>", "principalId": "<id-of-existing-identity>" } }
참고 항목
이 예제에서 지정한 고유 GUID는 .입니다
d3d3d3d3-eeee-ffff-aaaa-b4b4b4b4b4b4
. 이전에 사용자 고유의 역할 정의에 사용한 고유 GUID를 사용할 수 있습니다.이제 HTTP
PUT
요청을 실행하기 위해 함께 역할az cosmosdb show
az rest
할당을 만들거나 업데이트합니다. 이 요청의 일부로 역할 할당에 대한 고유한 GUID를 지정합니다.resourceId=$( \ az cosmosdb show \ --resource-group "<name-of-existing-resource-group>" \ --name "<name-of-existing-table-account>" \ --query "id" \ --output tsv \ ) az rest \ --method "PUT" \ --url $resourceId/tableRoleAssignments/e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5?api-version=2023-04-15 \ --body @role-assignment.json
참고 항목
이 예제에서 지정한 고유 GUID는 .입니다
e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
. 고유한 역할 할당에 대해 고유한 GUID를 지정할 수 있습니다.
ID에 역할을 할당하는 다른 Bicep 파일을 만듭니다. 이 파일 의 이름을 data-plane-role-assignment.bicep으로 지정합니다.
metadata description = 'Assign RBAC role for data plane access to Azure Cosmos DB for Table.' @description('Name of the Azure Cosmos DB for Table account.') param accountName string @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 account 'Microsoft.DocumentDB/databaseAccounts@2023-04-15' existing = { name: accountName } resource assignment 'Microsoft.DocumentDB/databaseAccounts/tableRoleAssignments@2023-04-15' = { name: guid(roleDefinitionId, identityId, account.id) parent: account properties: { principalId: identityId roleDefinitionId: roleDefinitionId scope: account.id } } output id string = assignment.id
라는 새 Bicep 매개 변수 파일을 만듭니다
data-plane-role-assignment.bicepparam
. 이 매개 변수 파일에서; 기존 Azure Cosmos DB for Table 계정accountName
의 이름을 매개 변수에 할당하고, 이전에 기록된 역할 정의 식별자를roleDefinitionId
매개 변수에 할당하고, ID의 고유 식별자를 매개 변수에identityId
할당합니다.using './data-plane-role-assignment.bicep' param accountName = '<name-of-existing-table-account>' 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 data-plane-role-assignment.bicepparam \ --template-file data-plane-role-assignment.bicep
이 단계를 반복하여 사용하려는 다른 ID에서 계정에 대한 액세스 권한을 부여합니다.
팁
원하는 만큼 ID에 대해 이러한 단계를 반복할 수 있습니다. 일반적으로 이러한 단계는 개발자가 사용자 ID를 사용하여 계정에 액세스할 수 있도록 허용하고 관리 ID를 사용하여 애플리케이션에 액세스할 수 있도록 하기 위해 적어도 반복됩니다.
'Get-AzCosmosDBAccount를 사용하여 현재 계정에 대한 고유 식별자를 가져옵니다.
$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-nosql-account>" } Get-AzCosmosDBAccount @parameters | Select -Property Id
이전 명령의 출력을 관찰합니다. 다음 단계에서 사용해야 하며 이 계정의
Id
속성 값을 기록합니다.Id -- /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
참고 항목
예를 들어
Id
값은/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/msdocs-identity-example/providers/Microsoft.DocumentDB/databaseAccounts/msdocs-identity-example-nosql
입니다. 이 예제에서는 가상 데이터를 사용하며 식별자는 이 예제와 다릅니다.이제 HTTP
PUT
요청을 실행하기 위해 함께 역할Get-AzCosmosDBAccount
Invoke-AzRestMethod
할당을 만들거나 업데이트합니다. 이 요청의 일부로 역할 할당에 대한 고유한 GUID를 지정합니다. 마지막으로 ID에 대한 고유 식별자를 지정하는 리소스 할당 페이로드를 만듭니다.$parameters = @{ ResourceGroupName = "<name-of-existing-resource-group>" Name = "<name-of-existing-table-account>" } $resourceId = ( Get-AzCosmosDBAccount @parameters | Select-Object -Property Id -First 1 ).Id $payload = @{ properties = @{ roleDefinitionId = "$resourceId/tableRoleDefinitions/00000000-0000-0000-0000-000000000002" scope = "$resourceId" principalId = "<id-of-existing-identity>" } } $parameters = @{ Path = "$resourceId/tableRoleAssignments/e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5?api-version=2023-04-15" Method = "PUT" Payload = $payload | ConvertTo-Json -Depth 2 } Invoke-AzRestMethod @parameters
참고 항목
이 예제에서 지정한 고유 GUID는 .입니다
e4e4e4e4-ffff-aaaa-bbbb-c5c5c5c5c5c5
. 고유한 역할 할당에 대해 고유한 GUID를 지정할 수 있습니다.
코드에서 데이터 평면 액세스 유효성 검사
마지막으로 기본 프로그래밍 언어로 애플리케이션 코드 및 Azure SDK를 사용하여 액세스 권한을 올바르게 부여했는지 확인합니다.
using Azure.Identity;
using Azure.Data.Tables;
string endpoint = "<account-endpoint>";
DefaultAzureCredential credential = new();
TableServiceClient client = new(
endpoint: new Uri(endpoint),
tokenCredential: credential
);
TableClient table = client.GetTableClient(
tableName: "<name-of-table>"
);
Important
이 코드 샘플에서는 NuGet의 Azure.Data.Tables
라이브러리 및 Azure.Identity
라이브러리를 사용합니다.
Warning
사용자 할당 관리 ID를 사용하는 경우 자격 증명 개체를 만드는 과정의 일부로 관리 ID의 고유 식별자를 지정해야 합니다.