Une identité managée d’Azure Active Directory permet à votre cluster d’accéder facilement à d’autres ressources protégées par Azure AD, telles qu’Azure Key Vault. Managée par la plateforme Azure, l’identité ne nécessite pas que vous approvisionniez ou permutiez de secrets. La configuration des identités managées est actuellement prise en charge uniquement pour activer les clés gérées par le client pour votre cluster.
Pour obtenir une vue d’ensemble des identités managées, consultez Authentifier à l’aide d’identités managées dans votre cluster Azure Data Explorer.
Votre cluster Azure Data Explorer peut recevoir deux types d’identités :
-
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é affectée par le système.
-
Identité affectée par l’utilisateur : ressource Azure autonome qui peut être affectée à votre cluster. Un cluster peut avoir plusieurs identités attribuées par l'utilisateur.
Cet article explique comment ajouter et supprimer des identités managées affectées par le système et affectées par l’utilisateur pour les clusters Azure Data Explorer.
Remarque
Les identités managées pour Azure Data Explorer ne fonctionnent pas comme attendu si votre cluster Azure Data Explorer est migré entre abonnements ou locataires. L’application doit obtenir une nouvelle identité, qui peut être effectuée en désactivant et en réactivant la fonctionnalité. Les stratégies d’accès des ressources en aval doivent également être mises à jour pour utiliser la nouvelle identité.
Ajouter une identité assignée par le système
Attribuez une identité affectée par le système liée à votre cluster et supprimée si votre cluster est supprimé. Un cluster ne peut avoir qu’une seule identité affectée par le système. La création d’un cluster avec une identité affectée par le système nécessite la définition d’une propriété supplémentaire sur le cluster. Ajoutez l’identité affectée par le système à l’aide du portail Azure, C# ou du modèle Resource Manager, comme indiqué ci-dessous.
Ajouter une identité affectée par le système à l’aide du portail Azure
Connectez-vous au portail Azure.
Nouveau cluster Azure Data Explorer
Créez un cluster Azure Data Explorer.
Sous l’onglet >Sécurité, identité affectée par le système, sélectionnez Activé. Pour supprimer l’identité affectée par le système, sélectionnez Désactivé.
Sélectionnez Suivant : Balises > ou Revoir + 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é, sous l’onglet Système affecté :
- Déplacez le curseur État sur Activé.
- Cliquez sur Enregistrer
- Dans la fenêtre contextuelle, sélectionnez Oui
Après quelques minutes, l’écran affiche :
-
ID d’objet - Utilisé pour les clés gérées par le client
-
Autorisations - Sélectionner les attributions de rôles pertinentes
Ajouter une identité affectée par le système à l’aide de C#
Conditions préalables
Pour configurer une identité managée à l’aide du client C# Azure Data Explorer :
Créer ou mettre à jour votre cluster
Créez ou mettez à jour votre cluster à l’aide de la Identity propriété :
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);
Exécutez la commande suivante pour vérifier si votre cluster a été correctement créé ou mis à jour avec une identité :
clusterData = await kustoManagementClient.Clusters.GetAsync(resourceGroupName, clusterName);
Si le résultat contient ProvisioningState avec la Succeeded valeur, le cluster a été créé ou mis à jour et doit avoir les propriétés suivantes :
var principalGuid = clusterData.Identity.PrincipalId;
var tenantGuid = clusterData.Identity.TenantId;
PrincipalId et TenantId sont remplacés par des GUID. La TenantId propriété identifie le locataire Azure AD auquel appartient l’identité.
PrincipalId est un identificateur unique pour la nouvelle identité du cluster. Dans Azure AD, le principal de service a le même nom que celui que vous avez donné à votre instance App Service ou Azure Functions.
Ajouter une identité affectée par le système à l’aide d’un modèle Azure Resource Manager
Vous pouvez utiliser un modèle Azure Resource Manager pour automatiser le déploiement de vos ressources Azure. Pour en savoir plus sur le déploiement sur Azure Data Explorer, consultez Créer un cluster Azure Data Explorer et une base de données à l’aide d’un modèle Azure Resource Manager.
L’ajout du type affecté par le système indique à Azure de créer et de gérer 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 :
{
"identity": {
"type": "SystemAssigned"
}
}
Par exemple:
{
"apiVersion": "2019-09-07",
"type": "Microsoft.Kusto/clusters",
"name": "[variables('clusterName')]",
"location": "[resourceGroup().location]",
"identity": {
"type": "SystemAssigned"
}
}
Remarque
Un cluster peut avoir des identités affectées par le système et affectées par l’utilisateur en même temps. La type propriété serait SystemAssigned,UserAssigned
Lorsque le cluster est créé, il possède les propriétés supplémentaires suivantes :
{
"identity": {
"type": "SystemAssigned",
"tenantId": "<TENANTID>",
"principalId": "<PRINCIPALID>"
}
}
<TENANTID> et <PRINCIPALID> sont remplacés par des GUID. La propriété TenantId identifie le tenant Azure AD auquel appartient l’identité.
PrincipalId est un identificateur unique pour la nouvelle identité du cluster. Dans Azure AD, le principal de service a le même nom que celui que vous avez donné à votre instance App Service ou Azure Functions.
Supprimer une identité attribuée par le système
La suppression d’une identité affectée par le système la supprime également d’Azure AD. Les identités affectées par le système sont également automatiquement supprimées d’Azure AD 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 à l’aide du portail Azure, C# ou du modèle Resource Manager, comme indiqué ci-dessous.
Supprimer une identité affectée par le système à l’aide du portail Azure
Connectez-vous au portail Azure.
Sélectionnez Paramètres>Identité dans le volet gauche du portail.
Dans le volet Identité, onglet Système affecté:
- Déplacez le curseur État vers Désactivé.
- Cliquez sur Enregistrer
- Dans la fenêtre contextuelle, sélectionnez Oui pour désactiver l’identité affectée par le système. Le volet Identité rétablit la même condition que avant l’ajout de l’identité affectée par le système.
Supprimer une identité affectée par le système à l’aide de C#
Exécutez ce qui suit pour supprimer l’identité affectée par le système :
var clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterPatch);
Supprimer une identité affectée par le système à l’aide d’un modèle Azure Resource Manager
Exécutez ce qui suit pour supprimer l’identité affectée par le système :
{
"identity": {
"type": "None"
}
}
Remarque
Si le cluster avait des identités assignées par le système et par l’utilisateur en même temps, après la suppression de l'identité assignée par le système, la type propriété sera UserAssigned.
Ajouter une identité attribuée par l’utilisateur
Attribuez une identité managée affectée par l’utilisateur à votre cluster. Un cluster peut avoir plusieurs identités assigné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 à l’aide du portail Azure, C# ou du modèle Resource Manager, comme indiqué ci-dessous.
Ajouter une identité attribuée par l'utilisateur en utilisant le portail Azure
Connectez-vous au portail Azure.
Créez une ressource d’identité managée affectée par l’utilisateur.
Ouvrez un cluster Azure Data Explorer existant.
Sélectionnez Paramètres>Identité dans le volet gauche du portail.
Sous l’onglet Utilisateur affecté , sélectionnez Ajouter.
Recherchez l’identité que vous avez créée précédemment et sélectionnez-la. Sélectionnez Ajouter.
Ajouter une identité affectée par l’utilisateur à l’aide de C#
Conditions préalables
Pour configurer une identité managée à l’aide du client C# Azure Data Explorer :
Créer ou mettre à jour votre cluster
Créez ou mettez à jour votre cluster à l’aide de la Identity propriété :
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);
Exécutez la commande suivante pour vérifier si votre cluster a été correctement créé ou mis à jour avec une identité :
clusterData = await kustoManagementClient.Clusters.GetAsync(resourceGroupName, clusterName);
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;
var clientGuid = userIdentity.ClientId;
Il PrincipalId s’agit d’un identificateur unique pour l’identité utilisée pour l’administration d’Azure AD. Il ClientId s’agit d’un identificateur unique pour la nouvelle identité de l’application utilisée pour spécifier l’identité à utiliser pendant les appels d’exécution.
Ajouter une identité affectée par l’utilisateur à l’aide d’un modèle Azure Resource Manager
Vous pouvez utiliser un modèle Azure Resource Manager pour automatiser le déploiement de vos ressources Azure. Pour en savoir plus sur le déploiement sur Azure Data Explorer, consultez Créer un cluster Azure Data Explorer et une base de données à l’aide d’un modèle Azure Resource Manager.
Toute ressource de type Microsoft.Kusto/clusters peut être créée avec une identité affectée par l’utilisateur en incluant la propriété suivante dans la définition de ressource, en <RESOURCEID> remplaçant par l’ID de ressource de l’identité souhaitée :
{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<RESOURCEID>": {}
}
}
}
Par exemple:
{
"apiVersion": "2019-09-07",
"type": "Microsoft.Kusto/clusters",
"name": "[variables('clusterName')]",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]": {}
}
},
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]"
]
}
Lorsque le cluster est créé, il possède les propriétés supplémentaires suivantes :
{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<RESOURCEID>": {
"principalId": "<PRINCIPALID>",
"clientId": "<CLIENTID>"
}
}
}
}
Il PrincipalId s’agit d’un identificateur unique pour l’identité utilisée pour l’administration d’Azure AD. Il ClientId s’agit d’un identificateur unique pour la nouvelle identité de l’application utilisée pour spécifier l’identité à utiliser pendant les appels d’exécution.
Remarque
Un cluster peut avoir des identités affectées par le système et affectées par l’utilisateur en même temps. Dans ce cas, la propriété type est SystemAssigned,UserAssigned.
Supprimer une identité managée attribuée par l'utilisateur d’un cluster
Supprimez l’identité affectée par l’utilisateur à l’aide du portail Azure, C# ou du modèle Resource Manager, comme indiqué ci-dessous.
Supprimer une identité managée affectée par l’utilisateur à l’aide du portail Azure
Connectez-vous au portail Azure.
Sélectionnez Paramètres>Identité dans le volet gauche du portail.
Sélectionnez l’onglet Assigné(e) à 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 même condition qu’avant l’ajout de l’identité affectée par l’utilisateur.
Supprimer une identité affectée par l’utilisateur à l’aide de C#
Exécutez la commande suivante pour supprimer l'identité assignée par l'utilisateur :
var clusterUpdate = new ClusterUpdate(
identity: new Identity(
IdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, IdentityUserAssignedIdentitiesValue>(1)
{
{ userIdentityResourceId, null }
}
)
);
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterUpdate);
Supprimer une identité affectée par l’utilisateur à l’aide d’un modèle Azure Resource Manager
Exécutez la commande suivante pour supprimer l'identité assignée par l'utilisateur :
{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<RESOURCEID>": null
}
}
}
Remarque
- Pour supprimer des identités, définissez leurs valeurs sur Null. Toutes les autres identités existantes ne seront pas affectées.
- Pour supprimer toutes les identités affectées par l’utilisateur, la
type propriété serait None,
- Si le cluster avait des identités affectées par le système et affectées par l’utilisateur en même temps, la
type propriété se trouverait SystemAssigned,UserAssigned avec les identités à supprimer ou SystemAssigned pour supprimer toutes les identités affectées par l’utilisateur.
Étapes suivantes