Résumé
Accès
Les points de terminaison EKM sont accessibles dans l’API de gestion au moyen d’une clé API d’administration. https://platform.openai.com/settings/organization/admin-keys (n’utilisez pas de clé API ordinaire). Les clés API d’administration sont accessibles aux propriétaires d’organisation.
Utilisez
api.external_keys.writepour créer ou supprimer des clés externes, etapi.external_keys.readpour lister ou valider des clés externes. 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 un indicateur de fonctionnalité pour que votre organisation ait accès à ces points de terminaison. L’indicateur de fonctionnalité est activé si le point de terminaison existant de liste des projets renvoie external_key_id : https://api.openai.com/v1/organization/projects.
Utilisation
Votre configuration EKM est enregistrée au niveau de l’organisation au moyen d’un nouveau point de terminaison https://api.openai.com/v1/organization/external_keys.
L’enregistrement de votre configuration EKM renvoie un external_key_id sous la forme extkey_xxxx.
Les configurations EKM sont activées au niveau du projet en transmettant un external_key_id dans le corps de la requête au point de terminaison existant de création de projet 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 activer l’indicateur de fonctionnalité pour vous. Veuillez prendre connaissance des pratiques exemplaires suivantes avant de déployer EKM dans vos projets de production existants.
Testez d’abord toutes les fonctionnalités API que vous utilisez en production dans votre projet API de test EKM.
Procédez à un déploiement progressif plutôt que d’activer EKM sur tous les projets API de production à la fois.
endpoints au niveau de l’organisation
Enregistrer une clé externe dans votre organisation
AWS
Exemple de requête :
type : chaîne - toujours « aws »
name : chaîne - Un nom convivial pour votre configuration
role_arn : chaîne - L’ARN du rôle qu’OpenAI assumera dans votre environnement infonuagique
kms_arn : chaîne - L’ARN du système de gestion des clés pour la clé principale que vous gérez
external_id : chaîne - Votre identifiant d’organisation ou de projet 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 : chaîne - toujours « gcp »,
name : chaîne - Un nom convivial pour votre configuration
workload_identity_project_number : chaîne - Le numéro du projet GCP dans lequel vous avez enregistré l’identité de charge de travail d’OpenAI
workload_identity_pool_id : chaîne - Le pool contenant le fournisseur Workload Identity que vous avez enregistré pour OpenAI
workload_identity_provider_id : chaîne - Le fournisseur Workload Identity que vous avez enregistré pour OpenAI
audience: chaîne - L’audience qu’OpenAI doit transmettre dans le jeton lorsque nous assumons un rôle par l’intermédiaire de votre STS GCP
kms_project_id: chaîne - Le nom du projet GCP qui héberge votre KMS
kms_key_ring_name : chaîne - Le trousseau du système de gestion des clés contenant la clé principale que vous gérez
kms_key_name : chaîne - Le nom de la clé principale du système de gestion des clés
kms_key_location : chaîne - La région où se trouve la clé principale de votre système de gestion des clés
Si votre KMS est hébergé dans un projet GCP différent de celui où vous avez enregistré l’identité Workload Identity d’OpenAI, assurez-vous que KMS est au moins activé dans le projet contenant l’identité Workload Identity d’OpenAI 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 : chaîne - toujours « azure »,
name : chaîne - Un nom convivial pour votre configuration
tenant_id : chaîne - L’UUID de votre locataire Azure
vault_uri : chaîne - L’URI du coffre Azure contenant la clé principale que vous gérez
key_name : chaîne - Le nom de la clé principale Azure Key Vault que vous gérez.
Il doit être de la forme <org-xxx>--<any_name>
où org-xxx est votre identifiant d’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 API actif ni à aucun espace de travail. Si elle est associée à un projet 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 ce point de terminaison pour vérifier plusieurs éléments :
Votre configuration infonuagique externe demeure valide auprès d’OpenAI après vos modifications (vous recevrez une réponse de réussite).
La révocation de votre clé a été effectuée correctement, est en cours de traitement par OpenAI et prendra effet après l’expiration des durées de vie (TTL) du cache d’une heure (vous recevrez 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 identifiant de clé externe
Il s’agit du même point de terminaison existant de création de projet, 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": "organization.project",
"id": "proj_xxxxx",
"name": "Some Project",
"external_key_id": "extkey_xxxx",
"created_at": 1740012721,
"archived_at": null,
"status": "active"
}[Accès restreint] Mettre à jour un projet existant avec un identifiant de clé externe
Il s’agit du même point de terminaison existant de mise à jour de projet, 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 API pour vos charges de travail EKM. Si vous souhaitez utiliser EKM sur tous vos projets API existants, demandez-le à votre responsable de compte et nous activerons l’indicateur de fonctionnalité pour vous. Veuillez prendre connaissance des pratiques exemplaires suivantes avant de déployer EKM dans vos projets de production existants.
Testez d’abord toutes les fonctionnalités API que vous utilisez en production dans votre projet API de test EKM.
Procédez à un déploiement progressif plutôt que d’activer EKM sur tous les projets API de production à la fois.
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 point de terminaison 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
}