Samenvatting
Toegang
EKM-endpoints zijn toegankelijk in de Management API via een Admin API Key. https://platform.openai.com/settings/organization/admin-keys (gebruik geen normale API-sleutel). Admin API keys 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. Eén sleutel heeft beide scopes alleen nodig als deze zowel lees- als schrijfbewerkingen moet uitvoeren.We moeten momenteel een featureflag voor je organisatie inschakelen voor deze endpoints. Je weet dat je de featureflag hebt als je **external_key_id **ziet terugkomen van het bestaande endpoint List Projects: https://api.openai.com/v1/organization/projects
Gebruik
Je EKM-configuratie wordt op organisatieniveau geregistreerd via een nieuw endpoint https://api.openai.com/v1/organization/external_keys
Het registreren van je EKM-configuratie retourneert een external_key_id in de vorm extkey_xxxx
EKM-configuraties worden op projectniveau geactiveerd door een external_key_id door 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. Houd rekening met de volgende best practices voordat je EKM uitrolt naar je bestaande productieprojecten.
Test eerst alle API-functies die je in productie gebruikt in je EKM-test-API-project
Pas een geleidelijke uitrol toe in plaats van EKM in één keer op alle productie-API-projecten te vullen
Endpoints op organisatieniveau
Registreer een externe sleutel voor je organisatie
AWS
Voorbeeldaanvraag
type: string - altijd “aws”
name: string - Een gebruiksvriendelijke 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 gebruiksvriendelijke naam voor je configuratie
workload_identity_project_number: string - Het 12-cijferige GCP-projectnummer 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 meesturen 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 het project met de Workload Identity van OpenAI op zijn minst KMS is ingeschakeld door naar https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview te gaan
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 gebruiksvriendelijke naam voor je configuratie
tenant_id: string - Je Azure-tenant-UUID
vault_uri: string - De URI van de Azure-vault die de hoofdsleutel bevat 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"
}Verwijder een externe sleutel die voor je organisatie is geregistreerd
Opmerking: Je kunt een externe sleutel alleen verwijderen als deze niet is gekoppeld aan actieve projecten. Als deze is gekoppeld aan een actief project, moet je dat project eerst archiveren.
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>"
}Haal de externe sleutels op die voor 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"
}Valideer een externe sleutel
Je kunt dit endpoint gebruiken om verschillende zaken te controleren
Of je externe cloudconfiguratie na wijzigingen geldig blijft voor OpenAI (je ziet een succesrespons)
Of het intrekken van je sleutel correct is uitgevoerd, door OpenAI wordt verwerkt, en van kracht wordt nadat de cache-TTL's van 1 uur zijn verlopen (je ziet 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 afkomstig is van de cloudprovider.
Endpoints op projectniveau
Maak een nieuw project 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] Werk een bestaand project bij 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 dan aan je accountdirecteur en we voegen je toe aan de featureflag. Houd rekening met de volgende best practices voordat je EKM uitrolt naar je bestaande productieprojecten.
Test eerst alle API-functies die je in productie gebruikt in je EKM-test-API-project
Pas een geleidelijke uitrol toe in plaats van EKM in één keer op alle productie-API-projecten 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"
}'Geef alle projecten in je organisatie weer
Dit is hetzelfde als het bestaande endpoint, maar met toevoeging van external_key_id in 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
}