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

步骤
1. 在你的账户中为 OpenAI 创建服务主体
获取访问令牌
az account get-access-token --resource https://graph.microsoft.com
--tenant YOUR_TENANT_ID2. 创建服务主体 - 以下请求中的 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 访问权限的自定义角色
前往订阅 -> 访问控制 (IAM)
在 + 添加下拉菜单中,选择添加自定义角色
前往 JSON 选项卡,点击“编辑”,然后添加以下内容:
任意角色名称 - 请记住所选名称
dataActions 中的以下权限
Microsoft.KeyVault/vaults/keys/encrypt/action
Microsoft.KeyVault/vaults/keys/decrypt/action
Microsoft.KeyVault/vaults/keys/read

3. 创建 Key Vault 和密钥
如果你还没有 Key Vault,请在刚刚创建自定义角色的同一订阅中创建新的 Key Vault
在该 Key Vault 中创建新密钥:
前往“Key Vault”→“对象”→“密钥”,然后点击“生成/导入”
在“选项”下选择生成

选择 RSA 作为加密算法。
你可以选择任意 RSA 密钥大小
提供符合以下格式的密钥名称:<org-xxx>--<any_name>,其中 org-xxx 是你的 OpenAI 组织 ID,可在 https://platform.openai.com/settings/organization/general 找到。

如果你无法查看或创建密钥,请确保你拥有 Key Vault Administrator(Key Vault 管理员)角色。即使你拥有“Owner”(所有者)角色,也仍然需要此角色。要分配该角色:
前往“Key Vault”→“访问控制 (IAM)”
点击“添加”→“添加角色分配”

4. 为 OpenAI 服务主体 + 新自定义 KMS + 新密钥创建角色分配
前往“Key Vault”→“对象”→“密钥”,然后点击你创建的密钥所在行
前往你刚刚点击的密钥的访问控制 (IAM)(不是你的 Key Vault)。
在 + 添加下拉菜单中,选择添加角色分配

在角色选项卡中,选择你刚刚创建的自定义角色名称。

在成员选项卡中:
点击“+ 选择成员”
在搜索栏中输入“ekm -”,随后应会加载你在第 1 步中创建的 OpenAI 服务主体

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