Resum
Accés
Pots accedir als punts finals d'EKM a l'API de gestió amb una clau d'API d'administració. https://platform.openai.com/settings/organization/admin-keys (no facis servir una clau d'API normal). Les claus d'API d'administració estan disponibles per als propietaris de l'organització.
Fes servir
api.external_keys.writeper crear o suprimir claus externes, iapi.external_keys.readper llistar o validar claus externes. Una clau només necessita tots dos àmbits si ha de fer operacions tant de lectura com d'escriptura.Actualment, hem d'habilitar l'accés de la teva organització a aquests punts finals mitjançant un indicador de funcionalitat. Sabràs que tens l'indicador de funcionalitat activat si el punt final existent per llistar projectes retorna external_key_id: https://api.openai.com/v1/organization/projects.
Ús
La teva configuració d'EKM es registra en l'àmbit de l'organització mitjançant un nou punt final: https://api.openai.com/v1/organization/external_keys.
En registrar la teva configuració d'EKM, es retorna un external_key_id amb el format extkey_xxxx.
Les configuracions d'EKM s'activen en l'àmbit del projecte passant un external_key_id al cos de la sol·licitud al punt final existent per crear projectes: https://api.openai.com/v1/organization/projects.
Restriccions
Primer has de provar EKM en un projecte nou mitjançant l'API de gestió.
Recomanem crear projectes nous per a les teves càrregues de treball amb EKM. Tanmateix, si vols EKM en un projecte existent, et podem activar l'indicador de funcionalitat. Tingues en compte les bones pràctiques següents abans de desplegar EKM als teus projectes de producció existents.
Prova primer totes les funcions de l'API que fas servir en producció al teu projecte d'API de prova amb EKM.
Fes un desplegament gradual en lloc d'activar EKM a tots els projectes d'API de producció alhora.
endpoints de nivell d’organització
Registrar una clau externa a la vostra organització
AWS
Exemple de sol·licitud:
type: cadena - sempre "aws"
name: cadena - Un nom descriptiu per a la teva configuració
role_arn: cadena - L'ARN del rol que OpenAI assumirà al teu núvol
kms_arn: cadena - L'ARN del sistema de gestió de claus corresponent a la clau mestra que gestiones
external_id: cadena - El teu ID d'organització o de 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>"
}'Exemple de resposta:
{
"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
Exemple de sol·licitud:
type: cadena - sempre "gcp",
name: cadena - Un nom descriptiu per a la teva configuració
workload_identity_project_number: cadena - El número del projecte de GCP on has registrat la identitat de càrrega de treball d'OpenAI
workload_identity_pool_id: cadena - El grup que conté el proveïdor de Workload Identity que has registrat per a OpenAI
workload_identity_provider_id: cadena - El proveïdor de Workload Identity que has registrat per a OpenAI
audience: cadena - L'audiència que OpenAI ha de passar al testimoni quan assumim un rol mitjançant el teu STS de GCP
kms_project_id: cadena - El nom del projecte de GCP on es troba el teu KMS
kms_key_ring_name: cadena - L'anell de claus del sistema de gestió de claus que conté la clau mestra que gestiones
kms_key_name: cadena - El nom de la clau mestra del sistema de gestió de claus
kms_key_location: cadena - La regió on es troba la clau mestra del teu sistema de gestió de claus
Si el teu KMS es troba en un projecte de GCP diferent d'aquell on has registrat la identitat de Workload Identity d'OpenAI, assegura't que el projecte que conté aquesta identitat tingui, com a mínim, KMS habilitat. Pots comprovar-ho 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"
}'Exemple de resposta:
{
"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
Exemple de sol·licitud:
type: cadena - sempre "azure",
name: cadena - Un nom descriptiu per a la teva configuració
tenant_id: cadena - L'UUID del teu inquilí d'Azure
vault_uri: cadena - L'URI del magatzem d'Azure que conté la clau mestra que gestiones
key_name: cadena - El nom de la clau mestra d'Azure Key Vault que gestiones.
Ha de tenir el format <org-xxx>--<any_name>
on org-xxx és el teu ID d'organització d'OpenAI, que pots 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"
}'Exemple de resposta:
{
"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"
}Suprimeix una clau externa registrada a la teva organització
Nota: Només pots 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, primer arxiva el projecte. Si està associada a un espai de treball, no es pot suprimir.
Exemple de sol·licitud
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"Exemple de resposta
{
"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>"
}Obtén les claus externes registrades a la teva organització
Exemple de sol·licitud
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"Exemple de resposta
{
"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"
}Valida una clau externa
Pots fer servir aquest punt final per comprovar diversos aspectes:
Que la configuració del teu núvol extern continua sent vàlida per a OpenAI després de fer-hi canvis (veuràs una resposta de confirmació).
Que la revocació de la clau s'ha fet correctament, que OpenAI l'està processant i que tindrà efecte un cop hagin caducat els TTL d'una hora de la memòria cau (veuràs una resposta d'error).
Exemple de sol·licitud
curl -X POST -H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxx/validate"Exemple de resposta
{
"status": "success"
}O bé un error retornat pel proveïdor de núvol.
endpoints de nivell de projecte
Crea un projecte nou amb un ID de clau externa
És el mateix punt final que ja existeix per crear projectes, però amb el paràmetre external_key_id afegit a la sol·licitud i a la resposta.
Exemple de sol·licitud
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"
}'Exemple de resposta
{
"object": "organization.project",
"id": "proj_xxxxx",
"name": "Some Project",
"external_key_id": "extkey_xxxx",
"created_at": 1740012721,
"archived_at": null,
"status": "active"
}[Restringit] Actualitza un projecte existent amb un ID de clau externa
És el mateix punt final que ja existeix per actualitzar projectes, però amb el paràmetre external_key_id afegit a la sol·licitud i a la resposta.
Recomanem crear projectes d'API nous per a les teves càrregues de treball amb EKM. Si vols EKM a tots els teus projectes d'API existents, demana-ho al teu responsable de compte i t'activarem l'indicador de funcionalitat. Tingues en compte les bones pràctiques següents abans de desplegar EKM als teus projectes de producció existents.
Prova primer totes les funcions de l'API que fas servir en producció al teu projecte d'API de prova amb EKM.
Fes un desplegament gradual en lloc d'activar EKM a tots els projectes d'API de producció alhora.
Exemple de sol·licitud
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"
}'Llista tots els projectes de la teva organització
És el mateix punt final que ja existeix, però amb external_key_id afegit a la resposta de l'API.
Exemple de sol·licitud
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"Exemple de resposta
{
"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
}