OpenAI

OpenAI / GCP EKM 整合說明

部署 GCP 並啟用 EKM 的逐步說明

更新日期:14 days ago

概覽

企業金鑰管理 (EKM) 可讓 OpenAI 使用由你控制的主金鑰來加密資料。本文件說明如何設定你的 GCP 帳戶,以授予 OpenAI 對你 KMS 的有限權限。

Diagram of OpenAI GCP EKM integration flow using STS token exchange and KMS encrypt or decrypt requests

步驟

1. 為 OpenAI 建立一組聯合身份

OpenAI 將從 OpenAI 擁有的 GCP 帳戶簽發一個身分 Token,看起來會像這樣。

  • azp 和 sub 是 OpenAI 在 GCP 中的服務帳戶 ID

  • Aud 是你的 OpenAI 組織 ID。你也可以選擇其他對象,例如你的 OpenAI 專案 ID;請參閱下方說明

{
  "aud": "org-xxxx",
  "azp": "105900137572174660365",
  "exp": 1747876928,
  "iat": 1747873328,
  "iss": "https://accounts.google.com",
  "sub": "105900137572174660365"
}

此步驟會識別該身分 Token 所提出的宣告,並讓 GCP STS 在提供該身分 Token 時核發存取 Token。

  1. 前往「IAM 與管理員」>「工作負載身份聯盟」,然後點擊「建立集區」

GCP IAM & Admin with Workload Identity Federation selected
  1. 在步驟建立身分集區 中,於集區名稱 輸入任何名稱即可。

  1. 將提供者新增至集區步驟中:

  1. 在「選取提供者」中,選取 OpenID Connect (OIDC)

  2. 提供者名稱 輸入任何內容。

  3. 發行者 (URL) 區段中,輸入 https://accounts.google.com

  4. 受眾區段

  1. 選取允許的受眾

  2. 輸入 OpenAI 在我們傳給你 Token 時應指示的受眾。

  1. 若為 ChatGPT 或 API:你可以填入 OpenAI API 組織 ID (org-xxx)

  2. 對於 API:你可以填入特定的 API 專案 id,以便更精確地區分。

GCP Workload Identity Provider edit page with Allowed audiences selected and Audience 1 entered
  1. 屬性對應區段

  1. 對於 google.subject,請輸入 assertion.sub

Google Cloud attribute mapping with Google 1 google.subject mapped to OIDC 1 assertion.sub
  1. 屬性條件區段

  1. 現在,你應該能夠看到你的「工作負載身份集區」「工作負載身份提供者」有被列在 https://console.cloud.google.com/iam-admin/workload-identity-pools 的頁面中

  1. 工作負載身分集區 ID

GCP Workload Identity Pools page highlighting the provider ID value needed for OpenAI EKM setup
  1. 工作負載身分驗證提供者 ID

GCP Workload Identity Provider edit page with the provider ID field highlighted

2. 確認已啟用 KMS

前往 https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview 以啟用 KMS。你不需要在識別 OpenAI 聯合身份的同一個 GCP 專案中建立 KMS;但如果是不同專案的話,那麼你就必須要在兩個專案中都啟用 KMS 產品才行。

3. 建立全新的 KMS 金鑰

  1. 前往安全性 -> 資料保護 -> 金鑰管理

  2. 概觀分頁下,按一下建立金鑰圈

  1. 為金鑰圈選擇任何名稱

  2. 對於用途或是演算法,請選取「對稱式加密/解密」

GCP Key Management Overview page with the Create Key Ring button highlighted
  1. 建立金鑰圈後,它應會列在金鑰圈分頁。按一下金鑰圈。

  2. 在金鑰圈詳細資料中,按一下建立金鑰

  1. 為金鑰選擇名稱

4. 建立供 KMS 上加密/解密作業使用的受限角色

  1. 前往 IAM 與管理員 -> 角色 -> 建立角色

  2. 在職位/職稱和 ID 欄位中輸入任何內容

  3. 按一下「新增權限」,然後新增下列內容

  1. Cloudkm.cryptoKeyVersion.useToDecrypt

  2. Cloudkms.cryptoKeyVersion.useToEncrypt

5. 指派 OpenAI 的聯合身份給受限的 KMS 角色,以藉此執行加密/解密作業

  1. 前往安全性 -> 資料保護 -> 金鑰管理

  2. 按一下你的金鑰圈名稱,再按一下金鑰名稱,即可進入金鑰詳細資料頁面。

  1. 點擊「權限」分頁,然後再點擊「授予存取權限」的按鈕

Google Cloud KMS key details page with Permissions tab open and Grant Access highlighted
  1. 將 OpenAI 聯合身分指派給你先前建立的自訂角色

  1. 新增主體區段,輸入 principal://iam.googleapis.com/projects/<YOUR_GCP_PROJECT_NUMBER>/locations/global/workloadIdentityPools/<YOUR_GCP_WORKLOAD_IDENTITY_POOL>/subject/105900137572174660365

  1. 指派角色區段,選取你在上一個步驟建立、具有有限 EKM 權限的自訂角色

6. 根據你的安全做法,採取其他限制措施。

以上為 OpenAI 設定 EKM 所需的 最低必要資訊。只要 OpenAI 能夠在你的 KMS 上呼叫 encrypt 和 decrypt 作業,你即可依據自身內部安全做法,自由套用額外的金鑰原則或限制。當你使用 OpenAI 呼叫如下所述的金鑰註冊端點時,我們將驗證你的設定。

完成上述步驟後

ChatGPT Enterprise

請聯絡你的 OpenAI 聯絡人,並分享以下內容:

  • "workload_identity_project_number": "123456789012",

  • "workload_identity_pool_id": "openai-azure",

  • "workload_identity_provider_id": "openai-ekm-service-role",

  • "kms_project_id": "adjective-noun-12345",

  • "kms_key_name": "openai-kms-key",

  • "kms_key_ring_name": "openai-kms-key-ring",

  • "kms_key_location": "us-east1"

  • 金鑰管理系統主金鑰所在的區域

我們將為你的 ChatGPT 組織/工作區啟用 EKM。

API

向 OpenAI 註冊你的外部金鑰

敬請依照此 API 參考文件「管理 API 中的外部金鑰」中的指示說明來進行操作

  • 首先,在 OpenAI 組織等級註冊你的外部金鑰,系統將產生一組外部金鑰 ID。

  • 這個步驟將藉由確認是否能向你的 KMS 進行驗證,來驗證你在 GCP 上的設定。

  • 這還不會將 EKM 新增至你的 OpenAI 專案。

curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys"\
-d '{
   "type": "gcp",
   "name": "GCP EKM Config",
   "workload_identity_project_number": "123456789012",
   "workload_identity_pool_id": "openai-azure",
   "workload_identity_provider_id": "openai-ekm-service-role",
   "audience": <your org id or project id>,
   "kms_project_id": "adjective-noun-12345",
   "kms_key_name": "openai-kms-key",
   "kms_key_ring_name": "openai-kms-key-ring",
   "kms_key_location": "us-east1"
}'

接著,建立與外部金鑰相關聯的 OpenAI 專案。完成此動作後,EKM 將在你的專案中啟用。

curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects"\
-d '{
   "name": "Some Project",

   "external_key_id": "extkey_xxxx"

}'

這篇文章有幫助嗎?