Samenvatting
Toegang
EKM-endpoints zijn toegankelijk in de Management API met een Admin API-sleutel. https://platform.openai.com/settings/organization/admin-keys (gebruik geen normale API-sleutel). Admin-API-sleutels zijn beschikbaar voor organisatie-eigenaren.
Gebruik
api.external_keys.writeom externe sleutels te maken of te verwijderen, enapi.external_keys.readom externe sleutels weer te geven of te valideren. Een enkele sleutel heeft beide scopes alleen nodig als deze zowel lees- als schrijfbewerkingen moet uitvoeren.We moeten je organisatie momenteel via een featureflag toegang geven tot deze endpoints. Je weet dat je featureflag actief is als je external_key_id terugziet van het bestaande endpoint List Projects: https://api.openai.com/v1/organization/projects
Gebruik
Je EKM-configuratie wordt via een nieuw endpoint op organisatieniveau geregistreerd: 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 op projectniveau geactiveerd door een external_key_id mee te geven in de body van het bestaande endpoint Create Project https://api.openai.com/v1/organization/projects
Beperkingen
Je moet EKM eerst testen op een nieuw project via de Management API.
We raden aan nieuwe projecten op te zetten voor je EKM-workloads. Als je EKM echter op een bestaand project wilt, kunnen we je toevoegen aan de featureflag. Let op de volgende best practices voordat je EKM uitrolt naar je bestaande productieprojecten.
Test eerst alle API-functies die je in productie gebruikt in je test-EKM-API-project
Gebruik een gefaseerde uitrol in plaats van EKM in één keer op alle productie-API-projecten in te vullen
Endpoints op organisatieniveau
Een externe sleutel bij je organisatie registreren
AWS
Voorbeeldaanvraag
type: string - altijd "aws"
name: string - Een herkenbare naam voor je configuratie
role_arn: string - De Role ARN die OpenAI in je cloud zal aannemen
kms_arn: string - De Key Management System ARN 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
Voorbeeldaanvraag
type: string - altijd "gcp",
name: string - Een herkenbare naam voor je configuratie
workload_identity_project_number: string - Het 12-cijferige GCP-projectnummer waar 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 de 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 Key Management System-sleutelring met de hoofdsleutel die je beheert
kms_key_name: string - De naam van de Key Management System-hoofdsleutel
kms_key_location: string - De regio waar je Key Management System-hoofdsleutel 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 in ieder geval KMS is ingeschakeld voor het project met de Workload Identity van OpenAI via 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
Voorbeeldaanvraag
type: string - altijd "azure",
name: string - Een herkenbare naam voor je configuratie
tenant_id: string - Je Azure-tenant-UUID
vault_uri: string - De URI van de Azure-vault met de hoofdsleutel die je beheert
key_name: string - De naam van de Azure Key Vault-hoofdsleutel die je beheert.
Deze moet de vorm <org-xxx>--<any_name> hebben
waarbij org-xxx je OpenAI-organisatie-ID 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
Opmerking: Je kunt een externe sleutel alleen verwijderen als deze niet is gekoppeld aan actieve API-projecten of een werkruimte. Als deze is gekoppeld aan een actief API-project, archiveer dat project dan eerst. Als deze aan een werkruimte is gekoppeld, kan de sleutel niet worden verwijderd.
Voorbeeldaanvraag
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
Voorbeeldaanvraag
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
Je kunt dit endpoint gebruiken om verschillende zaken te controleren
Je externe cloudconfiguratie blijft geldig bij OpenAI nadat je wijzigingen hebt aangebracht (je krijgt een succesrespons)
Je sleutelintrekking is correct uitgevoerd, wordt door OpenAI verwerkt en wordt van kracht nadat de cache-TTL's van 1 uur zijn verlopen (je krijgt een foutrespons)
Voorbeeldaanvraag
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 maken met een externe sleutel-ID
Dit is hetzelfde als het bestaande endpoint Create Project, met toevoeging van de parameter external_key_id in de aanvraag en respons.
Voorbeeldaanvraag
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": "project",
"id": "proj_xxxxx",
"title": "Some Project",
"external_key_id": "extkey_xxxxx",
"created": 1740012721,
"organization_id": "org-xxxxx",
"is_initial": false,
"geography": null,
"scale_tier_enabled": false,
"disable_user_api_keys": false,
"zdr_type": null,
}[Beperkt] Een bestaand project bijwerken met een externe sleutel-ID
Dit is hetzelfde als het bestaande endpoint Update Project, met toevoeging van de parameter external_key_id in de aanvraag en respons.
We raden aan nieuwe API-projecten op te zetten voor je EKM-workloads. Als je EKM op al je bestaande API-projecten wilt, vraag het je accountdirector en wij voegen je toe aan de featureflag. Let op de volgende best practices voordat je EKM uitrolt naar je bestaande productieprojecten.
Test eerst alle API-functies die je in productie gebruikt in je test-EKM-API-project
Gebruik een gefaseerde uitrol in plaats van EKM in één keer op alle productie-API-projecten in te vullen
Voorbeeldaanvraag
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 weergeven
Dit is hetzelfde als het bestaande endpoint, maar met toevoeging van external_key_id aan de API-respons
Voorbeeldaanvraag
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
}