概览
借助企业密钥管理 (EKM),你可以使用自有外部密钥管理系统 (KMS) 管理的密钥,对存储在 OpenAI 中的客户内容进行加密。该功能适用于 ChatGPT Enterprise 和 API。
OpenAI 支持通过 AWS KMS、Google Cloud (GCP) 和 Azure Key Vault 中的外部账户实现自带密钥 (BYOK) 加密。目前,EKM 实施仅适用于配有专属 OpenAI 客户代表的 Enterprise 和 Edu 工作空间。
OpenAI EKM 加密的工作原理
总体流程
我们会为你的云服务提供商生成一个数据加密密钥 (DEK)。
你的云 KMS 管理一个主密钥加密密钥 (KEK),该密钥可存储在你的云环境中,也可存储在外部。具体实施方式由你决定。
我们请求你的云服务对 DEK 进行加密,以获得已加密的 DEK (eDEK)。若 KEK 存储在外部,你的云服务只会额外访问一次你的外部存储,此步骤对 OpenAI 不可见。
加密
加密时,你的数据会使用 DEK 加密,而 eDEK 会作为元数据存储在文件中。

解密
解密时,我们会请求你的云 KMS 将 eDEK 解密为 DEK,并使用 DEK 解密数据。

关键术语
数据加密密钥 (DEK) — 用于加密你的数据的密钥。
已加密的数据加密密钥 (eDEK) — 由你的 KMS 生成的已加密 DEK
密钥加密密钥 (KEK) — 由你管理的主密钥,用于将 DEK 加密为 eDEK,以及将 eDEK 解密为 DEK。此密钥始终位于 OpenAI 系统之外。
实施总体要求
在你的云服务商中
在你的云 KMS (Azure、AWS 或 GCP)中创建新密钥
针对该 KMS 创建一项自定义受限策略,并授予 Encrypt/Decrypt 权限
为 OpenAI 创建信任策略 (AWS)、工作负载身份 (GCP) 或服务主体 (Azure)
为 OpenAI 分配一个具有受限策略的角色,以访问你的 KMS
在 OpenAI 平台中
ChatGPT Enterprise
创建一个用于测试的 ChatGPT 沙盒工作空间。
API
在你的 OpenAI 控制台中,创建一个将应用加密的新项目。
提供商特定功能
对于 AWS,OpenAI 将:
使用 ExternalID 调用 AssumeRole
对于 GCP,OpenAI 将:
从 OpenAI GCP 账号调用你的 STS 端点
使用 GCP 访问令牌调用你的 KMS 的 encrypt/decrypt 操作。
对于 Azure,OpenAI 将:
为你的 Azure 租户中的保管库请求访问令牌
使用该访问令牌调用你的 Key Vault 的 encrypt/decrypt 操作。
你需要从 OpenAI 获取的信息
身份验证
你需要配置以识别 OpenAI 面向 AWS 和 GCP 的联合身份令牌。对于 Azure,你需要识别 OpenAI 用于其应用注册的应用 ID。
身份验证参数概要
| OpenAI AWS 主体 | arn:aws:iam::790389265272:role/EnterpriseKeyManagement |
| OpenAI GCP 服务账号 ID | 105900137572174660365 |
| OpenAI Azure 应用 ID | 20a14814-5ab7-4612-a671-1382b412bf93 |
根据你的云服务提供商,实施过程中需要提供的信息如下
对于 AWS,你需要设置一项可识别以下信息的信任策略:
OpenAI 的主体(包含账号和角色)
你的 OpenAI 项目 ID(即 ExternalID)
对于 GCP,你需要设置一个可识别以下信息的工作负载身份:
OpenAI 的服务账号 ID
你的 OpenAI 项目 ID(即受众)
对于 Azure,你需要在租户中为 OpenAI 的应用注册项创建一个服务主体
为 OpenAI 的应用客户端 ID (20a14814-5ab7-4612-a671-1382b412bf9) 创建一个服务主体
你可以通过向 https://graph.microsoft.com/v1.0/servicePrincipals 端点发送 POST 请求来完成此操作。
授权
你需要创建一项策略,允许 OpenAI 的身份对你的 KMS 进行有限访问。
| AWS | GCP | Azure |
| kms:Decryptkms:Encrypt | cloudkms.cryptoKeyVersions.useToDecryptcloudkms.cryptoKeyVersions.useToEncrypt | Microsoft.KeyVault/vaults/keys/encrypt/actionMicrosoft.KeyVault/vaults/keys/decrypt/action |
其他
在 Azure 中,对于“密钥类型(密钥加密算法)”,请选择 RSA 而非 EC。
OpenAI 需要你提供的信息
请按照本文档中的说明,向 OpenAI 注册你的 KMS。以下是你需要提供的参数摘要。
身份验证相关
AWS
IAM 角色 ARN — 供 OpenAI 代入的角色(示例:arn:aws:iam::123456789:role/role-name)
ExternalID — 你的 OpenAI 组织 ID
GCP
工作负载身份项目编号(示例:123456789)
工作负载身份池 ID
工作负载身份提供方 ID
允许的受众:你的 OpenAI 组织 ID
Azure
租户 ID
| AWS | GCP | Azure | |
| 身份验证相关 | 租户 ID | ||
| KMS 相关 | KMS ARN —(示例:arn:aws:kms:REGION:ACCOUNT_NUMBER:key:KEY_UUID) | KMS 项目 ID(示例:adjective-noun-12345)KMS 密钥环名称KMS 密钥名称KMS 密钥位置(示例:us-east1) | 保管库 URI(示例:https://your-vault-name.vault.azure.net/)密钥名称 |
向 OpenAI 注册 KMS 后,请继续按照文档说明,在 API 项目中启用你的 EKM 配置。请创建一个新的 OpenAI API 项目用于测试。
各提供商的实施指南
如需分步指导,请参阅下方对应链接。请注意,这些内容主要聚焦于与 OpenAI 的集成要求,并不旨在作为涵盖你完整环境的全面指南
启用 EKM 后不支持的功能
在此初始版本中,如果启用 EKM,以下功能将不可用:
支持同步的应用
非正式发布的功能(即仍处于测试版/alpha 版的任何功能)
