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 pokazującym, jak używać połączeń opartych na tożsamościach zamiast wpisów tajnych z wyzwalaczami i powiązaniami].
Wymagania wstępne
Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
Zestaw SDK platformy .NET 6.0
Narzędzia Azure Functions Core Tools w wersji 4.x.
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ą.
Ponieważ niektóre usługi nie obsługują uwierzytelniania firmy Microsoft Entra, aplikacje mogą nadal wymagać wpisów tajnych w niektórych przypadkach. Te wpisy tajne można jednak przechowywać w usłudze Azure Key Vault, co ułatwia uproszczenie cyklu ż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, gdy można i używania usługi Key Vault, gdy nie jest możliwe, zmniejsza ryzyko, zmniejsza obciążenie operacyjne i ogólnie poprawia 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 entra firmy Microsoft dla udziałów plików bloku komunikatów serwera (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, w związku z tym wprowadzono ograniczenia, których możesz nie chcieć. Zamiast tego przenosisz 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 jest magazyn kluczy do przechowywania wpisów tajnych. Należy skonfigurować 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.
W witrynie Azure Portal wybierz pozycję Utwórz zasób (+).
Na stronie Tworzenie zasobu wybierz pozycję Security>Key Vault.
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 tworzysz 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 Standardowa 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".
Zanotuj użytą nazwę do późniejszego użycia.
Wybierz pozycję Dalej: Zasady dostępu, aby przejść do karty Zasady dostępu.
W obszarze Model uprawnień wybierz pozycję Kontrola dostępu oparta na rolach na platformie Azure
Wybierz pozycję Przejrzyj i utwórz. Przejrzyj konfigurację i wybierz pozycję 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ć uprawnienie do odczytywania wpisów tajnych. Ta aplikacja używa tożsamości przypisanej przez użytkownika, aby można było skonfigurować uprawnienia przed utworzeniem aplikacji. Aby uzyskać więcej informacji na temat tożsamości zarządzanych dla usługi Azure Functions, zobacz How to use managed identities in Azure Functions (Jak używać tożsamości zarządzanych w usłudze Azure Functions).
W witrynie Azure Portal wybierz pozycję Utwórz zasób (+).
Na stronie Tworzenie zasobu wybierz pozycję Tożsamość>przypisana przez użytkownika tożsamość zarządzana.
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 tworzysz 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. Wybierz pozycję Przejrzyj i utwórz. Przejrzyj konfigurację i wybierz pozycję Utwórz.
Po utworzeniu tożsamości przejdź do niej w portalu. Wybierz pozycję Właściwości i zanotuj identyfikator zasobu do użycia później.
Wybierz pozycję Przypisania ról platformy Azure i wybierz pozycję Dodaj przypisanie roli (wersja zapoznawcza).
Na stronie Dodawanie przypisania roli (wersja zapoznawcza) użyj opcji, jak pokazano w poniższej tabeli.
Opcja Sugerowana wartość opis Scope Key Vault 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. 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ść jest teraz w stanie 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
Ponieważ środowisko portalu do tworzenia aplikacji funkcji nie wchodzi w interakcję z usługą Azure Key Vault, musisz 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.
W witrynie Azure Portal wybierz pozycję Utwórz zasób (+).
Na stronie Tworzenie zasobu wybierz pozycję Aplikacja funkcji obliczeniowej>.
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 tworzysz 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-9
i-
.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. Wybierz pozycję Przejrzyj i utwórz. Aplikacja używa wartości domyślnych na stronie Hosting i Monitorowanie . Przejrzyj opcje domyślne, które są uwzględnione w generowanym szablonie usługi ARM.
Zamiast tworzyć aplikację funkcji w tym miejscu, wybierz pozycję Pobierz szablon automatyzacji, który znajduje się po prawej stronie przycisku Dalej .
Na stronie szablonu wybierz pozycję Wdróż, a następnie na stronie Wdrożenie niestandardowe wybierz pozycję Edytuj szablon.
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.
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'))]" ] },
W definicji zasobu aplikacji funkcji (który ma
type
ustawioną wartośćMicrosoft.Web/sites
), dodajMicrosoft.KeyVault/vaults/VAULT_NAME/secrets/azurefilesconnectionstring
do tablicydependsOn
. Ponownie zastąp ciąg "VAULT_NAME" nazwą magazynu kluczy. Uniemożliwia to utworzenie aplikacji przed zdefiniowaniem wpisu tajnego. TablicadependsOn
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'))]" ], // ... }
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.keyVaultReferenceIdentity
Dodaj właściwość doproperties
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ć ją za pomocą identyfikatora. Tożsamości przypisane przez system nie muszą być określone w ten sposób, ponieważ aplikacja może 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.
Znajdź obiekty JSON definiujące
WEBSITE_CONTENTAZUREFILECONNECTIONSTRING
ustawienie aplikacji, które powinny wyglądać jak w poniższym przykładzie:{ "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')]" },
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, ')')]" },
Wybierz pozycję Zapisz , aby zapisać zaktualizowany szablon usługi ARM.
Wdrażanie zmodyfikowanego szablonu
Upewnij się, że opcje tworzenia, w tym grupa zasobów, są nadal poprawne i wybierz pozycję Przejrzyj i utwórz.
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.
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. Aby uzyskać więcej informacji, zobacz Key Vault references for Azure Functions (Dokumentacja usługi Key Vault dla usługi Azure Functions).
Napiwek
Usługa Application Insights parametry połączenia i jego dołączony klucz instrumentacji nie są uznawane za wpisy tajne i można je pobrać z usługi App Insights 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żyj 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.
W witrynie Azure Portal przejdź do konta magazynu utworzonego wcześniej przy użyciu aplikacji funkcji.
Wybierz Access Control (Zarządzanie dostępem i tożsamościami). Na tej stronie można wyświetlić i skonfigurować, kto ma dostęp do zasobu.
Wybierz pozycję Dodaj i wybierz pozycję Dodaj przypisanie roli.
Wyszukaj pozycję Właściciel danych obiektu blob usługi Storage, wybierz ją, a następnie wybierz pozycję Dalej
Na karcie Członkowie w obszarze Przypisz dostęp do wybierz pozycję Tożsamość zarządzana
Wybierz pozycję Wybierz członków , aby otworzyć panel Wybieranie tożsamości zarządzanych .
Upewnij się, że subskrypcja jest subskrypcją, w której zostały utworzone wcześniej zasoby.
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.
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.
Wybierz aplikację. Powinna zostać przeniesiona w dół do sekcji Wybrane elementy członkowskie . Naciśnij przycisk Wybierz.
Na ekranie Dodawanie przypisania roli wybierz pozycję Przejrzyj i przypisz. Przejrzyj konfigurację, a następnie wybierz 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 Nawiązywanie połączenia z magazynem hostów 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.
W witrynie Azure Portal przejdź do aplikacji funkcji.
W aplikacji funkcji rozwiń węzeł Ustawienia, a następnie wybierz pozycję Zmienne środowiskowe.
Na karcie Ustawienia aplikacji wybierz ustawienie aplikacji AzureWebJobsStorage i edytuj je zgodnie z poniższą tabelą:
Opcja Sugerowana wartość opis Nazwa/nazwisko AzureWebJobsStorage__accountName Zmień nazwę z AzureWebJobsStorage na dokładną nazwę 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 informuje system o użyciu tożsamości w celu nawiązania połączenia z zasobem.
Wybierz pozycję Zastosuj, a następnie wybierz pozycję Zastosuj i potwierdź, aby zapisać zmiany i ponownie uruchomić funkcję aplikacji.
Teraz 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.
Przejdź do następnego samouczka, aby dowiedzieć się, jak używać tożsamości w połączeniach wyzwalacza i wiązania.