For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主要導覽

Codex 聯邦規則參考資料

將外部工作負載的宣告對應至單一 ChatGPT 安全性主體,並套用範圍受限的存取政策。

聯邦規則決定哪些已驗證的工作負載身分可以代表某個 ChatGPT 使用者或服務帳戶執行操作。OpenAI 只會評估 Codex 處理程序指定的規則,不會搜尋所有規則來尋找相符項目。

每條規則都有一個目標安全性主體,並可接受一個或多個上游身分。若要在同一條規則中接受一組主體,請使用結尾帶有萬用字元的主體前綴,或使用 CEL 條件。你也可以為同一個安全性主體建立多條規則。

如需設定程序,請參閱在 Codex 中使用工作負載身分。若要透過程式碼管理規則,請參閱 工作負載身分 Admin API

規則模型

組成部分用途
提供者定義 OpenAI 信任的簽發者與簽署金鑰。
工作區將取得的存取權限制在單一受管理的 ChatGPT 工作區內。
安全性主體選取該工作區中一個現有的使用者或服務帳戶。
身分檢查限制哪些已驗證的身分 Token 可以使用此規則。
範圍可選擇縮小現有的 Codex OAuth 範圍。
存取 Token 有效期限將 OpenAI 存取 Token 的有效期限限制在 60 至 3,600 秒之間。

交換前,安全性主體及其工作區成員資格必須已經存在。工作負載連線時,規則不會建立使用者、服務帳戶或成員資格。

身分檢查的組合方式

規則可以使用下列檢查:

檢查行為適用情境
主體精確比對 sub 值,或以結尾帶有一個 * 的前綴進行比對。單一工作負載身分或受控的主體命名空間。
接受的對象1 至 32 個對象字串。Token 必須包含其中至少一個。專為 OpenAI 簽發的 Token。
宣告精確比對最多可精確比對 32 個最上層純量宣告值。穩定的字串、數字、true/false 值或 null。
CEL 條件針對名為 assertion 的已驗證宣告對應表運算的布林運算式。清單、巢狀宣告或一組允許的值。

至少設定一項主體檢查、宣告精確比對或 CEL 檢查。僅有接受的對象並不足以識別工作負載。如果設定了多種類型的檢查,每一種都必須通過。

系統會先執行提供者驗證。規則無法覆寫提供者的簽發者、簽章、到期時間、斷言有效期限、重放或提供者層級的 CEL 檢查。

主體比對

只要能以一個穩定的 sub 識別工作負載,就應使用精確的主體值:

repo:example-company/payments:environment:production

在結尾加上一個 * 即可執行前綴比對:

system:serviceaccount:production:codex-*

