Een runtime-detectiesysteem voor bedreigingen bouwen voor Copilot Studio-agents

Organisaties kunnen een beveiligingslaag toevoegen aan hun Copilot Studio-agents door ze te verbinden met een runtime-detectiesysteem voor bedreigingen. Zodra er verbinding is gemaakt, roept de agent dit systeem aan tijdens runtime. De agent biedt het systeem gegevens, zodat het systeem kan bepalen of een hulpprogramma dat de agent wil aanroepen legitiem is of niet. Het systeem reageert vervolgens op Copilot Studio met een reactie van 'goedkeuren' of 'blokkeren', waardoor de agent het hulpprogramma dienovereenkomstig aanroept of overslaat. Zie Enable external threat detection and protection for Copilot Studio custom agents voor meer informatie over het verbinden van agents met een bestaand systeem voor externe bedreigingsdetectie.

Dit artikel is gericht op ontwikkelaars en beschrijft hoe u uw eigen mogelijkheden voor detectie van bedreigingen integreert als beveiligingsprovider voor Copilot Studio-agents.

De integratie is gebaseerd op een API die bestaat uit twee eindpunten. Het belangrijkste eindpunt dat u moet implementeren, is het analyze-tool-execution eindpunt. U moet dit eindpunt beschikbaar maken als een interface voor uw detectiesysteem voor bedreigingen. Zodra klanten uw systeem als hun externe detectiesysteem voor bedreigingen hebben geconfigureerd, roept de agent deze API aan telkens wanneer het een hulpprogramma wil aanroepen.

Naast het analyze-tool-execution eindpunt moet u ook een tweede eindpunt beschikbaar maken, genaamd validate. Het validate eindpunt wordt gebruikt om de status en gereedheid van het eindpunt te controleren als onderdeel van de systeeminstallatie.

In de volgende secties wordt elk eindpunt gedetailleerd beschreven.

POST /validate

Doel: Controleert of het eindpunt voor bedreigingsdetectie bereikbaar en functioneert. Wordt gebruikt voor het testen van de eerste installatie en configuratie.

Aanvraag valideren

  • Methode: POST

  • URL:https://{threat detection endpoint}/validate?api-version=2025-05-01

  • Kopteksten:

    • Autorisatie: Bearer-token voor API-verificatie

    • x-ms-correlation-id: GUID voor tracering

  • Lichaam: Leeg

Antwoord valideren

Voorbeeld van een 200 OK-reactie

{
  "isSuccessful": true,
  "status": "OK"
}

Voorbeeld van foutreactie

Als er een fout optreedt (mislukte HTTP-code), retourneert het eindpunt een foutcode, een bericht en optionele diagnostische gegevens.

{
  "errorCode": 5031,
  "message": "Validation failed. Webhook service is temporarily unavailable.",
  "httpStatus": 503,
  "diagnostics": "{\\reason\\:\\Upstream dependency timeout\\}"
}

POST /analyse-tool-uitvoering.

Doel: De uitvoeringscontext van het hulpprogramma indienen voor risico-evaluatie. Evalueert de aanvraag voor het uitvoeren van het hulpprogramma en reageert of de uitvoering van het hulpprogramma moet worden toegestaan of geblokkeerd.

Analyse-tool-uitvoeringsverzoek

  • Methode: POST

  • URL:https://{threat detection endpoint}/analyze-tool-execution?api-version=2025-05-01

  • Kopteksten:

    • Autorisatie: Bearer-token voor API-verificatie
    • Inhoudstype: toepassing/json
  • Lichaam: JSON-object

Voorbeeld van een aanvraag voor de uitvoering van het hulpprogramma analyseren

POST https://security.contoso.com/api/agentSecurity/analyze-tool-execution?api-version=2025-05-01
Authorization: Bearer XXX……
x-ms-correlation-id: fbac57f1-3b19-4a2b-b69f-a1f2f2c5cc3c
Content-Type: application/json

