Samouczek: tworzenie aplikacji funkcji łączącej się z usługami platformy Azure przy użyciu tożsamości zamiast wpisów tajnych

W tym samouczku pokazano, jak skonfigurować aplikację funkcji przy użyciu tożsamości firmy Microsoft zamiast wpisów tajnych lub parametry połączenia, jeśli to możliwe. Korzystanie z tożsamości pomaga uniknąć przypadkowego wycieku poufnych wpisów tajnych i zapewnić lepszy wgląd w dostęp do danych. Aby dowiedzieć się więcej na temat połączeń opartych na tożsamościach, zobacz konfigurowanie połączenia opartego na tożsamościach.

Chociaż przedstawione procedury działają ogólnie dla wszystkich języków, ten samouczek obsługuje obecnie funkcje biblioteki klas języka C# w systemie Windows specjalnie.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie aplikacji funkcji na platformie Azure przy użyciu szablonu usługi ARM
  • Włączanie tożsamości zarządzanych przypisanych przez system i przypisanych przez użytkownika w aplikacji funkcji
  • Tworzenie przypisań ról, które dają uprawnienia innym zasobom
  • Przenoszenie wpisów tajnych, których nie można zastąpić tożsamościami w usłudze Azure Key Vault
  • Konfigurowanie aplikacji w celu nawiązania połączenia z domyślnym magazynem hostów przy użyciu tożsamości zarządzanej

Po ukończeniu tego samouczka należy wykonać czynności opisane w samouczku, w którym pokazano, jak używać połączeń opartych na tożsamościach zamiast wpisów tajnych z wyzwalaczami i powiązaniami.

Wymagania wstępne

Dlaczego warto używać tożsamości?

Zarządzanie wpisami tajnymi i poświadczeniami jest typowym wyzwaniem dla zespołów o wszystkich rozmiarach. Wpisy tajne muszą być zabezpieczone przed kradzieżą lub przypadkowym ujawnieniem i mogą być okresowo obracane. Wiele usług platformy Azure umożliwia zamiast tego używanie tożsamości w usłudze Microsoft Entra ID do uwierzytelniania klientów i sprawdzania uprawnień, które można szybko modyfikować i odwoływać. Pozwala to na większą kontrolę nad zabezpieczeniami aplikacji z mniejszym obciążeniem operacyjnym. Tożsamość może być użytkownikiem ludzkim, takim jak deweloper aplikacji, lub działająca aplikacja na platformie Azure z tożsamością zarządzaną.

Niektóre usługi nie obsługują uwierzytelniania firmy Microsoft Entra, dlatego wpisy tajne mogą być nadal wymagane przez aplikacje. Można je jednak przechowywać w usłudze Azure Key Vault, co pomaga uprościć cykl życia zarządzania dla wpisów tajnych. Dostęp do magazynu kluczy jest również kontrolowany za pomocą tożsamości.

Zrozumienie sposobu używania tożsamości zamiast wpisów tajnych w przypadku możliwości i używania usługi Key Vault, gdy nie jest możliwe, będzie można zmniejszyć ryzyko, zmniejszyć obciążenie operacyjne i ogólnie poprawić stan zabezpieczeń aplikacji.

Tworzenie aplikacji funkcji, która używa usługi Key Vault do niezbędnych wpisów tajnych

Azure Files to przykład usługi, która nie obsługuje jeszcze uwierzytelniania firmy Microsoft Entra dla udziałów plików SMB. Usługa Azure Files to domyślny system plików dla wdrożeń systemu Windows w planach Premium i Zużycie. Chociaż możemy całkowicie usunąć usługę Azure Files, wprowadza to ograniczenia, których możesz nie chcieć. Zamiast tego przeniesiesz parametry połączenia usługi Azure Files do usługi Azure Key Vault. W ten sposób jest ona centralnie zarządzana z dostępem kontrolowanym przez tożsamość.

Tworzenie usługi Azure Key Vault

