Zelfstudie: Een functie-app maken die verbinding maakt met Azure-services met behulp van identiteiten in plaats van geheimen

In deze zelfstudie leert u hoe u waar mogelijk een functie-app configureert met behulp van Microsoft Entra-identiteiten in plaats van geheimen of verbindingsreeks s. Door identiteiten te gebruiken, voorkomt u dat gevoelige geheimen per ongeluk worden gelekt en kunt u beter inzicht krijgen in de manier waarop gegevens worden geopend. Zie Een op identiteit gebaseerde verbinding configureren voor meer informatie over op identiteit gebaseerde verbindingen.

Hoewel de weergegeven procedures in het algemeen werken voor alle talen, ondersteunt deze zelfstudie momenteel C#-klassenbibliotheekfuncties in Windows.

In deze zelfstudie leert u het volgende:

  • Een functie-app maken in Azure met behulp van een ARM-sjabloon
  • Zowel door het systeem toegewezen als door de gebruiker toegewezen beheerde identiteiten inschakelen in de functie-app
  • Roltoewijzingen maken die machtigingen verlenen aan andere resources
  • Geheimen verplaatsen die niet kunnen worden vervangen door identiteiten in Azure Key Vault
  • Een app configureren om verbinding te maken met de standaardhostopslag met behulp van de beheerde identiteit

Nadat u deze zelfstudie hebt voltooid, moet u de vervolgzelfstudie voltooien die laat zien hoe u op identiteit gebaseerde verbindingen gebruikt in plaats van geheimen met triggers en bindingen.

Vereisten

Waarom identiteit gebruiken?

Het beheren van geheimen en referenties is een veelvoorkomende uitdaging voor teams van alle grootten. Geheimen moeten worden beveiligd tegen diefstal of onbedoelde openbaarmaking, en ze moeten mogelijk periodiek worden geroteerd. Met veel Azure-services kunt u in plaats daarvan een identiteit in Microsoft Entra ID gebruiken om clients te verifiëren en te controleren op machtigingen die snel kunnen worden gewijzigd en ingetrokken. Dit biedt meer controle over toepassingsbeveiliging met minder operationele overhead. Een identiteit kan een menselijke gebruiker zijn, zoals de ontwikkelaar van een toepassing of een actieve toepassing in Azure met een beheerde identiteit.

Sommige services bieden geen ondersteuning voor Microsoft Entra-verificatie, zodat geheimen mogelijk nog steeds vereist zijn voor uw toepassingen. Deze kunnen echter worden opgeslagen in Azure Key Vault, waardoor de levenscyclus van beheer voor uw geheimen eenvoudiger wordt. Toegang tot een sleutelkluis wordt ook beheerd met identiteiten.

Als u begrijpt hoe u identiteiten gebruikt in plaats van geheimen wanneer u dat kunt en key Vault gebruikt wanneer dat niet lukt, kunt u risico's verminderen, operationele overhead verlagen en over het algemeen de beveiligingspostuur voor uw toepassingen verbeteren.

Een functie-app maken die Key Vault gebruikt voor de benodigde geheimen

Azure Files is een voorbeeld van een service die nog geen ondersteuning biedt voor Microsoft Entra-verificatie voor SMB-bestandsshares. Azure Files is het standaardbestandssysteem voor Windows-implementaties in Premium- en Verbruiksabonnementen. Hoewel Azure Files volledig kan worden verwijderd, worden er beperkingen geïntroduceerd die u mogelijk niet wilt. In plaats daarvan verplaatst u de Azure Files verbindingsreeks naar Azure Key Vault. Op die manier wordt het centraal beheerd, met toegang die wordt beheerd door de identiteit.

Een Azure Key Vault maken

