OpenAI

EKM (Chaves Externas) na API de Gerenciamento

Saiba como gerenciar chaves externas para EKM usando a API de Gerenciamento.

Atualizado: 5 hours ago

Resumo

Acesso

  • Os endpoints do EKM podem ser acessados pela API de Gerenciamento usando uma chave de API administrativa. Você pode criar essa chave em https://platform.openai.com/settings/organization/admin-keys. Não use uma chave de API comum. As chaves de API administrativas estão disponíveis apenas para proprietários da organização.

  • Use api.external_keys.write para criar ou excluir chaves externas e api.external_keys.read para listar ou validar chaves externas. Uma única chave só precisa de ambos os escopos se tiver que executar operações de leitura e gravação.

  • No momento, precisamos habilitar um recurso na sua organização para que você possa usar esses endpoints. Para confirmar se o recurso está ativado, verifique se o campo external_key_id aparece na resposta do endpoint existente List Projects: https://api.openai.com/v1/organization/projects.

Uso

Restrições

  • Primeiro, você deve testar o EKM em um novo projeto por meio da API de Gerenciamento.

  • Recomendamos a criação de novos projetos para suas cargas de trabalho do EKM. No entanto, se você deseja o EKM em um projeto existente, podemos adicioná-lo à lista de recursos prioritários. Observe as seguintes boas práticas antes de implementar o EKM em seus projetos de produção existentes.

    • Teste primeiro todos os recursos da API utilizados em produção no seu projeto de API EKM de teste.

    • Implemente a solução gradualmente, em vez de ativar o EKM em todos os projetos de API de produção de uma só vez.

Endpoint no nível da organização

Registre uma chave externa em sua organização.

AWS

Exemplo de solicitação:

  • tipo: string - Sempre "aws"

  • nome: string - Um nome amigável para sua configuração

  • role_arn: string - O ARN da função que a OpenAI assumirá em sua nuvem.

  • kms_arn: string - O ARN do Sistema de Gerenciamento de Chaves para a chave mestra que você gerencia.

  • external_id: string - O ID da sua organização ou o ID do seu projeto de 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>"
}'

Exemplo de resposta:

{
"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

Exemplo de solicitação:

  • tipo: string - Sempre "gcp",

  • nome: string - Um nome amigável para sua configuração

  • workload_identity_project_number: string - Número do projeto do GCP, em formato numérico, no qual você registrou a identidade de carga de trabalho da OpenAI.

  • workload_identity_pool_id: string - O pool que contém o provedor de identidade de carga de trabalho que você registrou para a OpenAI.

  • workload_identity_provider_id: string - O provedor de identidade de carga de trabalho que você regisOpenAItrou para a OpenAI

  • público-alvo: string - O público-alvo que a OpenAI deve passar no token quando assumirmos uma função por meio do seu GCP STS.

  • kms_project_id: string - O nome do projeto GCP onde seu KMS está hospedado

  • kms_key_ring_name: string - O chaveiro do Sistema de Gerenciamento de Chaves que contém a chave mestra que você gerencia.

  • kms_key_name: string - O nome da chave mestra do Sistema de Gerenciamento de Chaves

  • kms_key_location: string - A região onde sua chave mestra do Sistema de Gerenciamento de Chaves está localizada.

Se o KMS estiver em um projeto do GCP diferente daquele em que você registrou a identidade de carga de trabalho da OpenAI, verifique se o KMS está ativado no projeto que contém essa identidade. Para isso, acesse 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"
}'

Exemplo de resposta:

{
"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

Exemplo de solicitação:

  • tipo: string - Sempre "azure",

  • nome: string - Um nome amigável para sua configuração

  • tenant_id: string - O UUID do seu locatário do Azure

  • vault_uri: string - O URI do cofre do Azure que contém a chave mestra que você gerencia.

  • key_name: string - O nome da chave mestra do Azure Key Vault que você gerencia.

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"
}'

Exemplo de resposta:

{
"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"
}

Exclua uma chave externa registrada em sua organização.

Observação: você só pode excluir uma chave externa se ela não estiver associada a nenhum projeto ativo de API ou workspace. Se estiver associado a um projeto de API ativo, arquive esse projeto primeiro. Se ela estiver associada a um workspace, a chave não poderá ser excluída.

Exemplo de solicitação

curl -X DELETE \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxxx"

Exemplo de resposta

{
"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>"
}

Obtenha as chaves externas registradas em sua organização.

Exemplo de solicitação

curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"

Exemplo de resposta

{
"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"
}

Validar uma chave externa

Você pode usar esse endpoint para verificar diferentes aspectos da configuração:

  • Sua configuração de nuvem externa continua válida na OpenAI após as alterações. Nesse caso, você receberá uma resposta de sucesso.

  • A revogação da chave foi concluída corretamente e está sendo processada pela OpenAI. Ela entrará em vigor após o término do tempo de vida (TTL) do cache, que é de uma hora. Nesse caso, você receberá uma mensagem de erro.

Exemplo de solicitação

curl -X POST -H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys/extkey_xxx/validate"

Exemplo de resposta

{
"status": "success"
}

Ou então, surgiu um erro por parte do provedor de nuvem.

Endpoint no nível do projeto

Crie um novo projeto com um ID de chave externa.

Este endpoint é idêntico ao endpoint "Criar Projeto" existente, com a adição do parâmetro external_key_id na requisição e na resposta.

Exemplo de solicitação

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"
}'

Exemplo de resposta

{
"object": "organization.project",
"id": "proj_xxxxx",
"name": "Some Project",
"external_key_id": "extkey_xxxx",
"created_at": 1740012721,
"archived_at": null,
"status": "active"
}

[Restrito] Atualizar um projeto existente com um ID de chave externa

Este endpoint é idêntico ao endpoint de atualização de projeto existente, com a adição do parâmetro external_key_id na solicitação e na resposta.

Recomendamos a criação de novos projetos de API para suas cargas de trabalho do EKM. Se você deseja usar o EKM em todos os seus projetos de API existentes, solicite ao seu gerente de contas e nós o adicionaremos à lista de recursos. Observe as seguintes boas práticas antes de implementar o EKM em seus projetos de produção existentes.

  • Teste primeiro todos os recursos da API utilizados em produção no seu projeto de API EKM de teste.

  • Implemente a solução gradualmente, em vez de ativar o EKM em todos os projetos de API de produção de uma só vez.

Exemplo de solicitação

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"
}'

Liste todos os projetos da sua organização.

Esse endpoint é idêntico ao endpoint existente, mas inclui o campo external_key_id na resposta da API.

Exemplo de solicitação

curl -X GET \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"

Exemplo de resposta

{
"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
}

Este artigo foi útil?