Resum
Accés
Els endpoints d’EKM són accessibles a la Management API mitjançant una Admin API Key. https://platform.openai.com/settings/organization/admin-keys (no feu servir una clau d’API normal). Les claus d’API d’administrador estan disponibles per als propietaris de l’organització.
Feu servir
api.external_keys.writeper crear o suprimir claus externes, iapi.external_keys.readper llistar o validar claus externes. Una sola clau només necessita tots dos àmbits si ha de fer operacions de lectura i d’escriptura.Actualment hem d’activar aquests endpoints per a la vostra organització amb una marca de funcionalitat. Sabeu que teniu la marca de funcionalitat si veieu que l’endpoint List Projects existent retorna external_key_id : https://api.openai.com/v1/organization/projects
Ús
La vostra configuració d’EKM es registra al nivell d’organització mitjançant un endpoint nou: https://api.openai.com/v1/organization/external_keys
En registrar la configuració d’EKM, es retorna un external_key_id amb el format extkey_xxxx
Les configuracions d’EKM s’activen al nivell de projecte passant un external_key_id al cos de l’endpoint Create Project existent https://api.openai.com/v1/organization/projects
Restriccions
Primer heu de provar EKM en un projecte nou mitjançant la Management API.
Recomanem crear projectes nous per a les vostres càrregues de treball d’EKM. Tanmateix, si voleu EKM en un projecte existent, us podem afegir a la marca de funcionalitat. Tingueu en compte les pràctiques recomanades següents abans de desplegar EKM als vostres projectes de producció existents.
Proveu primer totes les funcions d’API que feu servir en producció al vostre projecte d’API EKM de prova
Feu un desplegament gradual en lloc d’afegir EKM a tots els projectes d’API de producció alhora
endpoints de nivell d’organització
Registrar una clau externa a la vostra organització
AWS
Sol·licitud d’exemple
type: string - sempre “aws”
name: string - Un nom descriptiu per a la vostra configuració
role_arn: string - L’ARN del rol que OpenAI assumirà al vostre núvol
kms_arn: string - L’ARN del sistema de gestió de claus per a la clau mestra que gestioneu
external_id: string - L’ID de la vostra organització o del projecte d’API
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>
}'Resposta d’exemple
{
"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
Sol·licitud d’exemple
type: string - sempre "gcp",
name: string - Un nom descriptiu per a la vostra configuració
workload_identity_project_number: string - El número de projecte GCP de 12 dígits on heu registrat la identitat de càrrega de treball d’OpenAI
workload_identity_pool_id: string - L’agrupació que conté el proveïdor de Workload Identity que heu registrat per a OpenAI
workload_identity_provider_id: string - El proveïdor de Workload Identity que heu registrat per a OpenAI
audience: string - El públic que OpenAI ha de passar al segment quan assumim un rol mitjançant el vostre STS de GCP
kms_project_id: string - El nom del projecte GCP on es troba el vostre KMS
kms_key_ring_name: string - L’anell de claus del sistema de gestió de claus que conté la clau mestra que gestioneu
kms_key_name: string - El nom de la clau mestra del sistema de gestió de claus
kms_key_location: string - La regió on es troba la clau mestra del sistema de gestió de claus
Si el vostre KMS es troba en un projecte GCP diferent del projecte on heu registrat la Workload Identity d’OpenAI, assegureu-vos que el projecte que conté la Workload Identity d’OpenAI tingui com a mínim KMS activat accedint a 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"
}'Resposta d’exemple
{
"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
Sol·licitud d’exemple
type: string - sempre "azure",
name: string - Un nom descriptiu per a la vostra configuració
tenant_id: string - L’UUID del vostre inquilí d’Azure
vault_uri: string - L’URI del magatzem d’Azure que conté la clau mestra que gestioneu
key_name: string - El nom de la clau mestra d’Azure Key Vault que gestioneu.
Ha de tenir el format <org-xxx>--<any_name>
on org-xxx és l’ID de la vostra organització d’OpenAI, que podeu trobar a 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"
}'Resposta d’exemple
{
"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"
}Suprimir una clau externa registrada a la vostra organització
Nota: només podeu suprimir una clau externa si no està associada a cap projecte d’API actiu ni a cap espai de treball. Si està associada a un projecte d’API actiu, arxiveu primer aquest projecte. Si està associada a un espai de treball, la clau no es pot suprimir.
Sol·licitud d’exemple
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"Resposta d’exemple
{
"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>"
}Obtenir les claus externes registrades a la vostra organització
Sol·licitud d’exemple
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"Resposta d’exemple
{
"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"
}Validar una clau externa
Podeu fer servir aquest endpoint per comprovar diverses coses
Que la vostra configuració externa del núvol continua sent vàlida amb OpenAI després d’haver fet canvis (veureu una resposta correcta)
Que la revocació de la vostra clau s’ha fet correctament, OpenAI l’està processant i entrarà en vigor quan hagin expirat els TTL de memòria cau d’1 hora (veureu una resposta d’error)
Sol·licitud d’exemple
curl -X POST -H "Authorization: Bearer $TOKEN"
"https://api.openai.com/v1/organization/external_keys/extkey_xxx/validate"Resposta d’exemple
{
"status": "success"
}O bé un error retornat pel proveïdor de núvol.
endpoints de nivell de projecte
Crear un projecte nou amb un ID de clau externa
És el mateix que l’endpoint Create Project existent, amb l’afegit del paràmetre external_key_id a la sol·licitud i a la resposta.
Sol·licitud d’exemple
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"
}'Resposta d’exemple
{
"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,
}[Restringit] Actualitzar un projecte existent amb un ID de clau externa
És el mateix que l’endpoint Update Project existent, amb l’afegit del paràmetre external_key_id a la sol·licitud i a la resposta.
Recomanem crear projectes d’API nous per a les vostres càrregues de treball d’EKM. Si voleu EKM en tots els vostres projectes d’API existents, demaneu-ho al vostre director de compte i us afegirem a la marca de funcionalitat. Tingueu en compte les pràctiques recomanades següents abans de desplegar EKM als vostres projectes de producció existents.
Proveu primer totes les funcions d’API que feu servir en producció al vostre projecte d’API EKM de prova
Feu un desplegament gradual en lloc d’afegir EKM a tots els projectes d’API de producció alhora
Sol·licitud d’exemple
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"
}'Llistar tots els projectes de la vostra organització
És el mateix que l’endpoint existent, però amb external_key_id afegit a la resposta de l’API
Sol·licitud d’exemple
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"Resposta d’exemple
{
"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
}