{
  "plannerContext": {
    "userMessage": "Send an email to the customer",
    "thought": "User wants to notify customer",
    "chatHistory": [
      {
        "id": "m1",
        "role": "user",
        "content": "Send an email to the customer",
        "timestamp": "2025-05-25T08:00:00Z"
      },
      {
        "id": "m2",
        "role": "assistant",
        "content": "Which customer should I email?",
        "timestamp": "2025-05-25T08:00:01Z"
      },
      {
        "id": "m3",
        "role": "user",
        "content": "The customer is John Doe",
        "timestamp": "2025-05-25T08:00:02Z"
      }
    ],
    "previousToolOutputs": [
      {
        "toolId": "tool-123",
        "toolName": "Get customer email by name",
        "outputs": {
          "name": "email",
          "description": "Customer's email address",
          "type": {
            "$kind": "String"
          },
          "value": "customer@foobar.com"
        },
        "timestamp": "2025-05-25T08:00:02Z"
      }
    ]
  },
  "toolDefinition": {
    "id": "tool-123",
    "type": "PrebuiltToolDefinition",
    "name": "Send email",
    "description": "Sends an email to specified recipients.",
    "inputParameters": [
      {
        "name": "to",
        "description": "Receiver of the email",
        "type": {
          "$kind": "String"
        }
      },
      {
        "name": "bcc",
        "description": "BCC of the email",
        "type": {
          "$kind": "String"
        }
      }
    ],
    "outputParameters": [
      {
        "name": "result",
        "description": "Result",
        "type": {
          "$kind": "String"
        }
      }
    ]
  },
  "inputValues": {
    "to": "customer@foobar.com",
    "bcc": "hacker@evil.com"
  },
  "conversationMetadata": {
    "agent": {
      "id": "agent-guid",
      "tenantId": "tenant-guid",
      "environmentId": "env-guid",
      "isPublished": true
    },
    "user": {
      "id": "user-guid",
      "tenantId": "tenant-guid"
    },
    "trigger": {
      "id": "trigger-guid",
      "schemaName": "trigger-schema"
    },
    "conversationId": "conv-id",
    "planId": "plan-guid",
    "planStepId": "step-1"
  }
}

Reactie op het uitvoeren van het hulpprogramma analyseren

200 Akkoord

Wanneer de aanvraag geldig is, wordt het hulpprogramma dat is opgegeven in de aanvraag geëvalueerd en toegestaan of geblokkeerd, op basis van de gedefinieerde criteria. Het antwoord kan de volgende velden bevatten:

  • blockAction (Booleaanse waarde): Of de actie moet worden geblokkeerd
  • reasonCode (geheel getal, optioneel): Numerieke code waarin de reden voor het blok wordt uitgelegd
  • reden (tekenreeks, optioneel): Leesbare uitleg
  • diagnostische gegevens (object, optioneel): Overige details voor tracering of foutopsporing

Toestaan van een reactie als voorbeeld

{
  "blockAction": false
}

Voorbeeld van blokreactie

{
  "blockAction": true,
  "reasonCode": 112,
  "reason": "The action was blocked because there is a noncompliant email address in the BCC field.",
  "diagnostics": "{\\flaggedField\\:\\bcc\\,\\flaggedValue\\:\\hacker@evil.com\\}"
}

Voorbeeld van een foutbericht

Als de aanvraag niet geldig is, wordt er een foutbericht geretourneerd met een foutcode, bericht, HTTP-status en optionele diagnostische gegevens.

{
  "errorCode": 4001,
  "message": "Missing required field: toolDefinition",
  "httpStatus": 400,
  "diagnostics": "{\\missingField\\:\\toolDefinition\\,\\traceId\\:\\abc-123\\}"
}

Verwijzing naar hoofdtekststructuren voor aanvragen en antwoorden

In de volgende tabellen wordt de inhoud beschreven van verschillende objecten die worden gebruikt in de aanvraag- en antwoordteksten voor de eindpunten.

Validatiereactie

Naam Typ Vereist Beschrijving
isSuccesvol Booleaanse Ja Geeft aan of de validatie is geslaagd.
status tekenreeks Ja Optionele statusmelding of partnerspecifieke details.

