Tutorial: Conectar-se a bancos de dados do Azure a partir do Serviço de Aplicativo sem segredos usando uma identidade gerenciada

O Serviço de Aplicações oferece um serviço de alojamento na Web altamente dimensionável e com correção automática no Azure. Ele também fornece uma identidade gerenciada para seu aplicativo, que é uma solução pronta para uso para proteger o acesso aos bancos de dados do Azure, incluindo:

Nota

Este tutorial não inclui orientações para o Azure Cosmos DB, que suporta a autenticação do Microsoft Entra de forma diferente. Para obter mais informações, consulte a documentação do Azure Cosmos DB, como Usar identidades gerenciadas atribuídas pelo sistema para acessar 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 usuário do Microsoft Entra como administrador para seu banco de dados do Azure.
  • Conecte-se ao seu banco de dados como o usuário 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.
  • Conecte-se ao banco de dados do Azure a partir do seu código (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando uma identidade gerenciada.
  • Conecte-se ao banco de dados do Azure a partir do seu ambiente de desenvolvimento usando o usuário do Microsoft Entra.

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

Pré-requisitos

  • Crie um aplicativo no Serviço de Aplicativo baseado em .NET, Node.js, Python ou Java.
  • Crie um servidor de banco de dados com o Banco de Dados SQL do Azure, o Banco de Dados do Azure para MySQL ou o Banco 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 seu ambiente para a CLI do Azure.

  • Use o ambiente Bash no Azure Cloud Shell. Para obter mais informações, consulte Guia de início rápido para Bash no Azure Cloud Shell.

  • Se preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se estiver a utilizar o Windows ou macOS, considere executar a CLI do Azure num contentor Docker. Para obter mais informações, consulte Como executar a CLI do Azure em um contêiner do Docker.

    • Se estiver a utilizar uma instalação local, inicie sessão no CLI do Azure ao utilizar o comando az login. Para concluir o processo de autenticação, siga os passos apresentados no seu terminal. Para outras opções de entrada, consulte Entrar com a CLI do Azure.

    • Quando solicitado, instale a extensão da CLI do Azure na primeira utilização. Para obter mais informações sobre as extensões, veja Utilizar extensões com o CLI do Azure.

    • Execute o comando az version para localizar a versão e as bibliotecas dependentes instaladas. Para atualizar para a versão mais recente, execute o comando az upgrade.

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

Instale a extensão sem senha mais recente do Service Connector para a CLI do Azure:

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

Nota

Verifique se a extensão "serviceconnector-passwordless" versão é "2.0.2" ou superior executando az version. Talvez seja necessário atualizar a CLI do Azure primeiro 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 do Azure, vá para o recurso do Serviço de Aplicativo do Azure, selecione Conector de Serviço 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 conexão, que você pode copiar para usar na CLI ou executar no Azure Cloud Shell.

O comando da CLI do Azure a seguir usa um --client-type parâmetro.

  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:

  • Habilite a identidade gerenciada atribuída ao sistema ou atribua uma identidade de usuário para o aplicativo <server-name> hospedado pelo Serviço de Aplicativo do Azure.
  • Defina o administrador do Microsoft Entra como o usuário conectado atual.
  • 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 usuário pode ser encontrado na cadeia de conexão na saída do comando anterior.
  • Defina configurações nomeadas AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRINGou AZURE_SQL_CONNECTIONSTRING para o recurso do Azure com base no tipo de banco de dados.
  • Para o Serviço de Aplicativo, as configurações são definidas na folha 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 do Banco 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 obter mais informações, consulte Usando a autenticação de identidade gerenciada do Ative Directory.

Para obter mais informações, consulte Homepage para programação de cliente para o 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 seu banco de dados do Azure do Microsoft Entra ID e, em seguida, adiciona-o à conexão de banco de dados. Embora você possa personalizar DefaultAzureCredential, ele já é versátil por padrão. Ele obtém um token do usuário conectado ao Microsoft Entra ou de uma identidade gerenciada, dependendo se você o executa localmente em seu ambiente de desenvolvimento ou no Serviço de Aplicativo.

Sem mais alterações, seu código está pronto para ser executado no Azure. Para depurar seu código localmente, no entanto, seu ambiente de desenvolvimento precisa de um usuário conectado ao Microsoft Entra. Nesta etapa, você configura seu ambiente de escolha entrando com seu usuário do Microsoft Entra.

  1. O Visual Studio para Windows está integrado com a autenticação do Microsoft Entra. Para habilitar o desenvolvimento e a depuração no Visual Studio, adicione seu usuário do Microsoft Entra no Visual Studio selecionando Configurações de Conta de Arquivo>no menu e selecione Entrar ou Adicionar.

  2. Para definir o usuário do Microsoft Entra para autenticação de serviço do Azure, selecione Opções de Ferramentas>no menu e, em seguida, selecione Seleção de Conta de Autenticação>de Serviço do Azure. Selecione o usuário do Microsoft Entra que você adicionou e selecione OK.

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

Agora você está pronto para desenvolver e depurar seu aplicativo com o Banco de dados SQL como back-end, usando a autenticação do Microsoft Entra.

5. Teste e publique

  1. Execute seu código em seu ambiente de desenvolvimento. Seu código usa o usuário conectado do Microsoft Entra em seu ambiente para se conectar ao banco de dados back-end. O usuário pode acessar o banco de dados porque ele está configurado como um administrador do Microsoft Entra para o banco de dados.

  2. Publique 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 gerenciada oferece suporte ao SQL Server?

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

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

A identidade gerenciada para a qual você está tentando solicitar um token não está autorizada a acessar o banco 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 adiciono a identidade gerenciada a um grupo do Microsoft Entra?

Se desejar, você pode adicionar a identidade a um grupo do Microsoft Entra e, em seguida, conceder acesso ao grupo do 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 banco de dados para um grupo do Microsoft Entra, consulte a documentação do respetivo tipo de banco de dados.

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

A conexão com o banco de dados do Azure requer configurações adicionais e está além do escopo deste tutorial. Para obter mais informações, consulte um dos seguintes links:

Configurar a conectividade TLS no Banco de Dados do Azure para PostgreSQL - ServidorÚnico Configure a conectividade SSL em seu aplicativo para se conectar com segurança ao Banco de Dados do Azure para 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 você cria um aplicativo seguro por padrão e uma arquitetura de banco de dados no portal do Azure com o modelo Aplicativo Web + Banco de Dados, a arquitetura bloqueia o acesso de rede ao banco de dados e só permite conexões de dentro da rede virtual. Também é verdade para o Azure Cloud Shell. No entanto, você pode implantar o Cloud Shell na rede virtual e, em seguida, executar o comando Service Connector nesse Cloud Shell.

Próximos passos

O que aprendeu:

  • Configure um usuário do Microsoft Entra como administrador para seu banco de dados do Azure.
  • Conecte-se ao seu banco de dados como o usuário 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.
  • Conecte-se ao banco de dados do Azure a partir do seu código (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando uma identidade gerenciada.
  • Conecte-se ao banco de dados do Azure a partir do seu ambiente de desenvolvimento usando o usuário do Microsoft Entra.