萬用字元必須是最後一個字元,且前面必須有非空的前綴。 OpenAI 不接受 *repo:*:productionrepo/*/main

如果能以更穩定的宣告區分具特殊權限的工作負載,就不要使用過於寬泛的前綴。例如,GitHub 規則應比對程式碼庫、工作流程檔案、ref 或受保護的環境,而非比對某個組織擁有的所有程式碼庫。

宣告精確比對

宣告精確比對會比較最上層 JWT 宣告,且不轉換其型別。字串只會與相同的字串相符,布林值只會與相同的布林值相符,數字則會與相同的數值相符。不支援將清單和物件用作精確比對的值。

例如:

{
  "repository": "example-company/payments",
  "ref": "refs/heads/main",
  "environment": "production"
}

請勿將 sub 納入宣告精確比對的對應表;請使用主體欄位或 CEL。 若要檢查提供者的巢狀宣告,或判斷值是否存在於清單中,請使用 CEL。

CEL 條件

CEL 條件透過 assertion 接收完整且已驗證的 JWT 宣告對應表, 且必須傳回 truefalse。OpenAI 支援的 CEL 功能僅限於一個子集, 以確保規則評估的行為可預測。

若要在同一條規則中允許一組精確指定的主體:

assertion.sub in [
  "repo:example-company/payments:environment:production",
  "repo:example-company/billing:environment:production"
]

若要要求符合某個程式碼庫,且符合兩個 ref 其中之一:

assertion.repository == "example-company/payments" &&
assertion.ref in ["refs/heads/main", "refs/heads/release"]

若要讀取巢狀或選用的宣告:

has(assertion.environment) &&
assertion.environment == "production"

支援的輔助函式包括 hassizecontainsstartsWithendsWith。不支援規則運算式比對、集合迭代巨集(例如 allexists)、任意函式,以及 assertion 以外的識別碼。 請保持運算式簡短;若精確比對能表達相同的政策, 就應優先使用精確比對。

如果宣告不存在、使用了不支援的運算、結果不是布林值,或評估發生錯誤,交換就會遭到拒絕。

對象比對

提供者可以設定一個預期對象;規則則可以改為設定一個或多個 接受的對象。當規則設有對象清單時, Token 的 aud 宣告中至少要有一個值列在該清單內。

如果提供者支援,請使用 OpenAI 專用的對象。SPIFFE JWT-SVID 規則必須設定接受的對象。如果提供者未定義提供者層級的對象,OIDC 規則也必須設定接受的對象。

對象比對與身分檢查必須同時通過。即使對象相符,也無法彌補未通過的主體檢查、宣告精確比對或 CEL 檢查。

安全性主體數量

一條規則只會對應到一個安全性主體:

many accepted external identities -> one federation rule -> one OpenAI principal

這讓工作負載複本、作業或核准的主體能夠代表同一個使用者或服務帳戶執行操作,但不允許同一條規則根據宣告選擇不同的安全性主體。當工作負載需要不同的安全性主體、工作區、範圍或 Token 有效期限時,請建立個別規則。

多個規則可以指定同一個安全性主體。如果你需要個別控制各工作負載的生命週期,或在稽核時更清楚地辨識活動歸屬,請使用不同的規則。

範圍與授權

規則可以縮小所核發存取權杖的 OAuth 範圍,但無法授予目標安全性主體或工作區原本沒有的權限。

若未指定範圍,OpenAI 會使用標準 Codex 範圍:openidprofileemail 和 Codex 本機存取權。若透過 Admin API 設定範圍, 請包含 chatgpt.workspace.feature.allow-codex-local-access.access,並且 僅使用這四個支援的值。

請先依最小權限原則選擇安全性主體並設定工作區權限。規則範圍應作為第二層限制,而非主要的授權邊界。

Token 有效期

將 OpenAI 存取權杖的有效期設為 60 至 3,600 秒。OpenAI 會採用下列兩者中較短的時間:

  • 上游身分 Token 的剩餘有效期。
  • 規則中設定的存取權杖有效期。

縮短有效期可減少政策修改後已核發 Token 仍然有效的時間,但會增加交換頻率。除非你的工作負載需要不同的取捨,否則可先將有效期設為 10 分鐘。

重放防護

提供者層級的重放防護會使用 JWT 的 jti 宣告。當管理員 開啟 防止判斷提示重放 ,且 Token 含有非空的 jti 時,OpenAI 在該判斷提示到期前,只會為該提供者接受該 jti 一次。

工作負載必須在每次交換前取得含有新 jti 的新判斷提示, 交換結果不明時的重試也不例外。不含 jti 的判斷提示仍可使用,但不具備重放防護。若 jti 的值為空、null 或 非字串,就無法通過驗證。

變更、停用與封存

對身分檢查、範圍或 Token 有效期的一般修改會套用至新的交換。修改前核發的存取權杖可能持續有效,直到原有的 TTL 結束。

停用規則或提供者會阻止新的交換,並撤銷透過該規則或提供者核發的 OpenAI 存取權杖。封存也有相同效果,且無法復原。變更提供者的信任設定(例如簽發者或 JWKS 設定)時,會在新的信任組態生效前撤銷已核發的 Token。

需要緊急停止或暫時中止時,請使用停用功能。只有在不再需要資源時才將其封存。

限制

資源限制
每個組織中未封存的提供者數量50
每個提供者中未封存的規則數量50
每個規則的精確比對宣告數量32
每個規則接受的對象數量32 個不重複的值
主體長度4,096 位元組
精確比對宣告對應表或 CEL 條件16 KiB
存取權杖有效期60 至 3,600 秒

若不同信任邊界需要獨立控制簽發者、金鑰、重放防護或生命週期,請為其建立不同的提供者。若工作負載共用信任設定,但需要不同的安全性主體或存取政策,請在同一個提供者下建立不同的規則。