Configurer des identités managées pour votre cluster Azure Data Explorer
Article
Une identité managée à partir de Microsoft Entra ID permet à votre cluster d’accéder à d’autres ressources protégées Microsoft Entra telles que Azure Key Vault. Managée par la plateforme Azure, l’identité ne nécessite pas que vous approvisionniez ou permutiez de secrets.
Cet article vous explique comment ajouter et supprimer des identités managées sur votre cluster. Pour plus d’informations sur les identités managées, consultez Vue d’ensemble des identités managées.
Notes
Les identités managées pour Azure Data Explorer ne se comportent pas comme prévu si votre cluster Azure Data Explorer est migré entre des abonnements ou des locataires. L’application doit obtenir une nouvelle identité, ce qui peut être effectué en supprimant une identité affectée par le système, puis en ajoutant une identité affectée par le système. Les stratégies d’accès des ressources en aval devront également être mises à jour pour utiliser la nouvelle identité.
Pour obtenir des exemples de code basés sur les versions précédentes du KIT de développement logiciel (SDK), consultez l’article archivé.
Types d'identités managées
Deux types d’identités peuvent être accordées à votre cluster Azure Data Explorer :
Identité affectée par le système : Liée à votre cluster et supprimée si votre ressource est supprimée. Un cluster ne peut avoir qu’une seule identité attribuée par le système.
Identité attribuée par l’utilisateur : ressource Azure autonome qui peut être assignée à votre cluster. Un cluster peut avoir plusieurs identités affectées par l’utilisateur.
Ajouter une identité affectée par le système
Attribuez une identité affectée par le système liée à votre cluster, qui sera supprimée en cas de suppression du cluster. Un cluster ne peut avoir qu’une seule identité attribuée par le système. Créer un cluster avec une identité attribuée par le système requiert la définition d’une propriété supplémentaire sur le cluster. Ajoutez l’identité affectée par le système en utilisant le portail Azure, C# ou un modèle Resource Manager comme indiqué ci-dessous.
Sous l’onglet Sécurité>Identité affectée par le système, sélectionnez Activée. Pour supprimer l’identité affectée par le système, sélectionnez Désactivée.
Sélectionnez Suivant : Balises > ou Examiner + Créer pour créer le cluster.
Cluster Azure Data Explorer existant
Ouvrez un cluster Azure Data Explorer existant.
Sélectionnez Paramètres>Identité dans le volet gauche du portail.
Dans le volet Identité>onglet Affectée par le système :
Déplacez le curseur État sur Activé.
Sélectionnez Enregistrer.
Dans la fenêtre indépendante qui s’affiche, sélectionnez Oui.
Après quelques minutes, l’écran indique :
ID d’objet : utilisé pour les clés gérées par le client.
Autorisations : sélectionnez les affectations de rôles appropriées
Ajouter une identité affectée par le système à l’aide du langage C#
Prérequis
Pour configurer une identité managée à l’aide du client C# Azure Data Explorer :
Créez un Microsoft Entra application et un principal de service qui peuvent accéder aux ressources. Ajoutez l’attribution de rôle à l’étendue de l’abonnement et récupérez les Directory (tenant) ID, Application ID et Client Secret requis.
Créer ou mettre à jour votre cluster
Créez ou mettez à jour votre cluster à l’aide de la propriété 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 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);
Exécutez la commande suivante pour vérifier si votre cluster a été correctement créé ou mis à jour avec une identité :
Si le résultat contient ProvisioningState avec la valeur Succeeded, le cluster a été créé ou mis à jour et doit avoir les propriétés suivantes :
var principalGuid = clusterData.Identity.PrincipalId.GetValueOrDefault();
var tenantGuid = clusterData.Identity.TenantId.GetValueOrDefault();
PrincipalId et TenantId sont remplacés par des GUID. La TenantId propriété identifie le locataire Microsoft Entra auquel l’identité appartient. Le PrincipalId est un identificateur unique pour la nouvelle identité du cluster. Dans Microsoft Entra ID, le principal de service a le même nom que celui que vous avez donné à votre App Service ou Azure Functions instance.
Ajouter une identité affectée par le système à l’aide d’un modèle Azure Resource Manager
L’ajout du type attribué par le système indique à Azure de créer et de manager l’identité de votre cluster. Vous pouvez créer n’importe quelle ressource de type Microsoft.Kusto/clusters avec une identité en incluant la propriété suivante dans la définition de la ressource :
Un cluster peut avoir en même temps une identité affectée par le système et une identité affectée par l’utilisateur. La propriété type a alors la valeur SystemAssigned,UserAssigned.
Quand le cluster est créé, il a les propriétés supplémentaires suivantes :
<TENANTID> et <PRINCIPALID> sont remplacés par des GUID. La TenantId propriété identifie le locataire Microsoft Entra auquel l’identité appartient. Le PrincipalId est un identificateur unique pour la nouvelle identité du cluster. Dans Microsoft Entra ID, le principal de service a le même nom que celui que vous avez donné à votre App Service ou Azure Functions instance.
Suppression d’une identité affectée par le système
La suppression d’une identité affectée par le système la supprime également de Microsoft Entra ID. Les identités attribuées par le système sont également automatiquement supprimées de Microsoft Entra ID lorsque la ressource de cluster est supprimée. Une identité affectée par le système peut être supprimée en désactivant la fonctionnalité, Supprimez l’identité affectée par le système en utilisant le portail Azure, C# ou un modèle Resource Manager comme indiqué ci-dessous.
Sélectionnez Paramètres>Identité dans le volet gauche du portail.
Dans le volet Identité>onglet Affectée par le système :
Déplacez le curseur État sur Désactivé.
Sélectionnez Enregistrer.
Dans la fenêtre indépendante, sélectionnez Oui pour désactiver l’identité affectée par le système. Le volet Identité revient à la situation antérieure à l’ajout de l’identité affectée par le système.
Suppression d’une identité affectée par le système en C#
Exécutez le code suivant pour supprimer l’identité affectée par le système :
var cluster = (await clusters.GetAsync(clusterName)).Value;
var clusterPatch = new KustoClusterPatch(clusterData.Location)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.None)
};
await cluster.UpdateAsync(WaitUntil.Completed, clusterPatch);
Suppression d’une identité affectée par le système à l’aide d’un modèle Azure Resource Manager
Exécutez le code suivant pour supprimer l’identité affectée par le système :
{
"identity": {
"type": "None"
}
}
Notes
Si le cluster avait à la fois des identités affectées par le système et par l’utilisateur, après la suppression de l’identité affectée par le système, la propriété type a la valeur UserAssigned.
Ajouter une identité attribuée par l’utilisateur
Affectez une identité managée affectée par l’utilisateur à votre cluster. Un cluster peut avoir plusieurs identités affectées par l’utilisateur. La création d’un cluster avec une identité affectée par l’utilisateur nécessite la définition d’une propriété supplémentaire sur le cluster. Ajoutez l’identité affectée par l’utilisateur en utilisant le portail Azure, C# ou un modèle Resource Manager comme indiqué ci-dessous.
Créez un Microsoft Entra application et un principal de service qui peuvent accéder aux ressources. Ajoutez l’attribution de rôle à l’étendue de l’abonnement et récupérez les Directory (tenant) ID, Application ID et Client Secret requis.
Créer ou mettre à jour votre cluster
Créez ou mettez à jour votre cluster à l’aide de la propriété 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 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);
Exécutez la commande suivante pour vérifier si votre cluster a été correctement créé ou mis à jour avec une identité :
Si le résultat contient ProvisioningState avec la valeur Succeeded, le cluster a été créé ou mis à jour et doit avoir les propriétés suivantes :
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId.GetValueOrDefault();
var clientGuid = userIdentity.ClientId.GetValueOrDefault();
PrincipalId est un identificateur unique pour l’identité utilisée pour Microsoft Entra administration.
ClientId est un identificateur unique pour la nouvelle identité de l’application qui est utilisé pour spécifier l’identité à utiliser lors des appels à l’exécution.
Ajouter une identité affectée par l’utilisateur en utilisant un modèle Azure Resource Manager
Vous pouvez créer n’importe quelle ressource de type Microsoft.Kusto/clusters avec une identité affectée par l’utilisateur en incluant la propriété suivante dans la définition de la ressource, en remplaçant <RESOURCEID> par l’ID de ressource de l’identité souhaitée :
PrincipalId est un identificateur unique pour l’identité utilisée pour Microsoft Entra administration.
ClientId est un identificateur unique pour la nouvelle identité de l’application qui est utilisé pour spécifier l’identité à utiliser lors des appels à l’exécution.
Notes
Un cluster peut avoir en même temps une identité affectée par le système et une identité affectée par l’utilisateur. Dans ce cas, la propriété type est SystemAssigned,UserAssigned.
Supprimer d’un cluster une identité managée affectée par l’utilisateur
Supprimez l’identité affectée par l’utilisateur en utilisant le portail Azure, C# ou un modèle Resource Manager comme indiqué ci-dessous.
Sélectionnez Paramètres>Identité dans le volet gauche du portail.
Sélectionnez l’onglet Affecté(e) par l’utilisateur.
Recherchez l’identité que vous avez créée précédemment et sélectionnez-la. Sélectionnez Supprimer.
Dans la fenêtre contextuelle, sélectionnez Oui pour supprimer l’identité affectée par l’utilisateur. Le volet Identité revient à la situation antérieure à l’ajout de l’identité affectée par l’utilisateur.
Supprimer une identité affectée par l’utilisateur en utilisant C#
Exécutez le code suivant pour supprimer l’identité affectée par l’utilisateur :
var cluster = (await clusters.GetAsync(clusterName)).Value;
var clusterUpdate = new KustoClusterPatch(clusterData.Location)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.UserAssigned)
{
UserAssignedIdentities = { { userIdentityResourceId, null } }
}
};
await cluster.UpdateAsync(WaitUntil.Completed, clusterUpdate);
Supprimer une identité affectée par l’utilisateur en utilisant un modèle Azure Resource Manager
Exécutez le code suivant pour supprimer l’identité affectée par l’utilisateur :
Pour supprimer des identités, définissez leurs valeurs sur Null. Aucune des autres identités existantes ne sera affectée.
Pour supprimer toutes les identités affectées par l’utilisateur, la propriété type doit avoir la valeur None.
Si le cluster avait à la fois des identités affectées par le système et des identités affectées par l’utilisateur, la propriété type doit avoir la valeur SystemAssigned,UserAssigned avec les identités à supprimer ou SystemAssigned pour supprimer toutes les identités affectées par l’utilisateur.