Najpierw potrzebny będzie magazyn kluczy do przechowywania wpisów tajnych. Skonfigurujesz ją tak, aby korzystała z kontroli dostępu opartej na rolach (RBAC) platformy Azure do określania, kto może odczytywać wpisy tajne z magazynu.

  1. W witrynie Azure Portal wybierz pozycję Utwórz zasób (+).

  2. Na stronie Tworzenie zasobu wybierz pozycję Security>Key Vault.

  3. Na stronie Podstawowe użyj poniższej tabeli, aby skonfigurować magazyn kluczy.

    Opcja Sugerowana wartość opis
    Subskrypcja Twoja subskrypcja Subskrypcja, w ramach której jest tworzona ta nowa aplikacja funkcji.
    Grupa zasobów myResourceGroup Nazwa nowej grupy zasobów, w której utworzysz aplikację funkcji.
    Nazwa magazynu kluczy Nazwa unikatowa w skali globalnej Nazwa identyfikująca nowy magazyn kluczy. Nazwa magazynu musi zawierać tylko znaki alfanumeryczne i kreski i nie może zaczynać się od liczby.
    Warstwa cenowa Standardowy Opcje rozliczeń. Standard jest wystarczający na potrzeby tego samouczka.
    Region Preferowany region Wybierz region w pobliżu ciebie lub w pobliżu innych usług, do których uzyskujesz dostęp do funkcji.

    Użyj domyślnych opcji dla sekcji "Opcje odzyskiwania".

  4. Zanotuj użytą nazwę, ponieważ będzie ona potrzebna później.

  5. Kliknij przycisk Dalej: Zasady dostępu, aby przejść do karty Zasady dostępu.

  6. W obszarze Model uprawnień wybierz pozycję Kontrola dostępu oparta na rolach na platformie Azure

  7. Wybierz pozycję Przejrzyj i utwórz. Przejrzyj konfigurację, a następnie kliknij przycisk Utwórz.

Konfigurowanie tożsamości i uprawnień dla aplikacji

Aby można było korzystać z usługi Azure Key Vault, aplikacja musi mieć tożsamość, która może mieć uprawnienia do odczytywania wpisów tajnych. Ta aplikacja będzie używać tożsamości przypisanej przez użytkownika, aby można było skonfigurować uprawnienia przed utworzeniem aplikacji. Więcej informacji na temat tożsamości zarządzanych dla usługi Azure Functions można dowiedzieć się w temacie How to use managed identities in Azure Functions (Jak używać tożsamości zarządzanych w usłudze Azure Functions ).

  1. W witrynie Azure Portal wybierz pozycję Utwórz zasób (+).

  2. Na stronie Tworzenie zasobu wybierz pozycję Tożsamość>przypisana przez użytkownika tożsamość zarządzana.

  3. Na stronie Podstawowe użyj poniższej tabeli, aby skonfigurować tożsamość.

    Opcja Sugerowana wartość opis
    Subskrypcja Twoja subskrypcja Subskrypcja, w ramach której jest tworzona ta nowa aplikacja funkcji.
    Grupa zasobów myResourceGroup Nazwa nowej grupy zasobów, w której utworzysz aplikację funkcji.
    Region Preferowany region Wybierz region w pobliżu ciebie lub w pobliżu innych usług, do których uzyskujesz dostęp do funkcji.
    Nazwa/nazwisko Nazwa unikatowa w skali globalnej Nazwa identyfikująca nową tożsamość przypisaną przez użytkownika.
  4. Wybierz pozycję Przejrzyj i utwórz. Przejrzyj konfigurację, a następnie kliknij przycisk Utwórz.

  5. Po utworzeniu tożsamości przejdź do niej w portalu. Wybierz pozycję Właściwości i zanotuj identyfikator zasobu, ponieważ będzie on potrzebny później.

  6. Wybierz pozycję Przypisania ról platformy Azure, a następnie kliknij pozycję Dodaj przypisanie roli (wersja zapoznawcza).

  7. Na stronie Dodawanie przypisania roli (wersja zapoznawcza) użyj opcji, jak pokazano w poniższej tabeli.

    Opcja Sugerowana wartość opis
    Scope Magazyn kluczy Zakres to zestaw zasobów, do których ma zastosowanie przypisanie roli. Zakres ma poziomy dziedziczone na niższych poziomach. Jeśli na przykład wybierzesz zakres subskrypcji, przypisanie roli ma zastosowanie do wszystkich grup zasobów i zasobów w subskrypcji.
    Subskrypcja Twoja subskrypcja Subskrypcja, w ramach której jest tworzona ta nowa aplikacja funkcji.
    Zasób Magazyn kluczy Utworzony wcześniej magazyn kluczy.
    Rola Użytkownik wpisów tajnych usługi Key Vault Rola to kolekcja uprawnień, które są przyznawane. Użytkownik wpisów tajnych usługi Key Vault udziela tożsamości uprawnień do odczytywania wartości wpisów tajnych z magazynu.
  8. Wybierz pozycję Zapisz. Wyświetlenie roli po odświeżeniu listy przypisań ról dla tożsamości może potrwać minutę lub dwie.

Tożsamość będzie teraz mogła odczytywać wpisy tajne przechowywane w magazynie kluczy. W dalszej części samouczka dodasz dodatkowe przypisania ról do różnych celów.

