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 här självstudien som visar hur du [använder identitetsbaserade anslutningar i stället för hemligheter med utlösare och bindningar].
Förutsättningar
Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
Azure Functions Core Tools version 4.x.
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 bättre kontroll över programsäkerhet med mindre driftsbelastning. 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.
Eftersom vissa tjänster inte stöder Microsoft Entra-autentisering kan dina program fortfarande kräva hemligheter i vissa fall. Dessa hemligheter 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 om du vill använda Key Vault när du inte kan det, minskar du risken, minskar driftkostnaderna och förbättrar generellt 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 (Server Message Block). 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 det 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 för att använda rollbaserad åtkomstkontroll i Azure (RBAC) för att avgöra vem som kan läsa hemligheter från valvet.
På sidan Skapa en resurs väljer du Säkerhetsnyckelvalv>.
På sidan Grundläggande använder du följande tabell för att konfigurera nyckelvalvet.
Alternativ Föreslaget värde beskrivning 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".
Anteckna namnet som du använde för senare användning.
Välj Nästa: Åtkomstprincip för att gå till fliken Åtkomstprincip .
Under Behörighetsmodell väljer du Rollbaserad åtkomstkontroll i Azure
Välj Granska + skapa. Granska konfigurationen och välj sedan 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. Mer information om hanterade identiteter för Azure Functions finns i Använda hanterade identiteter i Azure Functions.
På sidan Skapa en resurs väljer du Identitet>Användartilldelad hanterad identitet.
På sidan Grundläggande använder du följande tabell för att konfigurera identiteten.
Alternativ Föreslaget värde beskrivning 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. Välj Granska + skapa. Granska konfigurationen och välj sedan Skapa.
När identiteten skapas navigerar du till den i portalen. Välj Egenskaper och anteckna resurs-ID:t för senare användning.
Välj Azure-rolltilldelningar och välj Lägg till rolltilldelning (förhandsversion).
På sidan Lägg till rolltilldelning (förhandsversion) använder du alternativ som visas i följande tabell.
Alternativ Föreslaget värde beskrivning 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. 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
Eftersom portalupplevelsen för att skapa en funktionsapp inte interagerar med Azure Key Vault måste du generera och redigera en 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.
På sidan Skapa en resurs väljer du Beräkningsfunktionsapp>.
På sidan Grundläggande använder du följande tabell för att konfigurera funktionsappen .
Alternativ Föreslaget värde beskrivning 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. Välj Granska + skapa. Din app använder standardvärdena på sidan Värd och övervakning. Granska standardalternativen som ingår i ARM-mallen som du genererar.
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 .
På mallsidan väljer du Distribuera. Välj sedan Redigera mall på sidan Anpassad distribution.
Redigera mallen
Nu redigerar du mallen för att lagra Azure Files-anslutningssträng i Key Vault och låter 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.
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'))]" ] },
Lägg till
Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring
i matrisen i definitionen för funktionsappresursen (som hartype
angettsdependsOn
tillMicrosoft.Web/sites
). Ersätt återigen "VAULT_NAME" med namnet på ditt nyckelvalv. Detta förhindrar att din app skapas innan hemligheten definieras. MatrisendependsOn
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'))]" ], // ... }
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 använder senare i den här självstudien.keyVaultReferenceIdentity
Lägg till egenskapen iproperties
-objektet för funktionsappen, som i följande exempel. 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 den med ett ID. Systemtilldelade identiteter behöver inte anges på det här sättet, eftersom en app bara kan ha en. Många funktioner som använder hanterad identitet förutsätter att de ska använda den systemtilldelade som standard.
Leta upp JSON-objekten som definierar programinställningen
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
, vilket 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')]" },
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, ')')]" },
Välj Spara för att spara den uppdaterade ARM-mallen.
Distribuera den ändrade mallen
Kontrollera att dina alternativ för att skapa, inklusive resursgrupp, fortfarande är korrekta och välj Granska + skapa.
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.
När distributionen är klar väljer du Gå till resursgrupp och väljer sedan den nya funktionsappen.
Grattis! 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. Mer information finns 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
Sedan 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 du tidigare följde med den användartilldelade identiteten och ditt nyckelvalv skapar du nu en rolltilldelning som ger den systemtilldelade identiteten åtkomst till ditt lagringskonto.
I Azure Portal går du till lagringskontot som skapades med funktionsappen tidigare.
Välj Access Control (IAM). På den här sidan kan du visa och konfigurera vem som har åtkomst till resursen.
Välj Lägg till och välj Lägg till rolltilldelning.
Sök efter Lagringsblobdataägare, välj den och välj Nästa
På fliken Medlemmar går du till Tilldela åtkomst till och väljer Hanterad identitet
Välj Välj medlemmar för att öppna panelen Välj hanterade identiteter .
Bekräfta att prenumerationen är den som du skapade resurserna i tidigare.
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.
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.
Välj ditt program. Den bör flyttas ned till avsnittet Valda medlemmar . Välj Välj.
På skärmen Lägg till rolltilldelning väljer du Granska + tilldela. Granska konfigurationen och välj sedan 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
Sedan 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 Ansluta till värdlagring 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.
Gå till funktionsappen i Azure Portal.
I funktionsappen expanderar du Inställningar och väljer sedan Miljövariabler.
På fliken Appinställningar väljer du appinställningen AzureWebJobsStorage och redigerar den enligt följande tabell:
Alternativ Föreslaget värde Description Namn AzureWebJobsStorage__accountName Ändra 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 söka efter en lagrad hemlighet. Den nya inställningen använder ett dubbelt understreck (__
), vilket är ett specialtecken i programinställningarna.Värde Ditt kontonamn Uppdatera namnet från anslutningssträng till bara ditt StorageAccountName. Den här konfigurationen instruerar systemet att använda en identitet för att ansluta till resursen.
Välj Använd och välj sedan Använd och bekräfta för att spara ändringarna och starta om appfunktionen.
Nu har du tagit bort lagringskravet 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.
Gå vidare till nästa självstudie för att lära dig hur du använder identiteter i utlösar- och bindningsanslutningar.