Eerst hebt u een sleutelkluis nodig om geheimen op te slaan. U configureert deze om op rollen gebaseerd toegangsbeheer (RBAC) van Azure te gebruiken om te bepalen wie geheimen uit de kluis kan lezen.

  1. Kies in Azure Portal een resource maken (+).

  2. Selecteer Security>Key Vault op de pagina Een resource maken.

  3. Gebruik op de pagina Basisinformatie de volgende tabel om de sleutelkluis te configureren.

    Optie Voorgestelde waarde Omschrijving
    Abonnement Uw abonnement Abonnement waaronder deze nieuwe functie-app wordt gemaakt.
    Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waar u uw functie-app gaat maken.
    Naam van sleutelkluis Wereldwijd unieke naam Naam die uw nieuwe sleutelkluis identificeert. De kluisnaam mag alleen alfanumerieke tekens en streepjes bevatten en mag niet beginnen met een getal.
    Prijscategorie Standaard Opties voor facturering. Standard is voldoende voor deze zelfstudie.
    Regio Voorkeursregio Kies een regio bij u in de buurt of in de buurt van andere services waartoe uw functies toegang hebben.

    Gebruik de standaardselecties voor de secties Herstelopties.

  4. Noteer de naam die u hebt gebruikt, omdat u deze later nodig hebt.

  5. Klik op Volgende: Toegangsbeleid om naar het tabblad Toegangsbeleid te navigeren.

  6. Kies onder Machtigingsmodel op rollen gebaseerd toegangsbeheer van Azure

  7. Selecteer Controleren + maken. Controleer de configuratie en klik vervolgens op Maken.

Een identiteit en machtigingen instellen voor de app

Als u Azure Key Vault wilt gebruiken, moet uw app beschikken over een identiteit die kan worden gemachtigd om geheimen te lezen. Deze app gebruikt een door de gebruiker toegewezen identiteit, zodat de machtigingen kunnen worden ingesteld voordat de app wordt gemaakt. Meer informatie over beheerde identiteiten voor Azure Functions vindt u in het onderwerp Beheerde identiteiten gebruiken in Azure Functions .

  1. Kies in Azure Portal een resource maken (+).

  2. Selecteer op de pagina Een resource maken de door de id-gebruiker>toegewezen beheerde identiteit.

  3. Gebruik op de pagina Basisinformatie de volgende tabel om de identiteit te configureren.

    Optie Voorgestelde waarde Omschrijving
    Abonnement Uw abonnement Abonnement waaronder deze nieuwe functie-app wordt gemaakt.
    Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waar u uw functie-app gaat maken.
    Regio Voorkeursregio Kies een regio bij u in de buurt of in de buurt van andere services waartoe uw functies toegang hebben.
    Naam Wereldwijd unieke naam Naam die uw nieuwe door de gebruiker toegewezen identiteit identificeert.
  4. Selecteer Controleren + maken. Controleer de configuratie en klik vervolgens op Maken.

  5. Wanneer de identiteit is gemaakt, navigeert u ernaar in de portal. Selecteer Eigenschappen en noteer de resource-id, want u hebt deze later nodig.

  6. Selecteer Azure-roltoewijzingen en klik op Roltoewijzing toevoegen (preview).

  7. Gebruik op de pagina Roltoewijzing toevoegen (preview) opties, zoals wordt weergegeven in de onderstaande tabel.

    Optie Voorgestelde waarde Beschrijving
    Bereik Sleutelkluis Bereik is een set resources waarop de roltoewijzing van toepassing is. Bereik heeft niveaus die worden overgenomen op lagere niveaus. Als u bijvoorbeeld een abonnementsbereik selecteert, is de roltoewijzing van toepassing op alle resourcegroepen en resources in het abonnement.
    Abonnement Uw abonnement Abonnement waaronder deze nieuwe functie-app wordt gemaakt.
    Resource Uw sleutelkluis De sleutelkluis die u eerder hebt gemaakt.
    - Rol Key Vault-geheimengebruiker Een rol is een verzameling machtigingen die worden verleend. Key Vault Secrets User geeft toestemming voor de identiteit om geheime waarden uit de kluis te lezen.
  8. Selecteer Opslaan. Het kan een paar minuten duren voordat de rol wordt weergegeven wanneer u de lijst met roltoewijzingen voor de identiteit vernieuwt.

De identiteit kan nu geheimen lezen die zijn opgeslagen in de sleutelkluis. Verderop in de zelfstudie voegt u extra roltoewijzingen toe voor verschillende doeleinden.

Een sjabloon genereren voor het maken van een functie-app

