Резиме
Пристап
EKM endpoints се достапни во API за управување преку администраторски API-клуч. https://platform.openai.com/settings/organization/admin-keys (не користете обичен API-клуч). Администраторските API-клучеви им се достапни на сопствениците на организацијата.
Користете
api.external_keys.writeза создавање или бришење надворешни клучеви, аapi.external_keys.readза наведување или проверка на надворешни клучеви. Еден клуч има потреба од двата опсега само ако мора да извршува и операции за читање и операции за запишување.Во моментов треба да вклучиме feature flag за вашата организација за овие endpoints. Ќе знаете дека го имате feature flag ако видите external_key_id вратен од постојниот List Projects endpoint: https://api.openai.com/v1/organization/projects
Употреба
Вашата EKM-конфигурација се регистрира на ниво на организација преку нов endpoint https://api.openai.com/v1/organization/external_keys
Регистрирањето на вашата EKM-конфигурација враќа external_key_id во форма extkey_xxxx
EKM-конфигурациите се активираат на ниво на проект со проследување external_key_id во телото на постојниот Create Project endpoint https://api.openai.com/v1/organization/projects
Ограничувања
Прво мора да го тестирате EKM на нов проект преку API за управување.
Препорачуваме да подигнете нови проекти за вашите EKM-работни оптоварувања. Меѓутоа, ако сакате EKM на постоен проект, можеме да ве додадеме во feature flag. Имајте ги предвид следниве најдобри практики пред да го воведете EKM во вашите постојни продукциски проекти.
Прво тестирајте ги сите API-функции што ги користите во продукција во вашиот тестен EKM API-проект
Применете постепено воведување наместо да го додавате EKM на сите продукциски API-проекти одеднаш
Endpoints на ниво на организација
Регистрирајте надворешен клуч во вашата организација
AWS
Пример барање
type: string - секогаш „aws“
name: string - Пријателско име за вашата конфигурација
role_arn: string - ARN на улогата што OpenAI ќе ја преземе во вашиот облак
kms_arn: string - ARN на системот за управување со клучеви за главниот клуч со кој управувате
external_id: string - ID на вашата организација или ID на 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>
}'Пример одговор
{
"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
Пример барање
type: string - секогаш „gcp“,
name: string - Пријателско име за вашата конфигурација
workload_identity_project_number: string - 12-цифрениот број на GCP-проектот каде што го регистриравте Workload Identity на OpenAI
workload_identity_pool_id: string - Pool што го содржи давателот на Workload Identity што го регистриравте за OpenAI
workload_identity_provider_id: string - Давателот на Workload Identity што го регистриравте за OpenAI
audience: string - Вредноста audience што OpenAI треба да ја проследи во токенот кога преземаме улога преку вашиот GCP STS
kms_project_id: string - Името на GCP-проектот каде што се наоѓа вашиот KMS
kms_key_ring_name: string - Прстенот на клучеви на системот за управување со клучеви што го содржи главниот клуч со кој управувате
kms_key_name: string - Името на главниот клуч на системот за управување со клучеви
kms_key_location: string - Регионот каде што се наоѓа вашиот главен клуч на системот за управување со клучеви
Ако вашиот KMS е во друг GCP-проект од оној каде што го регистриравте Workload Identity на OpenAI, проверете дали проектот што го содржи Workload Identity на OpenAI има барем овозможен KMS преку 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"
}'Пример одговор
{
"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
Пример барање
type: string - секогаш „azure“,
name: string - Пријателско име за вашата конфигурација
tenant_id: string - UUID на вашиот Azure tenant
vault_uri: string - URI на Azure-сефот што го содржи главниот клуч со кој управувате
key_name: string - Името на главниот клуч во Azure Key Vault со кој управувате.
Мора да ја има формата <org-xxx>--<any_name>
каде што org-xxx е ID на вашата OpenAI организација, што можете да го најдете на 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"
}'Пример одговор
{
"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"
}Избришете надворешен клуч регистриран во вашата организација
Напомена: Надворешен клуч можете да избришете само ако не е поврзан со ниту еден активен API-проект или работен простор. Ако е поврзан со активен API-проект, прво архивирајте го тој проект. Ако е поврзан со работен простор, клучот не може да се избрише.
Пример барање
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"Пример одговор
{
"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>"
}Добијте ги надворешните клучеви регистрирани во вашата организација
Пример барање
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"Пример одговор
{
"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"
}Проверете надворешен клуч
Овој endpoint можете да го користите за проверка на неколку работи
Вашата надворешна cloud-конфигурација останува валидна со OpenAI откако ќе направите промени (ќе видите успешен одговор)
Поништувањето на вашиот клуч е извршено правилно, OpenAI го обработува и ќе стапи на сила откако ќе истечат 1-часовните TTL-ови на кешот (ќе видите одговор со грешка)
Пример барање
curl -X POST -H "Authorization: Bearer $TOKEN"
"https://api.openai.com/v1/organization/external_keys/extkey_xxx/validate"Пример одговор
{
"status": "success"
}Или, прикажана е грешка од давателот на облак.
Endpoints на ниво на проект
Создајте нов проект со ID на надворешен клуч
Ова е исто како постојниот Create Project endpoint, со додаден параметар external_key_id во барањето и одговорот.
Пример барање
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"
}'Пример одговор
{
"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,
}[Ограничено] Ажурирајте постоен проект со ID на надворешен клуч
Ова е исто како постојниот Update Project endpoint, со додаден параметар external_key_id во барањето и одговорот.
Препорачуваме да подигнете нови API-проекти за вашите EKM-работни оптоварувања. Ако сакате EKM на сите ваши постојни API-проекти, побарајте од директорот на вашата сметка и ќе ве додадеме во feature flag. Имајте ги предвид следниве најдобри практики пред да го воведете EKM во вашите постојни продукциски проекти.
Прво тестирајте ги сите API-функции што ги користите во продукција во вашиот тестен EKM API-проект
Применете постепено воведување наместо да го додавате EKM на сите продукциски API-проекти одеднаш
Пример барање
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"
}'Наведете ги сите проекти во вашата организација
Ова е исто како постојниот endpoint, но со додаден external_key_id во API-одговорот
Пример барање
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"Пример одговор
{
"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
}