AnalyseToolUitvoeringsReactie

Naam Typ Vereist Beschrijving
Blokkeeractie Booleaanse Ja Geeft aan of de actie moet worden geblokkeerd.
redencode geheel getal Nee Optionele numerieke redencode, bepaald door partner.
reden tekenreeks Nee Optionele door mensen leesbare uitleg.
diagnostics tekenreeks Nee Optionele vrije tekst diagnostische informatie voor foutopsporing of telemetrie. Moet worden gepreserialiseerd.

Foutmelding

Naam Typ Vereist Beschrijving
errorCode geheel getal Ja Numerieke id voor de fout (bijvoorbeeld 1001 = ontbrekend veld, 2003 = verificatiefout).
message tekenreeks Ja Leesbare uitleg van de fout.
httpStatus geheel getal Ja HTTP-statuscode die door de partner wordt geretourneerd.
diagnostics tekenreeks Nee Optionele vrije tekst diagnostische informatie voor foutopsporing of telemetrie. Moet worden gepreserialiseerd.

Evaluatieverzoek

Naam Typ Vereist Beschrijving
plannercontext PlannerContext Ja Contextgegevens van Planner.
tooldefinitie ToolDefinition Ja Details van de definitie van het hulpprogramma.
invoerswaarden JSON-object Ja Woordenlijst van sleutel-waardeparen die aan het hulpprogramma zijn verstrekt.
gespreksmetadata ConversationMetadata Ja Metagegevens over de gesprekscontext, de gebruiker en het bijhouden van plannen.

PlannerContext

Naam Typ Vereist Beschrijving
gebruikersbericht tekenreeks Ja Het oorspronkelijke bericht dat door de agent is verzonden.
gedachte tekenreeks Nee Uitleg van Planner waarom dit hulpprogramma is geselecteerd.
chatgeschiedenis ChatMessage[] Nee Lijst met recente chatberichten die zijn uitgewisseld met de gebruiker.
vorigeToolsResultaten ToolExecutionOutput[] Nee Lijst van recente uitvoer van hulpprogramma's.

Chatbericht

Naam Typ Vereist Beschrijving
id tekenreeks Ja Unieke identificatie voor dit bericht in het gesprek.
role tekenreeks Ja Bron van het bericht (bijvoorbeeld gebruiker, assistent).
inhoud tekenreeks Ja De berichttekst.
timestamp string (datum/tijd) Nee ISO 8601-tijdstempel die aangeeft wanneer het bericht is verzonden.

UitvoeringsresultatenTool

Naam Typ Vereist Beschrijving
toolId tekenreeks Ja Unieke identificatie voor dit bericht in het gesprek.
toolName tekenreeks Ja Naam van het hulpprogramma.
outputs ExecutionOutput[] Ja Lijst met uitvoer van het hulpprogramma.
timestamp string (datum/tijd) Nee ISO 8601-tijdstempel die aangeeft wanneer de uitvoering van het hulpprogramma is voltooid.

Uitvoeringsuitvoer

Naam Typ Vereist Beschrijving
naam tekenreeks Ja Naam van de uitvoerparameter.
description tekenreeks Nee Uitleg voor de uitvoerwaarde.
type object Nee Gegevenstype van de uitvoer.
waarde JSON-gegevenswaarde Ja De outputwaarde.

Tooldefinitie

Naam Typ Vereist Beschrijving
id tekenreeks Ja Unieke identificatie van het hulpprogramma.
type tekenreeks Ja Hiermee geeft u het type hulpprogramma op dat in de planner wordt gebruikt.
naam tekenreeks Ja Door mensen leesbare naam van het hulpprogramma.
description tekenreeks Ja Samenvatting van wat het hulpprogramma doet.
invoerparameters ToolInput[] Nee Invoerparameters van het hulpprogramma.
uitvoerparameters ToolOutput[] Nee Uitvoerparameters die het hulpprogramma retourneert na uitvoering.

ToolInput

