OpenAI 结合私有安全处理的零数据保留
结合私有安全处理的零数据保留(ZDR with PSP)支持离线自动安全审查,OpenAI 无须保留客户提示词或响应。本指南说明架构与客户运营责任;完整架构和安全模型见私有安全处理技术白皮书。
三项设计原则
- 客户控制自己的内容。内容保存在客户控制的存储中,客户管理取回、解密受保护安全记录所需的权限与企业密钥管理(EKM)授权。
- 不进行人工审查。安全审查不能成为 OpenAI 人员读取受保护内容的新途径。内容只在经批准、硬件证明且禁用人工访问的安全运行时解密;仅允许有限范围的安全信号与运行元数据以明文离开。
- 内容仅为安全目的保留。客户存储中的内容只能用于批准的安全目的,不得用于训练模型,也不能供 OpenAI 或合作伙伴的其他团队使用。
ZDR with PSP 的工作原理
架构包括两条流程:API 请求与保留流程把符合条件的 API 内容加密保存在客户存储中;异步安全流水线仅为批准的自动审查取回记录,并输出限定范围的安全判断。
API 请求与保留
提示词和模型响应组成一次交互,通过安全分类器转介或经批准的抽样策略选中。转介并不证明违规。
系统加密记录后写入客户的区域云存储。OpenAI 保存包含运行元数据和存储引用的索引,不保存内容副本。加密、存储异步运行,不阻塞推理。


异步安全流水线
PSP 从客户存储取回加密记录并检查其能否解密。安全审查运行时是禁用人工访问的硬件证明计算环境,设计上是 OpenAI 唯一能解密这些客户内容的工作负载。它使用获批的审查提示词和不暴露客户内容的输出 schema 执行自动审查。
只有预先定义、范围受限的安全信号与获批运行元数据可明文输出。详细结果离开运行时前再次加密,写回客户云存储,并沿用原记录到期时间。写入区域存储的记录 TTL 为 30 天。


