Compartilhar via


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

O Serviço de Aplicativo fornece um serviço de hospedagem na Web altamente escalonável e com aplicação automática de patches no Azure. Ele também fornece uma identidade gerenciada para seu aplicativo, que é uma solução perfeita para proteger o acesso aos bancos de dados do Azure, incluindo:

Observação

Esse tutorial não inclui diretrizes para o Azure Cosmos DB, que dá suporte à 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 gerenciadas no Serviço de Aplicativo tornam seu aplicativo mais seguro, eliminando os segredos do aplicativo, como as credenciais nas cadeias de conexão. Este tutorial mostra como se conectar aos bancos de dados mencionados acima do Serviço de Aplicativo usando identidades gerenciadas.

O que você aprenderá:

  • Configurar um usuário do Microsoft Entra como administrador do banco de dados do Azure.
  • Conectar-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 aplicativo do Serviço de Aplicativo.
  • Conceder ao banco de dados acesso à identidade gerenciada.
  • Conecte-se ao banco de dados do Azure do código (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando uma identidade gerenciada.
  • Conectar-se ao banco de dados do Azure do ambiente de desenvolvimento com o usuário do Microsoft Entra.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

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

Prepare seu ambiente para a CLI do Azure.

1. Instalar a extensão sem senha do Conector de Serviço

Instale a extensão sem senha do conector de serviço mais recente para a CLI do Azure:

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

Observação

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

2. Criar a conexão sem senha

Depois, crie uma conexão sem senha com o Conector de Serviço.

Dica

O portal do Azure pode ajudar você a redigir os comandos abaixo. Na portal do Azure, acesse o recurso Serviço de Aplicativo do Azure, selecione Conector de Serviço no menu à esquerda e, em seguida, selecione Criar. Preencha o formulário com os parâmetros obrigató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 parâmetro --client-type.

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

  2. Escolha um tipo de cliente e execute o comando correspondente. Substitua os espaços reservados abaixo pelas 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>
    

Esse comando do Conector de Serviço executa as seguintes tarefas em segundo plano:

  • Habilite a identidade gerenciada atribuída pelo sistema ou atribua a identidade de usuário para o <server-name> do aplicativo hospedado pelo Serviço de Aplicativo do Azure.
  • Defina o administrador do Microsoft Entra como o usuário conectado atual.
  • Adicione um usuário do banco de dados para a identidade gerenciada atribuída pelo sistema ou 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 chamadas 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 ocorrer algum problema ao criar uma conexão, consulte Solução de problemas para obter ajuda.

3. Modificar seu código

  1. Instale as 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 Conector do Serviço.

    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 Active Directory.

Para obter mais informações, confira Página inicial para a programação de cliente para o Microsoft SQL Server. Para mais exemplos de código, consulte Criar uma conexão sem senha para um serviço de banco de dados por meio do Conector de Serviço.

4. Configurar o ambiente de desenvolvimento

Esse código de exemplo usa DefaultAzureCredential para obter um token que pode ser usado para seu banco de dados do Microsoft Entra ID e, em seguida, adiciona-o à conexão de banco de dados. Embora você possa personalizar DefaultAzureCredential, por padrão, ele já é versátil. Ele obtém um token do usuário conectado do 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 alterações adicionais, o 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 do Microsoft Entra. Nessa etapa, você configurará seu ambiente de escolha se conectando com seu usuário do Microsoft Entra.

  1. O Visual Studio para Windows é integrado à 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 Arquivo>Configurações de Conta no menu e, a seguir, selecione Entrar ou Adicionar.

  2. Para configurar o usuário do Microsoft Entra para a autenticação do serviço do Azure, selecione Ferramentas>Opções no menu e, em seguida, selecione Autenticação do Serviço do Azure>Seleção de Conta. 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 a autenticação do Microsoft Entra, confira Biblioteca de clientes da Identidade do Azure 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. Testar e publicar

  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 de 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 preferencial. No Serviço de Aplicativo, o código usa a identidade gerenciada do aplicativo para se conectar ao banco de dados de back-end.

Perguntas frequentes

A identidade gerenciada dá suporte ao SQL Server?

Sim. Para saber mais, veja:

Eu 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 de aplicativo associado. Por que ainda recebo o token antigo?

Os serviços de back-end das 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 o seu aplicativo, você 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 adicionar a identidade gerenciada a um grupo do Microsoft Entra?

Se quiser, você pode adicionar a identidade a um grupo do Microsoft Entra e 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 respectivo tipo de banco de dados.

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

A conexão ao banco de dados do Azure requer configurações adicionais e está fora 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 ÚnicoConfigurar 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 Web App + Database 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 do banco de dados para conceder acesso à identidade do aplicativo. Ao criar uma arquitetura de aplicativo e banco de dados segura por padrão no portal do Azure com o modelo Aplicativo Web + Banco de Dados, a arquitetura bloqueia o acesso de rede ao banco de dados e permite somente conexões de dentro da rede virtual. Isso 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óximas etapas

O que você aprendeu:

  • Configurar um usuário do Microsoft Entra como administrador do banco de dados do Azure.
  • Conectar-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 aplicativo do Serviço de Aplicativo.
  • Conceder ao banco de dados acesso à identidade gerenciada.
  • Conecte-se ao banco de dados do Azure do código (.NET Framework 4.8, .NET 6, Node.js, Python, Java) usando uma identidade gerenciada.
  • Conectar-se ao banco de dados do Azure do ambiente de desenvolvimento com o usuário do Microsoft Entra.