Tutorial: Ligar à Base de Dados SQL do Azure a partir de .NET App Service sem segredos mediante a utilização de uma identidade gerida
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. Também oferece uma identidade gerida para a sua aplicação, que é uma solução chave na mão para proteger o acesso à Base de Dados SQL do Azure e a outros serviços do Azure. 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. Neste tutorial, você adiciona identidade gerenciada ao aplicativo Web de exemplo criado em um dos seguintes tutoriais:
- Tutorial: Criar um aplicativo ASP.NET no Azure com o Banco de Dados SQL do Azure
- Tutorial: Criar um aplicativo ASP.NET Core e do Banco de Dados SQL do Azure no Serviço de Aplicativo do Azure
Quando tiver terminado, a aplicação de exemplo irá ligar-se à Base de Dados SQL em segurança sem ser preciso o nome de utilizador e a palavras-passe.
Nota
As etapas abordadas neste tutorial suportam as seguintes versões:
- .NET Framework 4.8 e superior
- .NET 6.0 e superior
Para obter orientações para o Banco de Dados do Azure para MySQL ou o Banco de Dados do Azure para PostgreSQL em outras estruturas de linguagem (Node.js, Python e Java), consulte Tutorial: Conectar-se a bancos de dados do Azure a partir do Serviço de Aplicativo sem segredos usando uma identidade gerenciada.
O que você vai aprender:
- Ativar identidades geridas
- Conceder acesso à Base de Dados SQL à identidade gerida
- 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
Nota
A autenticação do Microsoft Entra é diferente da autenticação integrada do Windows no Ative Directory local (AD DS). O AD DS e o Microsoft Entra ID usam protocolos de autenticação completamente diferentes. Para obter mais informações, consulte a documentação dos Serviços de Domínio Microsoft Entra.
Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.
Pré-requisitos
Este artigo continua de onde parou em um dos seguintes tutoriais:
- Tutorial: Criar um aplicativo ASP.NET no Azure com o Banco de Dados SQL
- Tutorial: Criar um aplicativo ASP.NET Core e Banco de Dados SQL no Serviço de Aplicativo do Azure.
Se ainda não o fez, siga primeiro um dos dois tutoriais. Como alternativa, você pode adaptar as etapas para seu próprio aplicativo .NET com o Banco de dados SQL.
Para depurar seu aplicativo usando o Banco de dados SQL como back-end, verifique se você permitiu a conexão do cliente do seu computador. Caso contrário, adicione o IP do cliente seguindo as etapas em Gerenciar regras de firewall IP no nível do servidor usando o portal do Azure.
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. Conceder acesso ao banco de dados ao usuário do Microsoft Entra
Primeiro, habilite a autenticação do Microsoft Entra no Banco de dados SQL atribuindo um usuário do Microsoft Entra como administrador do servidor. Este utilizador é diferente da conta Microsoft que utilizou para se inscrever na sua subscrição do Azure. Deve ser um usuário que você criou, importou, sincronizou ou convidou para o Microsoft Entra ID. Para obter mais informações sobre usuários permitidos do Microsoft Entra, consulte Recursos e limitações do Microsoft Entra no Banco de dados SQL.
Se o seu locatário do Microsoft Entra ainda não tiver um usuário, crie um seguindo as etapas em Adicionar ou excluir usuários usando a ID do Microsoft Entra.
Localize a ID do objeto do usuário do Microsoft Entra usando o e substitua user-principal-name>.
az ad user list
< O resultado é salvo em uma variável.$azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
Gorjeta
Para ver a lista de todos os nomes principais de usuário no Microsoft Entra ID, execute
az ad user list --query '[].userPrincipalName'
.Adicione este usuário do Microsoft Entra como administrador do Ative Directory usando
az sql server ad-admin create
o comando no Cloud Shell. No comando a seguir, substitua <server-name> pelo nome do servidor (sem o sufixo.database.windows.net
).az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
Para obter mais informações sobre como adicionar um administrador do Ative Directory, consulte Provisionar um administrador do Microsoft Entra para seu servidor
2. Configure seu ambiente de desenvolvimento
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.
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.
3. Modifique o seu projeto
Nota
Microsoft.Azure.Services.AppAuthentication não é mais recomendado para uso com o novo SDK do Azure.
Ele é substituído pela nova biblioteca de cliente do Azure Identity disponível para .NET, Java, TypeScript e Python e deve ser usada para todo o novo desenvolvimento.
Informações sobre como migrar para Azure Identity
podem ser encontradas aqui: AppAuthentication to Azure.Identity Migration Guidance.
As etapas que você segue para seu projeto dependem se você está usando o Entity Framework Core (padrão para ASP.NET Core) ou o Entity Framework (padrão para ASP.NET).
No Visual Studio, abra o Console do Gerenciador de Pacotes e adicione o pacote NuGet Microsoft.Data.SqlClient:
Install-Package Microsoft.Data.SqlClient -Version 5.1.0
No tutorial do ASP.NET Core e do Banco de dados SQL, a
MyDbConnection
cadeia de conexão no appsettings.json ainda não é usada. O ambiente local e o ambiente do Azure obtêm cadeias de conexão de suas respetivas variáveis de ambiente para manter os segredos de conexão fora do arquivo de origem. Mas agora com a autenticação do Ative Directory, não há mais segredos. No appsettings.json, substitua oMyDbConnection
valor da cadeia de conexão por:"Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
Nota
O tipo de autenticação Padrão do Ative Directory pode ser usado em sua máquina local e no Serviço de Aplicativo do Azure. O driver tenta adquirir um token do Microsoft Entra ID usando vários meios. Se o aplicativo for implantado, ele receberá um token da identidade gerenciada atribuída ao sistema do aplicativo. Ele 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>;
em sua cadeia de conexão. Se o aplicativo estiver sendo executado localmente, ele tentará obter um token do Visual Studio, Visual Studio Code e CLI do Azure.Isso é tudo o que você precisa para se conectar ao Banco de dados SQL. Quando você depurar no Visual Studio, seu código usa o usuário do Microsoft Entra que você configurou em 2. Configure seu ambiente de desenvolvimento. Você configurará o Banco de Dados SQL posteriormente para permitir a conexão a partir da identidade gerenciada do seu aplicativo do Serviço de Aplicativo. A
DefaultAzureCredential
classe armazena em cache o token na memória e o recupera do ID do Microsoft Entra pouco antes da expiração. Você não precisa de nenhum código personalizado para atualizar o token.Digite
Ctrl+F5
para executar o aplicativo novamente. O mesmo aplicativo CRUD em seu navegador agora está se conectando diretamente ao Banco de Dados SQL do Azure, usando a autenticação do Microsoft Entra. Essa instalação permite executar migrações de banco de dados do Visual Studio.
4. Use a conectividade de identidade gerenciada
Em seguida, configure seu aplicativo do Serviço de Aplicativo para se conectar ao Banco de Dados SQL com uma identidade gerenciada atribuída ao sistema.
Nota
As instruções nesta seção são para uma identidade atribuída ao sistema, Para usar uma identidade atribuída pelo usuário, consulte Tutorial: Conectar-se a bancos de dados do Azure a partir do Serviço de Aplicativo sem segredos usando uma identidade gerenciada.
Habilitar identidade gerenciada no aplicativo
Para ativar uma identidade gerida na sua aplicação do Azure, utilize o comando az webapp identity assign no Cloud Shell. No comando a seguir, substitua <app-name>.
az webapp identity assign --resource-group myResourceGroup --name <app-name>
Nota
Para habilitar a identidade gerenciada para um slot de implantação, adicione --slot <slot-name>
e use o nome do slot em< slot-name>.
Eis um exemplo do resultado:
{ "additionalProperties": {}, "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Conceder permissões à identidade gerenciada
Nota
Se desejar, você pode adicionar a identidade a um grupo do Microsoft Entra e, em seguida, conceder acesso ao Banco de Dados SQL 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 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
No Cloud Shell, utilize o comando SQLCMD para iniciar sessão na Base de Dados SQL. Substitua server-name> pelo nome do servidor, <db-name> pelo nome do banco de dados usado pelo aplicativo e< aad-user-name> e <aad-password> pelas credenciais do usuário do Microsoft Entra.<
sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
No prompt SQL para o banco de dados desejado, execute os comandos a seguir para conceder as permissões mínimas de que seu aplicativo precisa. Por exemplo,
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
<identity-name> é o nome da identidade gerenciada no Microsoft Entra ID. Se a identidade for atribuída pelo sistema, o nome será sempre o mesmo que o nome do seu aplicativo do Serviço de Aplicativo. Para um slot de implantação, o nome de sua identidade atribuída ao sistema é< app-name>/slots/<slot-name>. Para conceder permissões para um grupo do Microsoft Entra, use o nome de exibição do grupo (por exemplo, myAzureSQLDBAccessGroup).
Escreva
EXIT
para regressar à linha de comandos do Cloud Shell.Nota
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ê cometer um erro ao configurar suas permissões do Banco de dados SQL e tentar modificar as permissões 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.
Nota
Não há suporte para ID do Microsoft Entra e identidades gerenciadas para o SQL Server local.
Modificar a cadeia de ligação
Lembre-se de que as mesmas alterações feitas no Web.config ou no appsettings.json funcionam com a identidade gerenciada, portanto, a única coisa a fazer é remover a cadeia de conexão existente no Serviço de Aplicativo, que o Visual Studio criou implantando seu aplicativo pela primeira vez. Use o comando a seguir, mas substitua <app-name> pelo nome do seu aplicativo.
az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection
5. Publique as alterações
Agora, só falta publicar as alterações no Azure.
Se você veio de Tutorial: Criar um aplicativo ASP.NET no Azure com o Banco de Dados SQL, publique suas alterações no Visual Studio. No Explorador de Soluções, clique com o botão direito do rato no projeto DotNetAppSqlDb e selecione Publicar.
Na página de publicação, selecione Publicar.
Importante
Certifique-se de que o nome do serviço de aplicativo não corresponde a nenhum Registro de Aplicativo existente. Isso levará a conflitos de ID Principal.
Quando a página Web nova mostrar a lista de tarefas, significa que a aplicação se está a ligar à base de dados com a identidade gerida.
Agora, deverá conseguir editar a lista de tarefas como antes.
Clean up resources (Limpar recursos)
Nos passos anteriores, criou os recursos do Azure num grupo de recursos. Se achar que não vai precisar destes recursos no futuro, execute o seguinte comando no Cloud Shell para eliminar o grupo de recursos:
az group delete --name myResourceGroup
Este comando pode demorar alguns minutos a ser executado.
Próximos passos
O que aprendeu:
- Ativar identidades geridas
- Conceder acesso à Base de Dados SQL à identidade gerida
- 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