Självstudie: Skapa en funktionsapp som ansluter till Azure-tjänster med identiteter i stället för hemligheter

Den här självstudien visar hur du konfigurerar en funktionsapp med Hjälp av Microsoft Entra-identiteter i stället för hemligheter eller anslutningssträng, där det är möjligt. Med hjälp av identiteter kan du undvika att oavsiktligt läcka känsliga hemligheter och ger bättre insyn i hur data nås. Mer information om identitetsbaserade anslutningar finns i konfigurera en identitetsbaserad anslutning.

De procedurer som visas fungerar vanligtvis för alla språk, men den här självstudien stöder för närvarande C#-klassbiblioteksfunktioner i Windows specifikt.

I den här självstudien lär du dig att:

  • Skapa en funktionsapp i Azure med hjälp av en ARM-mall
  • Aktivera både systemtilldelade och användartilldelade hanterade identiteter i funktionsappen
  • Skapa rolltilldelningar som ger behörigheter till andra resurser
  • Flytta hemligheter som inte kan ersättas med identiteter till Azure Key Vault
  • Konfigurera en app för att ansluta till standardlagringsvärden med dess hanterade identitet

När du har slutfört den här självstudien bör du slutföra den uppföljningsguide som visar hur du använder identitetsbaserade anslutningar i stället för hemligheter med utlösare och bindningar.

Förutsättningar

Varför ska jag använda identitet?

Att hantera hemligheter och autentiseringsuppgifter är en vanlig utmaning för team av alla storlekar. Hemligheter måste skyddas mot stöld eller oavsiktligt avslöjande, och de kan behöva roteras regelbundet. Med många Azure-tjänster kan du i stället använda en identitet i Microsoft Entra-ID för att autentisera klienter och kontrollera om behörigheter kan ändras och återkallas snabbt. Detta ger större kontroll över programsäkerhet med mindre driftkostnader. En identitet kan vara en mänsklig användare, till exempel utvecklare av ett program eller ett program som körs i Azure med en hanterad identitet.

Vissa tjänster stöder inte Microsoft Entra-autentisering, så hemligheter kan fortfarande krävas av dina program. Dessa kan dock lagras i Azure Key Vault, vilket förenklar hanteringslivscykeln för dina hemligheter. Åtkomst till ett nyckelvalv styrs också med identiteter.

Genom att förstå hur du använder identiteter i stället för hemligheter när du kan och använder Key Vault när du inte kan det, kan du minska risken, minska driftkostnaderna och generellt förbättra säkerhetsstatusen för dina program.

Skapa en funktionsapp som använder Key Vault för nödvändiga hemligheter

Azure Files är ett exempel på en tjänst som ännu inte stöder Microsoft Entra-autentisering för SMB-filresurser. Azure Files är standardfilsystemet för Windows-distributioner i Premium- och förbrukningsplaner. Även om vi kan ta bort Azure Files helt och hållet medför detta begränsningar som du kanske inte vill ha. I stället flyttar du Azure Files-anslutningssträng till Azure Key Vault. På så sätt hanteras den centralt, med åtkomst som styrs av identiteten.

Skapa ett Azure Key Vault

