Configurar identidades gerenciadas para o cluster do Azure Data Explorer
Artigo
Uma identidade gerenciada do Azure Active Directory permite que o aplicativo acesse facilmente os outros recursos protegidos pelo Azure Active Directory, como o Azure Key Vault. A identidade é gerenciada pela plataforma do Azure e não exige provisionamento nem alternância de segredo. Atualmente, há suporte para a configuração de identidade gerenciada apenas para habilitar chaves gerenciadas pelo cliente para o cluster.
Seu cluster do Azure Data Explorer cluster pode ser concedido a dois tipos de identidades:
Identidade atribuída pelo sistema: vinculada ao cluster e excluída se o recurso for excluído. Um aplicativo só pode ter uma identidade atribuída pelo sistema.
Uma Identidade atribuída pelo usuário é um recurso independente do Azure que pode ser atribuído ao seu aplicativo. Um aplicativo pode ter várias identidades atribuídas pelo usuário.
Este artigo mostra como adicionar e remover identidades gerenciadas atribuídas pelo sistema e atribuídas pelo usuário para clusters do Azure Data Explorer.
Observação
As identidades gerenciadas do Azure Data Explorer se comportarão conforme o esperado se o cluster Azure Data Explorer for migrado entre assinaturas ou locatários. O aplicativo precisará obter uma nova identidade, que pode ser feita ao desabilitar e reabilitar o recurso. As políticas de acesso dos recursos de downstream também precisarão ser atualizadas para usar a nova identidade.
Adicionar uma identidade atribuída pelo sistema
Atribua uma identidade atribuída pelo sistema que está vinculada ao seu cluster e é excluída se o seu cluster for excluído. Um aplicativo só pode ter uma identidade atribuída pelo sistema. Criar um cluster com uma identidade atribuída pelo sistema requer uma propriedade adicional a ser definida no cluster. Adicione a identidade atribuída pelo sistema usando o modelo portal do Azure, C# ou Resource Manager, conforme detalhado abaixo.
Crie ou atualize o cluster usando a propriedade 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);
Execute o seguinte comando para verificar se o cluster foi criado com êxito ou atualizado com uma identidade:
Se o resultado contiver ProvisioningState com o valor Succeeded, o cluster foi criado ou atualizado e deve ter as seguintes propriedades:
var principalGuid = clusterData.Identity.PrincipalId;
var tenantGuid = clusterData.Identity.TenantId;
PrincipalId e TenantId são substituídos por GUIDs. A propriedade TenantId identifica o locatário do Azure AD ao qual a identidade pertence.
PrincipalId é um identificador exclusivo para a nova identidade do cluster. No Azure Active Directory, a entidade de serviço tem o mesmo nome que você deu à sua instância do Serviço de Aplicativo ou do Azure Functions.
Adicionar uma identidade atribuída pelo sistema no modelo do Azure Resource Manager
Adicionar o tipo atribuído pelo sistema diz ao Azure para criar e gerenciar a identidade do seu cluster. Qualquer recurso do tipo Microsoft.Kusto/clusters pode ser criado com uma identidade, incluindo a propriedade a seguir na definição de recurso:
<TENANTID> e <PRINCIPALID> são substituídos por GUIDs. A propriedade TenantId identifica o locatário do Azure AD ao qual a identidade pertence.
PrincipalId é um identificador exclusivo para a nova identidade do cluster. No Azure Active Directory, a entidade de serviço tem o mesmo nome que você deu à sua instância do Serviço de Aplicativo ou do Azure Functions.
Remover a identidade atribuída pelo sistema
Remover uma identidade atribuída ao sistema também a excluirá do Azure Active Directory. As identidades atribuídas pelo sistema também são automaticamente removidas do Azure Active Directory quando o recurso do cluster é excluído. Uma identidade atribuída pelo sistema pode ser removida ao desativar o recurso. Remova a identidade atribuída pelo sistema usando o modelo portal do Azure, C# ou Resource Manager, conforme detalhado abaixo.
Selecione Configurações>Identidade no painel esquerdo do portal.
No painel Identidade>guia Atribuído ao sistema:
Mova o controle deslizante Status para Desligado.
Selecione Salvar
Na janela pop-up, selecione Sim para desativar a identidade atribuída pelo sistema. O painel Identidade reverte para a mesma condição que antes da adição da identidade atribuída pelo sistema.
Remover uma identidade atribuída pelo sistema usando C#
Execute o seguinte para remover a identidade atribuída pelo sistema:
var clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterPatch);
Remover uma identidade atribuída pelo sistema no modelo do Azure Resource Manager
Execute o seguinte para remover a identidade atribuída pelo sistema:
{
"identity": {
"type": "None"
}
}
Observação
Se o cluster tiver identidades atribuídas pelo sistema e pelo usuário ao mesmo tempo, após a remoção da identidade atribuída pelo sistema, a propriedade type será UserAssigned
Adicionar uma identidade atribuída pelo usuário
Atribuir uma identidade gerenciada atribuída pelo usuário ao seu cluster. Um cluster pode ter mais de uma identidade atribuída pelo usuário. Criar um cluster com uma identidade designada pelo usuário requer uma propriedade adicional a ser definida no cluster. Adicione a identidade atribuída pelo usuário usando o modelo portal do Azure, C# ou Resource Manager, conforme detalhado abaixo.
Crie ou atualize o cluster usando a propriedade 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);
Execute o seguinte comando para verificar se o cluster foi criado com êxito ou atualizado com uma identidade:
Se o resultado contiver ProvisioningState com o valor Succeeded, o cluster foi criado ou atualizado e deve ter as seguintes propriedades:
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId;
var clientGuid = userIdentity.ClientId;
O PrincipalId é um identificador exclusivo para a identidade que é usada para a administração do Azure AD. O ClientId é um identificador exclusivo para a nova identidade do aplicativo que é usada para especificar qual identidade usar durante as chamadas do runtime.
Adicionar uma identidade atribuída pelo sistema no modelo do Azure Resource Manager
Qualquer recurso do tipo Microsoft.Kusto/clusters pode ser criado com uma identidade atribuída pelo usuário incluindo a seguinte propriedade na definição do recurso, substituindo <RESOURCEID> pelo ID do recurso da identidade desejada:
O PrincipalId é um identificador exclusivo para a identidade que é usada para a administração do Azure AD. O ClientId é um identificador exclusivo para a nova identidade do aplicativo que é usada para especificar qual identidade usar durante as chamadas do runtime.
Observação
Um cluster pode ter identidades atribuídas pelo sistema e pelo usuário ao mesmo tempo. Nesse caso, a propriedade type seria SystemAssigned,UserAssigned.
Remover uma identidade gerenciada atribuída ao usuário de um cluster
Remova a identidade atribuída pelo usuário usando o modelo portal do Azure, C# ou Resource Manager, conforme detalhado abaixo.
Selecione Configurações>Identidade no painel esquerdo do portal.
Selecione a guia Atribuído pelo usuário.
Procure a identidade que você criou anteriormente e selecione-a. Selecione Remover.
Na janela pop-up, selecione Sim para remover a identidade atribuída pelo usuário. O painel Identidade reverte para a mesma condição que antes da adição da identidade atribuída pelo usuário.
Remover identidade atribuída pelo usuário usando C#
Execute o seguinte para remover a identidade atribuída pelo usuário:
var clusterUpdate = new ClusterUpdate(
identity: new Identity(
IdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, IdentityUserAssignedIdentitiesValue>(1)
{
{ userIdentityResourceId, null }
}
)
);
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterUpdate);
Remover uma identidade atribuída pelo sistema no modelo do Azure Resource Manager
Execute o seguinte para remover a identidade atribuída pelo usuário:
Para remover identidades, defina os valores como nulos. Todas as outras identidades existentes não serão afetadas.
Para remover todas as identidades atribuídas pelousuário, a propriedade type seria None,
Se o cluster tivesse identidades atribuídas pelo sistema e atribuídas pelo usuário ao mesmo tempo, a propriedade type seria SystemAssigned,UserAssigned com as identidades a serem removidos ou SystemAssigned para remover todas as identidades atribuídas pelo usuário.