OpenAI

OpenAI / Azure EKM 集成说明

配置 Azure 并激活 EKM 的分步说明

更新于:13 days ago

概览

企业密钥管理(EKM)允许 OpenAI 使用由你控制的主密钥来加密数据。为了让 OpenAI 能够在你的 Key Vault 上调用加密/解密操作,我们需要获得相应访问权限。本文档说明如何设置你的 Azure 账户,使 OpenAI 能够承担具有 Key Vault 权限的角色。

Azure EKM flow where OpenAI EKM uses Microsoft Entra ID to access your Key Vault and master KEK

步骤

1. 在你的账户中为 OpenAI 创建服务主体

  1. 获取访问令牌

az account get-access-token --resource https://graph.microsoft.com
--tenant YOUR_TENANT_ID

2. 创建服务主体 - 以下请求中的 appId 是 OpenAI 的应用程序客户端 ID。这将创建一个显示名称为 “EKM - OpenAI Azure” 的服务主体,请记住此名称,后续步骤会用到。OpenAI / Azure EKM 集成说明 - 创建服务主体

curl -X POST https://graph.microsoft.com/v1.0/servicePrincipals \
-H "Authorization: Bearer $TOKEN_FROM_ABOVE" \
-H "Content-Type: application/json" \
–d '{"appId": "20a14814-5ab7-4612-a671-1382b412bf93"}'

2. 创建具有受限 KMS 访问权限的自定义角色

  1. 前往订阅 -> 访问控制 (IAM)

  2. + 添加下拉菜单中,选择添加自定义角色

  3. 前往 JSON 选项卡,点击“编辑”,然后添加以下内容:

    1. 任意角色名称 - 请记住所选名称

    2. dataActions 中的以下权限

      1. Microsoft.KeyVault/vaults/keys/encrypt/action

      2. Microsoft.KeyVault/vaults/keys/decrypt/action

      3. Microsoft.KeyVault/vaults/keys/read

        OpenAI / Azure EKM Integration Instructions Custom Role

3. 创建 Key Vault 和密钥

如果你还没有 Key Vault,请在刚刚创建自定义角色的同一订阅中创建新的 Key Vault

在该 Key Vault 中创建新密钥:

  1. 前往“Key Vault”→“对象”→“密钥”,然后点击“生成/导入”

  2. 在“选项”下选择生成

    Azure Key Vault Keys page with Generate/Import highlighted to add a key
  3. 选择 RSA 作为加密算法。

  4. 你可以选择任意 RSA 密钥大小

  5. 提供符合以下格式的密钥名称:<org-xxx>--<any_name>,其中 org-xxx 是你的 OpenAI 组织 ID,可在 https://platform.openai.com/settings/organization/general 找到。

    Azure Key Vault key generation form with RSA selected and key name org-abcdefg--test-keyvault-key

如果你无法查看或创建密钥,请确保你拥有 Key Vault Administrator(Key Vault 管理员)角色。即使你拥有“Owner”(所有者)角色,也仍然需要此角色。要分配该角色:

  1. 前往“Key Vault”→“访问控制 (IAM)”

  2. 点击“添加”→“添加角色分配”

    Azure Key Vault Access control (IAM) page with Add menu open to Add role assignment

4. 为 OpenAI 服务主体 + 新自定义 KMS + 新密钥创建角色分配

  1. 前往“Key Vault”→“对象”→“密钥”,然后点击你创建的密钥所在行

  2. 前往你刚刚点击的密钥访问控制 (IAM)不是你的 Key Vault)。

  3. + 添加下拉菜单中,选择添加角色分配

    Azure Key Vault Access control (IAM) page with Add menu open to Add role assignment
  4. 角色选项卡中,选择你刚刚创建的自定义角色名称。

    Azure role list filtered for openai- with the openai-azure-kms-role entry
  5. 成员选项卡中:

    1. 点击“+ 选择成员”

    2. 在搜索栏中输入“ekm -”,随后应会加载你在第 1 步中创建的 OpenAI 服务主体

      Azure role assignment Members step with EKM - OpenAI Azure Application selected as a member

5. 根据你自己的安全实践应用任何其他限制

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

完成上述步骤之后

ChatGPT Enterprise

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

  • "tenant_id": "<YOUR_AZURE_TENANT_UUID>"

    • 你的 Azure 租户 UUID

  • "vault_uri": "https://<YOUR_KEYVAULT_NAME>.vault.azure.net/"

    • 包含你所管理主密钥的 Azure 保管库 URI

  • "key_name": "<YOUR_KEY_NAME>"

    • 你所管理的 Azure Key Vault 主密钥名称

    • 密钥名称必须采用 <org-xxx>--<any_name> 格式,其中 org-xxx 是你的 OpenAI 组织 ID,可在 https://platform.openai.com/settings/organization/general 找到

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

API

向 OpenAI 注册你的外部密钥

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

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

  • 在此步骤中,我们将验证你提供的信息是否有效,以及我们能否通过身份验证访问你的 KMS。

  • 此步骤尚不会在你的 OpenAI 项目中启用 EKM。

# This generates an external key ID of the form extkey_xxx

curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys" \
-d '{
  "type": "azure",
  "name": "<ANY_FRIENDLY_NAME>",
  "tenant_id": "<YOUR_AZURE_TENANT_UUID>",
  "vault_uri": "https://<YOUR_KEYVAULT_NAME>.vault.azure.net/",
  "key_name": "<YOUR_KEY_NAME>"
}'
  • 然后,创建一个与该外部密钥关联的 OpenAI 项目。完成后,EKM 将在你的项目中启用。

  • 此 API 调用的响应正文将为你提供项目 ID (proj_xxx)

    OpenAI / Azure 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"
}'

这篇文章对你有帮助吗?