Aanroepen binnen je regio's houden¶
Het concept achter modellen en routering staat in Modellen en routering.
Een beleid kan bepalen in welke regio's Core namens je sleutel mag werken. Zet je in
policy.settings.regions_allow een lijst regio's, dan houdt Core elke bestemming van een aanroep aan
die lijst: het model dat antwoordt, maar ook het embedding-model, de tools, de diensten achter een
kennisconnector en de computers. Een bestemming buiten de lijst wordt geweigerd, tenzij je beleid
haar met name noemt als regio-uitzondering.
Staat er geen lijst (regions_allow is null, de standaard), dan geldt niets van deze pagina.
Een regiobeperking instellen¶
De lijst staat in de settings van het beleidsdocument van een sleutel, van je organisatie of van allebei:
{
"settings": {
"regions_allow": ["eu"]
}
}
Een regio schrijf je als eu, us, global, in-cluster (de eigen infrastructuur van je
installatie) of een landcode van twee letters zoals nl. Regio's liggen in elkaar: in-cluster en
elke EU-lidstaat liggen in eu, en alles ligt in global. Een bestemming in nl voldoet dus aan
een lijst met eu; een bestemming in us of global niet. Een lege lijst wordt geweigerd.
In de console staan deze velden onder Waar gegevens heen mogen, op de kaart Instellingen
van de policy van een sleutel en van de organisatie (Sleutels).
Een sleutel met management zet ze via de
API: PATCH /keys/{key_id} met policy voor een sleutel, PUT /organisation/policy voor de
organisatie (Organisaties beheren via de API). Beide vervangen het hele
document, dus lees het eerst met GET /keys/{key_id} of GET /organisation/policy en stuur het
compleet terug, met rules erbij: een instelling die je weglaat, valt terug op haar standaard, en
een document zonder rules krijgt de standaardregels, die geen host voor een tool en geen
schrijven van geheugen toestaan. Stuur de versie die je las mee in If-Match, zodat je geen
wijziging overschrijft die iemand tussen je lezen en je schrijven heeft opgeslagen
(Sleutels uitgeven, roteren en intrekken).
Elk document telt. Beperken je sleutel, je organisatie en de organisaties erboven de regio's, dan moet een bestemming aan elk daarvan voldoen. Een sleutel kan het beleid van zijn organisatie dus alleen verder beperken, nooit verruimen, en een organisatie beperkt alleen verder wat de organisaties erboven toelaten (De organisaties erboven tellen ook mee).
Waar het voor geldt¶
| Bestemming | Waar haar regio vandaan komt | Wat er gebeurt als ze buiten de lijst valt |
|---|---|---|
| Het model dat antwoordt | de regio en het land van het model, in GET /models |
de beurt krijgt 403 (Hostingweigeringen) |
| Het embedding-model (kennis, geheugen, skills) | idem | de beurt draait zonder zoeken in je kennis; een route die iets inbedt, zoals POST /memory, geeft 403 |
| Het model dat een thread samenvat | idem | de thread gaat letterlijk naar het model, zonder samenvatting |
| De modelstappen van een kennispipeline | idem | de stap mislukt; een zoektool antwoordt Denied by policy. |
| Een afbeeldingsmodel | idem | de tool antwoordt Denied by policy. |
| Een audiomodel | idem | POST /audio/transcriptions en een verzoek met input_audio antwoorden 403; de transcriptietool antwoordt Denied by policy. (Audio transcriberen). Een opname wordt nooit gepseudonimiseerd, dus dit bepaalt waar ze heen gaat |
| De host van een API-koppeling of MCP-server | de region van de bron, of policy.settings.host_regions (Toegestane bestemmingen) |
de tool antwoordt Denied by policy. |
| Een callback-URL of webhook | policy.settings.host_regions |
aanmaken geeft 403; een aflevering vervalt |
builtin__web_fetch, builtin__web_search |
de diensten draaien in de Verenigde Staten | de tool antwoordt Denied by policy. (Webpagina's ophalen en zoeken) |
Een website-connector, gecrawld via Firecrawl |
de Verenigde Staten | synchronisatie en test mislukken met region_denied (Kennis) |
De stap llama_parse, via LlamaCloud |
standaard de EU, of de regio die je operator instelde | de bron mislukt met region_denied |
| Een computer | de regio die je operator voor de computers van je organisatie instelde | de tool antwoordt Denied by policy. (Computers via de API) |
Het embedding-model valt ook onder je regels over modellen, met of zonder regiolijst: een beleid dat modellen beperkt, moet ook het embedding-model toestaan (Kennis).
Een bestemming waarvan niemand de regio heeft opgegeven, wordt geweigerd: Core neemt niet aan dat ze
wel goed zit. Elke weigering staat in je auditspoor als
policy.decision met decision: denied.
Regio-uitzonderingen¶
Soms moet één bestemming buiten je regio's bereikbaar zijn: een Amerikaanse zoekdienst onder een
EU-beleid, of één model dat alleen elders draait. us aan je lijst toevoegen zou dan elke
Amerikaanse bestemming openzetten, modellen inbegrepen. Noem die ene bestemming in plaats daarvan in
policy.settings.region_exceptions:
{
"settings": {
"regions_allow": ["eu"],
"region_exceptions": ["builtin:web_search", "host:api.tickets.example.com"]
}
}
Elke regel noemt precies één bestemming, in een van deze vormen:
| Vorm | Wat het noemt |
|---|---|
model:<model-id> |
één model, met het id precies zoals GET /models het schrijft; geen jokertekens |
host:<host> |
één host, of *. plus een domein van minstens twee delen (host:*.example.com, niet host:*.com): de host van een API-koppeling of MCP-server, een tokenendpoint, een callback of een webhook |
builtin:web_fetch, builtin:web_search |
de diensten achter de webtools |
builtin:computer |
de computers van je organisatie |
vendor:firecrawl |
het crawlen van een website-connector |
vendor:llamacloud |
de stap llama_parse |
Een andere vorm geeft 422. Een uitzondering telt alleen in een document dat zelf regio's beperkt.
Elk document moet de bestemming toelaten. Elk document dat regio's beperkt, wordt apart
geraadpleegd: het laat een bestemming toe als zijn eigen regions_allow de plaats toelaat óf zijn eigen
region_exceptions de bestemming noemt. Houdt je organisatie zich aan eu, dan helpt een
uitzondering op je sleutel alleen als het organisatiebeleid dezelfde bestemming ook noemt. Laat je
organisatie us al toe, dan hoeft ze de uitzondering van je sleutel voor een Amerikaans model niet
te herhalen. Een host:-jokerteken dekt de hosts eronder, dus host:*.firecrawl.dev op de
organisatie en host:api.firecrawl.dev op de sleutel laten samen api.firecrawl.dev door. Een
dienst telt als genoemd onder zijn eigen naam en onder de host die hij gebruikt. Hetzelfde geldt
voor elke organisatie boven de jouwe die regio's beperkt
(De organisaties erboven tellen ook mee).
Waar de bestemming ook draait, ook als niemand dat weet. Een uitzondering noemt een bestemming,
geen plaats. Ze dekt dus ook een bestemming waarvan niemand de regio opgaf, zoals een MCP-server
zonder region. Omdat geen enkele regio een onbekende plaats toelaat, moet dan elk document dat
regio's beperkt de bestemming zelf noemen.
Een uitzondering heft verder niets op. De regels van je beleid, voor modellen, tools, hosts en
personen (Je eerste regel schrijven), de
hosts die je organisatie toestaat, de hosts die je installatie blokkeert en de hosting.region van een beurt gelden
gewoon. Vraagt een verzoek hosting.region: "eu", dan wordt een model buiten de EU geweigerd, ook
als het beleid er een uitzondering voor heeft: wie het verzoek stuurde, vroeg om die plaats.
Elk gebruik wordt vastgelegd. Een aanroep die door een uitzondering doorgaat, staat in het
auditspoor als policy.decision met decision: allowed en reason: allowed by residency
exception; refs noemt de uitzondering die het toeliet.
Leveranciers aan plaatsen houden¶
Een regio zegt waar een aanroep verwerkt wordt, niet wie hem verwerkt. Een model dat in de EU
draait bij een bedrijf met een moederbedrijf in de Verenigde Staten, valt onder allebei.
policy.settings.vendors_allow houdt het bedrijf achter elke bestemming aan plaatsen, en een
model aan open gewichten:
{
"settings": {
"vendors_allow": {
"established_in": ["eu"],
"parent_in": ["eu"],
"open_weights": true
}
}
}
established_innoemt waar het bedrijf achter een bestemming gevestigd mag zijn,parent_inwaar het uiteindelijke moederbedrijf gevestigd mag zijn, gespeld zoalsregions_allow. Laat er een weg om er niet naar te vragen.open_weights: truelaat alleen modellen toe waarvan de gewichten gepubliceerd zijn, zodat een andere host ze kan draaien.- Wat niemand heeft opgegeven, telt als
global; een eis dieeunoemt, weigert het dus tot iemand het opgeeft. Geen regio-uitzondering heft zo'n weigering op.
Je beheerder geeft per modelprovider op wie hem draait en per model of de gewichten open zijn;
GET /models toont beide als vendor en open_weights. Voor wat je zelf registreert, geef je het
zelf op: vendor op een API-connector, een MCP-server of een event-webhook, en callback_vendor
naast de callback_url van een run, telkens {"established_in": "nl", "parent_in": "nl"}; een
bedrijf zonder moederbedrijf geeft zijn eigen plaats. GET /key geeft in vendors_allow elke eis
waaronder je sleutel beslist wordt. Elk document telt mee, net als bij regio's, en de console heeft
voor deze instelling nog geen veld: je schrijft hem via de API, en opslaan in de console laat hem
staan. Een geweigerd model antwoordt 403 met The model is not run by a company this key allows.
of The model's weights are not open, as this key requires.
De organisaties erboven tellen ook mee¶
Hangt je organisatie onder een andere, dan wegen de drie lijsten onder policy.settings van elke
organisatie erboven (regions_allow, region_exceptions en host_regions) mee naast die van je
organisatie en je sleutel. Die documenten kun je niet lezen, tenzij je die organisaties ook beheert.
Dit doen ze met je aanroepen:
- De regio's moeten elkaar raken. Een bestemming moet binnen de
regions_allowliggen van elk document dat er een heeft. Een organisatie erboven die zich aaneuhoudt, houdt elke organisatie eronder ineu, wat hun eigen lijsten ook zeggen. - Elk beperkend document moet de bestemming toelaten of noemen. Een uitzondering in jouw beleid laat een bestemming alleen door als elke organisatie erboven die regio's beperkt de plaats zelf toelaat of dezelfde bestemming bij haar eigen uitzonderingen noemt. Doet een organisatie erboven geen van beide, vraag dan haar beheerder de uitzondering toe te voegen.
- Een host die erboven is geplaatst, is ook voor jou geplaatst. Geeft een organisatie erboven in
haar
host_regionsop waar een host draait, dan hoef jij dat niet nog eens te doen. Plaatsen jouw document en een document erboven dezelfde host in twee verschillende regio's, dan geldt de host als nergens geplaatst en wordt hij geweigerd als onbekend. Haal dan je eigen opgave weg, of vraag de beheerder erboven welke regio daar staat.
Zien waar je aanroepen heen mogen¶
GET /key geeft in residency wat alle documenten waaronder je sleutel wordt beslist samen
toelaten: dat van je sleutel, dat van je organisatie en die van de organisaties erboven.
{
"residency": {
"regions_allow": ["eu"],
"region_exceptions": [
{ "exception": "builtin:web_search", "where": null }
]
}
}
regions_allowis waar alle lijsten elkaar raken. Leeg betekent dat ze niets gemeen hebben, en dan is geen enkele bestemming bereikbaar.region_exceptionsnoemt elke uitzondering van je sleutel en je organisatie waarmee je aanroepen worden beslist, metwhere:nullals de bestemming overal bereikbaar is, omdat elk beperkend document haar noemt. Noemt een beperkend document haar niet, dan geeftwherede plaatsen die dat document zelf toelaat. Houdt je organisatie zich aaneuen noemt ze een model als uitzondering, terwijl je sleutel alleenustoelaat, dan staat dat model er metwhere: ["us"], ook al isregions_allowdan leeg. Een uitzondering die niets toevoegt aanregions_allow, staat er niet in. De uitzonderingen van een organisatie erboven wegen mee en staan er niet in.residencyisnullals geen enkel document regio's beperkt.
De lijsten met modellen houden ook rekening met uitzonderingen: een model dat alleen door een
uitzondering bereikbaar is, staat in GET /models en is allowed in ?kind=image, ?kind=audio en
?kind=embedding (Modellen die je sleutel bereikt zonder ze te
noemen).
Werk dat in de console begint¶
Wat iemand in de console doet voor je organisatie, valt onder de regiokeuzes van de organisatie: een
zoekopdracht of Probeer het op een zoektool, een pipelinetest, het schrijven van een skill, de
test van een connector, en het inlezen van een bron of connector die iemand in de console heeft
ingesteld. Ook wat een geïnstalleerde publicatie voor je organisatie doet, valt eronder. Daarvoor
tellen regions_allow, region_exceptions en host_regions van het
organisatiebeleid, en dezelfde drie lijsten van elke organisatie
erboven. Van de regels tellen alleen die over bestemmingen: die van de organisatie zelf
(Toegestane hosts) en die van de organisaties erboven. De
overige regels en instellingen zijn voor sleutels, en wie in de console werkt, is geen sleutel.
Beperkt de organisatie geen regio's, en ook geen organisatie erboven, dan is dat werk niet op regio
beperkt.
Een actie die tekst inbedt met een model buiten die regio's, wordt geweigerd met The embedding model
is not hosted in a region this organisation allows.