Partilhar via


Tutorial: Usar 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 escalável e auto-corrigido no Azure. O Serviço de Aplicativo também fornece uma identidade gerenciada para seu aplicativo, que é uma solução pronta para uso 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, eliminando segredos, como credenciais em cadeias de conexão.

Este tutorial mostra como adicionar identidade gerenciada a um aplicativo .NET de exemplo que tem um back-end SQL do Azure. Depois de terminar, 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 cenário tutorial.

Neste tutorial, você:

  • Habilite identidades gerenciadas.
  • Conceda ao Banco de Dados SQL do Azure acesso à identidade gerenciada.
  • Configure o Entity Framework para usar a autenticação do Microsoft Entra com o Banco de dados SQL.
  • Conecte-se ao Banco de Dados SQL do Visual Studio usando a autenticação do Microsoft Entra.

Para obter orientação sobre como usar o Banco de Dados do Azure para MySQL ou o Banco de Dados do Azure para PostgreSQL em estruturas 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.

Nota

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

  • A autenticação do Microsoft Entra é diferente da autenticação integrada do Windows nos Serviços de Domínio (DS) do Ative Directory (AD) local. 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.

Pré-requisitos

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

  • Tenha um Serviço de Aplicação básico em Azure ASP.NET MVC ou ASP.NET Core MVC de criar-ler-atualizar-eliminar (CRUD) que utiliza o Banco de Dados SQL do Azure com autenticação SQL como o back-end. As etapas neste tutorial suportam as seguintes versões do .NET:

    • .NET Framework 4.8 e versões posteriores
    • .NET 6.0 e superior
  • Permita a conexão do cliente do seu computador com o Azure, para poder depurar a sua aplicação no ambiente de desenvolvimento. Você pode adicionar o endereço IP do cliente seguindo as etapas em Gerenciar regras de firewall 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 para o banco de dados SQL do Azure atribuindo um usuário do Microsoft Entra como administrador do servidor SQL do Azure. O administrador do Microsoft Entra deve ser um usuário criado, importado, sincronizado ou convidado para o Microsoft Entra ID. Esse usuário pode não ser o mesmo que o usuário da conta da Microsoft para sua assinatura do Azure.

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

  1. Use az ad user list com o display-name parâmetro, filter ou upn para obter a ID do objeto do(a) utilizador(a) do Microsoft Entra ID que deseja tornar administrador. Execute az ad user list de forma autónoma para mostrar informações para todos os utilizadores no diretório Microsoft Entra.

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

    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 servidor SQL do Azure usando az sql server ad-admin create com o object-id parâmetro. No comando a seguir, substitua <server-name> pelo nome do servidor menos o sufixo .database.windows.net e <entra-id> pelo id valor da saída do comando anterior az ad user list .

    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 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 para o aplicativo

Para habilitar uma identidade gerenciada para seu aplicativo do 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>

Eis um exemplo do resultado:

{
  "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 de uma identidade atribuída pelo sistema para um slot de implantação é <app-name>/slots/<slot-name>.

Você também 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 de à 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 seguinte comando SQLCMD. 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 anterior az ad user list .

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

    Siga as instruções para entrar.

  2. No prompt SQL, execute os seguintes comandos 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
    

Nota

Os serviços de identidade gerenciados de back-end 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 obter um token pela primeira vez 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

Quaisquer alterações feitas no web.config ou appsettings.json funcionam com a identidade gerida. 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 seu aplicativo e <connection-string-name> pelo nome da sua 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 autenticação do Microsoft Entra, consulte Biblioteca de cliente do Azure Identity para .NET.

O Visual Studio para Windows está integrado com a autenticação do Microsoft Entra.

  1. Para habilitar o desenvolvimento e a depuração no Visual Studio, adicione o seu utilizador do Microsoft Entra no Visual Studio selecionando Arquivo>Configurações de Conta no menu do topo, e em seguida, selecione Entrar ou Adicionar.
  2. Para definir o usuário do Microsoft Entra para autenticação de serviço do Azure, selecioneOpções de > no menu superior e, em seguida, selecioneSeleção de Conta> de Serviço do Azure. Selecione o usuário do Microsoft Entra que você adicionou e selecione OK.

Modificar seu projeto e publicar seu aplicativo

Seu aplicativo Web baseado no banco de dados SQL do Azure usa um contexto de banco de dados para se conectar ao banco de dados. Para utilizar a autenticação do Microsoft Entra para trabalhar com a aplicação, deve atualizar o contexto da base de dados para referenciar o fornecedor SQL Server do Entity Framework, que depende do fornecedor ADO.NET moderno Microsoft.Data.SqlClient.

O provedor do Entity Framework substitui o System.Data.SqlClient provedor integrado 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 de banco de dados, mas como System.Data.SqlClient está definido de forma fixa como o provedor no Serviço de Aplicativo do Azure, deve-se estender MicrosoftSqlDbConfiguration para redirecionar as referências de System.Data.SqlClient para Microsoft.Data.SqlClient. 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 do Visual Studio, adicione o pacote NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. No 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 do banco de dados.

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

    Nota

    Você pode usar a autenticação Padrão do Active Directory no seu 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 ao 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 cadeia de conexão.

    A DefaultAzureCredential classe armazena em cache o token na memória e o recupera do ID do Microsoft Entra 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 que você configurou quando configurou seu ambiente de desenvolvimento.

  3. Execute seu aplicativo. O aplicativo CRUD em seu navegador se conecta 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. Publique suas alterações usando os seguintes comandos do Git:

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

Testar a aplicação

Quando a nova página Web mostrar a sua lista de tarefas, a aplicação está a ligar-se à base de dados com a identidade gerida.

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

Agora você pode editar a lista de to-do.

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

Esse comando pode levar um minuto para ser executado.