Tutorial: Conectar-se ao Banco de Dados SQL a partir do Serviço de Aplicativo .NET 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. 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:

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.

Diagrama de arquitetura para cenário tutorial.

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:

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.

  1. 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.

  2. 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'.

  3. 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

  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.

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 Identitypodem 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).

  1. 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
    
  2. 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 o MyDbConnection 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.

  3. 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

Embora as instruções nesta seção sejam para uma identidade atribuída ao sistema, uma identidade atribuída ao usuário pode ser usada com a mesma facilidade. Para fazer isso. você precisaria da alteração para az webapp identity assign command atribuir a identidade desejada atribuída pelo usuário. Em seguida, ao criar o usuário SQL, certifique-se de usar o nome do recurso de identidade atribuído pelo usuário em vez do nome do site.

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": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "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
  1. 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
    
  2. 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).

  3. 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.

  1. 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.

    Publicar a partir do Explorador de Soluções

  2. 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.

Aplicativo do Azure após a migração do Code First

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