Tutorial: Conectar um aplicativo de funções ao SQL do Azure com identidade gerenciada e associações de SQL

O Azure Functions fornece uma identidade gerenciada, que é uma solução perfeita para proteger o acesso ao Banco de Dados SQL do Azure e a outros serviços do Azure. As identidades gerenciadas tornam seu aplicativo mais seguro, eliminando os segredos do aplicativo, como as credenciais nas cadeias de conexão. Neste tutorial, você adicionará uma identidade gerenciada a uma Função do Azure que utiliza associações de SQL do Azure. Um projeto de função do Azure de exemplo com associações de SQL está disponível no exemplo de back-end de tarefas pendentes.

Quando você tiver concluído este tutorial, sua Função do Azure se conectará ao Banco de Dados SQL do Azure sem a necessidade de informar nome de usuário e senha.

Uma visão geral das etapas que você seguirá:

Conceder acesso de 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 o administrador do servidor do Active Directory. Esse usuário é diferente da conta Microsoft usada para inscrição na assinatura do Azure. Esse usuário precisa ser criado, importado, sincronizado ou convidado por você para o Microsoft Entra ID. Para obter mais informações sobre usuários permitidos do Microsoft Entra, consulte os Recursos e limitações do Microsoft Entra no banco de dados SQL.

A habilitação da autenticação do Microsoft Entra pode ser concluída por meio do portal do Azure, do PowerShell ou da CLI do Azure. As instruções para a CLI do Azure estão abaixo e as informações para concluir isso por meio do portal do Azure e do PowerShell estão disponíveis na Documentação do SQL do Azure sobre autenticação do Microsoft Entra.

  1. Se o locatário do Microsoft Entra ainda não tiver um usuário, crie um seguindo as etapas em Adicionar ou excluir usuários usando o Microsoft Entra ID.

  2. Localize a ID do objeto do usuário do Microsoft Entra usando a az ad user list e substitua <user-principal-name>. O resultado é salvo em uma variável.

    Para a CLI do Azure 2.37.0 e mais recentes:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    Para versões mais antigas da CLI do Azure:

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].objectId --output tsv)
    

    Dica

    Para visualizar a lista de todos os nomes de entidade de segurança do usuário no Microsoft Entra ID, execute az ad user list --query [].userPrincipalName.

  3. Adicione o usuário do Microsoft Entra como um administrador do Active Directory usando o comando az sql server ad-admin create no Cloud Shell. No comando a seguir, substitua <server-name> pelo nome do servidor do Banco de Dados SQL (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 Active Directory, confira Provisionar um administrador do Microsoft Entra para o servidor

Habilitar a identidade gerenciada atribuída pelo sistema na Função do Azure

Nesta etapa, adicionaremos uma identidade atribuída pelo sistema à função do Azure. Em etapas posteriores, essa identidade receberá acesso ao banco de dados SQL.

Para habilitar uma identidade gerenciada atribuída pelo sistema no portal do Azure:

  1. Crie uma função do Azure no portal como faria normalmente. Navegue até ele no portal.
  2. Role a página para baixo até o grupo Configurações no painel de navegação esquerdo.
  3. Selecionar Identidade.
  4. Na guia Sistema atribuído, alterne o Status para Ligado. Clique em Save (Salvar).

Turn on system assigned identity for Function app

Para obter informações sobre como habilitar a identidade gerenciada atribuída pelo sistema por meio da CLI do Azure ou do PowerShell, confira mais informações sobre como usar identidades gerenciadas com o Azure Functions.

Dica

Para a identidade gerenciada atribuída pelo usuário, alterne para a guia Atribuído pelo Usuário. Clique em Adicionar e selecione uma Identidade Gerenciada. Para obter mais informações sobre como criar uma identidade gerenciada atribuída pelo usuário, confira Gerenciar identidades gerenciadas atribuídas pelo usuário.

Permitir que o Banco de Dados SQL tenha acesso à identidade gerenciada

Nesta etapa, vamos nos conectar ao banco de dados SQL com uma conta de usuário do Microsoft Entra e permitir que a identidade gerenciada tenha acesso ao banco de dados.

  1. Abra sua ferramenta SQL preferida e faça logon com uma conta de usuário do Microsoft Entra (como o usuário do Microsoft Entra atribuído como administrador). Isso pode ser feito no Cloud Shell com o comando SQLCMD.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. No prompt do SQL do banco de dados desejado, execute os comandos a seguir para conceder as permissões necessárias à sua função. 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>];
    GO
    

    O <identity-name> é o nome da identidade gerenciada no Microsoft Entra ID. Se a identidade for atribuída ao sistema, o nome será sempre igual ao nome do aplicativo de funções.

Configurar a cadeia de conexão de SQL da Função do Azure

Na etapa final, configuraremos a cadeia de conexão de SQL da Função do Azure para usar a autenticação de identidade gerenciada do Microsoft Entra.

O nome da configuração da cadeia de conexão é identificado em nosso código do Functions como o atributo de associação "ConnectionStringSetting", conforme visto nos atributos e anotações de associação de entrada do SQL.

Nas configurações de aplicativo do nosso aplicativo de funções, a configuração da cadeia de conexão do SQL deve ser atualizada para seguir este formato:

Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; Database=testdb

testdb e demo.database.windows.net são, respectivamente, o nome do banco de dados e do servidor aos quais estamos nos conectando.

Dica

Para identidade gerenciada atribuída pelo usuário, use Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; User Id=ClientIdOfManagedIdentity; Database=testdb.

Próximas etapas