服务账号
在 ChatGPT 工作区中设置和管理用于 Codex 自动化的服务账号
服务账号让你无需依赖员工账号,即可在整个组织内运行和扩展无头 Codex 工作流。每个持续集成 (CI) 运行器、计划作业或共享集成都有自己的 ChatGPT 工作区身份,并具备与人员账号相同的群组、角色、访问控制和可审计性。
只有工作区所有者和管理员可以创建服务账号。他们可以允许其他人员或群组管理账号、配置插件或创建访问令牌。
服务账号代表非人员工作区身份。个人访问令牌代表创建该令牌的工作区成员。API Platform 项目服务账号和 API key 使用独立的项目访问权限和计费方式。
创建并设置服务账号
此交互式演练以 GitHub 为例:创建账号、配置插件、创建令牌,以及分配群组和角色。
创建工作区所有的身份
选择加号按钮,为服务账号命名,然后选择创建。
配置账号的插件
打开插件,选择添加插件,选择 GitHub,并确认已为此账号启用该插件。
创建限定范围的访问令牌
为令牌命名,确认 Codex 范围,选择到期时间,然后将令牌保存在密钥管理器中。
分配群组和角色
将服务账号添加到所需的工作区群组,然后使用用户、配置者或管理者角色与人员或群组共享管理权限。
- 在工作区设置中打开服务账号。
- 选择加号 (+) 按钮并输入描述性名称,例如
release-automation。 - 选择创建。
连接插件
为服务账号本身配置插件。它不会继承创建者的插件或已连接应用。
- 打开账号的插件部分,然后选择添加插件。
- 选择一个插件,并确认其显示为已配置或已启用。
配置者和管理者角色可以设置插件。用户角色不可以。
创建访问令牌
从服务账号的详情页面创建令牌。该令牌代表服务账号,而非创建令牌的人员。
- 打开账号,然后在访问令牌中选择创建令牌。
- 为令牌命名,确认 Codex 范围,然后选择到期时间。
- 选择创建,并将令牌保存在密钥管理器中。
完整令牌只会显示一次。工作区策略控制可用的到期时间。
分配角色和群组
服务账号可以像人员工作区成员一样获得工作区角色并加入群组。请直接分配其访问权限;它不会继承创建者的权限。
要允许人员或群组管理该账号,请选择共享,然后选择添加人员或群组并分配角色:
| 共享账号角色 | 配置账号及其插件 | 创建服务账号访问令牌 |
|---|---|---|
| 用户 | 否 | 是 |
| 配置者 | 是 | 否 |
| 管理者 | 是 | 是 |
这些角色适用于管理账号的人员。它们与分配给服务账号的工作区角色和群组相互独立。
配置者和管理者可以启用或停用账号。只有工作区所有者和管理员可以创建、删除或共享账号。操作人员需登录自己的 ChatGPT 账号来管理共享账号。
要进一步了解工作区权限,请参阅角色和工作区权限。
无需登录即可运行 Codex
服务账号访问令牌要求 Codex CLI 版本为 0.142.0 或更高版本。设置 CODEX_ACCESS_TOKEN,然后无需打开浏览器即可运行 Codex:
export CODEX_ACCESS_TOKEN="<service-account-access-token>"
codex exec --json "Inspect this repository and summarize its current state."在 CI 中,请通过密钥管理器或运行器密钥提供令牌。
要在受信任的计算机上保存登录信息,请通过标准输入传入令牌:
printf '%s' "$CODEX_ACCESS_TOKEN" | codex login --with-access-token
codex exec "Summarize the changes in the current branch."这会将凭据保存在本地。在共享或临时运行器上,请使用 CODEX_ACCESS_TOKEN,不要保存登录信息。
使用 SCIM 预配服务账号
如果你的工作区支持通过跨域身份管理系统 (SCIM) 协议预配服务账号,请在身份提供商中将 userType 设置为 ServiceAccount:
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "svc-codex-release@company.example",
"displayName": "Codex release automation",
"active": true,
"userType": "ServiceAccount"
}将该身份分配给工作区及所需群组,然后进行同步。身份提供商负责管理账号名称、群组成员资格和生命周期。由 SCIM 管理的账号无法在 ChatGPT 中重命名或删除。请参阅群组和预配。
使用 Admin API 管理服务账号
如果你的工作区有权使用此功能,请使用 ChatGPT Admin API key 管理账号、令牌和共享。读取操作需要 chatgpt.enterprise.service_account.read;更改操作需要 chatgpt.enterprise.service_account.write。服务账号令牌无法对 Admin API 请求进行身份验证。
请查看经过身份验证的 Admin API 参考,了解可用操作和当前请求路径。
账号
| 操作 | 方法 | 作用 |
|---|---|---|
| 列出账号 | GET |
返回工作区服务账号 |
| 创建账号 | POST |
创建命名的服务账号 |
| 获取账号 | GET |
返回一个服务账号 |
| 启用或停用账号 | PATCH |
更新账号的 enabled 值 |
| 删除账号 | DELETE |
移除账号并吊销其令牌 |
使用 POST /v1/manage/workspaces/{workspace_id}/service-accounts 创建账号。账号更新只会更改 enabled。
令牌
| 操作 | 方法 | 作用 |
|---|---|---|
| 列出令牌 | GET |
返回账号的令牌元数据 |
| 创建令牌 | POST |
创建限定范围的访问令牌 |
| 吊销令牌 | DELETE |
永久吊销一个令牌 |
例如,创建一个 30 天后到期的 Codex 令牌:
{
"name": "production-release-runner",
"ttl": 2592000,
"scopes": ["chatgpt.workspace.feature.allow-codex-local-access.access"]
}ttl 是令牌的有效期(以秒为单位)。有限有效期必须短于一年,并符合工作区的到期策略。完整的 access_token 只会在创建令牌时返回。
Admin API 还可以列出、添加、更新和移除共享账号访问权限。其角色值为 manager、configurer 和 user;configurer 在 ChatGPT 中显示为配置者。
保护和管理服务账号
- 仅授予工作流所需的角色、群组、插件和连接。
- 将令牌存储在密钥管理器中,并使用受信任的运行器。
- 不要在日志、聊天消息和源代码控制中包含凭据。
- 设置有限的到期时间,并定期检查账号访问权限和活动。
- 轮换令牌时,请创建替代令牌、更新工作流、验证访问权限,然后在工作区或 Admin API 中吊销旧令牌。
- 立即吊销已泄露的令牌,并调查账号近期的活动。
- 在工作区或 Admin API 中停用或删除未使用的账号。这两种操作都会吊销所有有效令牌。停用的账号可以重新启用并创建新令牌;删除操作无法撤销。
运行记录归属于服务账号。可用的工作区分析和审计记录还可以识别令牌创建者或账号设置更改者。请在经过身份验证的 Admin API 参考中确认事件覆盖范围。