Först behöver du ett nyckelvalv för att lagra hemligheter i. Du konfigurerar den så att den använder rollbaserad åtkomstkontroll i Azure (RBAC) för att avgöra vem som kan läsa hemligheter från valvet.

  1. I Azure-portalen väljer du Skapa en resurs (+).

  2. På sidan Skapa en resurs väljer du Säkerhetsnyckelvalv>.

  3. På sidan Grundläggande använder du följande tabell för att konfigurera nyckelvalvet.

    Alternativ Föreslaget värde Description
    Abonnemang Din prenumeration Prenumeration under vilken den nya funktionsappen skapas.
    Resursgrupp myResourceGroup Namn på den nya resursgrupp där du skapar funktionsappen.
    Namn på nyckelvalv Globalt unikt namn Namn som identifierar ditt nya nyckelvalv. Valvnamnet får bara innehålla alfanumeriska tecken och bindestreck och kan inte börja med ett tal.
    Prisnivå Standard Alternativ för fakturering. Standard är tillräckligt för den här självstudien.
    Region Önskad region Välj en region nära dig eller nära andra tjänster som dina funktioner har åtkomst till.

    Använd standardvalen för avsnitten "Återställningsalternativ".

  4. Anteckna namnet du använde, eftersom du behöver det senare.

  5. Klicka på Nästa: Åtkomstprincip för att gå till fliken Åtkomstprincip .

  6. Under Behörighetsmodell väljer du Rollbaserad åtkomstkontroll i Azure

  7. Välj Granska + skapa. Granska konfigurationen och klicka sedan på Skapa.

Konfigurera en identitet och behörigheter för appen

För att kunna använda Azure Key Vault måste din app ha en identitet som kan beviljas behörighet att läsa hemligheter. Den här appen använder en användartilldelad identitet så att behörigheterna kan konfigureras innan appen ens skapas. Du kan lära dig mer om hanterade identiteter för Azure Functions i avsnittet Så här använder du hanterade identiteter i Azure Functions .

  1. I Azure-portalen väljer du Skapa en resurs (+).

  2. På sidan Skapa en resurs väljer du Identitet>Användartilldelad hanterad identitet.

  3. På sidan Grundläggande använder du följande tabell för att konfigurera identiteten.

    Alternativ Föreslaget värde Description
    Abonnemang Din prenumeration Prenumeration under vilken den nya funktionsappen skapas.
    Resursgrupp myResourceGroup Namn på den nya resursgrupp där du skapar funktionsappen.
    Region Önskad region Välj en region nära dig eller nära andra tjänster som dina funktioner har åtkomst till.
    Namn Globalt unikt namn Namn som identifierar din nya användartilldelade identitet.
  4. Välj Granska + skapa. Granska konfigurationen och klicka sedan på Skapa.

  5. När identiteten skapas navigerar du till den i portalen. Välj Egenskaper och anteckna resurs-ID:t eftersom du behöver det senare.

  6. Välj Azure-rolltilldelningar och klicka på Lägg till rolltilldelning (förhandsversion).

  7. På sidan Lägg till rolltilldelning (förhandsversion) använder du alternativ som du ser i tabellen nedan.

    Alternativ Föreslaget värde Description
    Definitionsområde Key Vault Omfång är en uppsättning resurser som rolltilldelningen gäller för. Omfånget har nivåer som ärvs på lägre nivåer. Om du till exempel väljer ett prenumerationsomfång gäller rolltilldelningen för alla resursgrupper och resurser i prenumerationen.
    Abonnemang Din prenumeration Prenumeration under vilken den nya funktionsappen skapas.
    Resurs Ditt nyckelvalv Nyckelvalvet som du skapade tidigare.
    Roll Nyckelvalvshemlighetsanvändare En roll är en samling behörigheter som beviljas. Key Vault Secrets User ger behörighet för identiteten att läsa hemliga värden från valvet.
  8. Välj Spara. Det kan ta en minut eller två innan rollen visas när du uppdaterar listan över rolltilldelningar för identiteten.

Identiteten kan nu läsa hemligheter som lagras i nyckelvalvet. Senare i självstudien lägger du till ytterligare rolltilldelningar för olika syften.

Skapa en mall för att skapa en funktionsapp

Portalupplevelsen för att skapa en funktionsapp interagerar inte med Azure Key Vault, så du måste generera och redigera och Azure Resource Manager-mall. Du kan sedan använda den här mallen för att skapa din funktionsapp som refererar till Azure Files-anslutningssträng från ditt nyckelvalv.

Viktigt!

