Résumé
Accès
Les endpoints EKM sont accessibles dans l’API de gestion au moyen d’une clé d’API d’administration. https://platform.openai.com/settings/organization/admin-keys (n’utilisez pas une clé d’API normale). Les clés d’API d’administration sont offertes aux propriétaires de l’organisation.
Utilisez
api.external_keys.writepour créer ou supprimer des clés externes, etapi.external_keys.readpour les lister ou les valider. Une même clé n’a besoin des deux portées que si elle doit effectuer des opérations de lecture et d’écriture.Nous devons actuellement activer ces endpoints pour votre organisation au moyen d’un indicateur de fonctionnalité. Vous saurez que l’indicateur de fonctionnalité est activé si external_key_id est renvoyé par l’endpoint List Projects existant : https://api.openai.com/v1/organization/projects
Utilisation
Votre configuration EKM est enregistrée au niveau de l’organisation au moyen du nouvel endpoint https://api.openai.com/v1/organization/external_keys
L’enregistrement de votre configuration EKM renvoie un external_key_id au format extkey_xxxx
Les configurations EKM sont activées au niveau du projet en transmettant un external_key_id dans le corps de l’endpoint Create Project existant https://api.openai.com/v1/organization/projects
Restrictions
Vous devez d’abord tester EKM sur un nouveau projet au moyen de l’API de gestion.
Nous recommandons de créer de nouveaux projets pour vos charges de travail EKM. Toutefois, si vous souhaitez utiliser EKM sur un projet existant, nous pouvons vous ajouter à l’indicateur de fonctionnalité. Veuillez prendre note des pratiques exemplaires suivantes avant de déployer EKM dans vos projets de production existants.
Testez d’abord toutes les fonctionnalités d’API que vous utilisez en production dans votre projet d’API EKM de test
Effectuez un déploiement graduel au lieu d’ajouter EKM à tous les projets d’API de production en même temps
endpoints au niveau de l’organisation
Enregistrer une clé externe dans votre organisation
AWS
Exemple de requête
type : string - toujours « aws »
name : string - nom descriptif de votre configuration
role_arn : string - l’ARN de rôle qu’OpenAI assumera dans votre environnement infonuagique
kms_arn : string - l’ARN du système de gestion des clés pour la clé principale que vous gérez
external_id : string - l’ID de votre organisation ou de votre projet 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 réponse
{
"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 requête
type : string - toujours « gcp »,
name : string - nom descriptif de votre configuration
workload_identity_project_number : string - le numéro à 12 chiffres du projet GCP où vous avez enregistré la Workload Identity d’OpenAI
workload_identity_pool_id : string - le pool contenant le fournisseur Workload Identity que vous avez enregistré pour OpenAI
workload_identity_provider_id : string - le fournisseur Workload Identity que vous avez enregistré pour OpenAI
audience: string - l’audience qu’OpenAI doit transmettre dans le token lorsque nous assumons un rôle par l’intermédiaire de votre STS GCP
kms_project_id: string - le nom du projet GCP où se trouve votre KMS
kms_key_ring_name : string - le trousseau de clés du système de gestion des clés contenant la clé principale que vous gérez
kms_key_name : string - le nom de la clé principale du système de gestion des clés
kms_key_location : string - la région où se trouve votre clé principale du système de gestion des clés
Si votre KMS se trouve dans un projet GCP différent de celui où vous avez enregistré la Workload Identity d’OpenAI, assurez-vous que le projet contenant la Workload Identity d’OpenAI a au moins KMS activé en accédant à 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 réponse
{
"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 requête
type : string - toujours « azure »,
name : string - nom descriptif de votre configuration
tenant_id : string - l’UUID de votre locataire Azure
vault_uri : string - l’URI du coffre Azure contenant la clé principale que vous gérez
key_name : string - le nom de la clé principale Azure Key Vault que vous gérez.
Elle doit avoir la forme <org-xxx>--<any_name>
où org-xxx est l’ID de votre organisation OpenAI, que vous pouvez trouver à l’adresse 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 réponse
{
"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"
}Supprimer une clé externe enregistrée dans votre organisation
Remarque : Vous ne pouvez supprimer une clé externe que si elle n’est associée à aucun projet d’API actif ni espace de travail. Si elle est associée à un projet d’API actif, archivez d’abord ce projet. Si elle est associée à un espace de travail, la clé ne peut pas être supprimée.
Exemple de requête
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"Exemple de réponse
{
"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 clés externes enregistrées dans votre organisation
Exemple de requête
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"Exemple de réponse
{
"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"
}Valider une clé externe
Vous pouvez utiliser cet endpoint pour vérifier plusieurs éléments
Votre configuration infonuagique externe demeure valide auprès d’OpenAI après vos modifications (vous verrez une réponse de réussite)
La révocation de votre clé est effectuée correctement, est en cours de traitement par OpenAI et prendra effet après l’expiration des TTL de cache de 1 heure (vous verrez une réponse d’erreur)
Exemple de requête
curl -X POST -H "Authorization: Bearer $TOKEN"
"https://api.openai.com/v1/organization/external_keys/extkey_xxx/validate"Exemple de réponse
{
"status": "success"
}Ou une erreur renvoyée par le fournisseur infonuagique.
endpoints au niveau du projet
Créer un nouveau projet avec un ID de clé externe
Il s’agit du même endpoint Create Project existant, avec l’ajout du paramètre external_key_id dans la requête et la réponse.
Exemple de requête
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 réponse
{
"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,
}[Restreint] Mettre à jour un projet existant avec un ID de clé externe
Il s’agit du même endpoint Update Project existant, avec l’ajout du paramètre external_key_id dans la requête et la réponse.
Nous recommandons de créer de nouveaux projets d’API pour vos charges de travail EKM. Si vous souhaitez utiliser EKM sur tous vos projets d’API existants, demandez-le à votre directeur de compte et nous vous ajouterons à l’indicateur de fonctionnalité. Veuillez prendre note des pratiques exemplaires suivantes avant de déployer EKM dans vos projets de production existants.
Testez d’abord toutes les fonctionnalités d’API que vous utilisez en production dans votre projet d’API EKM de test
Effectuez un déploiement graduel au lieu d’ajouter EKM à tous les projets d’API de production en même temps
Exemple de requête
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"
}'Lister tous les projets de votre organisation
Il s’agit du même endpoint existant, avec l’ajout de external_key_id dans la réponse de l’API
Exemple de requête
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"Exemple de réponse
{
"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
}