客户内容加密
客户存储中的每条记录采用双层加密:
- OpenAI 管理的 HPKE 内层加密:限制只有获授权的安全审查运行时能解密客户内容。
- 客户管理的外层加密:企业密钥管理(EKM)使用客户控制的密钥管理服务再加一层。
启用 EKM 后,仅有 OpenAI 内层解密密钥还不够,必须同时具有客户密钥授权。撤销授权会阻止已保留记录被解密,但不会删除记录,也不会撤销已完成的处理。
建议启用 EKM。持有 EKM 密钥的 KMS 可以与已配置存储位于不同区域。授权与撤销见 EKM 技术常见问题;加密、机密计算、保护措施与透明性见技术白皮书。
PSP 解密
PSP 解密允许客户用自己控制的非对称密钥解密已连接云存储中的 PSP 记录。OpenAI 使用公钥,私钥留在客户云密钥管理服务。此功能与 EKM 独立,不赋予 OpenAI 人员访问内容的权限。
AWS KMS、Azure Key Vault 和 Google Cloud KMS 配置及注册见设置非对称密钥。须与 OpenAI 联系人确认功能可用性和启用情况。注册密钥不会启用 PSP 或配置存储;只有在该密钥 PSP 解密已启用时写入的记录才能用它解密,现有记录不会被转换。记录格式、派生与操作见解密 PSP 记录。
选择 PSP 解密密钥
使用有项目读写权限的组织 Admin API 密钥,安全加载到 OPENAI_ADMIN_KEY;项目推理密钥不可用。示例采用 curl 和 Bash 兼容终端。
设置组织 ID、项目 ID 及注册返回的 extkey ID:
来源示例 1(bash):
## [中文] 在Bash会话设置组织、项目和已注册extkey ID;Admin密钥应安全加载,不写入文章。
API_BASE="https://api.openai.com/v1"
ORG_ID="<OPENAI_ORG_ID>"
PROJECT_ID="<CUSTOMER_PROJECT_ID>"
KEY_ID="<EXTERNAL_KEY_ID>"
OPENAI_ADMIN_KEY="<OPENAI_ADMIN_KEY>"
PROJECTS_URL="$API_BASE/organization/projects"
将 psp_decryption_key_id 设为同一组织注册返回的 extkey。选择 EKM 密钥的 external_key_id 保持不变。
来源示例 2(bash):
## [中文] 设置项目PSP解密密钥,保留独立的external_key_id(EKM)不变;注册密钥本身不会启用PSP。
curl --fail-with-body -sS "$PROJECTS_URL/$PROJECT_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID" \
-H "Content-Type: application/json" \
--data "{\"psp_decryption_key_id\":\"$KEY_ID\"}"
成功返回 HTTP 200。读取项目确认:
来源示例 3(bash):
## [中文] 读取项目确认psp_decryption_key_id;HTTP 200仅说明本次操作成功。
curl --fail-with-body -sS "$PROJECTS_URL/$PROJECT_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID"
项目列表也返回 psp_decryption_key_id,密钥注册的 api_project_ids 显示关联项目。省略该字段会保留原选择,重复选择同一 ID 受支持。
清除密钥选择
先设置上一节的 API 变量。发送 null 清除选择;省略字段不会修改。
来源示例 4(bash):
## [中文] 显式发送null清除PSP解密密钥选择;省略字段会保留现有选择。
curl --fail-with-body -sS "$PROJECTS_URL/$PROJECT_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID" \
-H "Content-Type: application/json" \
--data '{"psp_decryption_key_id":null}'
设置并验证存储
为 OpenAI 项目连接自己的 AWS S3 桶、Azure Blob 容器、Google Cloud Storage 桶或 OCI Object Storage 桶。先完成对应云配置,再注册并验证。
PSP 按项目启用。一旦启用,政策适用于该项目全部 API 流量,包括原本不要求 PSP 的模型。若符合条件的模型要使用不带 PSP 的 ZDR,应通过另一个配置为纯 ZDR 的项目发送。
开始前的准备
- 已批准 ZDR 的组织可直接在 API 控制台设置;其他组织先确认资格和批准要求。
- 存储区域须匹配项目数据驻留,并具备创建存储、委派云账户访问的权限。
- 由组织管理员在控制台注册、验证;Management API 要求组织 Admin API 密钥。项目管理员可查看指导和状态,项目推理密钥不能调用这些管理接口。
在 API 控制台打开存储设置
- 打开 Organization settings > Data controls > Data retention,选择 Connect storage。
- 在 Connect external storage 中选择 AWS、Azure、GCP 或 OCI 和项目。也可从 Project Settings > Data retention 进入。
- 完成下面的云配置,填入存储详情,选择 Connect and validate。
各云平台配置
AWS S3
AWS 用户执行以下步骤,其他云用户跳至对应小节。以下为 2 分 10 秒无声操作视频,具体配置值以文字步骤为准。
视频无音轨;配置值见下方文字步骤。
1. 创建存储桶
创建与项目数据驻留兼容的专用 S3 桶。未启用数据驻留时,可选任意受支持区域。保持 ACLs disabled,开启 Block all Public Access,记录桶 ARN,后面用作 CUSTOMER_BUCKET_ARN。

2. 设置生命周期规则
打开桶的 Management > Create lifecycle rule:规则名 psp-retention,前缀 openai/,操作 Expire current versions of objects,期限 30 天。启用规则,确保其他规则不会更早使记录到期。对象生命周期到期与 OpenAI 解密密钥到期是分别设置的。