Skapa inte funktionsappen förrän du har redigerat ARM-mallen. Azure Files-konfigurationen måste konfigureras när appen skapas.

  1. I Azure-portalen väljer du Skapa en resurs (+).

  2. På sidan Skapa en resurs väljer du Beräkningsfunktionsapp>.

  3. På sidan Grundläggande använder du följande tabell för att konfigurera funktionsappen .

    Alternativ Föreslaget värde Description
    Abonnemang Din prenumeration Prenumeration under vilken den nya funktionsappen skapas.
    Resursgrupp myResourceGroup Namn på den nya resursgrupp där du skapar funktionsappen.
    Funktionsappens namn Globalt unikt namn Namn som identifierar din nya funktionsapp. Giltiga tecken är a-z (skiftlägesokänsligt), 0-9 och -.
    Publicera Kod Välj att publicera kodfiler eller en Docker-container.
    Körningsstack .NET I den här självstudien används .NET.
    Region Önskad region Välj en region nära dig eller nära andra tjänster som dina funktioner har åtkomst till.
  4. Välj Granska + skapa. Din app använder standardvärdena på sidan Värd och övervakning. Du är välkommen att granska standardalternativen och de kommer att ingå i ARM-mallen som du genererar.

  5. I stället för att skapa din funktionsapp här väljer du Ladda ned en mall för automatisering, vilket är till höger om knappen Nästa .

  6. På mallsidan väljer du Distribuera. Välj sedan Redigera mall sidan Anpassad distribution.

    Screenshot of where to find the deploy button at the top of the template screen.

Redigera mallen

Nu ska du redigera mallen för att lagra Azure Files-anslutningssträng i Key Vault och låta funktionsappen referera till den. Kontrollera att du har följande värden från de tidigare avsnitten innan du fortsätter:

  • Resurs-ID för den användartilldelade identiteten
  • Namnet på ditt nyckelvalv

Kommentar

Om du skulle skapa en fullständig mall för automatisering skulle du vilja inkludera definitioner för identitets- och rolltilldelningsresurserna med lämpliga dependsOn satser. Detta skulle ersätta de tidigare stegen som använde portalen. Läs azure Resource Manager-vägledningen och dokumentationen för varje tjänst.

  1. I redigeraren letar du reda på var matrisen resources börjar. Innan funktionsappdefinitionen lägger du till följande avsnitt som placerar Azure Files-anslutningssträng i Key Vault. Ersätt "VAULT_NAME" med namnet på ditt nyckelvalv.

    {
        "type": "Microsoft.KeyVault/vaults/secrets",
        "apiVersion": "2016-10-01",
        "name": "VAULT_NAME/azurefilesconnectionstring",
        "properties": {
            "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
        },
        "dependsOn": [
            "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]"
        ]
    },
    
  2. Lägg till Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring i matrisen i definitionen för funktionsappresursen (som har type angetts dependsOn till Microsoft.Web/sites). Ersätt återigen "VAULT_NAME" med namnet på ditt nyckelvalv. Det gör att din app inte skapas innan hemligheten har definierats. Matrisen dependsOn bör se ut som i följande exempel.

        {
            "type": "Microsoft.Web/sites",
            "apiVersion": "2018-11-01",
            "name": "[parameters('name')]",
            "location": "[parameters('location')]",
            "tags": null,
            "dependsOn": [
                "microsoft.insights/components/idcxntut",
                "Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring",
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "[concat('Microsoft.Storage/storageAccounts/', parameters('storageAccountName'))]"
            ],
            // ...
        }
    
  3. identity Lägg till blocket från följande exempel i definitionen för funktionsappresursen. Ersätt "IDENTITY_RESOURCE_ID" med resurs-ID:t för din användartilldelade identitet.

    {
        "apiVersion": "2018-11-01",
        "name": "[parameters('name')]",
        "type": "Microsoft.Web/sites",
        "kind": "functionapp",
        "location": "[parameters('location')]",
        "identity": {
            "type": "SystemAssigned,UserAssigned",
            "userAssignedIdentities": {
                "IDENTITY_RESOURCE_ID": {}
            }
        },
        "tags": null,
        // ...
    }
    

    Det här identity blocket konfigurerar också en systemtilldelad identitet som du kommer att använda senare i den här självstudien.

  4. keyVaultReferenceIdentity Lägg till egenskapen i properties -objektet för funktionsappen som i exemplet nedan. Ersätt "IDENTITY_RESOURCE_ID" med resurs-ID:t för din användartilldelade identitet.

    {
        // ...
         "properties": {
                "name": "[parameters('name')]",
                "keyVaultReferenceIdentity": "IDENTITY_RESOURCE_ID",
                // ...
         }
    }
    

    Du behöver den här konfigurationen eftersom en app kan ha flera användartilldelade identiteter konfigurerade. När du vill använda en användartilldelad identitet måste du ange vilken via något ID. Det gäller inte systemtilldelade identiteter, eftersom en app bara har en. Många funktioner som använder hanterad identitet förutsätter att de ska använda den systemtilldelade som standard.

  5. Leta nu reda på JSON-objekten som definierar programinställningen WEBSITE_CONTENTAZUREFILECONNECTIONSTRING , som bör se ut som i följande exempel:

    {
        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
        "value": "[concat('DefaultEndpointsProtocol=https;AccountName=',parameters('storageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01').keys[0].value,';EndpointSuffix=','core.windows.net')]"
    },
    
  6. Ersätt fältet value med en referens till hemligheten enligt följande exempel. Ersätt "VAULT_NAME" med namnet på ditt nyckelvalv.

    {
        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
        "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', 'VAULT_NAME', 'azurefilesconnectionstring')).secretUri, ')')]"
    },
    
  7. Välj Spara för att spara den uppdaterade ARM-mallen.

