Azure Data Explorer 클러스터에는 두 가지 유형의 ID가 부여될 수 있습니다.
시스템 할당 ID: 클러스터에 연결되며 리소스가 삭제되면 삭제됩니다. 클러스터에는 하나의 시스템 할당 ID만 있을 수 있습니다.
사용자 할당 ID: 클러스터에 할당할 수 있는 독립 실행형 Azure 리소스입니다. 클러스터에는 여러 사용자 할당 ID가 있을 수 있습니다.
이 문서에서는 Azure Data Explorer 클러스터에 대해 시스템 할당 및 사용자 할당 관리 ID를 추가 및 제거하는 방법을 보여 줍니다.
참고
Azure Data Explorer 클러스터가 구독 또는 테넌트 간에 마이그레이션되는 경우 Azure Data Explorer의 관리 ID가 예상대로 작동하지 않습니다. 앱에서 새 ID를 확보해야 하며 해당 기능을 사용 중지했다가 다시 사용하도록 설정하여 확보할 수 있습니다. 다운스트리밍 리소스의 액세스 정책도 새 ID를 사용하도록 업데이트해야 합니다.
시스템 할당 ID 추가
클러스터에 연결되어 있고 클러스터가 삭제되면 삭제되는 시스템 할당 ID를 할당합니다. 클러스터에는 하나의 시스템 할당 ID만 있을 수 있습니다. 시스템 할당 ID를 사용하여 클러스터를 만들려면 클러스터에서 추가 속성을 설정해야 합니다. 아래에 설명된 대로 Azure Portal, C# 또는 Resource Manager 템플릿을 사용하여 시스템 할당 ID를 추가합니다.
리소스에 액세스할 수 있는 Azure AD 애플리케이션 및 서비스 주체 만들기 구독 범위에서 역할 할당을 추가하고 필요한 Directory (tenant) ID, Application ID 및 Client Secret을 가져옵니다.
클러스터 만들기 또는 업데이트
Identity 속성을 사용하여 클러스터를 만들거나 업데이트합니다.
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 authClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithClientSecret(clientSecret)
.Build();
var result = authClient.AcquireTokenForClient(new[] { "https://management.core.windows.net/" }).ExecuteAsync().Result;
var credentials = new TokenCredentials(result.AccessToken, result.TokenType);
var kustoManagementClient = new KustoManagementClient(credentials) { SubscriptionId = subscriptionId };
var resourceGroupName = "testrg";
var clusterName = "mykustocluster";
var clusterData = new Cluster(
location: "Central US",
sku: new AzureSku("Standard_E8ads_v5", "Standard", 5),
identity: new Identity(IdentityType.SystemAssigned)
);
await kustoManagementClient.Clusters.CreateOrUpdateAsync(resourceGroupName, clusterName, clusterData);
결과에 Succeeded 값이 있는 ProvisioningState가 포함되어 있으면 클러스터가 만들어지거나 업데이트되었으며 다음 속성이 있어야 합니다.
var principalGuid = clusterData.Identity.PrincipalId;
var tenantGuid = clusterData.Identity.TenantId;
PrincipalId 및 TenantId는 GUID로 대체됩니다.
TenantId 속성은 ID가 속한 Azure AD 테넌트를 식별합니다.
PrincipalId는 클러스터의 새 ID에 대한 고유 식별자입니다. Azure AD 내에서 서비스 주체는 사용자가 App Service 또는 Azure Functions 인스턴스에 지정한 이름과 동일한 이름을 갖습니다.
<TENANTID> 및 <PRINCIPALID>는 GUID로 대체됩니다.
TenantId 속성은 ID가 속한 Azure AD 테넌트를 식별합니다.
PrincipalId는 클러스터의 새 ID에 대한 고유 식별자입니다. Azure AD 내에서 서비스 주체는 사용자가 App Service 또는 Azure Functions 인스턴스에 지정한 이름과 동일한 이름을 갖습니다.
시스템 할당 ID 제거
시스템이 할당한 ID를 제거하면 Azure AD에서도 삭제됩니다. 클러스터 리소스가 삭제될 때 시스템 할당 ID도 Azure AD에서 자동으로 제거됩니다. 시스템 할당 ID는 기능을 사용하지 않도록 설정하여 제거할 수 있습니다. 아래에 설명된 대로 Azure Portal, C# 또는 Resource Manager 템플릿을 사용하여 시스템 할당 ID를 제거합니다.
팝업 창에서 예를 선택하여 시스템 할당 ID를 사용하지 않도록 설정합니다.
ID 창은 시스템 할당 ID를 추가하기 전과 동일한 상태로 돌아갑니다.
C#을 사용하여 시스템 할당 ID 제거
다음을 실행하여 시스템 할당 ID를 제거합니다.
var clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterPatch);
Azure Resource Manager 템플릿을 사용하여 시스템 할당 ID 제거
다음을 실행하여 시스템 할당 ID를 제거합니다.
{
"identity": {
"type": "None"
}
}
참고
클러스터에 시스템 할당 ID와 사용자 할당 ID가 동시에 있는 경우 시스템 할당 ID 제거 후 type 속성은 UserAssigned가 됩니다.
사용자 할당 ID 추가
클러스터에 사용자 할당 관리 ID 할당 클러스터에는 둘 이상의 사용자 할당 ID가 있을 수 있습니다. 사용자 할당 ID로 클러스터를 만들려면 클러스터에 추가 속성을 설정해야 합니다. 아래에 설명된 대로 Azure Portal, C# 또는 Resource Manager 템플릿을 사용하여 사용자 할당 ID를 추가합니다.
리소스에 액세스할 수 있는 Azure AD 애플리케이션 및 서비스 주체 만들기 구독 범위에서 역할 할당을 추가하고 필요한 Directory (tenant) ID, Application ID 및 Client Secret을 가져옵니다.
클러스터 만들기 또는 업데이트
Identity 속성을 사용하여 클러스터를 만들거나 업데이트합니다.
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 authClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithClientSecret(clientSecret)
.Build();
var result = authClient.AcquireTokenForClient(new[] { "https://management.core.windows.net/" }).ExecuteAsync().Result;
var credentials = new TokenCredentials(result.AccessToken, result.TokenType);
var kustoManagementClient = new KustoManagementClient(credentials) { SubscriptionId = subscriptionId };
var resourceGroupName = "testrg";
var clusterName = "mykustocluster";
var userIdentityResourceId = $"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>";
var clusterData = new Cluster(
location: "Central US",
sku: new AzureSku("Standard_E8ads_v5", "Standard", 5),
identity: new Identity(
IdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, IdentityUserAssignedIdentitiesValue>(1)
{
{ userIdentityResourceId, new IdentityUserAssignedIdentitiesValue() }
}
)
);
await kustoManagementClient.Clusters.CreateOrUpdateAsync(resourceGroupName, clusterName, clusterData);
결과에 Succeeded 값이 있는 ProvisioningState가 포함되어 있으면 클러스터가 만들어지거나 업데이트되었으며 다음 속성이 있어야 합니다.
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId;
var clientGuid = userIdentity.ClientId;
PrincipalId는 Azure AD 관리에 사용되는 ID의 고유 식별자입니다.
ClientId는 런타임 호출 중 사용할 ID를 지정하는 데 사용되는 애플리케이션의 새 ID에 대한 고유 식별자입니다.