Generowanie szablonu do tworzenia aplikacji funkcji

Środowisko portalu do tworzenia aplikacji funkcji nie wchodzi w interakcję z usługą Azure Key Vault, dlatego należy wygenerować i edytować szablon usługi Azure Resource Manager. Następnie możesz użyć tego szablonu, aby utworzyć aplikację funkcji odwołującą się do usługi Azure Files parametry połączenia z magazynu kluczy.

Ważne

Nie twórz aplikacji funkcji dopiero po zmodyfikowaniu szablonu usługi ARM. Konfiguracja usługi Azure Files musi zostać skonfigurowana w czasie tworzenia aplikacji.

  1. W witrynie Azure Portal wybierz pozycję Utwórz zasób (+).

  2. Na stronie Tworzenie zasobu wybierz pozycję Aplikacja funkcji obliczeniowej>.

  3. Na stronie Podstawowe użyj poniższej tabeli, aby skonfigurować aplikację funkcji.

    Opcja Sugerowana wartość opis
    Subskrypcja Twoja subskrypcja Subskrypcja, w ramach której jest tworzona ta nowa aplikacja funkcji.
    Grupa zasobów myResourceGroup Nazwa nowej grupy zasobów, w której utworzysz aplikację funkcji.
    Nazwa aplikacji funkcji Nazwa unikatowa w skali globalnej Nazwa identyfikująca nową aplikację funkcji. Prawidłowe znaki to a-z (bez uwzględniania wielkości liter), 0-9i -.
    Publikowanie Kod Wybierz publikowanie plików kodu lub kontenera platformy Docker.
    Stos środowiska uruchomieniowego .NET W tym samouczku jest używana platforma .NET.
    Region Preferowany region Wybierz region w pobliżu ciebie lub w pobliżu innych usług, do których uzyskujesz dostęp do funkcji.
  4. Wybierz pozycję Przejrzyj i utwórz. Aplikacja używa wartości domyślnych na stronie Hosting i Monitorowanie . Możesz zapoznać się z opcjami domyślnymi i dołączyć je do wygenerowanego szablonu usługi ARM.

  5. Zamiast tworzyć aplikację funkcji w tym miejscu, wybierz pozycję Pobierz szablon automatyzacji, który znajduje się po prawej stronie przycisku Dalej .

  6. Na stronie szablonu wybierz pozycję Wdróż, a następnie na stronie Wdrożenie niestandardowe wybierz pozycję Edytuj szablon.

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

Edytowanie szablonu

Teraz edytujesz szablon, aby przechowywać parametry połączenia usługi Azure Files w usłudze Key Vault i zezwolić aplikacji funkcji na jej odwołanie. Przed kontynuowaniem upewnij się, że masz następujące wartości z wcześniejszych sekcji:

  • Identyfikator zasobu tożsamości przypisanej przez użytkownika
  • Nazwa magazynu kluczy

Uwaga

