Freigeben über


Verwenden dynamischer Sitzungen in Azure-Container-Apps

Azure-Container-Apps-Dynamik-Sitzungen bieten isolierte, sichere Kontexte, wenn Sie Code oder Anwendungen getrennt von anderen Workloads ausführen müssen. Sitzungen werden in einem Sitzungspool ausgeführt, der sofortigen Zugriff auf neue und vorhandene Sitzungen bietet. Diese Sitzungen eignen sich ideal für Szenarien, in denen benutzergenerierte Eingaben kontrolliert verarbeitet werden müssen oder wenn Drittanbieterdienste integriert werden müssen, die Code in einer isolierten Umgebung ausführen müssen.

In diesem Artikel erfahren Sie, wie Sie dynamische Sitzungen verwalten und mit ihnen interagieren.

Sitzungszugriff

Ihre Anwendung interagiert mithilfe der Verwaltungs-API des Sitzungspools mit einer Sitzung.

Ein Poolverwaltungsendpunkt folgt diesem Format:

https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io

Weitere Informationen zum Verwalten von Sitzungspools finden Sie unter Sitzungspool-Verwaltungsendpunkt

Weiterleiten von Anforderungen an den Container einer Sitzung

Um eine Anforderung an den Container einer Sitzung zu senden, verwenden Sie den Verwaltungsendpunkt als Stamm für Ihre Anforderung. Alle Elemente im Pfad, die dem Verwaltungsendpunkt für den Basispool folgen, werden an den Container der Sitzung weitergeleitet.

Wenn Sie z. B. <POOL_MANAGEMENT_ENDPOINT>/api/uploadfile aufrufen, wird die Anforderung an den Container der Sitzung an 0.0.0.0:<TARGET_PORT>/api/uploadfile weitergeleitet.

Kontinuierliche Interaktion

Während Sie weiterhin Anrufe an dieselbe Sitzung tätigen, bleibt die Sitzung im Pool zugeordnet. Sobald keine Anforderungen an die Sitzung vorliegen, nachdem der Cooldownzeitraum abgelaufen ist, wird die Sitzung automatisch zerstört.

Musteranforderung

Das folgende Beispiel zeigt, wie Sie mithilfe der ID eines Benutzers als eindeutigen Sitzungsbezeichner eine Anforderung an eine Sitzung senden.

Ersetzen Sie vor dem Senden der Anforderung die Platzhalter zwischen den Klammern (<>) durch Werte, die für Ihre Anforderung spezifisch sind.

POST <POOL_MANAGEMENT_ENDPOINT>/<API_PATH_EXPOSED_BY_CONTAINER>?identifier=<USER_ID>
Authorization: Bearer <TOKEN>
{
  "command": "echo 'Hello, world!'"
}

Diese Anforderung wird an die Container in der Sitzung mit dem Bezeichner für die Benutzer-ID weitergeleitet.

Wenn die Sitzung noch nicht ausgeführt wird, weist Azure Container-Apps automatisch eine Sitzung aus dem Pool zu, bevor die Anforderung weitergeleitet wird.

In diesem Beispiel empfängt der Container der Sitzung die Anforderung unter http://0.0.0.0:<INGRESS_PORT>/<API_PATH_EXPOSED_BY_CONTAINER>.

Bezeichner

Um eine HTTP-Anforderung an eine Sitzung zu senden, müssen Sie in der Anforderung eine Sitzungs-ID angeben. Sie übergeben den Sitzungsbezeichner in einem Abfragezeichenfolgenparameter, der in der URL benannt identifier ist, wenn Sie eine Anforderung an eine Sitzung stellen.

  • Wenn bereits eine Sitzung mit dem Bezeichner vorhanden ist, wird die Anforderung an die vorhandene Sitzung übermittelt.

  • Wenn keine Sitzung mit diesem Bezeichner vorhanden ist, wird automatisch eine neue Sitzung zugewiesen, bevor die Anforderung übermittelt wird.

Screenshot der Verwendung von Sitzungspool und Sitzungen

Bezeichnerformat

Die Sitzungs-ID ist eine Freiformzeichenfolge, d. h. Sie können je nach den Anforderungen Ihrer Anwendung eine beliebige ID festlegen.

Die Sitzungs-ID ist eine Zeichenfolge, die Sie definieren und die innerhalb des Sitzungspools eindeutig ist. Wenn Sie eine Webanwendung erstellen, können Sie die Benutzer-ID als Sitzungs-ID verwenden. Wenn Sie einen Chatbot erstellen, können Sie die Unterhaltungs-ID verwenden.

