OpenAI 结合私有安全处理的零数据保留

2026-11-09 15:45 更新

结合私有安全处理的零数据保留(ZDR with PSP)支持离线自动安全审查,OpenAI 无须保留客户提示词或响应。本指南说明架构与客户运营责任;完整架构和安全模型见私有安全处理技术白皮书。

观看私有安全处理概览(1 分 31 秒)

三项设计原则

  1. 客户控制自己的内容。内容保存在客户控制的存储中,客户管理取回、解密受保护安全记录所需的权限与企业密钥管理(EKM)授权。
  2. 不进行人工审查。安全审查不能成为 OpenAI 人员读取受保护内容的新途径。内容只在经批准、硬件证明且禁用人工访问的安全运行时解密;仅允许有限范围的安全信号与运行元数据以明文离开。
  3. 内容仅为安全目的保留。客户存储中的内容只能用于批准的安全目的,不得用于训练模型,也不能供 OpenAI 或合作伙伴的其他团队使用。

ZDR with PSP 的工作原理

架构包括两条流程:API 请求与保留流程把符合条件的 API 内容加密保存在客户存储中;异步安全流水线仅为批准的自动审查取回记录,并输出限定范围的安全判断。

API 请求与保留

提示词和模型响应组成一次交互,通过安全分类器转介或经批准的抽样策略选中。转介并不证明违规。

系统加密记录后写入客户的区域云存储。OpenAI 保存包含运行元数据和存储引用的索引,不保存内容副本。加密、存储异步运行,不阻塞推理。

API请求:加密记录写入客户控制的存储

API请求深色图:加密记录写入客户控制的存储

异步安全流水线

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 控制台打开存储设置

  1. 打开 Organization settings > Data controls > Data retention,选择 Connect storage。
  2. 在 Connect external storage 中选择 AWS、Azure、GCP 或 OCI 和项目。也可从 Project Settings > Data retention 进入。
  3. 完成下面的云配置,填入存储详情,选择 Connect and validate。

各云平台配置

AWS S3

AWS 用户执行以下步骤,其他云用户跳至对应小节。以下为 2 分 10 秒无声操作视频,具体配置值以文字步骤为准。

观看视频:AWS接入PSP无声演示,2分10秒

视频无音轨;配置值见下方文字步骤。

1. 创建存储桶

创建与项目数据驻留兼容的专用 S3 桶。未启用数据驻留时,可选任意受支持区域。保持 ACLs disabled,开启 Block all Public Access,记录桶 ARN,后面用作 CUSTOMER_BUCKET_ARN。

AWS桶区域与ARN

2. 设置生命周期规则

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

AWS生命周期配置

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。

AWS自定义信任策略

使用下方策略,将 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 必须与注册项目一致,然后继续“注册存储”。

AWS附加psp-bucket-policy

Azure Blob Storage

Azure 用户按以下步骤操作。

1. 创建存储账户

在商业 Azure 创建专用账户,选择获批且与项目匹配的美国或欧洲区域:账户类型 StorageV2;性能 Standard;冗余 LRS 或 ZRS(优先);访问层 Hot;关闭分层命名空间;公共网络访问允许所有网络;要求 HTTPS,最低 TLS 1.2;关闭匿名 Blob 访问与存储账户密钥访问;启用 Microsoft Entra 授权。

确认网络设置符合云环境要求。使用账户的主要 Blob 端点,不用主权云或自定义端点。

Azure公共网络访问设置

Azure安全与Entra授权设置

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 天删除,不加前缀或标签筛选。

Azure生命周期规则范围

Azure最后修改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。

Azure示例截图显示Storage Blob Data Reader角色

Azure选中CSG应用

然后再分配 Storage Blob Data Contributor,同样选择该应用。OpenAI 管理应用凭证,不要创建或分享存储密钥、SAS 令牌或客户端密钥。

Google Cloud Storage

1. 创建存储桶

在 Cloud Storage > Buckets 创建匹配数据驻留的桶:Public access prevention 为 On,Access control 为 Uniform。可选择关闭默认软删除策略;下一步配置生命周期删除。Global 项目要为计划使用的各区域重复此设置。

GCP公共访问防护与统一访问控制

2. 设置生命周期规则

在 Lifecycle 标签添加 Delete object:对象名前缀 openai/,Age 为 30 天。

GCP前缀openai/和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>。

GCP OIDC提供商与允许的受众

配置属性映射:

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

GCP属性映射与生产身份条件

记录池 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>

GCP桶主体及自定义角色授权

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 组织和项目。

OCI组织和项目自由格式标签

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 天。

OCI对象30天删除规则

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

OCI启用状态与组织项目路径前缀

保存规则。若 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 自动发现。

AWS连接对话框:项目和两个ARN

Azure连接对话框:租户、订阅和资源组

GCP连接对话框:桶与工作负载身份项目

OCI连接对话框:租户、区域和桶名

3. 连接并验证

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

已验证存储与ZDR with PSP政策

注册后验证失败时修复问题并选 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 天,避免其他生命周期规则提前删除;维持存储、服务身份与密钥权限;及时修复通知的问题;响应安全调查与相关关注事项。

参考资源

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号