Share via


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. Hierdoor hebt u 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.

Omdat sommige services geen ondersteuning bieden voor Microsoft Entra-verificatie, vereisen uw toepassingen mogelijk nog steeds geheimen in bepaalde gevallen. Deze geheimen kunnen echter worden opgeslagen in Azure Key Vault, wat de levenscyclus van beheer voor uw geheimen vereenvoudigt. Toegang tot een sleutelkluis wordt ook beheerd met identiteiten.

Door inzicht te krijgen in het gebruik van identiteiten in plaats van geheimen wanneer u dat wel kunt en om Key Vault te gebruiken wanneer u dat niet kunt, vermindert u het risico, verlaagt u de operationele overhead en verbetert u over het algemeen de beveiligingspostuur voor uw toepassingen.

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 (Server Message Block). Azure Files is het standaardbestandssysteem voor Windows-implementaties in Premium- en Verbruiksabonnementen. Hoewel we Azure Files volledig kunnen verwijderen, introduceert dit beperkingen 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 Beschrijving
    Abonnement Uw abonnement Abonnement waaronder deze nieuwe functie-app wordt gemaakt.
    Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waarin u uw functie-app maakt.
    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, voor later gebruik.

  5. Selecteer 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 selecteer vervolgens 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 maakt gebruik van een door de gebruiker toegewezen identiteit, zodat de machtigingen kunnen worden ingesteld voordat de app wordt gemaakt. Zie Beheerde identiteiten gebruiken in Azure Functions voor meer informatie over beheerde identiteiten.

  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 Beschrijving
    Abonnement Uw abonnement Abonnement waaronder deze nieuwe functie-app wordt gemaakt.
    Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waarin u uw functie-app maakt.
    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 selecteer vervolgens Maken.

  5. Wanneer de identiteit is gemaakt, navigeert u ernaar in de portal. Selecteer Eigenschappen en noteer de resource-id voor later gebruik.

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

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

    Optie Voorgestelde waarde Beschrijving
    Scope Key Vault 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

Omdat de portalervaring voor het maken van een functie-app niet communiceert met Azure Key Vault, moet u 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 Beschrijving
    Abonnement Uw abonnement Abonnement waaronder deze nieuwe functie-app wordt gemaakt.
    Resourcegroep myResourceGroup Naam voor de nieuwe resourcegroep waarin u uw functie-app maakt.
    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 . Bekijk de standaardopties die zijn 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.

    Schermopname van de knop Implementeren boven aan de pagina Sjabloon.

De sjabloon bewerken

U bewerkt nu de sjabloon om de Azure Files-verbindingsreeks op te slaan in Key Vault en stelt uw functie-app in staat ernaar te 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, waarmee de Azure Files-verbindingsreeks in Key Vault worden opgenomen. 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 opnieuw 'VAULT_NAME' door de naam van uw sleutelkluis. Hiermee voorkomt u dat uw app wordt gemaakt voordat het geheim wordt gedefinieerd. De dependsOn matrix moet eruitzien zoals 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 gebruikt.

  4. Voeg de keyVaultReferenceIdentity eigenschap toe aan het properties object voor de functie-app, zoals in het volgende 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 deze opgeven met een id. Door het systeem toegewezen identiteiten hoeven niet op deze manier te worden opgegeven, omdat een app er maar één kan hebben. Veel functies die beheerde identiteit gebruiken, gaan ervan uit dat ze standaard het systeem toegewezen moeten gebruiken.

  5. Zoek 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. Zie Key Vault-verwijzingen voor Azure Functions voor meer informatie.

Tip

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 standaard is 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 gevolgd met de door de gebruiker toegewezen identiteit en uw sleutelkluis, maakt u nu een roltoewijzing die de door het systeem toegewezen identiteit toegang verleent tot uw opslagaccount.

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

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

  3. Selecteer Toevoegen en selecteer Roltoewijzing toevoegen.

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

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

  6. Selecteer 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. Selecteer uw toepassing. Deze moet omlaag gaan naar de sectie Geselecteerde leden . Kies Selecteren.

  11. Selecteer Beoordelen en toewijzen in het scherm Roltoewijzing toevoegen. Controleer de configuratie en selecteer Beoordelen en toewijzen.

Tip

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 met hostopslag 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. Vouw in uw functie-app Instellingen uit en selecteer vervolgens Omgevingsvariabelen.

  3. Selecteer op het tabblad App-instellingen de app-instelling AzureWebJobsStorage en bewerk deze op basis van de volgende tabel:

    Optie Voorgestelde waarde Omschrijving
    Naam AzureWebJobsStorage__accountName Wijzig de naam van AzureWebJobsStorage in de exacte naam AzureWebJobsStorage__accountName. Met deze instelling wordt de host geïnstrueerd om de identiteit te gebruiken in plaats van te zoeken naar een opgeslagen geheim. 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 geeft aan dat het systeem een identiteit moet gebruiken om verbinding te maken met de resource.

  4. Selecteer Toepassen en selecteer Vervolgens Toepassen en Bevestigen om uw wijzigingen op te slaan en de app-functie opnieuw op te starten.

U hebt nu 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.

Ga naar de volgende zelfstudie voor meer informatie over het gebruik van identiteiten in trigger- en bindingsverbindingen.