Distribuera den ändrade mallen

  1. Kontrollera att dina alternativ för att skapa, inklusive resursgrupp, fortfarande är korrekta och välj Granska + skapa.

  2. När mallen har verifierats antecknar du lagringskontots namn eftersom du kommer att använda det här kontot senare. Välj slutligen Skapa för att skapa dina Azure-resurser och distribuera koden till funktionsappen.

  3. När distributionen är klar väljer du Gå till resursgrupp och väljer sedan den nya funktionsappen.

Gratulerar! Du har skapat funktionsappen för att referera till Azure Files-anslutningssträng från Azure Key Vault.

När din app skulle behöva lägga till en referens till en hemlighet behöver du bara definiera en ny programinställning som pekar på värdet som lagras i Key Vault. Du kan lära dig mer om detta i Key Vault-referenser för Azure Functions.

Dricks

Application Insights-anslutningssträng och dess inkluderade instrumentationsnyckel betraktas inte som hemligheter och kan hämtas från App Insights med hjälp av läsarbehörigheter. Du behöver inte flytta dem till Key Vault, men det kan du säkert.

Använda hanterad identitet för AzureWebJobsStorage

Därefter använder du den systemtilldelade identiteten som du konfigurerade i föregående steg för AzureWebJobsStorage anslutningen. AzureWebJobsStorage används av Functions-körningen och av flera utlösare och bindningar för att samordna mellan flera instanser som körs. Det krävs för att funktionsappen ska fungera, och precis som Azure Files konfigureras den med en anslutningssträng som standard när du skapar en ny funktionsapp.

Ge den systemtilldelade identiteten åtkomst till lagringskontot

