Configurar identidades gerenciadas para o cluster do Azure Data Explorer
Artigo
Uma identidade gerenciada de Microsoft Entra ID permite que o cluster acesse outros recursos protegidos Microsoft Entra, como o Azure Key Vault. A identidade é gerenciada pela plataforma do Azure e não exige provisionamento nem alternância de segredo.
Este artigo mostra como adicionar e remover identidades gerenciadas em seu cluster. Para obter mais informações sobre identidades gerenciadas, confira Visão geral de identidades gerenciadas.
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, o que pode ser feito removendo uma identidade atribuída pelo sistema e adicionando uma identidade atribuída pelo sistema. As políticas de acesso dos recursos de downstream também precisarão ser atualizadas para usar a nova identidade.
Para obter exemplos de código com base em versões anteriores do SDK, consulte o artigo arquivado.
Tipos de identidades gerenciadas
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.
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 um aplicativo Microsoft Entra e uma entidade de serviço que possam acessar recursos. Você pode adicionar a atribuição de função no escopo da assinatura e obter Directory (tenant) ID, Application ID e Client Secret necessários.
Crie ou atualize o cluster
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 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);
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.GetValueOrDefault();
var tenantGuid = clusterData.Identity.TenantId.GetValueOrDefault();
PrincipalId e TenantId são substituídos por GUIDs. A TenantId propriedade identifica o locatário Microsoft Entra ao qual a identidade pertence.
PrincipalId é um identificador exclusivo para a nova identidade do cluster. Em Microsoft Entra ID, a entidade de serviço tem o mesmo nome que você deu à sua instância de Serviço de Aplicativo ou 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 TenantId propriedade identifica o locatário Microsoft Entra ao qual a identidade pertence.
PrincipalId é um identificador exclusivo para a nova identidade do cluster. Em Microsoft Entra ID, a entidade de serviço tem o mesmo nome que você deu à sua instância de Serviço de Aplicativo ou Azure Functions.
Remover a identidade atribuída pelo sistema
A remoção de uma identidade atribuída pelo sistema também a excluirá de Microsoft Entra ID. As identidades atribuídas pelo sistema também são removidas automaticamente da ID de Microsoft Entra quando o recurso de 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 cluster = (await clusters.GetAsync(clusterName)).Value;
var clusterPatch = new KustoClusterPatch(clusterData.Location)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.None)
};
await cluster.UpdateAsync(WaitUntil.Completed, 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 um aplicativo Microsoft Entra e uma entidade de serviço que possam acessar recursos. Você pode adicionar a atribuição de função no escopo da assinatura e obter Directory (tenant) ID, Application ID e Client Secret necessários.
Crie ou atualize o cluster
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 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);
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.GetValueOrDefault();
var clientGuid = userIdentity.ClientId.GetValueOrDefault();
O PrincipalId é um identificador exclusivo para a identidade usada para Microsoft Entra administração. 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 usada para Microsoft Entra administração. 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 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);
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.