Die ID muss eine Zeichenfolge sein, die 4 bis 128 Zeichen lang ist. Sie darf nur alphanumerische Zeichen und folgende Sonderzeichen enthalten: |, -, &, ^, %, $, #, (, ), {, }, [, ], ;, < und >.

Sicherheit

Dynamische Sitzungen werden erstellt, um nicht vertrauenswürdigen Code und Anwendungen in einer sicheren und isolierten Umgebung auszuführen. Obwohl Sitzungen voneinander isoliert sind, sind alle Daten innerhalb einer einzelnen Sitzung (einschließlich Dateien und Umgebungsvariablen) für Benutzer der Sitzung zugänglich.

Konfigurieren oder hochladen Sie vertrauliche Daten nur in eine Sitzung, wenn Sie den Benutzern der Sitzung vertrauen.

Standardmäßig können Sitzungen keine ausgehenden Netzwerkanforderungen stellen. Sie können den Netzwerkzugriff steuern, indem Sie die Netzwerkstatuseinstellungen im Sitzungspool konfigurieren.

  • Verwenden Sie starke, eindeutige Sitzungsbezeichner: Generieren Sie immer Sitzungsbezeichner, die lang und komplex sind, um Brute-Force-Angriffe zu verhindern. Verwenden Sie kryptografische Algorithmen, um Bezeichner zu erstellen, die schwer zu erraten sind.

  • Einschränken der Sitzungssichtbarkeit: Legen Sie strenge Zugriffssteuerungen fest, um sicherzustellen, dass Sitzungsbezeichner nur für den Sitzungspool sichtbar sind. Vermeiden Sie das Verfügbarmachen von Sitzungs-IDs in URLs oder Protokollen.

  • Implementieren Sie kurze Ablaufzeiten: Konfigurieren Sie Sitzungsbezeichner, die nach einem kurzen Zeitraum der Inaktivität ablaufen sollen. Dieser Ansatz minimiert das Risiko, dass Sitzungen entführert werden, nachdem ein Benutzer die Interaktion mit Ihrer Anwendung beendet hat.

  • Regelmäßiges Rotieren der Sitzungsanmeldeinformationen: Überprüfen und aktualisieren Sie regelmäßig die Anmeldeinformationen, die Ihren Sitzungen zugeordnet sind. Die Drehung verringert das Risiko eines nicht autorisierten Zugriffs.

  • Verwenden Sie sichere Übertragungsprotokolle: Verwenden Sie immer HTTPS zum Verschlüsseln von Daten während der Übertragung, einschließlich Sitzungs-IDs. Dieser Ansatz schützt vor Man-in-the-Middle-Angriffen.

  • Überwachen der Sitzungsaktivität: Implementieren der Protokollierung und Überwachung zum Nachverfolgen von Sitzungsaktivitäten. Verwenden Sie diese Protokolle, um ungewöhnliche Muster oder potenzielle Sicherheitsverletzungen zu identifizieren.

  • Überprüfen der Benutzereingabe: Alle Benutzereingaben als gefährlich behandeln. Verwenden Sie Eingabeüberprüfungs- und Sanitärtechniken, um vor Injektionsangriffen zu schützen und sicherzustellen, dass nur vertrauenswürdige Daten verarbeitet werden.

Um Ihre Sitzungen vollständig zu sichern, können Sie:

Authentifizierung und Autorisierung

Wenn Sie über die Poolverwaltungs-API Anforderungen an eine Sitzung senden, erfolgt die Authentifizierung mit Microsoft Entra-Tokens. Nur Microsoft Entra-Token aus einer Identität, die zur Rolle Azure ContainerApps-Sitzungsausführer im Sitzungspool gehört, sind berechtigt, die Poolverwaltungs-API aufzurufen.

Verwenden Sie den folgenden Azure CLI-Befehl, um einer Identität die Rolle zuzuweisen:

az role assignment create \
    --role "Azure ContainerApps Session Executor" \
    --assignee <PRINCIPAL_ID> \
    --scope <SESSION_POOL_RESOURCE_ID>

Wenn Sie eine LLM-Frameworkintegration (Large Language Model) verwenden, übernimmt das Framework die Tokengenerierung und -verwaltung für Sie. Stellen Sie sicher, dass die Anwendung mit einer verwalteten Identität mit den erforderlichen Rollenzuweisungen im Sitzungspool konfiguriert ist.

