Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Azure Container Apps oferuje dynamiczne sesje, które zapewniają izolowane, bezpieczne konteksty, gdy konieczne jest uruchamianie kodu lub aplikacji oddzielnie 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. Nie musisz wdrażać zasobu aplikacji kontenera w celu korzystania z sesji dynamicznych, tworzenia puli sesji i wywoływania interfejsu API zarządzania.
W tym artykule pokazano, jak zarządzać sesjami dynamicznymi i korzystać z nich.
Punkt końcowy zarządzania i routing
Aplikacja wchodzi w interakcję z sesją przy użyciu interfejsu API do zarządzania pulą sesji. Aby zapoznać się z koncepcyjnym omówieniem sposobu kierowania żądań, zobacz Kluczowe pojęcia.
Aby uzyskać punkt końcowy zarządzania pulą sesji, zobacz Punkt końcowy zarządzania pulami sesji.
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.
Uwierzytelnianie i autoryzacja interfejsu API zarządzania
Wszystkie żądania do interfejsu API zarządzania pulą sesji wymagają uwierzytelniania (AuthN) z użyciem tokenu Microsoft Entra oraz autoryzacji (AuthZ) poprzez rolę „Azure ContainerApps Session Executor” w puli sesji. Aby uzyskać szczegółowe informacje i przykłady, zobacz Uwierzytelnianie i autoryzacja.
Wysyłanie żądań do 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 na jego porcie docelowym pod adresem <TARGET_PORT>/api/uploadfile.
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 dla danego identyfikatora nie istnieje żadna sesja, Azure Container Apps automatycznie przydziela jedną z puli przed przekazaniem żądania.
W tym przykładzie kontener sesji odbiera żądanie na porcie docelowym pod adresem <TARGET_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.
Na poniższym diagramie pokazano, jak pula sesji kieruje żądania do istniejących sesji lub przydziela nową sesję w razie potrzeby.
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 .>
Pobieranie informacji o sesji
Możesz wysłać zapytanie do puli sesji, aby sprawdzić stan sesji, uzyskać szczegóły wygaśnięcia i wyświetlić listę wszystkich aktywnych sesji. Ta możliwość jest przydatna do monitorowania kondycji sesji, śledzenia użycia zasobów i implementowania niestandardowych procesów czyszczenia.
Otrzymaj pojedynczą sesję
Aby pobrać szczegółowe informacje o określonej sesji, użyj punktu końcowego getSession :
POST https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io/.management/getSession?identifier=<SESSION_ID>&api-version=2024-02-02-preview
Authorization: Bearer <TOKEN>
Punkt getSession końcowy zwraca metadane sesji, w tym identyfikator sesji, bieżący czas wygaśnięcia i znacznik czasu tworzenia.
Schemat odpowiedzi SessionView
| Pole | Typ | Wymagane | Opis |
|---|---|---|---|
identifier |
ciąg | Yes | Podany identyfikator sesji |
etag |
ciąg | Yes | Nieprzejrzysty identyfikator wersji dla sesji. Tego identyfikatora można użyć do wykrywania zmian. |
expiresAt |
Data i czas | Yes | Sygnatura czasowa UTC, kiedy sesja zostanie zakończona |
createdAt |
Data i czas | Nie. | Sygnatura czasowa tworzenia sesji |
lastAccessedAt |
Data i czas | Nie. | Sygnatura czasowa ostatniego żądania w tej sesji |
Przykładowe żądanie i odpowiedź
curl -X POST "https://my-pool.env-id.westus2.azurecontainerapps.io/.management/getSession?identifier=user-123&api-version=2024-02-02-preview" \
-H "Authorization: Bearer $TOKEN"
Odpowiedź pomyślna (HTTP 200):
{
"identifier": "user-123",
"etag": "a1b2c3d4",
"expiresAt": "2026-04-30T14:30:00Z",
"createdAt": "2026-04-30T13:30:00Z",
"lastAccessedAt": "2026-04-30T14:29:00Z"
}
Wymień wszystkie sesje w puli
Aby pobrać listę wszystkich sesji w puli sesji, użyj punktu końcowego listSessions :
POST https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io/.management/listSessions?skip=0&api-version=2024-02-02-preview
Authorization: Bearer <TOKEN>
Paginacja
Punkt końcowy listy obsługuje stronicowanie oparte na pomijaniu. Domyślnie każda strona zwraca maksymalnie 300 sesji. Użyj parametru skip zapytania, aby nawigować po wynikach.
| Parametr | Opis |
|---|---|
skip |
Liczba sesji do pominięcia od początku (wartość domyślna: 0) |
nextLink |
Pełny adres URL następnej strony wyników (uwzględniony w odpowiedzi, gdy istnieje więcej wyników) |
Schemat odpowiedzi ApiCollectionEnvelope
| Pole | Typ | Opis |
|---|---|---|
value |
SessionView[] | Tablica obiektów sesji |
count |
liczba całkowita | Liczba sesji na bieżącej stronie |
nextLink |
ciąg | Adres URL następnej strony (wartość null, jeśli nie ma więcej wyników) |
Przykładowa pętla stronicowania
POOL_URL="https://my-pool.env-id.westus2.azurecontainerapps.io"
next_url="$POOL_URL/.management/listSessions?skip=0&api-version=2024-02-02-preview"
while [ -n "$next_url" ]; do
response=$(curl -s -X POST "$next_url" \
-H "Authorization: Bearer $TOKEN")
echo "$response" | jq '.value[] | {identifier, expiresAt}'
next_url=$(echo "$response" | jq -r '.nextLink // empty')
done
Przykładowa odpowiedź (HTTP 200):
{
"value": [
{
"identifier": "user-123",
"etag": "a1b2c3d4",
"expiresAt": "2026-04-30T14:30:00Z"
},
{
"identifier": "user-456",
"etag": "e5f6a7b8",
"expiresAt": "2026-04-30T14:31:00Z"
}
],
"count": 2,
"nextLink": "https://my-pool.env-id.westus2.azurecontainerapps.io/.management/listSessions?skip=300"
}
Odpowiedzi na błędy
W przypadku wystąpienia błędu interfejs API zwraca ustrukturyzowaną odpowiedź o błędzie ze szczegółami, aby ułatwić diagnozowanie problemu.
{
"error": {
"code": "ErrorCode",
"message": "Human-readable error description",
"details": "Optional additional context",
"target": "Field or parameter that caused the error",
"traceId": "Request trace ID for debugging"
}
}
Typowe kody błędów
| Kod błędu | Stan HTTP | Opis | Resolution |
|---|---|---|---|
SessionWithIdentifierNotFound |
400 | Identyfikator sesji nie istnieje w tej puli sesji | Sprawdź, czy identyfikator sesji jest poprawny, a sesja nie wygasła |
SessionRequestValidationFailed |
400 | Brak wymaganych pól żądania lub ma nieprawidłowe parametry | Sprawdź, czy parametry zapytania (identyfikator, pomiń, wersja interfejsu API) są prawidłowo sformatowane |
SessionRequestNotSupported |
400 | Typ żądania nie jest rozpoznawany przez interfejs API | Sprawdź, czy używasz obsługiwanego punktu końcowego i metody |
InternalServerError |
500 | Wystąpił nieoczekiwany błąd po stronie serwera | Spróbuj ponownie wysłać żądanie; jeśli błąd będzie się powtarzać, sprawdź identyfikator śladu w dziennikach. |
Cykl życia sesji w praktyce
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.
Uwaga / Notatka
W rzadkich przypadkach, gdy żądanie rozszerzenia czasu wygaśnięcia w tle sesji zakończy się niepowodzeniem (na przykład jeśli kontener zostanie nieoczekiwanie wyjęty), sesja zostanie automatycznie usunięta z puli. W następnym żądaniu do tej sesji zostanie wyświetlony błąd "Nie znaleziono sesji". To oczyszczanie jest automatyczne i nie wymaga żadnej akcji ze swojej strony.
Zabezpieczenia
Model zabezpieczeń
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.
Dostęp do sieci
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.
Najlepsze rozwiązania
- Bezpieczne identyfikatory: używaj identyfikatorów bezpiecznej sesji przez cały czas. Generowanie identyfikatorów sesji przy użyciu metod kryptograficznych w celu zapewnienia unikatowych i nieprzewidywalnych wartości. Unikaj używania identyfikatorów sekwencyjnych, które mogą być zgadywane przez osobę atakującą.
- Użyj protokołu HTTPS: zawsze używaj protokołu HTTPS do szyfrowania danych przesyłanych. Chroni to identyfikatory sesji i wszelkie poufne dane wymieniane między klientem a serwerem przed przechwyceniem.
- Ogranicz okres istnienia sesji: zaimplementuj limity czasu dla sesji. Na przykład poczekaj maksymalnie 15 minut braku aktywności, zanim sesja zostanie automatycznie zakończona. Pomaga to ograniczyć ryzyko spowodowane utratą lub nienadzorowanym urządzeniem.
- 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.
- Regularnie wymieniaj poświadczenia sesji: okresowo przeglądaj i aktualizuj poświadczenia skojarzone z sesjami. Rotacja zmniejsza ryzyko nieautoryzowanego dostępu.
Dodatkowe wskazówki techniczne dotyczące niestandardowych sesji kontenerów
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 man-in-the-middle.
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.
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 Microsoft Entra. Tylko tokeny Microsoft Entra z tożsamości należącej do roli Azure ContainerApps Session Executor na 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 Azure CLI:
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 korzystasz z punktów końcowych interfejsu API zarządzania puli zasobów, musisz wygenerować token i dołączyć go do nagłówka Authorization w żądaniach 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 Azure CLI, 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 zapewnić, że każdy użytkownik lub podmiot 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 z Microsoft Entra ID umożliwia pulom sesji kontenerów i ich sesjom dostęp do zasobów chronionych przez 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 Microsoft Entra ID, zobacz Zarządzane tożsamości dla zasobów 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: Skorzystaj z zarządzanej tożsamości puli sesji, aby uzyskać dostęp do innych zasobów chronionych przez Microsoft Entra. Ze względu na jego implikacje dotyczące zabezpieczeń ta funkcja jest domyślnie wyłączona.
Ważne
Jeśli włączysz dostęp do tożsamości zarządzanej w sesji, każdy kod lub programy uruchamiane w tej sesji mogą tworzyć tokeny Microsoft Entra dla 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 kontenera, użyj Azure Resource Manager.
Przemysł drzewny
Azure Container Apps dynamiczne sesje integrują się z Azure Monitor i Log Analytics w celu zbierania dzienników generowanych podczas sesji. Kroki konfiguracji są takie same w przypadku interpretera kodu i niestandardowych pul sesji kontenera, ale dostępne kategorie dzienników różnią się od typu sesji. Metryki zwracane za pośrednictwem nagłówków odpowiedzi interfejsu API nie są zapisywane w Log Analytics.
Rejestrowanie różnic według typu sesji
Skorzystaj z poniższych wskazówek, aby porównać zachowanie rejestrowania i przejść do szczegółów pasujących do typu sesji:
-
Sesje interpretatora kodu: Wyniki są zwracane z procesu wykonania (w tym
stdoutistderr), ale tabele Log Analytics AppEnvSession nie są wygenerowane. Zobacz Rejestrowanie sesji interpretera kodu. -
Niestandardowe sesje kontenerów: Tabele Log Analytics AppEnvSession są generowane, gdy kontener zapisuje w
stdoutlubstderr, a logi platformy są dostępne dla cyklu życia i zdarzeń puli. Zobacz Rejestrowanie niestandardowych sesji kontenera. - Common: Metryki zwracane za pośrednictwem nagłówków odpowiedzi interfejsu API nie są zapisywane w Log Analytics.
Aby uzyskać pełną listę obsługiwanych kategorii sesji w zasobie środowiska (Microsoft.App/managedEnvironments), zobacz Obsługiwane dzienniki dla Microsoft. App/managedEnvironments.
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