Shrnutí
Přístup
Endpointy EKM jsou v Management API přístupné pomocí Admin API Key. https://platform.openai.com/settings/organization/admin-keys (nepoužívejte běžný klíč API). Klíče Admin API jsou dostupné vlastníkům organizace.
Pomocí
api.external_keys.writevytvářejte nebo odstraňujte externí klíče a pomocíapi.external_keys.readexterní klíče vypisujte nebo ověřujte. Jeden klíč potřebuje oba rozsahy pouze tehdy, pokud musí provádět operace čtení i zápisu.Aktuálně vám musíme pro tyto endpointy zapnout v organizaci příznak funkce. Že máte příznak funkce zapnutý, poznáte podle toho, že stávající endpoint List Projects vrací external_key_id : https://api.openai.com/v1/organization/projects
Použití
Vaše konfigurace EKM je registrována na úrovni organizace pomocí nového endpointu https://api.openai.com/v1/organization/external_keys
Registrace konfigurace EKM vrátí external_key_id ve tvaru extkey_xxxx
Konfigurace EKM se aktivují na úrovni projektu předáním external_key_id v těle stávajícího endpointu Create Project https://api.openai.com/v1/organization/projects
Omezení
Nejprve musíte EKM otestovat v novém projektu pomocí Management API.
Doporučujeme pro vaše úlohy EKM zakládat nové projekty. Pokud však chcete EKM v existujícím projektu, můžeme vám zapnout příznak funkce. Než EKM nasadíte do stávajících produkčních projektů, vezměte prosím na vědomí následující osvědčené postupy.
Nejprve ve svém testovacím projektu EKM API otestujte všechny funkce API, které používáte v produkci
Použijte postupné nasazení místo toho, abyste EKM zapnuli ve všech produkčních projektech API najednou
Endpointy na úrovni organizace
Registrace externího klíče ve vaší organizaci
AWS
Ukázkový požadavek
type: string - vždy „aws“
name: string - popisný název konfigurace
role_arn: string - ARN role, kterou OpenAI převezme ve vašem cloudu
kms_arn: string - ARN systému správy klíčů pro hlavní klíč, který spravujete
external_id: string - ID vaší organizace nebo projektu 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>
}'Ukázková odpověď
{
"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
Ukázkový požadavek
type: string - vždy „gcp“,
name: string - popisný název konfigurace
workload_identity_project_number: string - 12místné číslo projektu GCP, ve kterém jste zaregistrovali Workload Identity OpenAI
workload_identity_pool_id: string - fond obsahující poskytovatele Workload Identity, kterého jste zaregistrovali pro OpenAI
workload_identity_provider_id: string - poskytovatel Workload Identity, kterého jste zaregistrovali pro OpenAI
audience: string - publikum, které má OpenAI předat v tokenu při přebírání role přes váš GCP STS
kms_project_id: string - název projektu GCP, ve kterém se nachází váš KMS
kms_key_ring_name: string - klíčenka systému správy klíčů obsahující hlavní klíč, který spravujete
kms_key_name: string - název hlavního klíče systému správy klíčů
kms_key_location: string - oblast, ve které se nachází hlavní klíč vašeho systému správy klíčů
Pokud je váš KMS v jiném projektu GCP než ten, ve kterém jste zaregistrovali Workload Identity OpenAI, ujistěte se, že projekt obsahující Workload Identity OpenAI má alespoň povolený KMS. Přejděte na 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"
}'Ukázková odpověď
{
"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
Ukázkový požadavek
type: string - vždy „azure“,
name: string - popisný název konfigurace
tenant_id: string - UUID vašeho tenantu Azure
vault_uri: string - URI trezoru Azure obsahujícího hlavní klíč, který spravujete
key_name: string - název hlavního klíče Azure Key Vault, který spravujete.
Musí mít tvar <org-xxx>--<any_name>
kde org-xxx je ID vaší organizace OpenAI, které najdete na 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"
}'Ukázková odpověď
{
"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"
}Odstranění externího klíče zaregistrovaného ve vaší organizaci
Poznámka: Externí klíč můžete odstranit pouze tehdy, pokud není přidružen k žádným aktivním projektům API ani pracovnímu prostoru. Pokud je přidružen k aktivnímu projektu API, nejprve tento projekt archivujte. Pokud je přidružen k pracovnímu prostoru, klíč nelze odstranit.
Ukázkový požadavek
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"Ukázková odpověď
{
"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>"
}Získání externích klíčů zaregistrovaných ve vaší organizaci
Ukázkový požadavek
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"Ukázková odpověď
{
"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"
}Ověření externího klíče
Tento endpoint můžete použít ke kontrole několika věcí
Vaše externí cloudová konfigurace je po provedených změnách pro OpenAI stále platná (uvidíte úspěšnou odpověď)
Odvolání klíče proběhlo správně, OpenAI ho zpracovává a projeví se po vypršení 1hodinových TTL mezipamětí (uvidíte chybovou odpověď)
Ukázkový požadavek
curl -X POST -H "Authorization: Bearer $TOKEN"
"https://api.openai.com/v1/organization/external_keys/extkey_xxx/validate"Ukázková odpověď
{
"status": "success"
}Nebo se zobrazí chyba od poskytovatele cloudu.
Endpointy na úrovni projektu
Vytvoření nového projektu s ID externího klíče
Jde o stejný endpoint jako stávající Create Project, jen v požadavku a odpovědi přibývá parametr external_key_id.
Ukázkový požadavek
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"
}'Ukázková odpověď
{
"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,
}[Omezeno] Aktualizace existujícího projektu pomocí ID externího klíče
Jde o stejný endpoint jako stávající Update Project, jen v požadavku a odpovědi přibývá parametr external_key_id.
Doporučujeme pro vaše úlohy EKM zakládat nové projekty API. Pokud chcete EKM ve všech stávajících projektech API, obraťte se na svého správce účtu a my vám zapneme příznak funkce. Než EKM nasadíte do stávajících produkčních projektů, vezměte prosím na vědomí následující osvědčené postupy.
Nejprve ve svém testovacím projektu EKM API otestujte všechny funkce API, které používáte v produkci
Použijte postupné nasazení místo toho, abyste EKM zapnuli ve všech produkčních projektech API najednou
Ukázkový požadavek
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"
}'Vypsání všech projektů ve vaší organizaci
Jde o stejný endpoint jako stávající, jen odpověď API navíc obsahuje external_key_id
Ukázkový požadavek
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"Ukázková odpověď
{
"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
}