Självstudie: Anslut en funktionsapp till Azure SQL med hanterad identitet och SQL-bindningar

Azure Functions tillhandahåller en hanterad identitet, vilket är en nyckelfärdig lösning för att skydda åtkomsten till Azure SQL Database och andra Azure-tjänster. Hanterade identiteter gör din app säkrare genom att eliminera hemligheter från din app, till exempel autentiseringsuppgifter i anslutningssträng. I den här självstudien lägger du till hanterad identitet i en Azure-funktion som använder Azure SQL-bindningar. Ett Exempel på Ett Azure-funktionsprojekt med SQL-bindningar finns i ToDo-serverdelsexemplet.

När du är klar med den här självstudien ansluter din Azure-funktion till Azure SQL-databasen utan användarnamn och lösenord.

En översikt över de steg du ska utföra:

Bevilja databasåtkomst till Microsoft Entra-användare

Aktivera först Microsoft Entra-autentisering till SQL-databasen genom att tilldela en Microsoft Entra-användare som Active Directory-administratör för servern. Den här användaren skiljer sig från det Microsoft-konto som du använde för att registrera dig för din Azure-prenumeration. Det måste vara en användare som du har skapat, importerat, synkroniserat eller bjudit in till Microsoft Entra-ID. Mer information om tillåtna Microsoft Entra-användare finns i Microsoft Entra-funktioner och begränsningar i SQL-databasen.

Aktivering av Microsoft Entra-autentisering kan slutföras via Azure-portalen, PowerShell eller Azure CLI. Anvisningar för Azure CLI finns nedan och information som slutför detta via Azure-portalen och PowerShell finns i Azure SQL-dokumentationen om Microsoft Entra-autentisering.

  1. Om din Microsoft Entra-klientorganisation inte har någon användare än skapar du en genom att följa stegen i Lägg till eller ta bort användare med hjälp av Microsoft Entra-ID.

  2. Leta reda på objekt-ID:t för Microsoft Entra-användaren med hjälp av az ad user list och ersätt <user-principal-name>. Resultatet sparas i en variabel.

    För Azure CLI 2.37.0 och senare:

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

    För äldre versioner av Azure CLI:

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

    Dricks

    Om du vill se listan över alla användarhuvudnamn i Microsoft Entra-ID kör du az ad user list --query [].userPrincipalName.

  3. Lägg till den här Microsoft Entra-användaren som Active Directory-administratör med hjälp av az sql server ad-admin create kommandot i Cloud Shell. Ersätt servernamn med servernamnet (utan suffixet.database.windows.net) i följande kommando<.>

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Mer information om hur du lägger till en Active Directory-administratör finns i Etablera en Microsoft Entra-administratör för servern

Aktivera systemtilldelad hanterad identitet på Azure Function

I det här steget lägger vi till en systemtilldelad identitet i Azure-funktionen. I senare steg får den här identiteten åtkomst till SQL-databasen.

Så här aktiverar du systemtilldelad hanterad identitet i Azure-portalen:

  1. Skapa en Azure-funktion i portalen som vanligt. Gå till den i portalen.
  2. Rulla ned till gruppen Inställningar i det vänstra navigeringsfältet.
  3. Välj Identitet.
  4. På fliken Systemtilldelat växlar du Status till På. Klicka på Spara.

Turn on system assigned identity for Function app

Mer information om hur du aktiverar systemtilldelad hanterad identitet via Azure CLI eller PowerShell finns i mer information om hur du använder hanterade identiteter med Azure Functions.

Dricks

För användartilldelad hanterad identitet växlar du till fliken Användartilldelad. Klicka på Lägg till och välj en hanterad identitet. Mer information om hur du skapar användartilldelade hanterade identiteter finns i Hantera användartilldelade hanterade identiteter.

Ge SQL Database åtkomst till den hanterade identiteten

I det här steget ska vi ansluta till SQL-databasen med ett Microsoft Entra-användarkonto och ge den hanterade identiteten åtkomst till databasen.

  1. Öppna ditt önskade SQL-verktyg och logga in med ett Microsoft Entra-användarkonto (till exempel den Microsoft Entra-användare som vi tilldelade som administratör). Detta kan göras i Cloud Shell med SQLCMD-kommandot.

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. I SQL-prompten för den databas som du vill använda kör du följande kommandon för att bevilja behörigheter till din funktion. De prestandaobjekt

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    GO
    

    <identitetsnamn> är namnet på den hanterade identiteten i Microsoft Entra-ID. Om identiteten är systemtilldelad är namnet alltid detsamma som namnet på funktionsappen.

Konfigurera Azure Function SQL anslutningssträng

I det sista steget konfigurerar vi Azure Function SQL-anslutningssträng att använda Microsoft Entra-hanterad identitetsautentisering.

Det anslutningssträng inställningsnamnet identifieras i vår Functions-kod som bindningsattributet "Anslut ionStringSetting", enligt sql-indatabindningsattributen och anteckningarna.

I programinställningarna för vår funktionsapp bör inställningen SQL anslutningssträng uppdateras för att följa det här formatet:

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

testdb är namnet på databasen vi ansluter till och demo.database.windows.net är namnet på den server som vi ansluter till.

Dricks

För användartilldelad hanterad identitet använder du Server=demo.database.windows.net; Authentication=Active Directory Managed Identity; User Id=ClientIdOfManagedIdentity; Database=testdb.

Nästa steg