Résumé
Accès
Les endpoints EKM sont accessibles dans l' API Management via une Admin API Key. https://platform.openai.com/settings/organization/admin-keys (n'utilisez pas une clé API normale). Les clés API Admin sont disponibles pour les propriétaires de l'organisation.
Utilisez
api.external_keys.writepour créer ou supprimer des clés externes etapi.external_keys.readpour répertorier ou valider des clés externes. Une seule clé a besoin des deux portées uniquement si elle doit effectuer des opérations de lecture et d'écriture.Nous devons actuellement activer via un feature flag l'accès de votre organisation à ces endpoints. Vous savez que vous avez le drapeau de fonctionnalité si vous voyez **external_key_id **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 via un nouvel endpoint 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 passant un external_key_id dans le corps de la requête Create Project existante https://api.openai.com/v1/organization/projects. endpoint
Restrictions
Vous devez d'abord tester EKM sur un nouveau projet via l'API de gestion.
Nous vous recommandons de créer de nouveaux projets pour vos charges de travail EKM. Néanmoins, si vous souhaitez utiliser EKM sur un projet existant, nous pouvons vous ajouter au drapeau de fonctionnalité. Veuillez prendre connaissance des bonnes pratiques suivantes avant de déployer EKM dans vos projets de production existants.
Testez d'abord toutes les fonctionnalités de l'API que vous utilisez en production dans votre projet d'API EKM de test.
Appliquez un déploiement progressif plutôt que de renseigner EKM sur tous les projets d'API de production en une seule fois.
Endpoint au niveau de l'organisation
Enregistrer une clé externe pour votre organisation
AWS
Exemple de requête
type : chaîne - toujours « aws »
name : string - Un nom convivial pour votre configuration
role_arn : chaîne - L'ARN du rôle qu'OpenAI assumera dans votre cloud
kms_arn : chaîne de caractères - ARN du système de gestion des clés pour la clé principale que vous gérez
external_id : chaîne de caractères - l'identifiant de votre organisation ou de votre 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>
}'Réponse 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
Exemple de requête
type : string - toujours « gcp »
name : chaîne de caractères - Un nom convivial pour votre configuration
workload_identity_project_number : chaîne - Le numéro de projet GCP à 12 chiffres où vous avez enregistré l'identité de charge de travail d'OpenAI
workload_identity_pool_id : chaîne - Le pool qui contient le fournisseur d'identité de charge de travail que vous avez enregistré pour OpenAI
workload_identity_provider_id : chaîne - 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 via votre GCP STS
kms_project_id : string - Le nom du projet GCP où se trouve votre KMS
kms_key_ring_name : chaîne de caractères - le trousseau de clés du système de gestion des clés contenant la clé maître que vous gérez
kms_key_name : chaîne de caractères - Nom de la clé maître 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 se trouve dans un projet GCP différent de celui où vous avez enregistré l'identité de charge de travail d'OpenAI, assurez-vous que le projet contenant l'identité de charge de travail 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"
}'Réponse 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
Exemple de requête
type : chaîne de caractères - toujours « azure »,
name : chaîne de caractères - Un nom convivial pour votre configuration
tenant_id : chaîne de caractères - UUID de votre locataire Azure
vault_uri : chaîne de caractères - URI du coffre Azure contenant la clé principale que vous gérez
key_name : string - Nom de la clé principale Azure Key Vault que vous gérez.
Il doit avoir la forme <org-xxx>--<any_name>
où org-xxx est votre identifiant d'organisation OpenAI, que vous pouvez trouver à l'adresse suivante : 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" : "Configuration EKM Azure",
"tenant_id" : "<UUID>",
"vault_uri" : "https://<VAULT_NAME>.vault.azure.net/",
"key_name" : "org-xxx--some-key"
}'Réponse 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"
}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 actif. S'il est associé à un projet actif, vous devez d'abord archiver ce projet.
Exemple de requête
curl -X DELETE \
-H "Authorization : Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"Réponse 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>"
}Obtenez 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"Réponse 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"
}Valider une clé externe
Vous pouvez utiliser cet endpoint pour vérifier plusieurs éléments
Votre configuration cloud externe reste valide avec OpenAI après avoir apporté des modifications (vous recevrez une réponse de confirmation).
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 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"Réponse d'exemple
{
"status" : "success"
}Ou, une erreur s'est produite du fournisseur de cloud.
Points de terminaison au niveau du projet
Créez un nouveau projet avec un identifiant de clé externe
Il s'agit du même endpoint que celui existant pour la 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" : "Un projet",
"external_key_id" : "extkey_xxxx"
}'Réponse d'exemple
{
"object" : "project",
"id" : "proj_xxxxx",
"title" : "Un projet",
"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,
}[Limité] 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 vous recommandons de créer de nouveaux projets API pour vos charges de travail EKM. Si vous souhaitez activer EKM sur tous vos projets API existants, contactez votre directeur de compte et nous vous ajouterons au drapeau de fonctionnalité. Veuillez prendre connaissance des bonnes pratiques suivantes avant de déployer EKM dans vos projets de production existants.
Testez d'abord toutes les fonctionnalités de l'API que vous utilisez en production dans votre projet d'API EKM de test.
Appliquez un déploiement progressif plutôt que de renseigner EKM sur tous les projets d'API de production en une seule 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"
}'Répertoriez tous les projets de votre organisation
C'est le même endpoint que l'endpoint existant, mais 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"Réponse d'exemple
{
"object" : "list",
"data" : [
{
"object" : "organization.project",
"id" : "proj_xxxx",
"name" : "Nom du projet",
"external_key_id" : "extkey_xxxx",
"created_at" : 1717798982,
"archived_at" : null,
"status" : "active"
}
],
"first_id" : "proj_xxxx",
"last_id" : "proj_xxxx",
"has_more" : true
}