Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dynamiczne sesje usługi Azure Container Apps oferują izolowane, bezpieczne konteksty, gdy trzeba uruchamiać kod lub aplikacje niezależnie od innych obciążeń. Sesje działają wewnątrz puli sesji, która zapewnia natychmiastowy dostęp do nowych i istniejących sesji. Te sesje są idealne w scenariuszach, w których dane wejściowe generowane przez użytkownika muszą być przetwarzane w kontrolowany sposób lub podczas integrowania usług innych firm, które wymagają wykonywania kodu w izolowanym środowisku.
W tym artykule pokazano, jak zarządzać sesjami dynamicznymi i korzystać z nich.
Dostęp do sesji
Aplikacja wchodzi w interakcję z sesją przy użyciu interfejsu API do zarządzania pulą sesji.
Punkt końcowy zarządzania pulą ma następujący format:
https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io
Aby uzyskać więcej informacji na temat zarządzania pulami sesji, zobacz Punkt końcowy zarządzania pulami sesji
Przekazywanie żądań do kontenera sesji
Aby wysłać żądanie do kontenera sesji, należy użyć punktu końcowego zarządzania jako punktu startowego dla żądania. Cokolwiek w ścieżce po punkcie końcowym zarządzania pulą bazową jest przekazywane do kontenera sesji.
Jeśli na przykład wykonasz wywołanie metody : <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile, żądanie jest kierowane do kontenera sesji pod adresem 0.0.0.0:<TARGET_PORT>/api/uploadfile.
Ciągła interakcja
W miarę kontynuowania podejmowania wywołań do tej samej sesji sesja pozostaje przydzielona w puli. Gdy nie ma żadnych żądań do sesji po upływie okresu ochładzania, sesja zostanie automatycznie zniszczona.
Przykładowe żądanie
W poniższym przykładzie pokazano, jak wysłać żądanie do sesji przy użyciu identyfikatora użytkownika jako unikatowego identyfikatora sesji.
Przed wysłaniem żądania zastąp symbole zastępcze między <> nawiasami wartościami specyficznymi dla żądania.
POST <POOL_MANAGEMENT_ENDPOINT>/<API_PATH_EXPOSED_BY_CONTAINER>?identifier=<USER_ID>
Authorization: Bearer <TOKEN>
{
"command": "echo 'Hello, world!'"
}
To żądanie jest przekazywane do kontenera w sesji z identyfikatorem użytkownika.
Jeśli sesja nie jest jeszcze uruchomiona, usługa Azure Container Apps automatycznie przydziela sesję z puli przed przekazaniem żądania.
W tym przykładzie kontener sesji odbiera żądanie pod adresem http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>.
Identyfikatory
Aby wysłać żądanie HTTP do sesji, musisz podać identyfikator sesji w żądaniu. Identyfikator sesji jest przekazywany w parametrze ciągu zapytania o nazwie identifier w adresie URL podczas wysyłania żądania do sesji.
Jeśli sesja z identyfikatorem już istnieje, żądanie zostanie wysłane do istniejącej sesji.
Jeśli sesja z identyfikatorem nie istnieje, nowa sesja zostanie automatycznie przydzielona przed wysłaniem żądania.
Format identyfikatora
Identyfikator sesji jest ciągiem swobodnym, co oznacza, że można go zdefiniować w dowolny sposób, który odpowiada potrzebom aplikacji.
Identyfikator sesji jest ciągiem zdefiniowanym, który jest unikatowy w puli sesji. Jeśli tworzysz aplikację internetową, możesz użyć identyfikatora użytkownika jako identyfikatora sesji. Jeśli tworzysz czatbota, możesz użyć identyfikatora konwersacji.
Identyfikator musi być ciągiem o długości od 4 do 128 znaków i może zawierać tylko znaki alfanumeryczne i znaki specjalne z tej listy: |, -&^%$#(){}[];, <i .>
Bezpieczeństwo
Sesje dynamiczne są tworzone w celu uruchamiania niezaufanego kodu i aplikacji w bezpiecznym i izolowanym środowisku. Podczas gdy sesje są odizolowane od siebie, wszystkie elementy w ramach jednej sesji, w tym pliki i zmienne środowiskowe, są dostępne dla użytkowników sesji.
Skonfiguruj lub przekaż poufne dane do sesji tylko wtedy, gdy ufasz użytkownikom sesji.
Domyślnie sesje nie mogą wysyłać wychodzących żądań sieciowych. Dostęp sieciowy można kontrolować, konfigurując ustawienia stanu sieci w puli sesji.
Używaj silnych, unikatowych identyfikatorów sesji: zawsze generuj identyfikatory sesji, które są długie i złożone, aby zapobiec atakom siłowym. Użyj algorytmów kryptograficznych, aby utworzyć identyfikatory, które trudno odgadnąć.
Ogranicz widoczność sesji: ustaw ścisłe mechanizmy kontroli dostępu, aby upewnić się, że identyfikatory sesji są widoczne tylko dla puli sesji. Unikaj uwidaczniania identyfikatorów sesji w adresach URL lub dziennikach.
Zaimplementuj krótki czas wygaśnięcia: skonfiguruj identyfikatory sesji, aby wygasały po krótkim okresie braku aktywności. Takie podejście minimalizuje ryzyko porwania sesji po zakończeniu interakcji użytkownika z aplikacją.
Regularnie wymieniaj poświadczenia sesji: okresowo przeglądaj i aktualizuj poświadczenia skojarzone z sesjami. Rotacja zmniejsza ryzyko nieautoryzowanego dostępu.
Korzystanie z bezpiecznych protokołów transmisji: zawsze używaj protokołu HTTPS do szyfrowania danych przesyłanych, w tym identyfikatorów sesji. Takie podejście chroni przed atakami typu człowiek-pośrednik.
Monitorowanie aktywności sesji: implementowanie rejestrowania i monitorowania w celu śledzenia działań sesji. Użyj tych dzienników, aby zidentyfikować nietypowe wzorce lub potencjalne naruszenia zabezpieczeń.
Weryfikowanie danych wejściowych użytkownika: traktuj wszystkie dane wejściowe użytkownika jako niebezpieczne. Użyj technik walidacji danych wejściowych i sanitarnych, aby chronić przed atakami polegającymi na wstrzyknięciu i zapewnić przetwarzanie tylko zaufanych danych.
Aby w pełni zabezpieczyć sesje, możesz:
- Korzystanie z uwierzytelniania i autoryzacji identyfikatora Entra firmy Microsoft
- Ochrona identyfikatorów sesji
Uwierzytelnianie i autoryzacja
Podczas wysyłania żądań do sesji przy użyciu interfejsu API zarządzania pulą uwierzytelnianie jest obsługiwane przy użyciu tokenów firmy Microsoft Entra. Tylko tokeny firmy Microsoft z tożsamości należącej do roli wykonawczej sesji usługi Azure ContainerApps w puli sesji są autoryzowane do wywoływania interfejsu API zarządzania pulą.
Aby przypisać rolę do tożsamości, użyj następującego polecenia interfejsu wiersza polecenia platformy Azure:
az role assignment create \
--role "Azure ContainerApps Session Executor" \
--assignee <PRINCIPAL_ID> \
--scope <SESSION_POOL_RESOURCE_ID>
Jeśli używasz integracji z dużym modelem językowym (LLM), platforma obsługuje generowanie tokenów i zarządzanie nimi. Upewnij się, że aplikacja jest skonfigurowana przy użyciu tożsamości zarządzanej z niezbędnymi przypisaniami ról w puli sesji.
Jeśli bezpośrednio używasz punktów końcowych interfejsu API zarządzania puli, musisz wygenerować token i dołączyć go do Authorization nagłówka żądań HTTP. Oprócz wymienionych wcześniej przypisań ról token musi zawierać oświadczenie odbiorców (aud) o wartości https://dynamicsessions.io.
Aby wygenerować token przy użyciu interfejsu wiersza polecenia platformy Azure, uruchom następujące polecenie:
az account get-access-token --resource https://dynamicsessions.io
Ważne
Prawidłowy token służy do tworzenia i uzyskiwania dostępu do dowolnej sesji w puli. Zachowaj bezpieczeństwo tokenów i nie udostępniaj ich niezaufanym stronom. Użytkownicy końcowi nigdy nie powinni mieć bezpośredniego dostępu do tokenów. Udostępniaj tylko tokeny aplikacji i nigdy nie użytkownikom końcowym.
Ochrona identyfikatorów sesji
Identyfikator sesji jest poufnymi informacjami, którymi musisz zarządzać bezpiecznie. Aplikacja musi mieć pewność, że każdy użytkownik lub dzierżawa ma dostęp tylko do własnych sesji.
Konkretne strategie, które uniemożliwiają nieprawidłowe użycie identyfikatorów sesji, różnią się w zależności od projektu i architektury aplikacji. Jednak aplikacja musi zawsze mieć pełną kontrolę nad tworzeniem i używaniem identyfikatorów sesji, aby złośliwy użytkownik nie mógł uzyskać dostępu do sesji innego użytkownika.
Przykładowe strategie obejmują:
Jedna sesja na użytkownika: jeśli aplikacja używa jednej sesji na użytkownika, każdy użytkownik musi być bezpiecznie uwierzytelniony, a aplikacja musi używać unikatowego identyfikatora sesji dla każdego zalogowanego użytkownika.
Jedna sesja na konwersację agenta: jeśli aplikacja używa jednej sesji na konwersację agenta sztucznej inteligencji, upewnij się, że aplikacja używa unikatowego identyfikatora sesji dla każdej konwersacji, której nie można modyfikować przez użytkownika końcowego.
Ważne
Brak bezpiecznego dostępu do sesji może spowodować nieprawidłowe użycie lub nieautoryzowany dostęp do danych przechowywanych w sesjach użytkowników.
Korzystanie z tożsamości zarządzanej
Tożsamość zarządzana Microsoft Entra ID umożliwia pulom sesji kontenerów i ich sesjom dostęp do innych chronionych zasobów Microsoft Entra. Tożsamości zarządzane przypisane przez system i przypisane przez użytkownika są obsługiwane w puli sesji.
Aby uzyskać więcej informacji na temat tożsamości zarządzanych w usłudze Microsoft Entra ID, zobacz Tożsamości zarządzane dla zasobów platformy Azure.
Istnieją dwa sposoby używania tożsamości zarządzanych z niestandardowymi pulami sesji kontenerów:
Uwierzytelnianie ściągania obrazu: użyj tożsamości zarządzanej, aby uwierzytelnić się w rejestrze kontenerów, aby ściągnąć obraz kontenera.
Dostęp do zasobów: w sesji użyj tożsamości zarządzanej puli sesji, aby uzyskać dostęp do innych chronionych zasobów Microsoft Entra. Ze względu na jego implikacje dotyczące zabezpieczeń ta funkcja jest domyślnie wyłączona.
Ważne
Jeśli w sesji włączysz dostęp do tożsamości zarządzanej, każdy kod oraz programy uruchomione w tej sesji mogą tworzyć tokeny usługi Microsoft Entra na potrzeby tożsamości zarządzanej puli. Ponieważ sesje zwykle uruchamiają niezaufany kod, należy użyć tej funkcji z wyjątkową ostrożnością.
Aby włączyć tożsamość zarządzaną dla niestandardowej puli sesji kontenerów, użyj usługi Azure Resource Manager.
Przemysł drzewny
Dzienniki konsoli z kontenerów uruchomionych w sesji są dostępne w obszarze roboczym usługi Azure Log Analytics skojarzonym ze środowiskiem usługi Azure Container Apps w tabeli o nazwie AppEnvSessionConsoleLogs_CL.
Treści powiązane
Typy sesji: informacje o różnych typach sesji dynamicznych:
Samouczki: praca bezpośrednio z interfejsem API REST lub za pośrednictwem agenta LLM:
- Użyj agenta LLM:
- Korzystanie z interfejsu API REST