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

O Funções do Azure fornece uma identidade gerenciada, que é uma solução pronta para uso 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 segredos de seu aplicativo, como credenciais nas cadeias de conexão. Neste tutorial, adicionará identidades gerenciadas a uma Função do Azure que utiliza associações SQL do Azure. Um projeto de exemplo de Função do Azure com associações SQL está disponível no exemplo de backend ToDo.

Quando você terminar este tutorial, sua Função do Azure se conectará ao banco de dados SQL do Azure sem a necessidade de nome de usuário e senha.

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

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 Ative Directory 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.

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

  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. Encontre o ID do objeto do usuário do Microsoft Entra usando o 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 recente:

    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)
    

    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 <> pelo nome do servidor (sem o sufixo).

    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

Habilitar a identidade gerenciada atribuída ao sistema no Azure Function

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

Para habilitar a 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 para baixo até o grupo Configurações na navegação à esquerda.
  3. Selecione a Identidade.
  4. No separador atribuído pelo Sistema, alterne o Estado para Ativado. Clique em Guardar.

Captura de ecrã da função da aplicação, mostrando o Estado definido como Ativado.

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

Gorjeta

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

Conceder acesso ao banco de dados SQL à identidade gerenciada

Nesta etapa, nos conectaremos ao banco de dados SQL com uma conta de usuário do Microsoft Entra e concederemos à identidade gerenciada acesso ao banco de dados.

  1. Abra sua ferramenta SQL preferida e faça login com uma conta de usuário do Microsoft Entra (como o usuário do Microsoft Entra que atribuímos 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 SQL para o banco de dados desejado, execute os seguintes comandos para conceder permissões à 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
    

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

    Note

    Se estiveres a usar o trigger SQL do Azure, a tua identidade gerida requer permissões adicionais para além de db_datareader e db_datawriter. Para mais informações, consulte Conceder permissões para SQL do Azure trigger.

Configurar a cadeia de conexão SQL do Azure Function

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

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

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

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

testdb é o nome do banco de dados ao qual estamos nos conectando e demo.database.windows.net é o nome do servidor ao qual estamos nos conectando.

Gorjeta

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óximos passos