ภาพรวม
Enterprise Key Management (EKM) ช่วยให้ OpenAI เข้ารหัสข้อมูลโดยใช้คีย์หลักที่คุณเป็นผู้ควบคุม เอกสารนี้จะแสดงวิธีตั้งค่าบัญชี GCP ของคุณเพื่อมอบสิทธิ์แบบจำกัดให้ OpenAI บน KMS ของคุณ

ขั้นตอน
1. สร้างfederated identity สำหรับ OpenAI
OpenAI จะออกโทเค็นตัวตนจากบัญชี GCP ของ OpenAI ซึ่งจะมีลักษณะประมาณนี้
azp และ sub คือ ID บัญชีบริการของ OpenAI ใน GCP
aud คือ ID องค์กร OpenAI ของคุณ คุณยังสามารถเลือก audience อื่นได้ เช่น ID โปรเจกต์ OpenAI ของคุณ — ดูคำแนะนำด้านล่าง
{
"aud": "org-xxxx",
"azp": "105900137572174660365",
"exp": 1747876928,
"iat": 1747873328,
"iss": "https://accounts.google.com",
"sub": "105900137572174660365"
}ขั้นตอนนี้จะรับรอง claims ที่โทเค็นตัวตนนั้นระบุไว้ และทำให้ GCP STS ของคุณสามารถออก access token ได้เมื่อมีการส่งโทเค็นตัวตนนั้นมา
ไปที่ IAM & Admin -> Workload Identity Federation แล้วคลิก Create Pool

ในขั้นตอน Create an identity pool ให้กรอกอะไรก็ได้สำหรับpool name
จดสิ่งนี้ไว้ใช้ภายหลัง — คุณจะต้องลงทะเบียนสิ่งนี้กับ OpenAI
ในขั้นตอน Add a provider to pool:
ใน Select a provider ให้เลือก OpenID Connect (OIDC)
กรอกอะไรก็ได้สำหรับ provider name
ในส่วน Issuer (URL) ให้ป้อน https://accounts.google.com
ในส่วน Audiences
เลือก Allowed audiences
ป้อน audience ที่ OpenAI ควรระบุเมื่อเราส่งโทเค็นให้คุณ
สำหรับ ChatGPT หรือ API: คุณสามารถใส่OpenAI API organization ID (org-xxx) ได้
สำหรับ API: คุณสามารถใส่API project id เฉพาะเพื่อให้มีความละเอียดมากขึ้น

ในส่วน Attribute mapping
สำหรับ google.subject ให้ป้อน assertion.sub

ในส่วน Attribute conditions
ใส่
assertion.sub == "105900137572174660365"
ตอนนี้คุณควรเห็นworkload identity pool และworkload identity provider ของคุณแสดงอยู่ในหน้า https://console.cloud.google.com/iam-admin/workload-identity-pools
Workload identity pool id

Workload identity provider ID

2. ตรวจสอบว่าเปิดใช้งาน KMS แล้ว
ไปที่ https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview เพื่อเปิดใช้งาน KMS คุณไม่จำเป็นต้องสร้าง KMS ในโปรเจกต์ GCP เดียวกับที่คุณรับรอง federated identity ของ OpenAI อย่างไรก็ตาม หากโปรเจกต์ต่างกัน ต้องอย่างน้อยที่สุดให้ผลิตภัณฑ์ KMS ถูกเปิดใช้งานในทั้งสองโปรเจกต์
3. สร้างKMS Key ใหม่
ไปที่ Security -> Data Protection > Key Management
ใต้แท็บ Overview ให้คลิก Create key ring
เลือกชื่อใดก็ได้สำหรับ key ring ของคุณ
สำหรับ Purpose และ algorithm ให้เลือก Symmetric encrypt/decrypt

เมื่อคุณสร้าง key ring แล้ว รายการนั้นควรแสดงอยู่ในแท็บ Key Rings ให้คลิกที่ key ring นั้น
ในรายละเอียด key ring ให้คลิก Create Key
เลือกชื่อใดก็ได้สำหรับคีย์ของคุณ
4. สร้างroleแบบจำกัดสำหรับการดำเนินการเข้ารหัส/ถอดรหัสบน KMS
ไปที่ IAM & Admin -> Roles -> Create role
กรอกอะไรก็ได้สำหรับ role title และ ID
คลิก Add Permissions แล้วเพิ่มรายการต่อไปนี้
cloudkms.cryptoKeyVersions.useToDecrypt
cloudkms.cryptoKeyVersions.useToEncrypt
5. กำหนด federated identity ของ OpenAI ให้กับ role KMS แบบจำกัดสำหรับการดำเนินการเข้ารหัส/ถอดรหัส
ไปที่ Security -> Data Protection > Key Management
คลิกชื่อkey ring ของคุณ แล้วคลิกkey name ของคุณเพื่อไปยังหน้ารายละเอียดคีย์
หากคุณยังไม่มี ให้กลับไปที่ส่วน Create a KMS
คลิกแท็บ Permissions แล้วคลิกปุ่ม Grant Access

