Partilhar via


Tutorial: Ligue-se a bases de dados Azure a partir do App Service sem segredos usando uma identidade gerida

App Service oferece um serviço de alojamento web altamente escalável e auto-patchável em Azure. Também fornece uma identidade gerida para a sua aplicação, que é uma solução chave na mão para garantir o acesso a bases de dados do Azure, incluindo:

Nota

Este tutorial não inclui orientações para Azure Cosmos DB, que suporta autenticação Microsoft Entra de forma diferente. Para mais informações, consulte a documentação do Azure Cosmos DB, como Usar identidades geridas atribuídas pelo sistema para aceder aos dados do Azure Cosmos DB.

As identidades geridas no Serviço de Aplicações retiram a necessidade de ter segredos nas suas aplicações, como credenciais nas cadeias de ligação, o que as torna mais seguras. Este tutorial mostra como se conectar aos bancos de dados mencionados acima a partir do Serviço de Aplicativo usando identidades gerenciadas.

O que você vai aprender:

  • Configure um utilizador Microsoft Entra como administrador para a sua base de dados Azure.
  • Ligue-se à sua base de dados como utilizador do Microsoft Entra.
  • Configure uma identidade gerenciada atribuída pelo sistema ou pelo usuário para um aplicativo do Serviço de Aplicativo.
  • Conceda acesso ao banco de dados à identidade gerenciada.
  • Liga-te à base de dados Azure a partir do teu código (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando uma identidade gerida.
  • Ligue-se à base de dados Azure a partir do seu ambiente de desenvolvimento usando o utilizador Microsoft Entra.

Se não tiver uma conta Azure, crie uma conta free antes de começar.

Pré-requisitos

  • Crie uma aplicação no App Service baseada em .NET, Node.js, Python ou Java.
  • Crie um servidor de base de dados com Base de Dados SQL do Azure, Base de Dados do Azure para MySQL ou Base de Dados do Azure para PostgreSQL.
  • Você deve estar familiarizado com o padrão de conectividade padrão (com nome de usuário e senha) e ser capaz de se conectar com êxito do seu aplicativo do Serviço de Aplicativo ao banco de dados de sua escolha.

Prepare o seu ambiente para a CLI do Azure.

1. Instale a extensão sem senha do Service Connector

Instale a mais recente extensão sem palavra-passe do Service Connector para a CLI do Azure:

az extension add --name serviceconnector-passwordless --upgrade

Nota

Verifique se a extensão "serviceconnector-passwordless" tem a versão "2.0.2" ou superior executando az version. Pode ser necessário atualizar primeiro a CLI do Azure para atualizar a versão da extensão.

2. Crie uma conexão sem senha

Em seguida, crie uma conexão sem senha com o Service Connector.

Gorjeta

O portal Azure pode ajudá-lo a compor os seguintes comandos. No portal Azure, vai ao teu recurso Serviço de Aplicações do Azure, seleciona Service Connector no menu esquerdo e seleciona Criar. Preencha o formulário com todos os parâmetros necessários. O Azure gera automaticamente o comando de criação de ligação, que podes copiar para usar na CLI ou executar no Azure Cloud Shell.

O comando CLI do Azure seguinte utiliza um parâmetro --client-type.

  1. Opcionalmente, execute o az webapp connection create sql -h para obter os tipos de cliente suportados.

  2. Escolha um tipo de cliente e execute o comando correspondente. Substitua o seguinte marcador de posição pelos seus próprios dados.

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

Este comando do Service Connector conclui as seguintes tarefas em segundo plano:

  • Ative a identidade gerida atribuída ao sistema, ou atribua uma identidade de utilizador à aplicação <server-name> alojada pela Serviço de Aplicações do Azure.
  • Defina o administrador do Microsoft Entra para o utilizador atualmente com sessão iniciada.
  • Adicione um usuário de banco de dados para a identidade gerenciada atribuída pelo sistema ou a identidade gerenciada atribuída pelo usuário. Conceda todos os privilégios do banco de dados <database-name> a esse usuário. O nome de utilizador pode ser encontrado na cadeia de ligação na saída de comando anterior.
  • Defina configurações nomeadas AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING ou AZURE_SQL_CONNECTIONSTRING ao recurso Azure consoante o tipo de base de dados.
  • Para o App Service, as configurações são definidas no painel de Configurações do Aplicativo.

Se você encontrar algum problema ao criar uma conexão, consulte Solução de problemas para obter ajuda.

3. Modifique o seu código

  1. Instale dependências.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Obtenha a cadeia de ligação do Base de Dados SQL do Azure da variável de ambiente adicionada pelo Service Connector.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Para mais informações, consulte Usar autenticação de Identidade Gerida do Active Directory.

Para mais informações, consulte o site da programação cliente para Microsoft SQL Server. Para obter mais exemplos de código, consulte Criar uma conexão sem senha com um serviço de banco de dados por meio do Service Connector.

4. Configure seu ambiente de desenvolvimento

Este código de exemplo usa DefaultAzureCredential para obter um token utilizável para a tua base de dados de Azure a partir de Microsoft Entra ID e depois adiciona-o à ligação à base de dados. Embora você possa personalizar DefaultAzureCredential, ele já é versátil por padrão. Recebe um token de um utilizador da Microsoft Entra autenticado ou de uma identidade gerida, dependendo de o executar localmente no ambiente de desenvolvimento ou no App Service.

Sem mais alterações, o seu código está pronto para ser executado no Azure. Para depurar o seu código localmente, o seu ambiente de desenvolvimento precisa, no entanto, de um utilizador Microsoft Entra com sessão iniciada. Neste passo, configura o ambiente de sua escolha iniciando sessão com o seu utilizador Microsoft Entra.

  1. O Visual Studio para Windows está integrado com a autenticação Microsoft Entra. Para ativar o desenvolvimento e a depuração no Visual Studio, adicione o seu utilizador Microsoft Entra no Visual Studio selecionando File>Definições da Conta no menu, e selecione Iniciar sessão ou Adicionar.

  2. Para definir o utilizador Microsoft Entra para autenticação de serviço Azure, selecione Tools>Opções no menu, depois selecione Azure Autenticação de Serviço>Seleção de Conta. Selecione o utilizador Microsoft Entra que adicionou e selecione OK.

Para mais informações sobre como configurar o seu ambiente de desenvolvimento para autenticação Microsoft Entra, consulte a Biblioteca de Cliente de Identidade do Azure para .NET.

Agora está pronto para desenvolver e depurar a sua aplicação com a base de dados SQL como back-end, usando autenticação Microsoft Entra.

5. Teste e publique

  1. Execute seu código em seu ambiente de desenvolvimento. O seu código utiliza o utilizador Microsoft Entra autenticado no seu ambiente para se ligar à base de dados do back-end. O utilizador pode aceder à base de dados porque está configurado como administrador Microsoft Entra para a base de dados.

  2. Publique o seu código no Azure usando o método de publicação preferido. No Serviço de Aplicativo, seu código usa a identidade gerenciada do aplicativo para se conectar ao banco de dados back-end.

Perguntas mais frequentes

A identidade gerida suporta SQL Server?

Sim. Para obter mais informações, consulte:

Recebo o erro Login failed for user '<token-identified principal>'.

A identidade gerida para a qual está a tentar pedir um token não está autorizada a aceder à base de dados do Azure.

Fiz alterações na autenticação do Serviço de Aplicativo ou no registro do aplicativo associado. Por que ainda recebo o token antigo?

Os serviços back-end de identidades gerenciadas também mantêm um cache de token que atualiza o token para um recurso de destino somente quando ele expira. Se você modificar a configuração depois de tentar obter um token com seu aplicativo, não obterá um novo token com as permissões atualizadas até que o token armazenado em cache expire. A melhor maneira de contornar isso é testar suas alterações com uma nova janela InPrivate (Edge)/private (Safari)/Incognito (Chrome). Dessa forma, você certamente começará a partir de uma nova sessão autenticada.

Como posso adicionar a identidade gerida a um grupo Microsoft Entra?

Se quiser, pode adicionar a identidade a um grupo Microsoft Entra, e depois conceder acesso ao grupo Microsoft Entra em vez da identidade. Por exemplo, os comandos a seguir adicionam a identidade gerenciada da etapa anterior a um novo grupo chamado myAzureSQLDBAccessGroup:

groupid=$(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
msiobjectid=$(az webapp identity show --resource-group <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Para conceder permissões de base de dados a um grupo Microsoft Entra, consulte a documentação do respetivo tipo de base de dados.

Eu recebo o erro SSL connection is required. Please specify SSL options and retry.

Ligar à base de dados do Azure requer mais definições e está fora do âmbito deste tutorial. Para obter mais informações, consulte um dos seguintes links:

Criei meu aplicativo com o modelo Aplicativo Web + Banco de Dados e agora não consigo configurar uma conexão de identidade gerenciada com os comandos do Service Connector.

O Service Connector precisa de acesso à rede para o banco de dados para conceder acesso à identidade do aplicativo. Quando cria uma aplicação segura por defeito e uma arquitetura de base de dados no portal Azure com o modelo Web App + Base de Dados, a arquitetura bloqueia o acesso à rede à base de dados e só permite ligações dentro da rede virtual. Também é verdade para o Azure Cloud Shell. No entanto, podes deploy Cloud Shell na rede virtual e depois executar o comando Service Connector nessa Cloud Shell.

Próximos passos

O que aprendeu:

  • Configure um utilizador Microsoft Entra como administrador para a sua base de dados Azure.
  • Ligue-se à sua base de dados como utilizador do Microsoft Entra.
  • Configure uma identidade gerenciada atribuída pelo sistema ou pelo usuário para um aplicativo do Serviço de Aplicativo.
  • Conceda acesso ao banco de dados à identidade gerenciada.
  • Liga-te à base de dados Azure a partir do teu código (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando uma identidade gerida.
  • Ligue-se à base de dados Azure a partir do seu ambiente de desenvolvimento usando o utilizador Microsoft Entra.