Wenn Sie die API-Verwaltungsendpunkte des Pools direkt verwenden, müssen Sie ein Token generieren und in den Authorization-Header Ihrer HTTP-Anforderungen einschließen. Zusätzlich zu den zuvor erwähnten Rollenzuweisungen muss das Token einen Zielgruppenanspruch (aud) mit dem Wert https://dynamicsessions.io enthalten.

Führen Sie den folgenden Befehl aus, um mit der Azure CLI ein Token zu generieren:

az account get-access-token --resource https://dynamicsessions.io

Von Bedeutung

Ein gültiges Token wird verwendet, um eine beliebige Sitzung im Pool zu erstellen und darauf zuzugreifen. Schützen Sie Ihre Token, und teilen Sie sie nicht mit nicht vertrauenswürdigen Parteien. Endbenutzer sollten nie direkten Zugriff auf Token haben. Stellen Sie token nur für die Anwendung und nie für Endbenutzer zur Verfügung.

Schützen von Sitzungsbezeichnern

Sitzungs-IDs gelten als vertrauliche Informationen, die Sie sicher verwalten müssen. Ihre Anwendung muss sicherstellen, dass alle Benutzenden oder Mandant nur Zugriff auf die eigenen Sitzungen haben.

Die spezifischen Strategien, die den Missbrauch von Sitzungsbezeichnern verhindern, unterscheiden sich je nach Design und Architektur Ihrer App. Ihre App muss jedoch immer die vollständige Kontrolle über die Erstellung und Verwendung von Sitzungs-IDs haben, damit ein böswilliger Benutzer nicht auf die Sitzung eines anderen Benutzers zugreifen kann.

Beispiele für geeignete Strategien umfassen:

  • Eine Sitzung pro Benutzer: Wenn Ihre App eine Sitzung pro Benutzer verwendet, muss jeder Benutzer sicher authentifiziert werden, und Ihre App muss für jeden angemeldeten Benutzer einen eindeutigen Sitzungsbezeichner verwenden.

  • Eine Sitzung pro Agentunterhaltung: Wenn Ihre App eine Sitzung pro KI-Agent-Unterhaltung verwendet, stellen Sie sicher, dass Ihre App für jede Unterhaltung, die vom Endbenutzer nicht geändert werden kann, einen eindeutigen Sitzungsbezeichner verwendet.

Von Bedeutung

Wenn sie den Zugriff auf Sitzungen nicht sichern, kann es zu Missbrauch oder unbefugtem Zugriff auf daten führen, die in den Sitzungen Ihrer Benutzer gespeichert sind.

Verwenden der verwalteten Identität

Eine verwaltete Identität von Microsoft Entra ID ermöglicht es Ihren Containersitzungspools und deren Sitzungen, auf andere von Microsoft Entra geschützte Ressourcen zuzugreifen. Sowohl vom System zugewiesene als auch vom Benutzer zugewiesene verwaltete Identitäten werden in einem Sitzungspool unterstützt.

Weitere Informationen zu verwalteten Identitäten in Microsoft Entra ID finden Sie unter Verwaltete Identitäten für Azure-Ressourcen.

Es gibt zwei Möglichkeiten, verwaltete Identitäten mit benutzerdefinierten Containersitzungspools zu verwenden:

  • Authentifizierung beim Abrufen des Image (image pull):: Verwenden Sie die verwaltete Identität zur Authentifizierung bei der Containerregistrierung, um das Containerimage abzurufen.

  • Ressourcenzugriff: Verwenden Sie die verwaltete Identität des Sitzungspools in einer Sitzung, um auf andere von Microsoft Entra geschützte Ressourcen zuzugreifen. Aufgrund ihrer Sicherheitsauswirkungen ist diese Funktion standardmäßig deaktiviert.

    Von Bedeutung

    Wenn Sie den Zugriff auf verwaltete Identität in einer Sitzung aktivieren, können alle in der Sitzung ausgeführten Code oder Programme Microsoft Entra-Token für die verwaltete Identität des Pools erstellen. Da Sitzungen in der Regel nicht vertrauenswürdigen Code ausführen, verwenden Sie dieses Feature mit äußerster Vorsicht.

Verwenden Sie Azure Resource Manager, um verwaltete Identität für einen benutzerdefinierten Containersitzungspool zu aktivieren.

Protokollierung

Konsolenprotokolle aus Containern, die in einer Sitzung ausgeführt werden, sind im Azure Log Analytics-Arbeitsbereich verfügbar, der der Azure-Container-Apps-Umgebung in einer Tabelle mit dem Namen AppEnvSessionConsoleLogs_CLzugeordnet ist.