På samma sätt som tidigare med den användartilldelade identiteten och ditt nyckelvalv skapar du nu en rolltilldelning som ger den systemtilldelade identiteten åtkomst till ditt lagringskonto.

  1. I Azure-portalen går du till lagringskontot som skapades med funktionsappen tidigare.

  2. Välj Åtkomstkontroll (IAM). Det är här du kan visa och konfigurera vem som har åtkomst till resursen.

  3. Klicka på Lägg till och välj Lägg till rolltilldelning.

  4. Sök efter lagringsblobdataägare, välj den och klicka på Nästa

  5. På fliken Medlemmar går du till Tilldela åtkomst till och väljer Hanterad identitet

  6. Klicka på Välj medlemmar för att öppna panelen Välj hanterade identiteter .

  7. Bekräfta att prenumerationen är den som du skapade resurserna i tidigare.

  8. I väljaren Hanterad identitet väljer du Funktionsapp i kategorin Systemtilldelad hanterad identitet. Etiketten "Funktionsapp" kan ha ett tal inom parenteser bredvid sig, vilket anger antalet appar i prenumerationen med systemtilldelade identiteter.

  9. Appen bör visas i en lista under indatafälten. Om du inte ser det kan du använda rutan Välj för att filtrera resultatet med appens namn.

  10. Klicka på programmet. Den bör flyttas ned till avsnittet Valda medlemmar . Klicka på Välj.

  11. Gå tillbaka till skärmen Lägg till rolltilldelning och klicka på Granska + tilldela. Granska konfigurationen och klicka sedan på Granska + tilldela.

Dricks

Om du tänker använda funktionsappen för en blobutlöst funktion måste du upprepa de här stegen för rollerna Lagringskontodeltagare och Lagringsködatadeltagare över det konto som används av AzureWebJobsStorage. Mer information finns i Identitetsbaserade anslutningar för blobutlösare.

Redigera AzureWebJobsStorage-konfigurationen

Därefter uppdaterar du funktionsappen så att den använder sin systemtilldelade identitet när den använder blobtjänsten för värdlagring.

Viktigt!

Konfigurationen AzureWebJobsStorage används av vissa utlösare och bindningar, och dessa tillägg måste också kunna använda identitetsbaserade anslutningar. Appar som använder blobutlösare eller händelsehubbutlösare kan behöva uppdatera dessa tillägg. Eftersom inga funktioner har definierats för den här appen finns det inget problem ännu. Mer information om det här kravet finns i Anslut som värd för lagring med en identitet.

AzureWebJobsStorage På samma sätt används för distributionsartefakter när du använder version på serversidan i Linux-förbrukning. När du aktiverar identitetsbaserade anslutningar för AzureWebJobsStorage i Linux-förbrukning måste du distribuera via ett externt distributionspaket.

  1. Gå till funktionsappen i Azure-portalen.

  2. Under Inställningar väljer du Konfiguration.

  3. Välj knappen Redigera bredvid programinställningen AzureWebJobsStorage och ändra den baserat på följande värden.

    Alternativ Föreslaget värde Description
    Namn AzureWebJobsStorage__accountName Uppdatera namnet från AzureWebJobsStorage till det exakta namnet AzureWebJobsStorage__accountName. Den här inställningen instruerar värden att använda identiteten i stället för att leta efter en lagrad hemlighet. Den nya inställningen använder ett dubbelt understreck (__), vilket är ett specialtecken i programinställningarna.
    Value Ditt kontonamn Uppdatera namnet från anslutningssträng till bara ditt StorageAccountName.

    Den här konfigurationen meddelar systemet att det ska använda en identitet för att ansluta till resursen.

  4. Välj OK och spara sedan> Fortsätt för att spara ändringarna.

Du har tagit bort lagringskraven anslutningssträng för AzureWebJobsStorage genom att konfigurera appen så att den i stället ansluter till blobar med hanterade identiteter.

Kommentar

Syntaxen __accountName är unik för AzureWebJobsStorage-anslutningen och kan inte användas för andra lagringsanslutningar. Om du vill lära dig att definiera andra anslutningar kontrollerar du referensen för varje utlösare och binder appens användning.

Nästa steg

Den här självstudien visade hur du skapar en funktionsapp utan att lagra hemligheter i konfigurationen.

I nästa självstudie får du lära dig hur du använder identitet i utlösar- och bindningsanslutningar.