Configurar identidades geridas para o cluster do Azure Data Explorer
Artigo
Uma identidade gerida do ID de Microsoft Entra permite que o cluster aceda a outros recursos protegidos Microsoft Entra, como o Azure Key Vault. A identidade é gerida pela plataforma do Azure e não precisa que o utilizador aprovisione ou rode nenhuns segredos.
Este artigo mostra-lhe como adicionar e remover identidades geridas no cluster. Para obter mais informações sobre identidades geridas, veja Descrição geral das identidades geridas.
Nota
As identidades geridas do Azure Data Explorer não se comportarão como esperado se o cluster de Data Explorer do Azure for migrado entre subscrições ou inquilinos. A aplicação terá de obter uma nova identidade, o que pode ser feito ao remover uma identidade atribuída pelo sistema e, em seguida, adicionar uma identidade atribuída pelo sistema. As políticas de acesso de recursos a jusante também terão de ser atualizadas para utilizar a nova identidade.
Para obter exemplos de código com base em versões anteriores do SDK, veja o artigo arquivado.
Tipos de identidades geridas
O cluster do Azure Data Explorer pode receber dois tipos de identidades:
Identidade atribuída pelo sistema: associada ao cluster e eliminada se o recurso for eliminado. Um cluster só pode ter uma identidade atribuída pelo sistema.
Identidade atribuída pelo utilizador: um recurso autónomo do Azure que pode ser atribuído ao cluster. Um cluster pode ter múltiplas identidades atribuídas pelo utilizador.
Adicionar uma identidade atribuída pelo sistema
Atribua uma identidade atribuída pelo sistema que esteja associada ao cluster e que seja eliminada se o cluster for eliminado. Um cluster só pode ter uma identidade atribuída pelo sistema. A criação de um cluster com uma identidade atribuída pelo sistema requer que seja definida uma propriedade adicional no cluster. Adicione a identidade atribuída pelo sistema com o modelo portal do Azure, C#ou Resource Manager, conforme detalhado abaixo.
Crie uma aplicação Microsoft Entra e um principal de serviço que possa aceder aos recursos. Adiciona a atribuição de função no âmbito da subscrição e obtém os necessários Directory (tenant) ID, Application IDe Client Secret.
Criar ou atualizar o cluster
Crie ou atualize o cluster com a Identity propriedade :
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 ou atualizado com êxito com uma identidade:
Se o resultado contiver ProvisioningState o Succeeded valor, o cluster foi criado ou atualizado e deverá 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 Microsoft Entra inquilino ao qual pertence a identidade. O PrincipalId é um identificador exclusivo para a nova identidade do cluster. No Microsoft Entra ID, o principal de serviço tem o mesmo nome que deu à sua instância de Serviço de Aplicações ou Funções do Azure.
Adicionar uma identidade atribuída pelo sistema com um modelo de Resource Manager do Azure
Adicionar o tipo atribuído pelo sistema indica ao Azure para criar e gerir a identidade do cluster. Qualquer recurso do tipo Microsoft.Kusto/clusters pode ser criado com uma identidade ao incluir a seguinte propriedade na definição do recurso:
Um cluster pode ter identidades atribuídas pelo sistema e atribuídas pelo utilizador ao mesmo tempo. A type propriedade seria SystemAssigned,UserAssigned
Quando o cluster é criado, tem as seguintes propriedades adicionais:
<TENANTID> e <PRINCIPALID> são substituídos por GUIDs. A TenantId propriedade identifica o Microsoft Entra inquilino ao qual pertence a identidade. O PrincipalId é um identificador exclusivo para a nova identidade do cluster. No Microsoft Entra ID, o principal de serviço tem o mesmo nome que deu à sua instância de Serviço de Aplicações ou Funções do Azure.
Remover uma identidade atribuída pelo sistema
Remover uma identidade atribuída pelo sistema também irá eliminá-la do Microsoft Entra ID. As identidades atribuídas pelo sistema também são removidas automaticamente do ID de Microsoft Entra quando o recurso do cluster é eliminado. Uma identidade atribuída pelo sistema pode ser removida ao desativar a funcionalidade. Remova a identidade atribuída pelo sistema com o modelo portal do Azure, C#ou Resource Manager, conforme detalhado abaixo.
SelecioneIdentidade de Definições> no painel esquerdo do portal.
No painel Identidade>, separador Sistema atribuído:
Mova o controlo de deslize Estado para Desativado.
Selecione Guardar
Na janela de 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 com 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 com um modelo do Azure Resource Manager
Execute o seguinte para remover a identidade atribuída pelo sistema:
{
"identity": {
"type": "None"
}
}
Nota
Se o cluster tiver identidades atribuídas pelo sistema e atribuídas pelo utilizador ao mesmo tempo, após a remoção da identidade atribuída pelo sistema, a type propriedade será UserAssigned
Adicionar uma identidade atribuída pelo utilizador
Atribua uma identidade gerida atribuída pelo utilizador ao cluster. Um cluster pode ter mais do que uma identidade atribuída pelo utilizador. A criação de um cluster com uma identidade atribuída pelo utilizador requer que seja definida uma propriedade adicional no cluster. Adicione a identidade atribuída pelo utilizador com o modelo portal do Azure, C#ou Resource Manager, conforme detalhado abaixo.
Crie uma aplicação Microsoft Entra e um principal de serviço que possa aceder aos recursos. Adiciona a atribuição de função no âmbito da subscrição e obtém os necessários Directory (tenant) ID, Application IDe Client Secret.
Criar ou atualizar o cluster
Crie ou atualize o cluster com a Identity propriedade :
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 ou atualizado com êxito com uma identidade:
Se o resultado contiver ProvisioningState o Succeeded valor, o cluster foi criado ou atualizado e deverá 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 utilizada para Microsoft Entra administração. O ClientId é um identificador exclusivo para a nova identidade da aplicação que é utilizado para especificar a identidade a utilizar durante as chamadas de runtime.
Adicionar uma identidade atribuída pelo utilizador com um modelo de Resource Manager do Azure
Qualquer recurso do tipo Microsoft.Kusto/clusters pode ser criado com uma identidade atribuída pelo utilizador ao incluir a seguinte propriedade na definição do recurso, substituindo <RESOURCEID> pelo ID de recurso da identidade pretendida:
O PrincipalId é um identificador exclusivo para a identidade utilizada para Microsoft Entra administração. O ClientId é um identificador exclusivo para a nova identidade da aplicação que é utilizado para especificar a identidade a utilizar durante as chamadas de runtime.
Nota
Um cluster pode ter identidades atribuídas pelo sistema e atribuídas pelo utilizador ao mesmo tempo. Neste caso, a type propriedade seria SystemAssigned,UserAssigned.
Remover uma identidade gerida atribuída pelo utilizador de um cluster
Remova a identidade atribuída pelo utilizador com o modelo portal do Azure, C#ou Resource Manager, conforme detalhado abaixo.
SelecioneIdentidade de Definições> no painel esquerdo do portal.
Selecione o separador Utilizador atribuído .
Procure a identidade que criou anteriormente e selecione-a. Selecione Remover.
Na janela de pop-up, selecione Sim para remover a identidade atribuída pelo utilizador. O painel Identidade é revertido para a mesma condição que antes da adição da identidade atribuída pelo utilizador.
Remover uma identidade atribuída pelo utilizador com C#
Execute o seguinte para remover a identidade atribuída pelo utilizador:
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 utilizador com um modelo do Azure Resource Manager
Execute o seguinte para remover a identidade atribuída pelo utilizador:
Para remover identidades, defina os respetivos valores como nulos. Todas as outras identidades existentes não serão afetadas.
Para remover todas as identidades atribuídas pelo utilizador, a type propriedade seria None,
Se o cluster tivesse identidades atribuídas pelo sistema e atribuídas pelo utilizador ao mesmo tempo, a type propriedade estaria SystemAssigned,UserAssigned com as identidades a remover ou SystemAssigned a remover todas as identidades atribuídas pelo utilizador.