Jeśli chcesz utworzyć pełny szablon automatyzacji, należy uwzględnić definicje zasobów tożsamości i przypisania roli z odpowiednimi dependsOn klauzulami. Spowoduje to zastąpienie wcześniejszych kroków, które używały portalu. Zapoznaj się ze wskazówkami dotyczącymi usługi Azure Resource Manager i dokumentacją dla każdej usługi.

  1. W edytorze znajdź miejsce rozpoczęcia tablicy resources . Przed definicją aplikacji funkcji dodaj następującą sekcję, która umieszcza parametry połączenia usługi Azure Files w usłudze Key Vault. Zastąp ciąg "VAULT_NAME" nazwą magazynu kluczy.

    {
        "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. W definicji zasobu aplikacji funkcji (który ma type ustawioną wartość Microsoft.Web/sites), dodaj Microsoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring do tablicy dependsOn . Ponownie zastąp ciąg "VAULT_NAME" nazwą magazynu kluczy. Dzięki temu aplikacja nie zostanie utworzona przed zdefiniowaną tym wpisem tajnym. Tablica dependsOn powinna wyglądać podobnie do poniższego przykładu.

        {
            "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. Dodaj blok z poniższego przykładu identity do definicji zasobu aplikacji funkcji. Zastąp wartość "IDENTITY_RESOURCE_ID" identyfikatorem zasobu tożsamości przypisanej przez użytkownika.

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

    Ten identity blok konfiguruje również tożsamość przypisaną przez system, która będzie używana w dalszej części tego samouczka.

  4. keyVaultReferenceIdentity Dodaj właściwość do properties obiektu dla aplikacji funkcji, jak w poniższym przykładzie. Zastąp wartość "IDENTITY_RESOURCE_ID" identyfikatorem zasobu tożsamości przypisanej przez użytkownika.

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

    Ta konfiguracja jest potrzebna, ponieważ aplikacja może mieć skonfigurowaną wiele tożsamości przypisanych przez użytkownika. Zawsze, gdy chcesz użyć tożsamości przypisanej przez użytkownika, musisz określić, która z nich ma określony identyfikator. Nie dotyczy to tożsamości przypisanych przez system, ponieważ aplikacja będzie mieć tylko jedną. Wiele funkcji korzystających z tożsamości zarządzanej zakłada, że domyślnie powinny używać przypisanego przez system elementu.

  5. Teraz znajdź obiekty JSON definiujące WEBSITE_CONTENTAZUREFILECONNECTIONSTRING ustawienie aplikacji, które powinno wyglądać podobnie do następującego przykładu:

    {
        "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. value Zastąp pole odwołaniem do wpisu tajnego, jak pokazano w poniższym przykładzie. Zastąp ciąg "VAULT_NAME" nazwą magazynu kluczy.

    {
        "name": "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING",
        "value": "[concat('@Microsoft.KeyVault(SecretUri=', reference(resourceId('Microsoft.KeyVault/vaults/secrets', 'VAULT_NAME', 'azurefilesconnectionstring')).secretUri, ')')]"
    },
    
  7. Wybierz pozycję Zapisz , aby zapisać zaktualizowany szablon usługi ARM.

Wdrażanie zmodyfikowanego szablonu

  1. Upewnij się, że opcje tworzenia, w tym grupa zasobów, są nadal poprawne i wybierz pozycję Przejrzyj i utwórz.

  2. Po zweryfikowaniu szablonu zanotuj nazwę konta magazynu, ponieważ użyjesz tego konta później. Na koniec wybierz pozycję Utwórz , aby utworzyć zasoby platformy Azure i wdrożyć kod w aplikacji funkcji.

  3. Po zakończeniu wdrażania wybierz pozycję Przejdź do grupy zasobów, a następnie wybierz nową aplikację funkcji.

Gratulacje! Aplikacja funkcji została pomyślnie utworzona w celu odwołania się do usługi Azure Files parametry połączenia z usługi Azure Key Vault.

Za każdym razem, gdy aplikacja musi dodać odwołanie do wpisu tajnego, wystarczy zdefiniować nowe ustawienie aplikacji wskazujące wartość przechowywaną w usłudze Key Vault. Więcej informacji na ten temat można uzyskać w temacie Key Vault references for Azure Functions (Dokumentacja usługi Key Vault dla usługi Azure Functions).

Napiwek

Aplikacja Szczegółowe informacje parametry połączenia i dołączony klucz instrumentacji nie są uznawane za wpisy tajne i można je pobrać z usługi App Szczegółowe informacje przy użyciu uprawnień czytelnika. Nie musisz przenosić ich do usługi Key Vault, chociaż na pewno możesz.

Używanie tożsamości zarządzanej dla usługi AzureWebJobsStorage

Następnie użyjesz tożsamości przypisanej przez system skonfigurowanej w poprzednich krokach połączenia AzureWebJobsStorage . AzureWebJobsStorage jest używany przez środowisko uruchomieniowe usługi Functions oraz przez kilka wyzwalaczy i powiązań do koordynowania między wieloma uruchomionymi wystąpieniami. Aplikacja funkcji musi działać, podobnie jak usługa Azure Files, jest domyślnie skonfigurowana przy użyciu parametry połączenia podczas tworzenia nowej aplikacji funkcji.

Udzielanie tożsamości przypisanej przez system dostępu do konta magazynu

Podobnie jak w poprzednich krokach związanych z tożsamością przypisaną przez użytkownika i magazynem kluczy, teraz utworzysz przypisanie roli udzielającego dostępu tożsamości przypisanej przez system do konta magazynu.

  1. W witrynie Azure Portal przejdź do konta magazynu utworzonego wcześniej przy użyciu aplikacji funkcji.

  2. Wybierz Access Control (Zarządzanie dostępem i tożsamościami). W tym miejscu można wyświetlać i konfigurować, kto ma dostęp do zasobu.

  3. Kliknij pozycję Dodaj i wybierz pozycję Dodaj przypisanie roli.

  4. Wyszukaj pozycję Właściciel danych obiektu blob usługi Storage, zaznacz je, a następnie kliknij przycisk Dalej

  5. Na karcie Członkowie w obszarze Przypisz dostęp do wybierz pozycję Tożsamość zarządzana

  6. Kliknij pozycję Wybierz członków , aby otworzyć panel Wybieranie tożsamości zarządzanych .

  7. Upewnij się, że subskrypcja jest subskrypcją, w której zostały utworzone wcześniej zasoby.

  8. W selektorze tożsamości zarządzanej wybierz pozycję Aplikacja funkcji z kategorii Tożsamość zarządzana przypisana przez system. Etykieta "Aplikacja funkcji" może zawierać liczbę nawiasów obok niej wskazującą liczbę aplikacji w subskrypcji z tożsamościami przypisanymi przez system.

  9. Aplikacja powinna pojawić się na liście poniżej pól wejściowych. Jeśli go nie widzisz, możesz użyć pola Wybierz , aby przefiltrować wyniki przy użyciu nazwy aplikacji.

  10. Kliknij aplikację. Powinna zostać przeniesiona w dół do sekcji Wybrane elementy członkowskie . Kliknij opcję Wybierz.

  11. Ponownie na ekranie Dodawanie przypisania roli kliknij pozycję Przejrzyj i przypisz. Przejrzyj konfigurację, a następnie kliknij pozycję Przejrzyj i przypisz.

Napiwek

Jeśli zamierzasz używać aplikacji funkcji dla funkcji wyzwalanej przez obiekt blob, musisz powtórzyć te kroki dla ról Współautor konta magazynu i Współautor danych kolejki magazynu na koncie używanym przez usługę AzureWebJobsStorage. Aby dowiedzieć się więcej, zobacz Połączenia oparte na tożsamości wyzwalacza obiektów blob.

Edytowanie konfiguracji azureWebJobsStorage

Następnie zaktualizujesz aplikację funkcji, aby korzystała z przypisanej przez system tożsamości, gdy używa ona usługi blob na potrzeby magazynu hostów.

Ważne

Konfiguracja AzureWebJobsStorage jest używana przez niektóre wyzwalacze i powiązania, a te rozszerzenia również muszą mieć możliwość korzystania z połączeń opartych na tożsamościach. Aplikacje korzystające z wyzwalaczy obiektów blob lub wyzwalaczy centrum zdarzeń mogą wymagać zaktualizowania tych rozszerzeń. Ponieważ dla tej aplikacji nie zdefiniowano żadnych funkcji, nie ma jeszcze problemu. Aby dowiedzieć się więcej na temat tego wymagania, zobacz Połączenie hostowanie magazynu przy użyciu tożsamości.

AzureWebJobsStorage Podobnie jest używany do wdrażania artefaktów podczas korzystania z kompilacji po stronie serwera w użyciu systemu Linux. Po włączeniu połączeń opartych na tożsamościach w AzureWebJobsStorage przypadku użycia systemu Linux należy wdrożyć za pośrednictwem zewnętrznego pakietu wdrożeniowego.

  1. W witrynie Azure Portal przejdź do aplikacji funkcji.

  2. W obszarze Ustawienia wybierz pozycję Konfiguracja.

  3. Wybierz przycisk Edytuj obok ustawienia aplikacji AzureWebJobsStorage i zmień go na podstawie następujących wartości.

    Opcja Sugerowana wartość opis
    Nazwa/nazwisko AzureWebJobsStorage__accountName Zaktualizuj nazwę z azureWebJobsStorage do dokładnej nazwy AzureWebJobsStorage__accountName. To ustawienie nakazuje hostowi użycie tożsamości zamiast wyszukiwania przechowywanego wpisu tajnego. Nowe ustawienie używa podwójnego podkreślenia (__), który jest znakiem specjalnym w ustawieniach aplikacji.
    Wartość Nazwa konta Zaktualizuj nazwę z parametry połączenia tylko do nazwy StorageAccountName.

    Ta konfiguracja poinformuje system, że powinien używać tożsamości do nawiązywania połączenia z zasobem.

  4. Wybierz przycisk OK, a następnie pozycję Zapisz>kontynuuj, aby zapisać zmiany.

Usunięto wymaganie parametry połączenia magazynu dla usługi AzureWebJobsStorage, konfigurując aplikację, aby zamiast tego łączyć się z obiektami blob przy użyciu tożsamości zarządzanych.

Uwaga

Składnia __accountName jest unikatowa dla połączenia AzureWebJobsStorage i nie może być używana dla innych połączeń magazynu. Aby dowiedzieć się, jak definiować inne połączenia, sprawdź informacje dotyczące każdego wyzwalacza i powiązania używanego przez aplikację.

Następne kroki

W tym samouczku pokazano, jak utworzyć aplikację funkcji bez przechowywania wpisów tajnych w konfiguracji.

W następnym samouczku dowiesz się, jak używać tożsamości w połączeniach wyzwalacza i wiązania.