De portalervaring voor het maken van een functie-app werkt niet met Azure Key Vault, dus u moet een Azure Resource Manager-sjabloon genereren en bewerken. U kunt deze sjabloon vervolgens gebruiken om uw functie-app te maken die verwijst naar de Azure Files-verbindingsreeks vanuit uw sleutelkluis.

Belangrijk

Maak de functie-app pas nadat u de ARM-sjabloon hebt bewerkt. De Azure Files-configuratie moet worden ingesteld tijdens het maken van de app.

  1. Kies in Azure Portal een resource maken (+).

  2. Selecteer op de pagina Een resource maken de functie-app Compute>.

  3. Gebruik op de pagina Basisinformatie de volgende tabel om de functie-app te configureren.

    Optie Voorgestelde waarde Omschrijving
    Abonnement Uw abonnement Abonnement waaronder deze nieuwe functie-app wordt gemaakt.
    Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waar u uw functie-app gaat maken.
    Naam van de functie-app Wereldwijd unieke naam Naam waarmee uw nieuwe functie-app wordt aangeduid. Geldige tekens zijn a-z (niet hoofdlettergevoelig), 0-9 en -.
    Publiceren Code Kies ervoor om codebestanden of een Docker-container te publiceren.
    Runtimestack .NET In deze zelfstudie wordt .NET gebruikt.
    Regio Voorkeursregio Kies een regio bij u in de buurt of in de buurt van andere services waartoe uw functies toegang hebben.
  4. Selecteer Controleren + maken. Uw app gebruikt de standaardwaarden op de pagina Hosting en Bewaking . U kunt de standaardopties bekijken en deze worden opgenomen in de ARM-sjabloon die u genereert.

  5. In plaats van hier uw functie-app te maken, kiest u Een sjabloon voor automatisering downloaden, rechts van de knop Volgende .

  6. Selecteer Implementeren op de sjabloonpagina en selecteer vervolgens op de pagina Aangepaste implementatie de optie Sjabloon bewerken.

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

De sjabloon bewerken

U gaat nu de sjabloon bewerken om de Azure Files-verbindingsreeks op te slaan in Key Vault en ervoor zorgen dat uw functie-app ernaar kan verwijzen. Zorg ervoor dat u de volgende waarden uit de eerdere secties hebt voordat u doorgaat:

  • De resource-id van de door de gebruiker toegewezen identiteit
  • De naam van de sleutelkluis

Notitie

