生产系统不要长期依赖某位员工的个人 API Key。为每个生产、测试或自动化工作负载选择独立 Project,再创建 Service Account;完整 Secret 只显示一次,应立即存入服务器环境变量或 Secrets Manager,并在 Project 的 API Keys 页面收紧权限。
官方资料(2026-10-29 核对):OpenAI:Managing projects · Service Accounts API · Terraform Service Accounts
Service Account 是什么,什么时候该用
Service Account 是由一个 API Project 拥有的系统身份,不代表真实用户。它适合后端 API、消息队列消费者、批处理、监控任务、CI/CD 和其他无人值守程序。员工离职或个人账号权限变化时,工作负载不必继续依赖该员工的个人 Key。
它不是 ChatGPT Plus/Pro 账号,也不能把 ChatGPT 订阅权益变成 API 额度;API 用量仍归所属 Organization 与 Project 统计和计费。
个人 API Key、Service Account 与 Admin Key 的区别
| 凭证 | 归属与用途 | 典型场景 | 不该用于 |
|---|---|---|---|
| 个人 Project API Key | 归某位项目成员,受该成员和 Project 权限约束 | 个人开发、短期调试 | 长期无人维护的生产服务 |
| Service Account Key | 归 Project 中的非人类身份 | 服务器、Worker、CI/CD、定时任务 | 浏览器前端、客户端 App 内硬编码 |
| Admin Key | 组织管理凭证,用于 Admin API | 自动化管理 Project、成员、Service Account | 普通模型推理请求 |
控制台创建步骤
- 先选对 Organization 和 Project:打开 API Platform 的项目选择器,确认生产、测试或具体应用所在 Project。
- 进入成员设置:打开 Organization settings,选择目标 Project,再进入 Members。
- 选择 Service account:点击 + Service account。看不到入口时,确认你是否为 Organization Owner 或 Project Owner。
- 填写唯一 ID:只使用字母、数字和连字符,名称应能说明用途,例如
billing-worker-prod。 - 创建并立即保存 Secret:完整 Secret 只显示一次。复制到批准的 Secrets Manager 或部署平台 Secret,不要粘贴到聊天、工单、GitHub 或日志。
- 收紧 Key 权限:回到该 Project 的 API Keys,找到新 Key,将默认权限改为业务真正需要的范围。
为什么完整 Secret 只能保存一次
OpenAI 创建 Service Account 时会立即生成 API Key,并只在创建结果中显示一次完整值。之后控制台不会再次显示原 Secret。丢失时不要尝试从日志或代码库找回,应创建新 Key、更新部署、验证成功后删除旧 Key。
截图、完整 Key、环境变量文件、CI 日志和 API 响应都可能泄露凭证。需要排错时只记录 Key 名称、Project、创建时间和末尾少量字符,不发送完整 Secret。
最小权限怎么设置
控制台创建的 Service Account Key 默认可读写该 Project 的全部 API 资源。创建窗口未必提供权限选择,需要在 Project 的 API Keys 设置里后续编辑。优先从 Restricted 权限开始,只开放应用需要的端点;如果只做读取,则使用 Read Only 或对应读取 Scope。
权限要同时满足两层:Service Account 在 Project 中拥有的角色,以及 API Key 自身的 Scope。Key Scope 可以进一步收窄身份权限,但不能越过 Project 角色额外授予权限。
部署到服务器、Vercel 或 CI/CD
- 在部署平台的 Secret/Environment Variables 中创建
OPENAI_API_KEY,不要写进前端变量或公开构建产物。 - 分别为 Production、Preview/Test 创建不同 Project 或 Service Account,避免预览环境消耗生产额度或访问生产文件。
- 只让服务器端读取 Secret;浏览器调用应先经过自己的后端鉴权和限流。
- 部署后用最小请求验证模型访问、Project 资源和用量归属,再开启正式流量。
- 记录 Service Account 名称、负责人、Project、用途、创建日期和轮换日期,但不记录 Secret。
# 仅示意变量名,不要把真实 Secret 写进代码库
OPENAI_API_KEY=由部署平台安全注入
安全轮换与停用流程
- 在同一 Service Account 下创建新 Key,或按组织策略创建替代 Service Account。
- 把新 Secret 写入 Secrets Manager,并部署到一个小流量环境。
- 验证请求、Project 资源访问和 Usage 归属正常。
- 逐步切换全部实例,确认旧 Key 已无流量。
- 删除旧 Key;应用被下线时,再移除不再需要的 Service Account。
不要先删除旧 Key 再部署新 Key,否则所有仍缓存旧环境变量的实例都会立即返回 401。
Admin API 与 Terraform 什么时候使用
少量 Service Account 可以在控制台管理。需要批量创建、统一权限或合规审计时,可使用 Admin API;它需要组织管理权限和 Admin Key。官方 Terraform 流程可创建非人类身份、通过角色与组分配最小权限,再通过 Administration API 单独创建 Key,避免把 Secret 写入 Terraform 状态、变量或输出。
常见错误怎么排查
| 错误 | 优先检查 | 处理方向 |
|---|---|---|
| 401 / Incorrect API key | Secret 是否复制完整、环境变量是否加载、旧 Key 是否已删除 | 核对部署环境并轮换 Key |
| 403 / permission denied | Project 是否正确、资源是否属于同一 Project、Key Scope 是否过窄 | 回到 Project 和 API Keys 设置检查角色与权限 |
| 429 / rate limit | Project/Organization 限额、RPM、TPM、并发和 Retry-After | 降并发、退避或检查 Limits |
| insufficient_quota | API Credits、组织用量和 Project spend limit | 查看 API Billing 与 Usage,而不是反复换 Key |
进一步排查可查看 OpenAI API 401/403 指南、API 429 与速率限制,以及 API Credits 充值与余额。
上线前检查清单
- Service Account 位于正确的 Project,不与开发环境共用生产身份。
- Secret 已保存在服务器端 Secret 管理系统,仓库、前端和日志中没有副本。
- Key 权限已从默认范围收窄到业务所需。
- 已设置负责人、轮换日期、报警、用量和 Project spend limit。
- 删除旧 Key 前已验证全部实例切换完成。
生产任务可以由受限的 Service Account 上传 JSONL 并创建 Batch。具体文件格式、状态和结果处理见OpenAI Batch API 教程,密钥仍应只保存在服务端。
常见问题
OpenAI API Service Account 是什么?
它是项目所有的非人类身份,用于服务器、后台任务、Worker、CI/CD 等系统访问 OpenAI API。它不代表某个员工,也不是 ChatGPT 登录账号。
谁可以创建 OpenAI Service Account?
需要拥有 Service Account 管理权限。OpenAI 官方说明,Organization Owner 和 Project Owner 通常具备该权限;看不到创建入口时,应让对应 Owner 操作。
Service Account 可以跨 Project 使用吗?
不可以。Service Account 绑定创建它的 Project,不能拿去访问另一个 Project 的文件、Assistant、Thread 或其他项目资源。需要跨环境时,应分别创建。
Service Account 的 Secret Key 丢了怎么办?
创建时显示的完整 Secret 之后无法再次查看。丢失后应生成新 Key,更新部署并验证,再删除旧 Key;不要把 Key 提交到 GitHub、前端代码或日志。
Service Account Key 默认权限是什么?
通过控制台创建时,Service Account Key 默认可读写该 Project 的全部 API 资源。应在 Project 的 API Keys 设置中改为业务所需的最小权限。
个人 API Key、Service Account 与 Admin Key 有什么区别?
个人 Project API Key 归个人用户,Service Account Key 归项目内的系统身份;Admin Key 用于组织管理 API,权限范围更高,不应作为普通推理请求的应用密钥。
身份与端点是两层:同一项目级 Service Account 可用于业务允许的 API 调用,但请求体仍需匹配端点;查看 Responses 与 Chat Completions 的区别。
先确定 Project,再创建系统身份
如果还不清楚 Organization、Project、个人 Key 和 Service Account 的关系,先看项目层级页;创建后再按鉴权与限流指南完成验证。