Microsoft Entra ID から 管理された ID を使用すると、クラスターは Azure Key Vault などの他の Microsoft Entra で保護されたリソースにアクセスできます。 ID は Azure プラットフォームによって管理され、シークレットをプロビジョニングまたはローテーションする必要はありません。
この記事では、クラスター上のマネージド ID を追加および削除する方法について説明します。 マネージド ID の詳細については、「マネージド ID の概要」を参照してください。
Note
Azure Data Explorer クラスターがサブスクリプションやテナント間で移行された場合、Azure Data Explorer のマネージド ID は想定されたとおりに動作しません。 アプリは新しい ID を取得する必要があります。これを行うには、システム割り当て ID を移動してからシステム割り当て ID を追加。 新しい ID を使用するには、ダウンストリーム リソースのアクセス ポリシーも更新する必要があります。
システム割り当て ID: クラスターに関連付けられ、リソースが削除された場合は削除されます。 クラスターは 1 つのシステム割り当て ID しか持つことはできません。
ユーザー割り当て ID: クラスターに割り当てることができるスタンドアロン Azure リソース。 クラスターは複数のユーザー割り当て ID を持つことができます。
システム割り当て ID を追加する
クラスターに関連付けられており、クラスターが削除されると削除されるシステム割り当て ID を割り当てます。 クラスターは 1 つのシステム割り当て ID しか持つことはできません。 システム割り当て ID を持つクラスターを作成するには、クラスター上で追加のプロパティを設定する必要があります。 以下に詳細を示すとおり、Azure portal、C#、または Resource Manager テンプレートを使用してシステム割り当て ID を追加します。
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";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var clusters = resourceGroup.GetKustoClusters();
var clusterName = "mykustocluster";
var clusterData = new KustoClusterData(
location: AzureLocation.CentralUS,
sku: new KustoSku(KustoSkuName.StandardE8adsV5, KustoSkuTier.Standard) { Capacity = 5 }
) { Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.SystemAssigned) };
await clusters.CreateOrUpdateAsync(WaitUntil.Completed, clusterName, clusterData);
次のコマンドを実行して、クラスターが ID とともに正常に作成または更新されたかどうかを確認します。
<TENANTID> と <PRINCIPALID> は GUID で置き換えられます。 TenantId プロパティは、ID が属する Microsoft Entra テナントを識別します。 PrincipalId は、クラスターの新しい ID の一意識別子です。 Microsoft Entra ID のサービス プリンシパル名は、お使いの App Service または Azure Functions のインスタンスに指定したものと同じです。
システム割り当て ID を削除する
システム割り当て ID を削除すると、Microsoft Entra ID からも削除されます。 クラスター リソースが削除されると、システム割り当て ID も Microsoft Entra ID から自動的に削除されます。 システム割り当て ID を削除するには、機能を無効にします。 以下に詳細を示すとおり、Azure portal、C#、または Resource Manager テンプレートを使用してシステム割り当て ID を削除します。
ポップアップ ウィンドウで [はい] を選択して、システム割り当て ID を無効にします。 [ID] ペインは、システム割り当て ID が追加される前と同じ状態に戻ります。
C# を使用してシステム割り当て ID を削除する
システム割り当て ID を削除するには、次を実行します。
var cluster = (await clusters.GetAsync(clusterName)).Value;
var clusterPatch = new KustoClusterPatch(clusterData.Location)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.None)
};
await cluster.UpdateAsync(WaitUntil.Completed, clusterPatch);
Azure Resource Manager テンプレートを使用して、システム割り当て ID を削除する
システム割り当て ID を削除するには、次を実行します。
{
"identity": {
"type": "None"
}
}
Note
クラスターにシステム割り当てとユーザー割り当て ID の両方が同時にある場合、システム割り当て ID の削除後、type プロパティは UserAssigned になります。
ユーザー割り当て ID を追加する
クラスターにユーザー割り当てマネージド ID を割り当てます。 クラスターは複数のユーザー割り当て ID を持つことができます。 ユーザー割り当て ID を持つクラスターを作成するには、クラスター上で追加のプロパティを設定する必要があります。 以下に詳細を示すとおり、Azure portal、C#、または Resource Manager テンプレートを使用してユーザー割り当て ID を追加します。
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";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var clusters = resourceGroup.GetKustoClusters();
var clusterName = "mykustocluster";
var userIdentityResourceId = new ResourceIdentifier($"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>");
var clusterData = new KustoClusterData(
location: AzureLocation.CentralUS,
sku: new KustoSku(KustoSkuName.StandardE8adsV5, KustoSkuTier.Standard) { Capacity = 5 }
)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.UserAssigned)
{
UserAssignedIdentities = { { userIdentityResourceId, new UserAssignedIdentity() } }
}
};
await clusters.CreateOrUpdateAsync(WaitUntil.Completed, clusterName, clusterData);
次のコマンドを実行して、クラスターが ID とともに正常に作成または更新されたかどうかを確認します。
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId.GetValueOrDefault();
var clientGuid = userIdentity.ClientId.GetValueOrDefault();
PrincipalId は、Microsoft Entra の管理に使用される ID の一意識別子です。 ClientId は、ランタイム呼び出し中に使用される ID を指定するために使用される、アプリケーションの新しい ID の一意識別子です。
Azure Resource Manager テンプレートを使用して、ユーザー割り当て ID を追加する