Samenvatting
Toegang
EKM-endpoints zijn toegankelijk in de Management API met een API-sleutel voor beheerders. https://platform.openai.com/settings/organization/admin-keys (gebruik geen gewone API-sleutel). API-sleutels voor beheerders zijn beschikbaar voor eigenaren van organisaties.
Gebruik
api.external_keys.writeom externe sleutels aan te maken of te verwijderen, enapi.external_keys.readom externe sleutels op te sommen of te valideren. Een sleutel heeft alleen beide scopes nodig als deze zowel lees- als schrijfbewerkingen moet uitvoeren.Momenteel moeten we deze endpoints via een featureflag beschikbaar maken voor je organisatie. Je weet dat de featureflag is ingeschakeld als het bestaande endpoint voor het opsommen van projecten external_key_id retourneert: https://api.openai.com/v1/organization/projects.
Gebruik
Je EKM-configuratie wordt geregistreerd op het niveau van de organisatie via een nieuw endpoint: https://api.openai.com/v1/organization/external_keys.
Bij het registreren van je EKM-configuratie wordt een external_key_id geretourneerd in de vorm extkey_xxxx.
EKM-configuraties worden geactiveerd op het niveau van een project door een external_key_id mee te geven in de body van het verzoek aan het bestaande endpoint voor het aanmaken van een project: https://api.openai.com/v1/organization/projects.
Beperkingen
Je moet EKM eerst via de Management API testen op een nieuw project.
We raden aan nieuwe projecten aan te maken voor je EKM-workloads. Als je EKM toch voor een bestaand project wilt gebruiken, kunnen we de featureflag voor je inschakelen. Neem de volgende aanbevolen werkwijzen in acht voordat je EKM uitrolt naar je bestaande productieprojecten.
Test alle API-functies die je in productie gebruikt eerst in je EKM-API-testproject.
Rol EKM geleidelijk uit in plaats van het in één keer voor alle API-projecten in productie in te schakelen.
Endpoints op organisatieniveau
Een externe sleutel bij je organisatie registreren
AWS
Voorbeeldverzoek:
type: string - altijd "aws"
name: string - Een herkenbare naam voor je configuratie
role_arn: string - De ARN van de rol die OpenAI in je cloud zal aannemen
kms_arn: string - De ARN in het sleutelbeheersysteem voor de hoofdsleutel die je beheert
external_id: string - Je Organisatie-ID of API-project-ID
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys" \
-d '{
"type": "aws",
"name": "AWS EKM Config",
"role_arn": "arn:aws:iam::<12_DIGIT_ACCOUNT_NUMBER>:role/<ROLE>",
"kms_arn": "arn:aws:kms:<REGION>:<ACCOUNT_NUMBER>:key/<UUID>",
"external_id": "<your org id or project id>"
}'Voorbeeldrespons:
{
"id": "extkey_xxxx",
"object": "organization.external_key",
"created_at": 1746175499,
"api_project_ids": [],
"type": "aws",
"name": "AWS EKM Config",
"role_arn": "arn:aws:iam::<ACCOUNT_NUMBER>:role/<ROLE>",
"kms_arn": "arn:aws:kms:<REGION>:<ACCOUNT_NUMBER>:key/<UUID>",
"external_id": "<your org id or project id>"
}GCP
Voorbeeldverzoek:
type: string - altijd "gcp",
name: string - Een herkenbare naam voor je configuratie
workload_identity_project_number: string - Het numerieke nummer van het GCP-project waarin je de Workload Identity van OpenAI hebt geregistreerd
workload_identity_pool_id: string - De pool met de Workload Identity-provider die je voor OpenAI hebt geregistreerd
workload_identity_provider_id: string - De Workload Identity-provider die je voor OpenAI hebt geregistreerd
audience: string - De audience die OpenAI in het token moet meegeven wanneer we via je GCP STS een rol aannemen
kms_project_id: string - De naam van het GCP-project waarin je KMS zich bevindt
kms_key_ring_name: string - De sleutelring in het sleutelbeheersysteem met de hoofdsleutel die je beheert
kms_key_name: string - De naam van de hoofdsleutel in het sleutelbeheersysteem
kms_key_location: string - De regio waarin de hoofdsleutel van je sleutelbeheersysteem zich bevindt
Als je KMS zich in een ander GCP-project bevindt dan het project waarin je de Workload Identity van OpenAI hebt geregistreerd, zorg er dan voor dat KMS in elk geval is ingeschakeld voor het project met de Workload Identity van OpenAI. Ga hiervoor naar https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview.
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys" \
-d '{
"type": "gcp",
"name": "GCP EKM Config",
"workload_identity_project_number": "123456789012",
"workload_identity_pool_id": "openai-azure",
"workload_identity_provider_id": "openai-ekm-service-role",
"audience": "<your org id or project id>",
"kms_project_id": "adjective-noun-12345",
"kms_key_name": "openai-kms-key",
"kms_key_ring_name": "openai-kms-key-ring",
"kms_key_location": "us-east1"
}'Voorbeeldrespons:
{
"id": "extkey_xxxxxx",
"object": "organization.external_key",
"created_at": 1746174349,
"api_project_ids": [],
"type": "gcp",
"name": "GCP EKM Config",
"workload_identity_project_number": "123456789012",
"kms_key_ring_name": "openai-kms-key-ring",
"kms_key_name": "openai-kms-key",
"kms_key_location": "us-east1",
"audience": "<your org id or project id>",
"kms_project_id": "adjective-noun-12345",
"workload_identity_pool_id": "openai-azure",
"workload_identity_provider_id": "openai-ekm-service-role"
}Azure
Voorbeeldverzoek:
type: string - altijd "azure",
name: string - Een herkenbare naam voor je configuratie
tenant_id: string - De UUID van je Azure-tenant
vault_uri: string - De URI van de Azure-kluis met de hoofdsleutel die je beheert
key_name: string - De naam van de hoofdsleutel in Azure Key Vault die je beheert.
Deze moet de vorm <org-xxx>--<any_name> hebben
waarbij org-xxx je Organisatie-ID bij OpenAI is, die je kunt vinden op https://platform.openai.com/settings/organization/general
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys" \
-d '{
"type": "azure",
"name": "Azure EKM Config",
"tenant_id": "<UUID>",
"vault_uri": "https://<VAULT_NAME>.vault.azure.net/",
"key_name": "org-xxx--some-key"
}'Voorbeeldrespons:
{
"id": "extkey_xxxx",
"object": "organization.external_key",
"created_at": 1746174377,
"api_project_ids": [],
"type": "azure",
"name": "Azure EKM Config",
"tenant_id": "<UUID>",
"vault_uri": "https://<VAULT_NAME>.vault.azure.net/",
"key_name": "org-xxx--some-key"
}Een externe sleutel verwijderen die bij je organisatie is geregistreerd
Let op: Je kunt een externe sleutel alleen verwijderen als deze niet is gekoppeld aan een actief API-project of een werkruimte. Als de sleutel aan een actief API-project is gekoppeld, archiveer dat project dan eerst. Als de sleutel aan een werkruimte is gekoppeld, kan deze niet worden verwijderd.
Voorbeeldverzoek
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"Voorbeeldrespons
{
"id": "extkey_xxxxx",
"object": "organization.external_key.deleted",
"created_at": 1746127808,
"api_project_ids": [],
"type": "aws",
"account_number": "123456789012",
"kms_arn": "arn:aws:kms:<REGION>:<ACCOUNT_NUMBER>:key/<UUID>",
"name": "AWS EKM Config",
"role_arn": "arn:aws:iam::<ACCOUNT_NUMBER>:role/<ROLE>"
}De externe sleutels ophalen die bij je organisatie zijn geregistreerd
Voorbeeldverzoek
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"Voorbeeldrespons
{
"object": "list",
"data": [
{
"id": "extkey_xxxx",
"object": "organization.external_key",
"created_at": 1746127808,
"api_project_ids": [],
"type": "aws",
"name": "AWS EKM Config",
"account_number": "123456789012",
"kms_arn": "arn:aws:kms:<REGION>:<ACCOUNT_NUMBER>:key/<UUID>",
"role_arn": "arn:aws:iam::<ACCOUNT_NUMBER>:role/<ROLE>"
}
],
"first_id": "extkey_xxxx",
"has_more": false,
"last_id": "extkey_xxxx"
}Een externe sleutel valideren
Met dit endpoint kun je verschillende zaken controleren:
Of je externe cloudconfiguratie na wijzigingen nog steeds geldig is voor gebruik met OpenAI (je krijgt een succesrespons).
Of je sleutel correct is ingetrokken, de intrekking door OpenAI wordt verwerkt en van kracht wordt zodra de cache-TTL's van 1 uur zijn verlopen (je krijgt een foutrespons).
Voorbeeldverzoek
curl -X POST -H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxx/validate"Voorbeeldrespons
{
"status": "success"
}Of een fout die door de cloudprovider is gemeld.
Endpoints op projectniveau
Een nieuw project aanmaken met een externe sleutel-ID
Dit is hetzelfde als het bestaande endpoint voor het aanmaken van een project, maar met de toevoeging van de parameter external_key_id in het verzoek en de respons.
Voorbeeldverzoek
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects" \
-d '{
"name": "Some Project",
"external_key_id": "extkey_xxxx"
}'Voorbeeldrespons
{
"object": "organization.project",
"id": "proj_xxxxx",
"name": "Some Project",
"external_key_id": "extkey_xxxx",
"created_at": 1740012721,
"archived_at": null,
"status": "active"
}[Beperkt toegankelijk] Een bestaand project bijwerken met een externe sleutel-ID
Dit is hetzelfde als het bestaande endpoint voor het bijwerken van een project, maar met de toevoeging van de parameter external_key_id in het verzoek en de respons.
We raden aan nieuwe API-projecten aan te maken voor je EKM-workloads. Als je EKM wilt gebruiken voor al je bestaande API-projecten, vraag dit dan aan je accountdirecteur. We schakelen de featureflag dan voor je in. Neem de volgende aanbevolen werkwijzen in acht voordat je EKM uitrolt naar je bestaande productieprojecten.
Test alle API-functies die je in productie gebruikt eerst in je EKM-API-testproject.
Rol EKM geleidelijk uit in plaats van het in één keer voor alle API-projecten in productie in te schakelen.
Voorbeeldverzoek
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects/proj_xxx" \
-d '{
"external_key_id": "extkey_xxxx"
}'Alle projecten in je organisatie opsommen
Dit is hetzelfde als het bestaande endpoint, maar met de toevoeging van external_key_id in de API-respons.
Voorbeeldverzoek
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"Voorbeeldrespons
{
"object": "list",
"data": [
{
"object": "organization.project",
"id": "proj_xxxx",
"name": "Project Name",
"external_key_id": "extkey_xxxx",
"created_at": 1717798982,
"archived_at": null,
"status": "active"
}
],
"first_id": "proj_xxxx",
"last_id": "proj_xxxx",
"has_more": true
}