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 que garante 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, tal como Use 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 Azure SQL Database, Azure Database for MySQL ou Azure Database for 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 Azure CLI.

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

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

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 Azure CLI 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 do Azure pode ajudá-lo a compor os comandos abaixo. No portal Azure, vá ao seu recurso Azure App Service, selecione Service Connector no menu esquerdo e selecione 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 Azure CLI 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 os espaços reservados abaixo por suas próprias informações.

    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 Azure App Service.
  • Configure o administrador do Microsoft Entra para o utilizador que iniciou sessão atualmente.
  • 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 connection string 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 conexão da Azure SQL Database a partir 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 Utilizar a autenticação de Identidade Gerida do Active Directory.

Para mais informações, consulte a página inicial para 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 do utilizador Microsoft Entra iniciado ou de uma identidade gerida, dependendo se o executa localmente no seu 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, no entanto, o seu ambiente de desenvolvimento precisa 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 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 de back-end. O utilizador pode aceder à base de dados porque está configurado como administrador do 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.

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

Configurar a conectividade TLS em Azure Database for PostgreSQL - Servidor ÚnicoConfigure a conectividade SSL na sua aplicação para se ligar de forma segura ao Azure Database for MySQL

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.