3. 创建访问策略
在 IAM > Policies > Create policy 选择 JSON,将 CUSTOMER_BUCKET_ARN 替换为实际 ARN,例如 arn:aws:s3:::your-psp-bucket,保存为 psp-bucket-policy。
来源示例 5(json):
中文说明:云配置原始值:替换CUSTOMER占位符,保留OpenAI身份及策略语法。权限列表、OIDC条件、主体字符串和OCI策略是配置片段,不是可独立运行程序。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetLifecycleConfiguration",
"Resource": "CUSTOMER_BUCKET_ARN"
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": "CUSTOMER_BUCKET_ARN/*"
}
]
}
4. 创建 IAM 角色
在 IAM > Roles > Create role 选择 Custom trust policy。

使用下方策略,将 CUSTOMER_PROJECT_ID 换成 OpenAI 项目 ID;不要改动 OpenAI 主体 ARN。
来源示例 6(json):
中文说明:云配置原始值:替换CUSTOMER占位符,保留OpenAI身份及策略语法。权限列表、OIDC条件、主体字符串和OCI策略是配置片段,不是可独立运行程序。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::790389265272:role/CustomerStorage"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": ["CUSTOMER_PROJECT_ID"]
}
}
}
]
}
给角色附加 psp-bucket-policy,角色可命名 psp-role。记录其 ARN 为 CUSTOMER_ROLE_ARN。sts:ExternalId 的项目 ID 必须与注册项目一致,然后继续“注册存储”。

Azure Blob Storage
Azure 用户按以下步骤操作。
1. 创建存储账户
在商业 Azure 创建专用账户,选择获批且与项目匹配的美国或欧洲区域:账户类型 StorageV2;性能 Standard;冗余 LRS 或 ZRS(优先);访问层 Hot;关闭分层命名空间;公共网络访问允许所有网络;要求 HTTPS,最低 TLS 1.2;关闭匿名 Blob 访问与存储账户密钥访问;启用 Microsoft Entra 授权。
确认网络设置符合云环境要求。使用账户的主要 Blob 端点,不用主权云或自定义端点。


2. 创建容器
在 Storage Account > Data Storage > Containers > Add Container 创建私有容器。在 Container > Settings > Metadata 添加 openai_organization_id,值为准确的 OpenAI 组织 ID。此字段必填。元数据应加在容器上。若只允许单个 OpenAI 项目使用容器,可设置可选的 openai_project_id,填写准确的项目 ID。只有匹配的项目可以注册、验证、读取或写入。省略该字段时,同一组织中满足相同存储区域要求的项目可共享容器,各项目须分别注册和验证。
3. 设置生命周期规则
在 Storage Account > Data Management > Lifecycle management > Add 添加启用规则,覆盖专用账户中的所有当前/基础块 Blob:最后修改后 30 天删除,不加前缀或标签筛选。


4. 授予 OpenAI 访问权限
请目录管理员把 OpenAI 应用添加到租户。将 CUSTOMER_TENANT_ID 替换为租户 ID,保留应用 ID。
来源示例 7(bash):
## [中文] 由租户管理员添加OpenAI应用;替换租户ID,保留官方应用ID,勿分享SAS或客户端密钥。
az login --tenant '<CUSTOMER_TENANT_ID>'
az ad sp create --id 'e5627955-3059-4a88-89f8-73843190624d' \
--query '{name:displayName,objectId:id}' -o table
若应用已存在,使用同样 --id 与查询运行 az ad sp show。记录应用名称及租户内对象 ID。
打开存储账户的 Access control (IAM) > Add role assignment,选择 Reader,将 Assign access to 设为 User, group, or service principal,搜索并选中 CSG - Azure Blob Storage Prod。


然后再分配 Storage Blob Data Contributor,同样选择该应用。OpenAI 管理应用凭证,不要创建或分享存储密钥、SAS 令牌或客户端密钥。
Google Cloud Storage
1. 创建存储桶
在 Cloud Storage > Buckets 创建匹配数据驻留的桶:Public access prevention 为 On,Access control 为 Uniform。可选择关闭默认软删除策略;下一步配置生命周期删除。Global 项目要为计划使用的各区域重复此设置。

2. 设置生命周期规则
在 Lifecycle 标签添加 Delete object:对象名前缀 openai/,Age 为 30 天。

3. 获取 Google Cloud 项目编号
在 IAM & Admin > Settings 复制工作负载身份池所在项目的数字 Project number,用作 <CUSTOMER_GCP_PROJECT_NUMBER>。
4. 创建工作负载身份池与提供商
在 IAM & Admin > Workload Identity Federation 创建池,添加 OpenID Connect(OIDC)提供商:Issuer 为 https://accounts.google.com,Allowed audiences 为 OpenAI 项目 ID <CUSTOMER_PROJECT_ID>。

配置属性映射:
| Google 属性 | OIDC 值 |
|---|---|
google.subject |
assertion.sub |
attribute.openai_project |
assertion.aud |
设置以下属性条件,保留 OpenAI 生产身份 subject 112981926705442324573 不变。
来源示例 8(text):
中文说明:云配置原始值:替换CUSTOMER占位符,保留OpenAI身份及策略语法。权限列表、OIDC条件、主体字符串和OCI策略是配置片段,不是可独立运行程序。
assertion.sub == '112981926705442324573' && assertion.aud == '<CUSTOMER_PROJECT_ID>'

记录池 ID <CUSTOMER_GCP_POOL_ID> 与提供商 ID <CUSTOMER_GCP_PROVIDER_ID>。同一客户的多个 OpenAI 项目可共用池和提供商,将各项目 ID 加入 Allowed audiences,并更新条件:
来源示例 9(text):
中文说明:云配置原始值:替换CUSTOMER占位符,保留OpenAI身份及策略语法。权限列表、OIDC条件、主体字符串和OCI策略是配置片段,不是可独立运行程序。
assertion.sub == '112981926705442324573' &&
(assertion.aud == '<CUSTOMER_PROJECT_ID_1>' || assertion.aud == '<CUSTOMER_PROJECT_ID_2>')
每个项目仍须分别授权桶访问并注册存储。
5. 创建自定义存储角色
在桶所在 Google Cloud 项目的 IAM & Admin > Roles 创建自定义角色,包含下列权限:
来源示例 10(text):
中文说明:云配置原始值:替换CUSTOMER占位符,保留OpenAI身份及策略语法。权限列表、OIDC条件、主体字符串和OCI策略是配置片段,不是可独立运行程序。
storage.buckets.get
storage.objects.create
storage.objects.get
storage.objects.delete
6. 授予 OpenAI 桶访问权限
在桶的 Permissions > Grant access 添加以下主体,并选择上一步创建的自定义角色,然后继续注册。
来源示例 11(text):
中文说明:云配置原始值:替换CUSTOMER占位符,保留OpenAI身份及策略语法。权限列表、OIDC条件、主体字符串和OCI策略是配置片段,不是可独立运行程序。
principalSet://iam.googleapis.com/projects/<CUSTOMER_GCP_PROJECT_NUMBER>/locations/global/workloadIdentityPools/<CUSTOMER_GCP_POOL_ID>/attribute.openai_project/<CUSTOMER_PROJECT_ID>

OCI Object Storage
1. 创建存储桶
在 OCI 控制台 Storage > Object Storage & Archive Storage > Buckets 创建专用桶,从下表选择与项目数据驻留匹配的商业区域。
| 地理范围 | 支持的 OCI 区域 |
|---|---|
| 美国 | us-ashburn-1, us-chicago-1, us-phoenix-1, us-sanjose-1 |
| 欧洲 | eu-amsterdam-1, eu-frankfurt-1, eu-madrid-1, eu-madrid-3, eu-marseille-1, eu-milan-1, eu-paris-1, eu-stockholm-1, eu-turin-1, eu-zurich-1 |
存储层 Standard,可见性 Private,关闭对象版本控制、自动分层及复制。记录桶名 CUSTOMER_BUCKET_NAME 与区域标识 CUSTOMER_OCI_REGION。在 Profile > Tenancy > 租户名称 复制 OCID 为 CUSTOMER_TENANCY_OCID。租户必须订阅桶所在区域。
2. 添加桶标签
创建桶时或在 Tags > Add 添加,Namespace 选 None (freeform tag),填入准确的组织与项目 ID:
| 键名 | 值 |
|---|---|
openai_organization_id |
CUSTOMER_ORG_ID |
openai_project_id |
CUSTOMER_PROJECT_ID |
访问策略和注册必须使用相同 ID。每个桶绑定一个 OpenAI 组织和项目。

3. 授予 OpenAI 访问权限
在 Identity & Security > Policies 选择租户根区间(root compartment),新建 psp-storage-access,打开 Show manual editor。替换 CUSTOMER_... 占位符为桶名、区域、组织与项目 ID,不改 OpenAI 的租户和组 OCID。
来源示例 12(text):
中文说明:云配置原始值:替换CUSTOMER占位符,保留OpenAI身份及策略语法。权限列表、OIDC条件、主体字符串和OCI策略是配置片段,不是可独立运行程序。
Define tenancy OpenAICSG as ocid1.tenancy.oc1..aaaaaaaa4kzwe5jdr4gsxft7dfnwbnp3aozhxeskabsqo7czdkbp6fkh3uha
Define group OpenAICSGProduction as ocid1.group.oc1..aaaaaaaanuot5i5kooasr6qh6qo4ohqljrrxx3javkl2tkedb7ljsluq62sa
Admit group OpenAICSGProduction of tenancy OpenAICSG to {OBJECTSTORAGE_NAMESPACE_READ} in tenancy
Admit group OpenAICSGProduction of tenancy OpenAICSG to {BUCKET_READ} in tenancy where target.bucket.name = 'CUSTOMER_BUCKET_NAME'
Admit group OpenAICSGProduction of tenancy OpenAICSG to {OBJECT_READ, OBJECT_CREATE, OBJECT_OVERWRITE} in tenancy where all {target.bucket.name = 'CUSTOMER_BUCKET_NAME', target.object.name = 'openai/CUSTOMER_ORG_ID/CUSTOMER_PROJECT_ID/*'}
Allow service objectstorage-CUSTOMER_OCI_REGION to {BUCKET_INSPECT, BUCKET_READ, OBJECT_INSPECT, OBJECT_DELETE} in tenancy where target.bucket.name = 'CUSTOMER_BUCKET_NAME'
策略允许查询 Object Storage 命名空间、读取桶配置,以及读写项目专属前缀内的对象。命名空间查询需要不附桶条件的租户级权限。最后一条允许 Oracle 区域对象存储服务删除到期对象;Ashburn 服务名为 objectstorage-us-ashburn-1。
保存策略。OpenAI 管理自身凭证,无须创建或分享 API 签名密钥或访问密钥。
4. 设置生命周期规则
在桶 Policies > Lifecycle policy rules > Create rule 中设置:名称 psp-retention,目标 Objects,操作 Delete,30 天。

展开 Advanced options,State 保持 Enabled。在 Object name filters > Add filter 选择 Include by prefix,填入 openai/CUSTOMER_ORG_ID/CUSTOMER_PROJECT_ID/,保留末尾斜杠。

保存规则。若 OCI 提议自动添加生命周期权限,保留步骤 3 的桶范围授权。确保其他规则不会提前删除或移至 Archive 存储;保留规则不能替代生命周期删除规则。继续注册。
注册存储
完成云配置后,先为项目选择符合资格的基础数据保留政策,即零数据保留(ZDR)或修改后的滥用监控(MAM)。连接存储后,该基础政策继续生效。任选控制台或 Management API 注册并验证。
方式一:API 控制台
以组织管理员登录。此方式使用登录会话,不需要 Admin API 密钥或 curl。
1. 打开连接存储
在 Organization settings > Data controls > Data retention 选择 Connect storage,也可从项目数据保留设置进入。

2. 输入存储详情
选择云平台和项目。在 Data retention policy 中,根据组织资格选择 Zero Data Retention with Private Safety Processing 或 Modified Abuse Monitoring with Private Safety Processing。从项目设置打开时已选中该项目。如出现 Registered storage,选 Connect new storage。
- AWS:Bucket ARN、IAM role ARN。
- Azure:Tenant ID、Subscription ID、Resource group、Storage account name、Container name;向下滚动补全字段。
- GCP:Bucket name、Workload identity project number、Workload identity pool ID、Workload identity provider ID;向下滚动补全。
- OCI:Tenancy OCID、Region、Bucket name。Region 使用
us-ashburn-1等标识;桶使用名称而非 OCID 或 URL。命名空间由 OpenAI 自动发现。




3. 连接并验证
选择 Connect and validate。控制台会保存选定的基础数据保留政策、注册存储、执行验证并刷新状态。验证通过后,PSP 生效,所选基础政策继续适用。等出现 Storage validated,确认项目已启用 PSP,再选择 Done。

注册后验证失败时修复问题并选 Retry validation;稍后继续可从 Registered storage 选择目的地,再选 Validate storage。若仅刷新失败,先选 Refresh status,不必重新开始。
方式二:Management API
使用组织 Admin API 密钥。先设置项目基础数据保留政策,再注册并验证存储。
1. 准备 API 设置
安全加载 OPENAI_ADMIN_KEY。OPENAI_API_BASE 使用项目确认的端点:Global 为 https://api.openai.com,美国为 https://us.api.openai.com,欧洲为 https://eu.api.openai.com。替换端点和组织 ID,后续命令在同一个终端会话执行。
来源示例 13(bash):
## [中文] 设置匹配项目地理范围的API主机和组织ID;后续命令使用同一终端和组织Admin密钥。
OPENAI_API_BASE='<OPENAI_API_BASE>'
OPENAI_ORG_ID='<OPENAI_ORG_ID>'
OPENAI_STORAGE_URL="$OPENAI_API_BASE/v1/organization/external_storage"
2. 设置基础数据保留政策
注册前设置符合资格的基础政策。zero_data_retention 对应 ZDR,modified_abuse_monitoring 对应 MAM。启用 PSP 后,所选基础政策继续适用。
## [中文] 使用组织管理员密钥设置目标项目的基础数据保留政策。
curl --fail-with-body -sS -X POST \
"$OPENAI_API_BASE/v1/organization/projects/CUSTOMER_PROJECT_ID/data_retention" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{"retention_type":"zero_data_retention"}'
若采用 MAM,将 retention_type 设为 modified_abuse_monitoring。成功响应返回 object: "project.data_retention" 和选定的 type。
3. 发送注册请求
只运行自己云平台对应的请求,将全部 CUSTOMER_... 换成实际 ID 和已建资源。
AWS S3:
来源示例 14(bash):
## [中文] 仅注册自己云平台的客户存储;替换CUSTOMER占位符,保留OpenAI身份,注册pending不会改变项目保留政策。
curl --fail-with-body -sS -X POST "$OPENAI_STORAGE_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{
"project_id": "CUSTOMER_PROJECT_ID",
"provider": {
"type": "aws",
"bucket": "CUSTOMER_BUCKET_ARN",
"role_arn": "CUSTOMER_ROLE_ARN"
}
}'
Azure Blob Storage:
来源示例 15(bash):
## [中文] 仅注册自己云平台的客户存储;替换CUSTOMER占位符,保留OpenAI身份,注册pending不会改变项目保留政策。
curl --fail-with-body -sS -X POST "$OPENAI_STORAGE_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{
"project_id": "CUSTOMER_PROJECT_ID",
"provider": {
"type": "azure",
"tenant_id": "CUSTOMER_TENANT_ID",
"subscription_id": "CUSTOMER_SUBSCRIPTION_ID",
"resource_group": "CUSTOMER_RESOURCE_GROUP",
"account_name": "CUSTOMER_STORAGE_ACCOUNT",
"container": "CUSTOMER_CONTAINER_NAME"
}
}'
Google Cloud Storage:
来源示例 16(bash):
## [中文] 仅注册自己云平台的客户存储;替换CUSTOMER占位符,保留OpenAI身份,注册pending不会改变项目保留政策。
curl --fail-with-body -sS -X POST "$OPENAI_STORAGE_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{
"project_id": "<CUSTOMER_PROJECT_ID>",
"provider": {
"type": "gcp",
"bucket": "<CUSTOMER_GCP_BUCKET_NAME>",
"workload_identity_project_number": "<CUSTOMER_GCP_PROJECT_NUMBER>",
"workload_identity_pool_id": "<CUSTOMER_GCP_POOL_ID>",
"workload_identity_provider_id": "<CUSTOMER_GCP_PROVIDER_ID>"
}
}'
OCI Object Storage:
来源示例 17(bash):
## [中文] 仅注册自己云平台的客户存储;替换CUSTOMER占位符,保留OpenAI身份,注册pending不会改变项目保留政策。
curl --fail-with-body -sS -X POST "$OPENAI_STORAGE_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID" \
-H 'Content-Type: application/json' \
--data-binary '{
"project_id": "CUSTOMER_PROJECT_ID",
"provider": {
"type": "oci",
"tenancy_ocid": "CUSTOMER_TENANCY_OCID",
"region": "CUSTOMER_OCI_REGION",
"bucket": "CUSTOMER_BUCKET_NAME"
}
}'
返回的 id 以 extstorage_ 开头,status 为 pending。保留 ID 用于验证;控制台显示 Pending validation。项目选定的基础政策继续适用,验证成功后 PSP 才会生效。
4. 验证设置
将 EXTERNAL_STORAGE_ID 替换为注册返回的 ID:
来源示例 18(bash):
## [中文] 用注册返回的extstorage ID运行验证;验证通过才会激活客户管理保留。
EXTERNAL_STORAGE_ID='<EXTERNAL_STORAGE_ID>'
curl --fail-with-body -sS -X POST \
"$OPENAI_STORAGE_URL/$EXTERNAL_STORAGE_ID/validate" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID"
成功时 status: "validated"。验证检查配置和访问,然后使用客户管理的存储启用 PSP,保留选定的基础数据保留政策。控制台显示 Validated,并显示组合政策,例如 ZDR with PSP 或 MAM with PSP。使用 Management API 时,可检索保存的注册:
来源示例 19(bash):
## [中文] 读取保存的注册状态;validated不是持续健康保证,刷新状态不会重新验证。
curl --fail-with-body -sS \
"$OPENAI_STORAGE_URL/$EXTERNAL_STORAGE_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $OPENAI_ORG_ID"

刷新控制台,确认目的地、提供商、地理区域、Validated 状态,并确认选定的基础政策显示已启用 PSP。Validated 说明上次检查通过,不是持续健康保证;Refresh status 只是刷新已存状态,不会重新运行验证。
故障排查
检查存储状态
Pending 表示注册完成、验证尚未通过,政策未改变。Validated 表示上次检查通过,不保证当前读写始终正常。Unhealthy 时修复报告的问题并重新验证。运行期故障不一定立刻改变保存的状态。
控制台加载失败时,先通过 API 查询注册,区分界面刷新问题与真正的存储故障,避免重复创建连接。
监控存储活动
区分注册记录的状态、云提供商访问日志,以及启用时的 Compliance API 事件。它们各自观察不同层面。PSP 使用转介或抽样,未看到某次请求对应对象不证明发生故障。
识别验证探针
验证可创建 csg_validation_<randomhex> 对象,内容形如 customer-storage-gateway-validation:csg_validation_<suffix>,不包含客户提示词或响应。系统会先执行有凭证读取,再以未认证 GET 检查公共访问应被拒绝;日志中这类拒绝是预期行为。
AWS 验证还会分别测试正确项目的 sts:ExternalId,以及省略或无效值(如 proj_smoketest-verifier)。后两者应返回 AccessDenied,不代表其他客户尝试访问。CloudTrail 不记录被拒绝的跨账户尝试;不要为使测试成功而放宽信任策略。
从故障中恢复
1. 检查错误
| 错误或情况 | 处理方式 |
|---|---|
customer_managed_retention_not_enabled |
联系 OpenAI 完成资格开通。 |
| 身份验证或授权错误 | 检查组织 Admin 密钥、外部存储管理权限;项目推理密钥不可用。 |
| 配置验证失败 | 检查项目与组织 ID、角色信任、生命周期及网络设置。 |
401 customer_storage_not_ready |
确认对应地理区域已有验证通过的客户存储。 |
incorrect_hostname |
使用匹配项目固定区域的主机名。 |
503 external_storage_validation_unavailable |
稍后重试或联系支持。 |
AWS 新版基于项目的注册流程默认资源控制策略(RCP)会阻止 OpenAI 跨账户 AssumeRole。必要时升级付费账户、启用高级功能,并调整 RCP 允许所需的 sts:AssumeRole。
2. 再次验证
修复后由组织管理员重新验证。控制台选 Retry validation 或 Validate storage;Management API 使用验证请求。Refresh status 不替代验证。再次检查目的地、区域、验证状态与政策。
联系支持
存储或验证问题在排查后仍持续时,请联系 OpenAI 支持。
修改或停止配置
在注册存储列表通过垃圾桶按钮断开,并确认操作。若移除项目最后一个连接、且政策为 PSP,项目回退组织默认保留政策;还有其他连接时政策保持不变。要求 PSP 的模型可能无法继续使用。
断开连接不删除云桶或已有记录,应继续满足保留要求。不同项目和驻留区域须分别配置。
客户持续承担的责任
为每个项目和所用区域注册、验证存储;记录至少保留 30 天,避免其他生命周期规则提前删除;维持存储、服务身份与密钥权限;及时修复通知的问题;响应安全调查与相关关注事项。

TRAE-AI编程


更多建议: