Compartilhar via


Tutorial: usar a identidade gerenciada para conectar um aplicativo Web do Azure a um banco de dados SQL do Azure sem segredos

O Serviço de Aplicativo do Azure fornece um serviço de hospedagem na Web altamente escalonável e com aplicação automática de patches no Azure. O Serviço de Aplicativo também fornece uma identidade gerenciada para seu aplicativo, que é uma solução perfeita para proteger o acesso ao SQL do Azure e a outros serviços do Azure. As identidades gerenciadas no Serviço de Aplicativo tornam seu aplicativo mais seguro ao eliminar os segredos, como as credenciais nas cadeias de conexão.

Este tutorial mostra como adicionar identidade gerenciada a um aplicativo .NET de exemplo que tem um back-end do SQL do Azure. Depois de concluir, seu aplicativo poderá se conectar ao Banco de Dados SQL do Azure com segurança sem a necessidade de um nome de usuário e senha.

Diagrama de arquitetura para o cenário do tutorial.

Neste tutorial, você:

  • Habilitar identidades gerenciadas.
  • Conceder ao Banco de Dados SQL do Azure acesso à identidade gerenciada.
  • Configurar o Entity Framework para usar a autenticação do Microsoft Entra com o Banco de Dados SQL.
  • Conectar-se ao Banco de Dados SQL do Visual Studio usando a autenticação do Microsoft Entra.

Para obter diretrizes sobre como usar o Banco de Dados MySQL do Azure ou Banco de Dados PostgreSQL do Azure (Node.js, Python e Java), confira Tutorial: conectar-se aos bancos de dados do Azure através do Serviço de Aplicativo sem segredos usando uma identidade gerenciada.

Observação

  • Não há suporte para o Microsoft Entra ID nem para identidades gerenciadas no SQL Server local.

  • A autenticação do Microsoft Entra é diferente da autenticação integrada do Windows no Active Directory Domain Services (AD DS) local. O AD DS e o Microsoft Entra ID usam protocolos de autenticação completamente diferentes. Para mais informações, consulte a documentação do Microsoft Entra Domain Services.

Pré-requisitos

  • Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.

  • Tenha um aplicativo CRUD (create-read-update-delete) básico do Serviço de Aplicativo do Azure ASP.NET MVC ou ASP.NET Core MVC que usa o Banco de Dados SQL do Azure com autenticação SQL como back-end. As etapas neste tutorial são compatíveis com as versões do .NET a seguir:

    • .NET Framework 4.8 e posteriores
    • .NET 6.0 e posteriores
  • Permita a conexão do cliente do computador com o Azure, para que você possa depurar seu aplicativo em seu ambiente de desenvolvimento. Você pode adicionar o endereço IP do cliente seguindo as etapas descritas em Gerenciar regras de firewall de IP no nível do servidor usando o portal do Azure.

  • Entre no Azure Cloud Shell ou prepare seu ambiente para usar a CLI do Azure.

Conceder acesso de administrador de banco de dados a um usuário do Microsoft Entra

Habilite a autenticação do Microsoft Entra no banco de dados do SQL do Azure, atribuindo um usuário do Microsoft Entra como o administrador do SQL Server do Azure. O administrador do Microsoft Entra deve ser um usuário que você criou, importou, sincronizou ou convidou para o Microsoft Entra ID. Esse usuário pode não ser o mesmo que o usuário da conta Microsoft da sua assinatura do Azure.

Execute os comandos a seguir no ambiente Bash do Azure Cloud Shell ou depois de entrar na CLI do Azure localmente.

  1. Use az ad user list com o parâmetro display-name, filter ou upn para obter a ID do objeto para o usuário do Microsoft Entra ID que você deseja tornar administrador. Execute az ad user list independente para mostrar informações para todos os usuários no diretório do Microsoft Entra.

    Por exemplo, o comando a seguir lista informações para um usuário do Microsoft Entra ID com o display-name de Nome Sobrenome.

    az ad user list --display-name "Firstname Lastname"
    

    Aqui está um exemplo de saída:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Adicione o usuário do Microsoft Entra ID como administrador no SQL Server do Azure usando az sql server ad-admin create com o parâmetro object-id. No comando a seguir, substitua <server-name> pelo nome do servidor menos o sufixo .database.windows.net e <entra-id> pelo valor id da saída do comando az ad user list anterior.

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    

Configurar a conectividade de identidade gerenciada para o aplicativo

As etapas a seguir configuram seu aplicativo para se conectar ao Banco de Dados SQL do Azure usando uma identidade gerenciada atribuída pelo sistema. Para usar uma identidade atribuída pelo usuário, confira o Tutorial: conectar-se aos bancos de dados do Azure através do Serviço de Aplicativo sem segredos usando uma identidade gerenciada.

Habilitar uma identidade gerenciada para o aplicativo

Para habilitar uma identidade gerenciada para o Aplicativo Azure, use o comando az webapp identity assign, substituindo <app-name> pelo nome do aplicativo. O nome de uma identidade atribuída pelo sistema é sempre o mesmo que o nome do aplicativo.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Veja um exemplo da saída:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Para habilitar a identidade gerenciada para um slot de implantação, adicione --slot <slot-name> ao comando anterior e use o nome do slot em <slot-name>. O nome da identidade atribuída ao sistema é <app-name>/slots/<slot-name> em um slot de implantação.

Se quiser, você pode adicionar a identidade a um grupo do Microsoft Entra e, a seguir, conceder acesso ao Banco de Dados SQL ao grupo do Microsoft Entra, no lugar da identidade. Para conceder permissões para um grupo do Microsoft Entra, use o nome de exibição do grupo. Os comandos a seguir adicionam a identidade gerenciada de exemplo 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 myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Conceder permissões à identidade gerenciada

Conceda à identidade as permissões mínimas de que seu aplicativo precisa.

  1. Abra uma linha de comando do PowerShell e entre no Banco de Dados SQL usando o comando SQLCMD a seguir. Substitua <server-name> pelo nome do servidor, <db-name> pelo nome do banco de dados e <admin-user> pelo userPrincipalName do usuário administrador da saída do comando az ad user list anterior.

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Siga as solicitações para entrar.

  2. No prompt do SQL, execute os comandos a seguir para conceder ao aplicativo as permissões mínimas necessárias no banco de dados. Substitua <identity-name> pelo nome da identidade gerenciada no Microsoft Entra ID, que é o mesmo que o nome do aplicativo.

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

Observação

Os serviços de back-end da identidade gerenciada mantêm um cache de token que atualiza o token para um recurso de destino somente quando ele expira. Se você tentar modificar suas permissões do Banco de Dados SQL depois de primeiro obter um token com seu aplicativo, não obterá um novo token com permissões atualizadas até que o token armazenado em cache expire.

Remover a cadeia de conexão original

As alterações feitas em web.config ou appsettings.json funcionam com a identidade gerenciada. Você pode remover a cadeia de conexão original usada quando implantou seu aplicativo pela primeira vez. Para excluir a cadeia de conexão, execute o seguinte comando da CLI do Azure, substituindo <app-name> pelo nome do aplicativo e <connection-string-name> pelo nome da cadeia de conexão.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names <connection-string-name>

Configurar seu ambiente de desenvolvimento

Configure o ambiente de desenvolvimento escolhido e entre no Azure. 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.

O Visual Studio para Windows é integrado à autenticação do Microsoft Entra.

  1. 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 superior e depois 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 superior 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.

Modificar seu projeto e publicar seu aplicativo

Seu aplicativo Web apoiado pelo Banco de Dados SQL do Azure usa um contexto de banco de dados para se conectar ao banco de dados. Para usar a autenticação do Microsoft Entra para funcionar com o aplicativo, você deve atualizar o contexto do banco de dados para se referir ao provedor do SQL Server do Entity Framework, que depende do provedor de ADO.NET Microsoft.Data.SqlClient moderno.

O provedor do Entity Framework substitui o provedor interno System.Data.SqlClient do SQL Server e inclui suporte para métodos de autenticação do Microsoft Entra ID. Para obter mais informações, consulte Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] funciona localmente para usar Microsoft.Data.SqlClient para o contexto do banco de dados, mas como System.Data.SqlClient é codificado como o provedor no Serviço de Aplicativo do Azure, você deve estender MicrosoftSqlDbConfiguration para referências de redirecionamento System.Data.SqlClient para Microsoft.Data.SqlClient em vez disso. As etapas diferem dependendo se você tem um aplicativo ASP.NET ou ASP.NET Core.

Um aplicativo ASP.NET Core usa o Entity Framework Core por padrão.

  1. No Console do Gerenciador de Pacotes no Visual Studio, adicione o pacote NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. Em appsettings.json, substitua o valor da cadeia de conexão pelo código a seguir, substituindo <server-name e <database-name> pelo nome do servidor e pelo nome do banco de dados.

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Observação

    Você pode usar a autenticação Padrão do Active Directory no computador local e no Serviço de Aplicativo do Azure. O driver pode adquirir um token do Microsoft Entra ID de várias maneiras diferentes.

    Se o aplicativo for implantado, o driver receberá um token da identidade gerenciada atribuída pelo sistema do aplicativo. O driver também pode se autenticar com uma identidade gerenciada atribuída pelo usuário se você incluir: User Id=<client-id-of-user-assigned-managed-identity>; na sua cadeia de conexão.

    A classe DefaultAzureCredential armazena em cache o token que está na memória e o recupera do Microsoft Entra ID antes da expiração. Você não precisa de nenhum código personalizado para atualizar o token.

    Agora você tem tudo o que precisa para se conectar ao Banco de Dados SQL do Azure ao depurar no Visual Studio. Seu código usa o usuário do Microsoft Entra configurado ao configurar seu ambiente de desenvolvimento.

  3. Execute seu aplicativo. O aplicativo CRUD no seu navegador se conecta diretamente ao Banco de Dados SQL do Azure, usando a autenticação do Microsoft Entra. Essa configuração permite que você execute migrações de banco de dados do Visual Studio.

  4. Publique suas alterações usando os seguintes comandos do Git:

    git commit -am "configure managed identity"
    git push azure main
    

Testar o aplicativo

Quando a nova página da Web mostra a lista de tarefas pendentes, seu aplicativo se conecta ao banco de dados usando a identidade gerenciada.

Captura de tela que mostra o Aplicativo Azure após a Migração do Code First.

Agora você pode editar a lista de tarefas pendentes.

Limpar os recursos

Nas etapas anteriores, você criou os recursos do Azure em um grupo de recursos. Se você acha que não precisará desses recursos no futuro, exclua o grupo de recursos executando o seguinte comando no Cloud Shell:

az group delete --name myResourceGroup

Esse comando pode levar alguns minutos para ser executado.