Sammendrag
Tilgang
EKM-endepunkter er tilgjengelige i Management API via en Admin API Key. https://platform.openai.com/settings/organization/admin-keys (ikke bruk en vanlig API-nøkkel). Admin API-nøkler er tilgjengelige for organization owners.
Bruk
api.external_keys.writefor å opprette eller slette eksterne nøkler, ogapi.external_keys.readfor å liste opp eller validere eksterne nøkler. En enkelt nøkkel trenger begge scopes bare hvis den må utføre både lese- og skriveoperasjoner.For øyeblikket må vi aktivere et feature flag for organisasjonen din for disse endepunktene. Du vet at du har feature flag-et hvis du ser **external_key_id **returnert fra det eksisterende List Projects-endepunktet: https://api.openai.com/v1/organization/projects
Bruk
EKM-konfigurasjonen din blir registrert på organisasjonsnivå via et nytt endepunkt https://api.openai.com/v1/organization/external_keys
Registrering av EKM-konfigurasjonen din returnerer en external_key_id på formen extkey_xxxx
EKM-konfigurasjoner blir aktivert på prosjektnivå ved å sende inn en external_key_id i brødteksten til det eksisterende Create Project-https://api.openai.com/v1/organization/projects-endepunktet
Begrensninger
Du må først teste EKM på et nytt prosjekt via Management API.
Vi anbefaler å opprette nye prosjekter for EKM-arbeidslastene dine. Hvis du imidlertid vil ha EKM på et eksisterende prosjekt, kan vi legge deg til i feature flag-et. Merk følgende anbefalte fremgangsmåter før du ruller ut EKM til eksisterende produksjonsprosjekter.
Test alle API-funksjoner som du bruker i produksjon, i test-EKM-API-prosjektet ditt først
Bruk en gradvis utrulling i stedet for å fylle inn EKM på alle produksjons-API-prosjekter samtidig
Endepunkter på organisasjonsnivå
Registrer en ekstern nøkkel i organisasjonen din
AWS
Eksempelforespørsel
type: string - alltid “aws”
name: string - Et lett gjenkjennelig navn for konfigurasjonen din
role_arn: string - Rolle-ARN-en som OpenAI vil overta i skyen din
kms_arn: string - ARN-en for Key Management System for hovednøkkelen du administrerer
external_id: string - Organisasjons-ID-en eller API-prosjekt-ID-en din
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>
}'Eksempelsvar
{
"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
Eksempelforespørsel
type: string - alltid "gcp",
name: string - Et lett gjenkjennelig navn for konfigurasjonen din
workload_identity_project_number: string - Det 12-sifrede GCP-prosjektnummeret der du registrerte OpenAIs arbeidslastidentitet
workload_identity_pool_id: string - Poolen som inneholder Workload Identity-leverandøren som du registrerte for OpenAI
workload_identity_provider_id: string - Workload Identity-leverandøren som du registrerte for OpenAI
audience: string - Målgruppen som OpenAI skal sende i tokenet når vi overtar en rolle gjennom GCP STS
kms_project_id: string - Navnet på GCP-prosjektet der KMS-en din ligger
kms_key_ring_name: string - Nøkkelringen i Key Management System som inneholder hovednøkkelen du administrerer
kms_key_name: string - Navnet på hovednøkkelen i Key Management System
kms_key_location: string - Regionen der hovednøkkelen i Key Management System befinner seg
Hvis KMS-en din ligger i et annet GCP-prosjekt enn det der du registrerte OpenAIs Workload Identity, må du sørge for at prosjektet som inneholder OpenAIs Workload Identity, minst har KMS aktivert ved å gå til 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"
}'Eksempelsvar
{
"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
Eksempelforespørsel
type: string - alltid "azure",
name: string - Et lett gjenkjennelig navn for konfigurasjonen din
tenant_id: string - Azure-tenantens UUID
vault_uri: string - URI-en til Azure-hvelvet som inneholder hovednøkkelen du administrerer
key_name: string - Navnet på Azure Key Vault-hovednøkkelen som du administrerer.
Det må ha formen <org-xxx>--<any_name>
der org-xxx er OpenAI-organisasjons-ID-en din, som du finner på 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"
}'Eksempelsvar
{
"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"
}Slett en ekstern nøkkel som er registrert i organisasjonen din
Merk: Du kan bare slette en ekstern nøkkel hvis den ikke er knyttet til noen aktive prosjekter. Hvis den er knyttet til et aktivt prosjekt, må du først arkivere prosjektet.
Eksempelforespørsel
curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"Eksempelsvar
{
"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>"
}Hent de eksterne nøklene som er registrert i organisasjonen din
Eksempelforespørsel
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"Eksempelsvar
{
"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 en ekstern nøkkel
Du kan bruke dette endepunktet til å sjekke flere ting
At den eksterne skykonfigurasjonen din fortsatt er gyldig med OpenAI etter at du har gjort endringer (du vil se et svar om suksess)
At tilbakekallingen av nøkkelen er gjort riktig, behandles av OpenAI og trer i kraft etter at cache-TTL-ene på 1 time har utløpt (du vil se et feilsvar)
Eksempelforespørsel
curl -X POST -H "Authorization: Bearer $TOKEN"
"https://api.openai.com/v1/organization/external_keys/extkey_xxx/validate"Eksempelsvar
{
"status": "success"
}Eller en feil som kommer fra skyleverandøren.
Endepunkter på prosjektnivå
Opprett et nytt prosjekt med en ekstern nøkkel-ID
Dette er det samme som det eksisterende Create Project-endepunktet, med tillegg av parameteren external_key_id i forespørselen og svaret.
Eksempelforespørsel
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects" \
-d '{
"name": "Et prosjekt",
"external_key_id": "extkey_xxxx"
}'Eksempelsvar
{
"object": "project",
"id": "proj_xxxxx",
"title": "Et prosjekt",
"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,
}[Begrenset] Oppdater et eksisterende prosjekt med en ekstern nøkkel-ID
Dette er det samme som det eksisterende Update Project-endepunktet, med tillegg av parameteren external_key_id i forespørselen og svaret.
Vi anbefaler å opprette nye API-prosjekter for EKM-arbeidslastene dine. Hvis du vil ha EKM på alle de eksisterende API-prosjektene dine, kan du spørre kontodirektøren din, så legger vi deg til i feature flag-et. Merk følgende anbefalte fremgangsmåter før du ruller ut EKM til eksisterende produksjonsprosjekter.
Test alle API-funksjoner som du bruker i produksjon, i test-EKM-API-prosjektet ditt først
Bruk en gradvis utrulling i stedet for å fylle inn EKM på alle produksjons-API-prosjekter samtidig
Eksempelforespørsel
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"
}'List opp alle prosjektene i organisasjonen din
Dette er det samme som det eksisterende endepunktet, men med tillegg av external_key_id i API-svaret
Eksempelforespørsel
curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"Eksempelsvar
{
"object": "list",
"data": [
{
"object": "organization.project",
"id": "proj_xxxx",
"name": "Prosjektnavn",
"external_key_id": "extkey_xxxx",
"created_at": 1717798982,
"archived_at": null,
"status": "active"
}
],
"first_id": "proj_xxxx",
"last_id": "proj_xxxx",
"has_more": true
}