Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Eén gehoste agent dient veel gebruikers van één eindpunt. In dit artikel leest u hoe Microsoft Foundry de sessies, gesprekken en opgeslagen gegevens van elke gebruiker privé houdt en hoe u deze isolatie kunt uitbreiden naar de gebruikers van uw eigen toepassing. Aan het einde kunt u een agent aanroepen en bevestigen dat de ene beller de sessies, gesprekken of opgeslagen gegevens van een andere beller niet kan zien.
Prerequisites
- Een uitgerolde gehoste agent. Zie Een gehoste agent implementeren om er een te implementeren.
- De Azure Developer CLI Foundry-extensies voor de CLI-stappen. Zie De Azure Developer CLI Foundry-extensies installeren.
- Een geverifieerde sessie. Voer
azd auth loginuit, of meld u aan met de Microsoft Entra-aanmeldingsgegevens die uw SDK of REST-client gebruikt. - De rol Foundry User in het project.
Belangrijk
De rollen Foundry RBAC zijn onlangs hernoemd. Foundry User, Foundry Owner, Foundry Account Owner en Foundry Project Manager zijn eerder benoemd Azure AI-gebruiker, Azure AI-eigenaar Azure AI-accounteigenaar en Azure AI Project Manager. Het kan zijn dat u op sommige plekken nog steeds de vorige namen ziet terwijl de naamswijziging wordt doorgevoerd. De rol-id's en basismachtigingen worden niet gewijzigd door de naamswijziging.
Meer informatie over isolatie per gebruiker
Het platform identificeert elke beller van hun Microsoft Entra token en bewaart hun gegevens privé voor die identiteit, ook al bereikt elke beller dezelfde agent via één gedeeld eindpunt. Voor elke gebruiker blijft het volgende geïsoleerd:
- Gesprekken. De gespreksgeschiedenis van elke gebruiker, de berichten, hulpprogramma-aanroepen en antwoorden die ze via het protocol Antwoorden threaden, is privé voor die gebruiker. Een gebruiker kan de gesprekken van een andere gebruiker niet lezen of vermelden.
- Sessies. Elke beller krijgt standaard een eigen sessie, dus de sessies die één gebruiker kan vermelden en beheren, bevatten geen sessies van een andere gebruiker.
- Opgeslagen gegevens. Gegevens die door uw agent worden opgeslagen voor een gebruiker, vallen binnen het bereik van die gebruiker, zodat deze niet worden geretourneerd naar een andere gebruiker.
U kunt het beschouwen als één agent die veel privéwerkruimten bedient. Elke sessie krijgt ook een privébestandssysteem $HOME in een eigen sandbox, die standaard wordt geïsoleerd omdat elke gebruiker een eigen sessie krijgt. Als u in plaats daarvan meerdere gebruikers in één sessie plaatst, wordt die sandbox gedeeld. Zie Multiplex meerdere gebruikers in één gehoste agentsessie. Zie Gehoste agents in Foundry Agent Service voor meer informatie over het sessiemodel.
Enkele gangbare scenario's zijn:
- Chat per gebruiker. Elke aangemelde klant krijgt hun eigen gespreksgeschiedenis, sessies en opgeslagen gegevens.
- Apps met meerdere tenants. De gebruikers van elke tenant zijn geïsoleerd van de gebruikers van elke andere tenant.
U krijgt deze isolatie standaard. In de volgende secties ziet u het standaardpad en hoe u het uitbreidt naar gebruikers die u zelf verifieert.
Een agent aanroepen met automatische isolatie
Roep de agent op met de identiteit waarmee u bent aangemeld. Het platform maakt een sessie die aan die identiteit is gekoppeld en geeft de bijbehorende agent_session_id terug.
azd ai agent invoke "Summarize the latest support tickets"
De sessie is gekoppeld aan de identiteit afkomstig van azd auth login. Een andere aangemelde gebruiker die dezelfde opdracht uitvoert, krijgt een afzonderlijke privésessie.
Stel de gedeelde variabelen in die in de REST-voorbeelden worden gebruikt:
BASE_URL="https://my-account.services.ai.azure.com/api/projects/my-project"
API_VERSION="v1"
RESOURCE="https://ai.azure.com"
AGENT_NAME="my-agent"
az rest --method POST \
--url "${BASE_URL}/agents/${AGENT_NAME}/endpoint/protocols/openai/responses?api-version=${API_VERSION}" \
--resource "${RESOURCE}" \
--body '{
"input": "Summarize the latest support tickets",
"stream": false
}'
Het Microsoft Entra token op de aanvraag identificeert de beller. De antwoordpayload bevat de agent_session_id die het platform heeft aangemaakt en aan die identiteit heeft gekoppeld.
openai_client = project.get_openai_client(agent_name="my-agent")
response = openai_client.responses.create(
input="Summarize the latest support tickets",
)
session_id = response.model_extra.get("agent_session_id")
print(f"Session: {session_id}")
De OpenAI-client wordt geverifieerd met de Microsoft Entra referentie van de beller, zodat de sessie is gericht op die identiteit.
const openAIClient = project.getOpenAIClient({
azureConfig: { allowPreview: true, agentName: "my-agent" },
});
const response = await openAIClient.responses.create({
input: "Summarize the latest support tickets",
});
const sessionId = (response as any).agent_session_id;
console.log(`Session: ${sessionId}`);
De OpenAI-client wordt geverifieerd met de Microsoft Entra referentie van de beller, zodat de sessie is gericht op die identiteit.
Sessies isoleren voor uw eigen gebruikers
Als uw toepassing zijn eigen eindgebruikers verifieert, bijvoorbeeld via Google, GitHub of een aangepaste id-provider, kan een vertrouwde service Foundry vertellen tot welke eindgebruiker een aanvraag behoort, zodat het platform sessies per eindgebruiker in plaats van per aanroepservice isoleert.
De service verzendt de stabiele id van de eindgebruiker in de x-ms-user-identity header. Het platform behandelt de waarde als een ondoorzichtige string en koppelt de sessie eraan. De waarde moet 1-256 tekens zijn en mag alleen letters, cijfers en de tekens . _ : - @bevatten; andere waarden worden geweigerd.
Om x-ms-user-identity door te geven, moet de aanroepende identiteit over de machtiging Microsoft.CognitiveServices/accounts/AIServices/agents/endpoints/UserIdentityImpersonation/action voor de agent beschikken. Deze machtiging is niet opgenomen in een ingebouwde rol. Dit viel eerder onder de Microsoft.CognitiveServices/* data-actie, maar die actie kent dit niet langer toe. Ken deze expliciet toe door een aangepaste rol te maken die de data-actie bevat en die rol toe te wijzen aan de identiteit van uw service in de tussenlaag. Een oproeper zonder dit krijgt een 403. Zie De identiteit van de eindgebruiker delegeren voor de aangepaste roldefinitie- en toewijzingsopdrachten.
Als een service over deze toestemming beschikt maar de header niet meestuurt in een aanvraag, beperkt het platform die sessie tot de eigen identiteit van de service in plaats van tot die van een eindgebruiker. Uw service kan gedelegeerde en niet-gedelegeerde aanroepen combineren, maar alleen aanvragen waarin x-ms-user-identity is opgenomen, worden per eindgebruiker geïsoleerd.
Warning
Binnen delegatie isoleert het platform de ene gedelegeerde eindgebruiker niet van de andere. Het dwingt alleen een vaste grens af tussen gedelegeerde en niet-gedelegeerde bellers. Hiermee kunnen al uw gedelegeerde gebruikers deelnemen aan een sessie die uw app heeft gemaakt. Geef elke gebruiker een eigen sessie-id; als u twee gebruikers naar dezelfde sessie routeert, kunnen ze elkaars gegevens zien. Als u opzettelijk één sessie wilt delen, raadpleegt u Multiplex meerdere gebruikers in één gehoste agentsessie.
az rest --method POST \
--url "${BASE_URL}/agents/${AGENT_NAME}/endpoint/protocols/openai/responses?api-version=${API_VERSION}" \
--resource "${RESOURCE}" \
--headers "x-ms-user-identity=<stable-end-user-id>" \
--body '{
"input": "Summarize my open tickets",
"stream": false
}'
Vervang <stable-end-user-id> door de id die uw service toewijst aan de aangemelde eindgebruiker, zoals een gebruikers-id met tenantbereik.
openai_client = project.get_openai_client(agent_name="my-agent")
response = openai_client.responses.create(
input="Summarize my open tickets",
extra_headers={"x-ms-user-identity": "<stable-end-user-id>"},
)
Vervang <stable-end-user-id> door de id die uw service toewijst aan de aangemelde eindgebruiker. De sessie is gericht op die eindgebruiker in plaats van op de aanroepende service.
const openAIClient = project.getOpenAIClient({
azureConfig: { allowPreview: true, agentName: "my-agent" },
});
const response = await openAIClient.responses.create(
{ input: "Summarize my open tickets" },
{ headers: { "x-ms-user-identity": "<stable-end-user-id>" } },
);
console.log(response.output_text);
Vervang <stable-end-user-id> door de id die uw service toewijst aan de aangemelde eindgebruiker. De sessie is gericht op die eindgebruiker in plaats van op de aanroepende service.
De Azure Developer CLI roept de agent aan als uw eigen aangemelde identiteit, zodat deze geen gedelegeerde identiteit van eindgebruikers doorgeeft. Gebruik het REST- of SDK-pad van uw service om te verzenden x-ms-user-identity.
De identiteit van de eindgebruiker beveiligen
Wanneer u gedelegeerde isolatie gebruikt, is uw service de grens van de vertrouwensrelatie. Kies id's die stabiel zijn per gebruiker, uniek en moeilijk te raden. Gebruik dezelfde waarde voor dezelfde gebruiker opnieuw, zodat de sessies correct worden hervat.
Belangrijk
x-ms-user-identity De waarde afleiden van een geverifieerde identiteit aan de serverzijde, nooit van een waarde die de browser of client rechtstreeks levert. Anders kan een beller de header instellen op de id van een andere gebruiker en de gegevens van die gebruiker lezen. Elke service met de delegatiemachtiging kan namens elke eindgebruiker handelen, dus verleent deze alleen aan services die u vertrouwt.
Isolatie controleren
Controleer of twee identiteiten twee afzonderlijke sessies krijgen:
- Roep de agent aan met één identiteit en noteer de teruggegeven
agent_session_id. - Roep de agent aan als een tweede identiteit, een andere aangemelde gebruiker of een andere
x-ms-user-identitywaarde, en noteer hetagent_session_id. - Controleer of de twee ID's verschillen en of, wanneer de sessies voor elke identiteit afzonderlijk worden opgevraagd, alleen de sessies van die identiteit worden geretourneerd.
Als u isolatie end-to-end wilt zien, implementeert u het voorbeeld van de notitieagent, waarin notities per sessie worden opgeslagen: $HOMEde notities van elke identiteit komen terecht in een afzonderlijk sessiebestand dat alleen die identiteit kan weergeven of downloaden via de Sessiebestanden-API.
Sessies voor alle gebruikers weergeven
Standaard ziet elke beller alleen hun eigen sessies. Een beheerder of automatisering met de rol Foundry User op het project kan alle sessies op de agent weergeven en beheren, ongeacht door welke identiteit deze zijn gemaakt. Zie Gehoste agentsessies beheren om sessies te beheren.
Isolatiesleutels op containerprotocol 1.0.0 (afgeschaft)
Agents met containerprotocolversie 1.0.0 gebruiken het eerdere model met isolatiesleutels, waarbij de aanroeper een isolatiesleutel opgeeft om sessies af te bakenen, in plaats van dat het platform de identiteit afleidt uit het Microsoft Entra-token. Dit model - en protocol 1.0.0 zelf - is afgeschaft. Agents op protocol 1.0.0 blijven werken tot 31 juli 2026; daarna blokkeert het platform aanvragen voor agents die nog steeds worden uitgevoerd op protocol 1.0.0.
Voer een upgrade uit naar protocol 2.0.0 om de automatische isolatie per gebruiker op te halen die eerder in dit artikel is beschreven. Protocol 2.0.0 vereist de AgentServer SDK die deze ondersteunt: azure-ai-agentserver-core 2.0.0b7 of hoger voor Python, of Azure.AI.AgentServer.Core 1.0.0-beta.26 of hoger voor .NET. Eerdere versies maken gebruik van protocol 1.0.0; werk ze bij als onderdeel van de upgrade.
- Als u voorlopig protocol 1.0.0 blijft gebruiken, raadpleegt u Isolatiesleutels doorgeven aan een gehoste agent voor hoe isolatiesleutels werken.
- Zie Gehoste agents migreren om een upgrade uit te voeren.
Problemen met isolatie oplossen
| Symptoom | Waarschijnlijke oorzaak | Wat uit te proberen |
|---|---|---|
403 of session_not_accessible bij het openen van een sessie |
De sessie behoort tot een andere identiteit. | Gebruik dezelfde identiteit die de sessie heeft gemaakt of houd de rol Foundry User ingedrukt om de sessies van andere identiteiten te bekijken. |
403 voor een verzoek dat x-ms-user-identity instelt |
De aanroeper mist de UserIdentityImpersonation machtiging, die niet meer wordt verleend door ingebouwde rollen. |
Maak een aangepaste rol die de Microsoft.CognitiveServices/accounts/AIServices/agents/endpoints/UserIdentityImpersonation/action gegevensactie bevat en wijs deze toe aan de aanroepende service. |
| Lokale uitvoeringen isoleren geen sessies | Lokale runs bieden geen isolatie. | Test isolatie met een uitgerolde agent. Lokale modus (--local, azd ai agent run) is gericht op één gebruiker. |
Verwante inhoud
- Sessies van gehoste agents beheren om sessies weer te geven, te inspecteren en te verwijderen, ook voor verschillende gebruikers.
- Multiplex meerdere gebruikers in één gehoste agentsessie wanneer meerdere gebruikers opzettelijk één sessie delen.
- Concepten van agentidentiteiten in Microsoft Foundry om te begrijpen hoe agent- en gebruikersidentiteiten werken.
- Roep een gehoste agent aan met de Azure Developer CLI voor elke aanroepvariant en -optie.
- Voorbeeld van notitieagent voor een uitvoerbare agent waarin gegevens van gebruikers per sessie worden opgeslagen (Python en C#).