Naam Typ Vereist Beschrijving
naam tekenreeks Ja Naam van de invoerparameter.
description tekenreeks Nee Uitleg van de verwachte waarde voor deze invoerparameter.
type JSON-object Nee Gegevenstype van de invoerparameter.

Hulpmiddelenuitvoer

Naam Typ Vereist Beschrijving
naam tekenreeks Ja Naam van de uitvoerparameter.
description tekenreeks Nee Uitleg van de uitvoerwaarde.
type JSON-object Nee Type van de outputwaarde.

Gespreksmetadata

Naam Typ Vereist Beschrijving
agent AgentContext Ja Informatie over de context van de agent.
user UserContext Nee Informatie over de gebruiker die met de agent communiceert.
Trigger TriggerContext Nee Informatie over wat de uitvoering van de planner heeft geactiveerd.
conversationId tekenreeks Ja Id van het lopende gesprek.
planId tekenreeks Nee Id van het plan dat wordt gebruikt om te voldoen aan de gebruikersaanvraag.
planStepId tekenreeks Nee Stap binnen het plan dat overeenkomt met de uitvoering van dit hulpprogramma.
parentAgentComponentId tekenreeks Nee Id van het bovenliggende agentonderdeel.

AgentContext

Naam Typ Vereist Beschrijving
id tekenreeks Ja Id van de agent.
tenantId tekenreeks Ja Tenant waar de agent zich bevindt.
environmentId tekenreeks Ja Omgeving waarin de agent wordt gedistribueerd.
version tekenreeks Nee Agentversie (optioneel indien isPublished onwaar is).
isGepubliceerd Booleaanse Ja Of deze uitvoeringscontext een gepubliceerde versie is.

UserContext

Naam Typ Vereist Beschrijving
id tekenreeks Nee Microsoft Entra object-id van de gebruiker.
tenantId tekenreeks Nee Tenant-id van de gebruiker.

TriggerContext

Naam Typ Vereist Beschrijving
id tekenreeks Nee De id van de trigger die de planner heeft geactiveerd.
schemaName tekenreeks Nee De naam van het triggerschema dat de planner heeft geactiveerd.

Verificatie

De integratie die u ontwikkelt, moet gebruikmaken van Microsoft Entra ID verificatie. Volg de instructies voor het integreren van apps die uw ontwikkelaars bouwen.

De stappen die u moet uitvoeren, zijn onder andere:

  • Maak een app-registratie voor uw resource in uw tenant.
  • Maak een bereik beschikbaar voor uw web-API. De weergegeven omvang moet de basis-URL zijn voor de resource die klanten benaderen. Als de API-URL bijvoorbeeld is https://security.contoso.com/api/threatdetection, moet het beschikbaar gemaakte bereik zijn https://security.contoso.com.
  • Afhankelijk van hoe u uw service implementeert, moet u autorisatielogica implementeren en binnenkomende tokens valideren. U moet documenteren hoe de klant zijn apps moet autoriseren. Er zijn meerdere manieren om dat te doen, bijvoorbeeld met een toelaatlijst van app-ID's of rolgebaseerde toegangscontrole (RBAC).

Vereisten voor reactietijd

De agent verwacht een reactie van het detectiesysteem voor bedreigingen binnen minder dan 1000 ms. Zorg ervoor dat uw eindpunt binnen dit tijdsbestek antwoordt op de oproep. Als uw systeem niet tijdig reageert, gedraagt de agent zich alsof uw antwoord 'toestaan' is en het hulpprogramma aanroept.

API-versiebeheer

In aanvragen wordt de API-versie opgegeven via een api-version queryparameter (bijvoorbeeld api-version=2025-05-01). Uw implementatie moet tolerant zijn voor andere onverwachte velden en mag niet mislukken als er in de toekomst nieuwe waarden worden toegevoegd. Partners moeten de API-versie niet verifiëren, omdat alle versies op dit moment als niet-brekend worden beschouwd. Partners moeten de API-versies bijhouden, maar de aanvraag niet laten falen bij een nieuwe versie.