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

步骤
1. 创建新的 KMS 密钥
前往 KMS > 客户托管密钥,然后点击“创建密钥”。
选择对称加密算法。
创建密钥后,记录其 ARN。支持的格式包括
arn:aws:kms:<region>:<account_number>:key/<uuid>、...:key/mrk-*或...:alias/<alias_name>。

2. 创建自定义策略,以授予对 KMS 密钥的有限访问权限
前往 IAM -> 策略,然后点击“创建策略”。
在指定权限步骤中选择 JSON,并输入以下内容,为该策略添加 KMS 访问操作。请确保将 YOUR_KMS_ARN 替换为你之前创建的密钥 ARN。

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowEncryptDecrypt",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt"
],
"Resource": <YOUR_KMS_ARN>
}
]
}3. 创建一个供 OpenAI 代入的 IAM 角色,并为其分配对 KMS 具有有限访问权限的策略
OpenAI 将从其自有的 AWS 账户中调用 AssumeRole。此步骤旨在确认 OpenAI 的 AWS 主体可以代入该受限角色,以访问你的 KMS。
前往 IAM -> 角色,然后点击“创建角色”
在选择受信实体步骤中,选择自定义信任策略

接下来,在自定义信任策略中输入以下内容,以允许 OpenAI 的 AWS 主体获得访问权限。
此主体即 OpenAI 的 AWS 主体:
arn:aws:iam::790389265272:role/EnterpriseKeyManagement。指定 OpenAI 在执行
AssumeRole过程中应传入的 ExternalId 。对于 ChatGPT 或 API,请使用与工作空间关联的组织 ID (org-xxx):https://platform.api.openai.org/settings/organization/general。
对于 API,你可以使用特定的 API 项目 ID,以实现更精细的权限管控。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::790389265272:role/EnterpriseKeyManagement"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": [
<YOUR_OPENAI_ORGANIZATION_ID>,
]
}
}
}
]
}然后,在添加权限步骤中,搜索你在上一步创建的 IAM 策略名称。勾选该策略旁边的复选框,然后点击“下一步”。

最后,在命名、查看和创建部分,指定一个角色名称。
4. 根据你自己的安全实践实施任何其他限制
以上是 OpenAI 设置 EKM 所需的最低要求信息。只要 OpenAI 能够在你的 KMS 上调用加密和解密操作,你可以根据自己的内部安全实践自由应用其他密钥策略或限制。当你使用下文所述的方式调用 OpenAI 的密钥注册端点时,我们会验证你的设置。
完成上述步骤之后
ChatGPT Enterprise
请联系你的 OpenAI 联系人,并分享以下信息:
"role_arn": "arn:aws:iam::<YOUR_AWS_ACCOUNT_NUMBER>:role/<YOUR_ROLE>"OpenAI 将在你的云端代入的角色 ARN。
"kms_arn": "arn:aws:kms:<REGION>:<YOUR_AWS_ACCOUNT_NUMBER>:key/<UUID>"你所管理的主密钥的 KMS ARN。
我们将为你的 ChatGPT 组织/工作空间启用 EKM。
API
向 OpenAI 注册你的外部密钥
请按照管理 API 中的外部密钥这篇 API 参考文档中的说明操作
首先,在 OpenAI 组织级别注册你的外部密钥,这将生成一个外部密钥 ID。
在此步骤中,我们将验证你提供的信息是否有效,以及我们能否通过身份验证访问你的 KMS。
此操作尚未在你的 OpenAI 项目中启用 EKM。
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys" \
-d '{
"type": "aws",
"name": "AWS EKM Config",
"role_arn": "arn:aws:iam::<YOUR_AWS_ACCOUNT_NUMBER>:role/<YOUR_ROLE>",
"kms_arn": "arn:aws:kms:<REGION>:<YOUR_AWS_ACCOUNT_NUMBER>:key/<UUID>",
"external_id": <your org id or project id>
}'然后,创建一个与该外部密钥关联的 OpenAI 项目。完成后,EKM 将在你的项目中启用。此 API 调用的响应正文将返回项目 ID (proj_xxx)。
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"
}'