Configurar identidades geridas para o cluster do Azure Data Explorer
Artigo
Uma identidade gerida do Azure Active Directory permite que o cluster aceda facilmente a outros recursos protegidos por Azure AD, como o Azure Key Vault. A identidade é gerida pela plataforma do Azure e não requer que aprovisione ou rode segredos. Atualmente, a configuração de identidade gerida é suportada apenas para ativar chaves geridas pelo cliente para o cluster.
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: recurso autónomo do Azure que pode ser atribuído ao cluster. Um cluster pode ter múltiplas identidades atribuídas pelo utilizador.
Este artigo mostra-lhe como adicionar e remover identidades geridas atribuídas pelo sistema e atribuídas pelo utilizador para clusters do Azure Data Explorer.
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 desativar e reativar a funcionalidade. As políticas de acesso de recursos a jusante também terão de ser atualizadas para utilizar a nova identidade.
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 Azure AD 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 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 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;
var tenantGuid = clusterData.Identity.TenantId;
PrincipalId e TenantId são substituídos por GUIDs. A TenantId propriedade identifica o Azure AD inquilino ao qual pertence a identidade. O PrincipalId é um identificador exclusivo para a nova identidade do cluster. No Azure AD, 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 Azure AD inquilino ao qual pertence a identidade. O PrincipalId é um identificador exclusivo para a nova identidade do cluster. No Azure AD, 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 Azure AD. As identidades atribuídas pelo sistema também são removidas automaticamente do Azure AD 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 clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, 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 Azure AD 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 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 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;
var clientGuid = userIdentity.ClientId;
O PrincipalId é um identificador exclusivo para a identidade utilizada para Azure AD 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 Azure AD 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 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 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.