OpenAI

OpenAI / GCP EKM 集成指南

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

更新于:13 days ago

概览

借助企业密钥管理 (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
  2. 创建身份池步骤中,为池名称输入任意内容。

    1. 请记住此名称,后续你需要将其注册到 OpenAI

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

    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
    5. 属性映射部分:

      1. google.subject 输入 assertion.sub

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

      1. 输入 assertion.sub == "105900137572174660365"

  4. 完成后,你应在 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
    2. 工作负载身份提供方 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
    3. 创建密钥环后,它应出现在密钥环选项卡中。点击该密钥环。

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

      1. 为密钥选择任意名称

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

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

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

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

    1. cloudkms.cryptoKeyVersions.useToDecrypt

    2. cloudkms.cryptoKeyVersions.useToEncrypt

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

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

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

    1. 如果你没有看到该页面,请返回创建 KMS 部分

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

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

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

      1. 这里的 YOUR_GCP_PROJECT_NUMBER 是指你在其中创建 YOUR_GCP_WORKLOAD_IDENTITY_POOL 并配置识别 OpenAI 联合身份的那个项目。该项目可以与 KMS 所在的项目相同,但不是必须的。

      2. 如果项目不同,请前往 https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview,确保另一个项目也至少已启用 KMS。

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

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

以上是 OpenAI 设置 EKM 所需的最低要求信息。只要 OpenAI 能够正常调用你 KMS 上的加密和解密操作,你完全可以根据内部安全规范实施额外的密钥策略或限制。当你调用下文所述的 OpenAI 密钥注册端点时,我们将验证你的设置。

完成上述步骤后

ChatGPT Enterprise

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

  • "workload_identity_project_number": "123456789012",

    • 你注册 OpenAI 工作负载身份的 12 位 GCP 项目编号

  • "workload_identity_pool_id": "openai-azure",

    • 包含你为 OpenAI 注册的工作负载身份提供方的池

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

    • 你为 OpenAI 注册的工作负载身份提供方

  • "kms_project_id": "adjective-noun-12345",

    • 你的 KMS 所在的 GCP 项目名称

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

}'

这篇文章对你有帮助吗?