Configurare le identità gestite per il cluster di Esplora dati di Azure
Articolo
Un'identità gestita da Azure Active Directory consente al cluster di accedere facilmente ad altre risorse protette da Azure AD, ad esempio Azure Key Vault. L'identità viene gestita dalla piattaforma Azure e non è necessario eseguire il provisioning o aggiornare alcun segreto. La configurazione dell'identità gestita è attualmente supportata solo per attivare le chiavi gestite dal cliente per il tuo cluster.
Al cluster di Esplora dati di Azure possono essere concessi due tipi di identità:
L'identità assegnata dal sistema: associata al cluster ed eliminata se la risorsa è eliminata. Un cluster può avere solo un'identità assegnata dal sistema.
'identità assegnata dall'utente: risorsa di Azure autonoma che può essere assegnata al cluster. Un cluster può avere più identità assegnate dall'utente.
Questo articolo illustra come aggiungere e rimuovere identità gestite assegnate dal sistema e assegnate dall'utente per i cluster di Esplora dati di Azure.
Nota
Le identità gestite per Esplora dati di Azure non si comportano come previsto se il cluster di Esplora dati di Azure viene migrato tra sottoscrizioni o tenant. L'app dovrà ottenere una nuova identità, che può essere eseguita disabilitando e riabilitare la funzionalità. Anche i criteri di accesso delle risorse downstream dovranno essere aggiornati per usare la nuova identità.
Aggiungere un'identità assegnata dal sistema
Assegnare un'identità assegnata dal sistema associata al cluster e viene eliminata se il cluster viene eliminato. Un cluster può avere solo un'identità assegnata dal sistema. La creazione di un cluster con un'identità assegnata dal sistema richiede l'impostazione di una proprietà aggiuntiva nel cluster. Aggiungere l'identità assegnata dal sistema usando il portale di Azure, C# o il modello di Resource Manager, come descritto di seguito.
Installare il pacchetto NuGet Microsoft.Rest.ClientRuntime per l'autenticazione.
Creare un'applicazione Azure AD e un'entità servizio in grado di accedere alle risorse. Aggiungete l'assegnazione del ruolo all'ambito della sottoscrizione per ottenere i requisiti Directory (tenant) ID, Application ID e Client Secret.
Creare o aggiornare il cluster
Creare o aggiornare il cluster usando la proprietà 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);
Eseguire il comando seguente per verificare se il cluster è stato creato o aggiornato correttamente con un'identità:
Se il risultato contiene ProvisioningState con il valore Succeeded, il cluster è stato creato o aggiornato e deve avere le proprietà seguenti:
var principalGuid = clusterData.Identity.PrincipalId;
var tenantGuid = clusterData.Identity.TenantId;
PrincipalId e TenantId vengono sostituiti con GUID. La proprietà TenantId identifica il tenant di Azure AD a cui appartiene l'identità. Il PrincipalId è un identificatore univoco per la nuova identità del cluster. In Azure AD, il principale del servizio ha lo stesso nome che hai assegnato al tuo App Service o all'istanza di Azure Functions.
Aggiungere un'identità assegnata dal sistema usando un modello di Azure Resource Manager
Per automatizzare la distribuzione delle risorse di Azure, è possibile usare un modello di Azure Resource Manager. Per altre informazioni sulla distribuzione in Azure Esplora dati, vedere Creare un cluster e un database di Azure Esplora dati usando un modello di Azure Resource Manager.
L'aggiunta del tipo assegnato dal sistema indica ad Azure di creare e gestire l'identità per il cluster. Qualsiasi risorsa di tipo Microsoft.Kusto/clusters può essere creata con un'identità, includendo la seguente proprietà nella definizione della risorsa:
<TENANTID> e <PRINCIPALID> vengono sostituiti con GUID. La proprietà TenantId identifica il tenant di Azure AD a cui appartiene l'identità. Il PrincipalId è un identificatore univoco per la nuova identità del cluster. In Azure AD, il principale del servizio ha lo stesso nome assegnato al Servizio App o all'istanza di Funzioni di Azure.
Rimuovere un'identità assegnata dal sistema
La rimozione di un'identità assegnata dal sistema lo eliminerà anche da Azure AD. Anche le identità assegnate dal sistema vengono rimosse automaticamente da Azure AD quando la risorsa cluster viene eliminata. È possibile rimuovere un'identità assegnata dal sistema disabilitando la funzionalità. Rimuovere l'identità assegnata dal sistema usando il portale di Azure, C# o il modello di Resource Manager, come descritto di seguito.
Selezionare Impostazioni>Identità nel riquadro sinistro del portale.
Nel riquadro Identity>scheda assegnata dal sistema:
Spostare il dispositivo di scorrimento stato su Disattivato.
Seleziona Salva
Nella finestra popup selezionare Sì per disabilitare l'identità assegnata dal sistema. Il riquadro identità ripristina la stessa condizione di prima dell'aggiunta dell'identità assegnata dal sistema.
Rimuovere un'identità assegnata dal sistema usando C#
Eseguire quanto segue per rimuovere l'identità assegnata dal sistema:
var clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterPatch);
Rimuovere un'identità assegnata dal sistema usando un modello di Azure Resource Manager
Eseguire quanto segue per rimuovere l'identità assegnata dal sistema:
{
"identity": {
"type": "None"
}
}
Nota
Se il cluster dispone di identità assegnate dal sistema e assegnate dall'utente contemporaneamente, dopo la rimozione dell'identità assegnata dal sistema, la proprietà type verrà UserAssigned
Aggiungere un'identità assegnata dall'utente
Assegnare un'identità gestita assegnata dall'utente al cluster. Un cluster può avere più di un'identità assegnata dall'utente. La creazione di un cluster con un'identità assegnata dall'utente richiede l'impostazione di una proprietà aggiuntiva nel cluster. Aggiungere l'identità assegnata dall'utente usando il portale di Azure, C# o il modello di Resource Manager, come descritto di seguito.
Installare il pacchetto NuGet Microsoft.Rest.ClientRuntime per l'autenticazione.
Creare un'applicazione Azure AD e un principale del servizio in grado di accedere alle risorse. Aggiungi l'assegnazione del ruolo nell'ambito della sottoscrizione e ottieni i Directory (tenant) ID, Application ID e Client Secret richiesti.
Creare o aggiornare il cluster
Creare o aggiornare il cluster usando la proprietà 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);
Esegui il seguente comando per verificare se il cluster è stato creato o aggiornato con successo con un'identità.
Se il risultato contiene ProvisioningState con il valore Succeeded, il cluster è stato creato o aggiornato e deve avere le proprietà seguenti:
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId;
var clientGuid = userIdentity.ClientId;
Il PrincipalId è un identificatore univoco per l'identità usata per l'amministrazione di Azure AD. Il ClientId è un identificatore univoco per la nuova identità dell'applicazione usata per specificare l'identità da usare durante le chiamate di runtime.
Aggiungere un'identità assegnata dall'utente usando un modello di Azure Resource Manager
Per automatizzare la distribuzione delle risorse di Azure, è possibile usare un modello di Azure Resource Manager. Per altre informazioni sulla distribuzione in Azure Esplora dati, vedere Creare un cluster e un database di Azure Esplora dati usando un modello di Azure Resource Manager.
Qualsiasi risorsa di tipo Microsoft.Kusto/clusters può essere creata con un'identità assegnata dall'utente includendo la proprietà seguente nella definizione della risorsa, sostituendo <RESOURCEID> con l'ID risorsa dell'identità desiderata:
Il PrincipalId è un identificatore univoco per l'identità usata per l'amministrazione di Azure AD. Il ClientId è un identificatore univoco per la nuova identità dell'applicazione usata per specificare l'identità da usare durante le chiamate di runtime.
Nota
Un cluster può avere identità assegnate dal sistema e assegnate dall'utente contemporaneamente. In questo caso, la proprietà type sarebbe SystemAssigned,UserAssigned.
Rimuovere un'identità gestita assegnata dall'utente da un cluster
Rimuovere l'identità assegnata dall'utente usando il portale di Azure, C# o il modello di Resource Manager, come descritto di seguito.
Selezionare Impostazioni>Identità nel riquadro sinistro del portale.
Selezionare la scheda Assegnato all'utente.
Cercare l'identità creata in precedenza e selezionarla. Selezionare Rimuovi.
Nella finestra popup selezionare Sì per rimuovere l'identità assegnata dall'utente. Il riquadro identità ripristina la stessa condizione di prima dell'aggiunta dell'identità assegnata dall'utente.
Per rimuovere le identità, impostare i valori su Null. Tutte le altre identità esistenti non saranno interessate.
Per rimuovere tutte le identità assegnate dall'utente, la proprietà type sarà None,
Se il cluster aveva identità assegnate dal sistema e assegnate dall'utente contemporaneamente, la proprietà type sarà SystemAssigned,UserAssigned con le identità da rimuovere o SystemAssigned per rimuovere tutte le identità assegnate dall'utente.