OpenAI

OpenAI / GCP EKM 集成指南

配置 GCP 并启用 EKM 的分步指南

更新于:yesterday

概览

借助企业密钥管理 (EKM),OpenAI 可以使用由你控制的主密钥来加密数据。本文档介绍如何设置你的 GCP 账户,以向 OpenAI 授予对你的 KMS 的有限访问权限。

Diagram of OpenAI GCP EKM integration flow using STS token exchange and KMS encrypt or decrypt requests

步骤

1. 为 OpenAI 创建联合身份

OpenAI 将从其自有的 GCP 账户中签发一个身份令牌,该令牌大致如下所示。

  • azp 和 sub 是 OpenAI 在 GCP 中的服务账号 ID

  • aud 是你的 OpenAI 组织 ID。你也可以选择其他受众,例如你的 OpenAI 项目 ID(参见下文说明)

{
  "aud": "org-xxxx",
  "azp": "105900137572174660365",
  "exp": 1747876928,
  "iat": 1747873328,
  "iss": "https://accounts.google.com",
  "sub": "105900137572174660365"
}

此步骤用于识别该身份令牌中的声明,并在提供该身份令牌时,让你的 GCP STS 能够签发访问令牌。

  1. 前往 IAM 和管理 > 工作负载身份联合,然后点击创建池

GCP IAM & Admin with Workload Identity Federation selected
  1. 创建身份池步骤中,为池名称输入任意内容。

  1. 向池中添加提供方步骤中:

  1. 在“选择提供方”中,选择 OpenID Connect (OIDC)

  2. 提供方名称字段中,输入任意内容。

  3. 签发方 (URL) 部分,输入 https://accounts.google.com

  4. 受众部分:

  1. 选择允许的受众

  2. 输入 OpenAI 向你传递令牌时应指定的受众。

  1. 对于 ChatGPT 或 API:你可以使用 OpenAI API 组织 ID (org-xxx)

  2. 对于 API:你可以填写特定的 API 项目 ID,以实现更精细的权限管控。

GCP Workload Identity Provider edit page with Allowed audiences selected and Audience 1 entered
  1. 属性映射部分:

  1. google.subject 输入 assertion.sub

Google Cloud attribute mapping with Google 1 google.subject mapped to OIDC 1 assertion.sub
  1. 属性条件部分:

  1. 现在,你应该在 https://console.cloud.google.com/iam-admin/workload-identity-pools 页面中看到你的工作负载身份池工作负载身份提供方已列出信息

  1. 工作负载身份池 ID

GCP Workload Identity Pools page highlighting the provider ID value needed for OpenAI EKM setup
  1. 工作负载身份提供方 ID

GCP Workload Identity Provider edit page with the provider ID field highlighted

2. 确保 KMS 已启用

前往 https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview 以启用 KMS。你无需在与识别 OpenAI 联合身份相同的 GCP 项目中创建 KMS;但如果项目不同,则必须至少确保两个项目中都已启用 KMS。

3. 创建新的 KMS 密钥

  1. 前往安全 > 数据保护 > 密钥管理

  2. 概览选项卡下,点击创建密钥环

  1. 为密钥环选择任意名称

  2. 在“用途和算法”中,选择对称加密/解密

GCP Key Management Overview page with the Create Key Ring button highlighted
  1. 创建密钥环后,它应出现在密钥环选项卡中。点击该密钥环。

  2. 在密钥环详情页,点击创建密钥

  1. 为密钥选择任意名称

4. 为 KMS 上的加密/解密操作创建受限角色

  1. 前往 IAM 和管理 > 角色 > 创建角色

  2. 为角色标题和 ID 输入任意内容

  3. 点击“添加权限”,然后添加以下权限:

  1. cloudkms.cryptoKeyVersions.useToDecrypt

  2. cloudkms.cryptoKeyVersions.useToEncrypt

5. 将 OpenAI 的联合身份分配给用于加密/解密操作的 KMS 受限角色

  1. 前往安全 > 数据保护 > 密钥管理

  2. 点击你的密钥环名称,然后点击你的密钥名称以进入密钥详情页

  1. 点击权限标签页,然后点击授予访问权限按钮

Google Cloud KMS key details page with Permissions tab open and Grant Access highlighted
  1. 将 OpenAI 的联合身份分配给你之前创建的自定义角色:

  1. 添加主体部分,输入:principal://iam.googleapis.com/projects/<YOUR_GCP_PROJECT_NUMBER>/locations/global/workloadIdentityPools/<YOUR_GCP_WORKLOAD_IDENTITY_POOL>/subject/105900137572174660365

  1. 分配角色部分,选择你在上一步中创建的、用于 EKM 有限权限的自定义角色

6. 根据你自己的安全实践实施任何其他限制

以上是 OpenAI 设置 EKM 所需的最低要求信息。只要 OpenAI 能够在你的 KMS 上调用加密和解密操作,你可以根据自己的内部安全实践自由应用其他密钥策略或限制。当你使用下文所述的方式调用 OpenAI 的密钥注册端点时,我们会验证你的设置。

完成上述步骤之后

ChatGPT Enterprise

请联系你的 OpenAI 联系人,并分享以下信息:

  • "workload_identity_project_number": "123456789012",

  • "workload_identity_pool_id": "openai-azure",

  • "workload_identity_provider_id": "openai-ekm-service-role",

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

  • 你的密钥管理系统主密钥所在区域

我们将为你的 ChatGPT 组织/工作空间启用 EKM。

API

向 OpenAI 注册你的外部密钥

请按照管理 API 中的外部密钥这篇 API 参考文档中的说明操作

  • 首先,在 OpenAI 组织级别注册你的外部密钥,这将生成一个外部密钥 ID。

  • 在此步骤中,我们将通过检查能否成功通过身份验证访问你的 KMS 来验证你在 GCP 中的设置。

  • 此操作尚未在你的 OpenAI 项目中启用 EKM。

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

然后,创建一个与该外部密钥关联的 OpenAI 项目。完成后,EKM 将在你的项目中启用。

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"

}'

这篇文章对你有帮助吗?