Azure 데이터 탐색기는 로그 및 원격 분석 데이터에 사용 가능한 빠르고 확장성이 우수한 데이터 탐색 서비스입니다. 이 문서에서는 C#, Python 또는 ARM(Azure Resource Manager) 템플릿을 사용하여 Azure Data Explorer에 대한 데이터베이스 보안 주체를 추가하는 방법을 알아봅니다.
전제 조건은 주체를 추가하는 데 사용되는 방법에 따라 달라집니다. 원하는 방법에 대한 관련 탭을 선택합니다.
다음 코드를 실행하여 데이터베이스 주체를 추가합니다.
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, subscriptionId);
var resourceGroupName = "testrg";
//The cluster that is created as part of the Prerequisites
var clusterName = "mykustocluster";
var databaseName = "mykustodatabase";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(clusterName)).Value;
var database = (await cluster.GetKustoDatabaseAsync(databaseName)).Value;
var databasePrincipalAssignments = database.GetKustoDatabasePrincipalAssignments();
var databasePrincipalAssignmentName = "mykustodatabaseprincipalassignment";
var principalId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //User email, application ID, or security group name
var role = KustoDatabasePrincipalRole.Admin; //Admin, Ingestor, Monitor, User, UnrestrictedViewers, Viewer
var tenantIdForPrincipal = new Guid("xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx");
var principalType = KustoPrincipalAssignmentType.App; //User, App, or Group
var databasePrincipalAssignmentData = new KustoDatabasePrincipalAssignmentData
{
DatabasePrincipalId = principalId, Role = role, PrincipalType = principalType, TenantId = tenantIdForPrincipal
};
await databasePrincipalAssignments.CreateOrUpdateAsync(
WaitUntil.Completed, databasePrincipalAssignmentName, databasePrincipalAssignmentData
);
|
설정 |
제안된 값 |
필드 설명 |
| tenantId |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
테넌트 ID 디렉터리 ID라고도 합니다. |
| subscriptionId |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
리소스를 만드는 데 사용하는 구독 ID입니다. |
| clientId |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
테넌트의 리소스에 액세스할 수 있는 애플리케이션의 클라이언트 ID입니다. |
| clientSecret |
PlaceholderClientSecret |
테넌트의 리소스에 액세스할 수 있는 애플리케이션의 클라이언트 암호입니다. |
| resourceGroupName |
testrg |
클러스터가 포함된 리소스 그룹의 이름입니다. |
| 클러스터 이름 |
mykustocluster |
클러스터의 이름입니다. |
| databaseName |
mykustodatabase |
데이터베이스의 이름입니다. |
| 데이터베이스_주체할당_이름 |
mykustodatabaseprincipalassignment |
데이터베이스 주체 리소스의 이름입니다. |
| principalId |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
보안 주체 ID는 사용자 이메일, 애플리케이션 ID 또는 보안 그룹 이름이 될 수 있습니다. |
| 역할 |
관리자 |
'Admin', 'Ingestor', 'Monitor', 'User', 'UnrestrictedViewers', 'Viewer'로 설정될 수 있는 데이터베이스 책임 주체의 역할입니다. |
| tenantIdForPrincipal |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
사용자의 테넌트 ID입니다. |
| 주체 유형 |
앱 |
'User', 'App' 또는 'Group'일 수 있는 보안 주체의 형식입니다. |
다음 예제에서는 프로그래밍 방식으로 데이터베이스 보안 주체를 추가하는 방법을 보여 줍니다.
from azure.mgmt.kusto import KustoManagementClient
from azure.mgmt.kusto.models import DatabasePrincipalAssignment
from azure.common.credentials import ServicePrincipalCredentials
#Directory (tenant) ID
tenant_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Application ID
client_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
#Client Secret
client_secret = "xxxxxxxxxxxxxx"
subscription_id = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"
credentials = ServicePrincipalCredentials(
client_id=client_id,
secret=client_secret,
tenant=tenant_id
)
kusto_management_client = KustoManagementClient(credentials, subscription_id)
resource_group_name = "testrg"
#The cluster and database that is created as part of the Prerequisites
cluster_name = "mykustocluster"
database_name = "mykustodatabase"
principal_assignment_name = "clusterPrincipalAssignment1"
#User email, application ID, or security group name
principal_id = "xxxxxxxx"
#AllDatabasesAdmin, AllDatabasesMonitor or AllDatabasesViewer
role = "AllDatabasesAdmin"
tenant_id_for_principal = tenantId
#User, App, or Group
principal_type = "App"
#Returns an instance of LROPoller, check https://learn.microsoft.com/python/api/msrest/msrest.polling.lropoller?view=azure-python
poller = kusto_management_client.database_principal_assignments.create_or_update(resource_group_name=resource_group_name, cluster_name=cluster_name, database_name=database_name, principal_assignment_name= principal_assignment_name, parameters=DatabasePrincipalAssignment(principal_id=principal_id, role=role, tenant_id=tenant_id_for_principal, principal_type=principal_type))
|
설정 |
제안된 값 |
필드 설명 |
| 임차인_아이디 |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
테넌트 ID 디렉터리 ID라고도 합니다. |
| subscription_id |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
리소스를 만드는 데 사용하는 구독 ID입니다. |
| 클라이언트_아이디 |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
테넌트의 리소스에 액세스할 수 있는 애플리케이션의 클라이언트 ID입니다. |
| 클라이언트 비밀번호 |
xxxxxxxxxxxxxxxxxx |
테넌트의 리소스에 액세스할 수 있는 애플리케이션의 클라이언트 암호입니다. |
| 자원_그룹_이름 |
testrg |
클러스터가 포함된 리소스 그룹의 이름입니다. |
| 클러스터 이름 |
mykustocluster |
클러스터의 이름입니다. |
| 데이터베이스_이름 |
mykustodatabase |
데이터베이스의 이름입니다. |
| principal_assignment_name |
databasePrincipalAssignment1 |
데이터베이스 주요 자원의 이름입니다. |
| principal_id |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
보안 주체 ID는 사용자 이메일, 애플리케이션 ID 또는 보안 그룹 이름이 될 수 있습니다. |
| 역할 |
관리자 |
'Admin', 'Ingestor', 'Monitor', 'User', 'UnrestrictedViewers', 'Viewer'일 수 있는 데이터베이스 보안 주체의 역할입니다. |
| 테넌트_ID_주체용 |
xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx |
사용자의 테넌트 ID입니다. |
| principal_type |
앱 |
'User', 'App' 또는 'Group'일 수 있는 보안 주체의 형식입니다. |
다음 예제에서는 데이터베이스 주체를 추가하기 위한 Azure Resource Manager 템플릿을 보여줍니다. 양식을 사용하여 Azure Portal에서 템플릿을 편집 및 배포할 수 있습니다.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"principalAssignmentName": {
"type": "string",
"defaultValue": "principalAssignment1",
"metadata": {
"description": "Specifies the name of the principal assignment"
}
},
"clusterName": {
"type": "string",
"defaultValue": "mykustocluster",
"metadata": {
"description": "Specifies the name of the cluster"
}
},
"databaseName": {
"type": "string",
"defaultValue": "mykustodatabase",
"metadata": {
"description": "Specifies the name of the database"
}
},
"principalIdForDatabase": {
"type": "string",
"metadata": {
"description": "Specifies the principal id. It can be user email, application (client) ID, security group name"
}
},
"roleForDatabasePrincipal": {
"type": "string",
"defaultValue": "Admin",
"metadata": {
"description": "Specifies the database principal role. It can be 'Admin', 'Ingestor', 'Monitor', 'User', 'UnrestrictedViewers', 'Viewer'"
}
},
"tenantIdForDatabasePrincipal": {
"type": "string",
"metadata": {
"description": "Specifies the tenantId of the database principal"
}
},
"principalTypeForDatabase": {
"type": "string",
"defaultValue": "App",
"metadata": {
"description": "Specifies the principal type. It can be 'User', 'App', 'Group'"
}
}
},
"variables": {
},
"resources": [{
"type": "Microsoft.Kusto/Clusters/Databases/principalAssignments",
"apiVersion": "2019-11-09",
"name": "[concat(parameters('clusterName'), '/', parameters('databaseName'), '/', parameters('principalAssignmentName'))]",
"properties": {
"principalId": "[parameters('principalIdForDatabase')]",
"role": "[parameters('roleForDatabasePrincipal')]",
"tenantId": "[parameters('tenantIdForDatabasePrincipal')]",
"principalType": "[parameters('principalTypeForDatabase')]"
}
}
]
}