Als u een volledige sjabloon voor automatisering wilt maken, wilt u definities opnemen voor de resources voor identiteits- en roltoewijzing, met de juiste dependsOn componenten. Hiermee worden de eerdere stappen vervangen die de portal hebben gebruikt. Raadpleeg de Azure Resource Manager-richtlijnen en de documentatie voor elke service.

  1. Zoek in de editor waar de resources matrix begint. Voeg vóór de definitie van de functie-app de volgende sectie toe waarin de Azure Files-verbindingsreeks in Key Vault worden opgeslagen. Vervang 'VAULT_NAME' door de naam van uw sleutelkluis.

    {
        "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. Voeg in de definitie voor de functie-app-resource (die is type ingesteld op Microsoft.Web/sites), toe Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring aan de dependsOn matrix. Vervang 'VAULT_NAME' opnieuw door de naam van uw sleutelkluis. Hierdoor wordt uw app niet gemaakt voordat dat geheim wordt gedefinieerd. De dependsOn matrix moet eruitzien als in het volgende voorbeeld.

        {
            "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. Voeg het identity blok uit het volgende voorbeeld toe aan de definitie voor uw functie-app-resource. Vervang 'IDENTITY_RESOURCE_ID' door de resource-id van uw door de gebruiker toegewezen identiteit.

    {
        "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,
        // ...
    }
    

    Met dit identity blok wordt ook een door het systeem toegewezen identiteit ingesteld die u verderop in deze zelfstudie gaat gebruiken.

  4. Voeg de keyVaultReferenceIdentity eigenschap toe aan het properties object voor de functie-app, zoals in het onderstaande voorbeeld. Vervang 'IDENTITY_RESOURCE_ID' door de resource-id van uw door de gebruiker toegewezen identiteit.

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

    U hebt deze configuratie nodig omdat voor een app meerdere door de gebruiker toegewezen identiteiten kunnen zijn geconfigureerd. Wanneer u een door de gebruiker toegewezen identiteit wilt gebruiken, moet u opgeven welke identiteit moet worden gebruikt via een bepaalde id. Dat geldt niet voor door het systeem toegewezen identiteiten, omdat een app er maar één heeft. Veel functies die beheerde identiteit gebruiken, gaan ervan uit dat ze standaard het systeem toegewezen moeten gebruiken.

  5. Zoek nu de JSON-objecten die de WEBSITE_CONTENTAZUREFILECONNECTIONSTRING toepassingsinstelling definiëren. Deze moeten eruitzien als in het volgende voorbeeld:

    {
        "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. Vervang het value veld door een verwijzing naar het geheim, zoals wordt weergegeven in het volgende voorbeeld. Vervang 'VAULT_NAME' door de naam van uw sleutelkluis.

    {
        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
        "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', 'VAULT_NAME', 'azurefilesconnectionstring')).secretUri, ')')]"
    },
    
  7. Selecteer Opslaan om de bijgewerkte ARM-sjabloon op te slaan.

De gewijzigde sjabloon implementeren

  1. Zorg ervoor dat de opties voor maken, inclusief resourcegroep, nog steeds juist zijn en selecteer Beoordelen en maken.

  2. Nadat uw sjabloon is gevalideerd, noteert u de naam van uw opslagaccount, omdat u dit account later gaat gebruiken. Selecteer Ten slotte Maken om uw Azure-resources te maken en uw code te implementeren in de functie-app.

  3. Nadat de implementatie is voltooid, selecteert u Ga naar de resourcegroep en selecteert u vervolgens de nieuwe functie-app.

Gefeliciteerd! U hebt uw functie-app gemaakt om te verwijzen naar de Azure Files-verbindingsreeks vanuit Azure Key Vault.

Wanneer uw app een verwijzing naar een geheim moet toevoegen, hoeft u alleen een nieuwe toepassingsinstelling te definiëren die verwijst naar de waarde die is opgeslagen in Key Vault. Meer informatie hierover vindt u in Key Vault-verwijzingen voor Azure Functions.

Fooi

De Application Insights-verbindingsreeks en de bijbehorende instrumentatiesleutel worden niet beschouwd als geheimen en kunnen worden opgehaald uit App Insights met behulp van lezermachtigingen. U hoeft ze niet naar Key Vault te verplaatsen, hoewel u dat zeker wel kunt.

Beheerde identiteit gebruiken voor AzureWebJobsStorage

Vervolgens gebruikt u de door het systeem toegewezen identiteit die u in de vorige stappen voor de AzureWebJobsStorage verbinding hebt geconfigureerd. AzureWebJobsStorage wordt gebruikt door de Functions-runtime en door verschillende triggers en bindingen om te coördineren tussen meerdere actieve exemplaren. Het is vereist dat uw functie-app werkt en net als Azure Files is deze standaard geconfigureerd met een verbindingsreeks wanneer u een nieuwe functie-app maakt.

De door het systeem toegewezen identiteit toegang verlenen tot het opslagaccount

Net als bij de stappen die u eerder hebt uitgevoerd met de door de gebruiker toegewezen identiteit en uw sleutelkluis, maakt u nu een roltoewijzing die de door het systeem toegewezen identiteit toegang geeft tot uw opslagaccount.

  1. Navigeer in Azure Portal naar het opslagaccount dat eerder is gemaakt met uw functie-app.

  2. Selecteer Access Control (IAM). Hier kunt u bekijken en configureren wie toegang heeft tot de resource.

  3. Klik op Toevoegen en selecteer Roltoewijzing toevoegen.

  4. Zoek de eigenaar van opslagblobgegevens, selecteer deze en klik op Volgende

  5. Kies op het tabblad Leden onder Toegang toewijzen aan beheerde identiteit

  6. Klik op Leden selecteren om het deelvenster Beheerde identiteiten selecteren te openen.

  7. Controleer of het abonnement het abonnement is waarin u de resources eerder hebt gemaakt.

  8. Kies in de beheerde identiteitskiezer de functie-app in de categorie Door het systeem toegewezen beheerde identiteit. Het label 'Functie-app' heeft mogelijk een getal tussen haakjes ernaast, waarmee het aantal apps in het abonnement wordt aangegeven met door het systeem toegewezen identiteiten.

  9. Uw app moet worden weergegeven in een lijst onder de invoervelden. Als u dit niet ziet, kunt u het selectievakje Selecteren gebruiken om de resultaten te filteren met de naam van uw app.

  10. Klik op uw toepassing. Deze moet omlaag gaan naar de sectie Geselecteerde leden . Klik op Selecteren.

  11. Klik in het scherm Roltoewijzing toevoegen op Controleren en toewijzen. Controleer de configuratie en klik vervolgens op Controleren en toewijzen.

Fooi

Als u van plan bent om de functie-app te gebruiken voor een door blob geactiveerde functie, moet u deze stappen herhalen voor de rollen Inzender voor opslagaccounts en Inzender voor opslagwachtrijgegevens via het account dat wordt gebruikt door AzureWebJobsStorage. Zie Op identiteit gebaseerde verbindingen op basis van blobtriggers voor meer informatie.

De configuratie van AzureWebJobsStorage bewerken

Vervolgens werkt u uw functie-app bij om de door het systeem toegewezen identiteit te gebruiken wanneer deze gebruikmaakt van de blobservice voor hostopslag.

Belangrijk

De AzureWebJobsStorage configuratie wordt door sommige triggers en bindingen gebruikt en deze extensies moeten ook op identiteit gebaseerde verbindingen kunnen gebruiken. Apps die gebruikmaken van blobtriggers of Event Hub-triggers moeten deze extensies mogelijk bijwerken. Omdat er geen functies zijn gedefinieerd voor deze app, is er nog geen probleem. Zie Verbinding maken voor het hosten van opslag met een identiteit voor meer informatie over deze vereiste.

Op dezelfde manier AzureWebJobsStorage wordt gebruikt voor implementatieartefacten bij het gebruik van build aan de serverzijde in Linux-verbruik. Wanneer u op identiteit gebaseerde verbindingen inschakelt voor AzureWebJobsStorage in Linux-verbruik, moet u implementeren via een extern implementatiepakket.

  1. Navigeer in Azure Portal naar uw functie-app.

  2. Selecteer onder Instellingen de optie Configuratie.

  3. Selecteer de knop Bewerken naast de toepassingsinstelling AzureWebJobsStorage en wijzig deze op basis van de volgende waarden.

    Optie Voorgestelde waarde Omschrijving
    Naam AzureWebJobsStorage__accountName Werk de naam van AzureWebJobsStorage bij naar de exacte naam AzureWebJobsStorage__accountName. Met deze instelling moet de host de identiteit gebruiken in plaats van een opgeslagen geheim te zoeken. De nieuwe instelling maakt gebruik van een dubbel onderstrepingsteken (__), een speciaal teken in toepassingsinstellingen.
    Value Uw accountnaam Werk de naam van de verbindingsreeks bij naar alleen uw StorageAccountName.

    Deze configuratie laat het systeem weten dat het een identiteit moet gebruiken om verbinding te maken met de resource.

  4. Selecteer OK en sla >de wijzigingen vervolgens op.

U hebt de vereiste voor opslag verbindingsreeks voor AzureWebJobsStorage verwijderd door uw app te configureren om in plaats daarvan verbinding te maken met blobs met behulp van beheerde identiteiten.

Notitie

De __accountName syntaxis is uniek voor de AzureWebJobsStorage-verbinding en kan niet worden gebruikt voor andere opslagverbindingen. Als u wilt weten hoe u andere verbindingen definieert, controleert u de verwijzing voor elke trigger en binding die uw app gebruikt.

Volgende stappen

In deze zelfstudie hebt u laten zien hoe u een functie-app maakt zonder geheimen op te slaan in de configuratie.

In de volgende zelfstudie leert u hoe u identiteit gebruikt in trigger- en bindingsverbindingen.