กำหนด federated identity ของ OpenAI ให้กับ custom role ที่คุณสร้างไว้ก่อนหน้านี้
สำหรับส่วน Add principals ให้ป้อน principal://iam.googleapis.com/projects/<YOUR_GCP_PROJECT_NUMBER>/locations/global/workloadIdentityPools/<YOUR_GCP_WORKLOAD_IDENTITY_POOL>/subject/105900137572174660365
YOUR_GCP_PROJECT_NUMBER ตรงนี้คือโปรเจกต์ที่คุณรับรอง federated identity ของ OpenAI โดยการสร้าง YOUR_GCP_WORKLOAD_IDENTITY_POOL โดยอาจเป็นโปรเจกต์เดียวกับที่ KMS ของคุณอยู่ก็ได้ แต่ไม่จำเป็นต้องเป็น
หากโปรเจกต์ต่างกัน ตรวจสอบให้แน่ใจว่าอย่างน้อยได้เปิดใช้งาน KMS บนอีกโปรเจกต์แล้วโดยไปที่ https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview
ในส่วน Assign roles ให้เลือก custom role ที่คุณสร้างในขั้นตอนก่อนหน้าสำหรับสิทธิ์ EKM แบบจำกัด
6. ใช้ข้อจำกัดเพิ่มเติมตามแนวทางด้านความปลอดภัยของคุณเอง
ด้านบนคือข้อมูลขั้นต่ำที่จำเป็นที่ OpenAI ต้องใช้ในการตั้งค่า EKM คุณสามารถใช้นโยบายคีย์หรือข้อจำกัดเพิ่มเติมให้สอดคล้องกับแนวทางด้านความปลอดภัยภายในของคุณได้ ตราบใดที่ OpenAI ยังสามารถเรียกใช้การดำเนินการเข้ารหัสและถอดรหัสบน KMS ของคุณได้ เมื่อคุณเรียก endpoint สำหรับลงทะเบียนคีย์กับ OpenAI ตามที่อธิบายด้านล่าง เราจะตรวจสอบการตั้งค่าของคุณ
หลังจากทำขั้นตอนข้างต้นเสร็จสิ้น
ChatGPT Enterprise
โปรดติดต่อผู้ติดต่อ OpenAI ของคุณและแชร์ข้อมูลต่อไปนี้:
"workload_identity_project_number": "123456789012",
หมายเลขโปรเจกต์ GCP แบบ 12 หลักที่คุณลงทะเบียน workload identity ของ OpenAI ไว้
"workload_identity_pool_id": "openai-azure",
pool ที่มี Workload Identity provider ที่คุณลงทะเบียนไว้สำหรับ OpenAI
"workload_identity_provider_id": "openai-ekm-service-role",
Workload Identity provider ที่คุณลงทะเบียนไว้สำหรับ OpenAI
"kms_project_id": "adjective-noun-12345",
ชื่อโปรเจกต์ GCP ที่ KMS ของคุณอยู่
"kms_key_name": "openai-kms-key",
ชื่อคีย์หลักของ Key Management System
"kms_key_ring_name": "openai-kms-key-ring",
key ring ของ Key Management System ที่มีคีย์หลักที่คุณจัดการอยู่
"kms_key_location": "us-east1"
ภูมิภาคที่คีย์หลักของ Key Management System ของคุณตั้งอยู่
เราจะเปิดใช้งาน EKM ให้กับองค์กร/เวิร์กสเปซ ChatGPT ของคุณ
API
ลงทะเบียน external key ของคุณกับ OpenAI
ทำตามคำแนะนำในเอกสารอ้างอิง API นี้ External Keys in the Management API
ขั้นแรก ให้ลงทะเบียน external key ของคุณในระดับองค์กร OpenAI ซึ่งจะสร้าง external key id ขึ้นมา
ในขั้นตอนนี้ เราจะตรวจสอบการตั้งค่าของคุณบน GCP โดยตรวจสอบว่าเราสามารถ auth ไปยัง KMS ของคุณได้
การทำเช่นนี้จะยังไม่เพิ่ม 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 ที่เชื่อมโยงกับ external key หลังจากนี้ 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"
}'