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

ขั้นตอน
1. สร้าง คีย์ KMS ใหม่
ไปที่ KMS -> Customer managed keys แล้วคลิก Create Key
เลือกอัลกอริทึมการเข้ารหัสแบบสมมาตร
หลังจากสร้างคีย์แล้ว ให้จด ARN ของคีย์ไว้ รูปแบบที่รองรับ ได้แก่ arn:aws:kms:<region>:<account_number>:key/<uuid>, ...:key/mrk-*, or ...:alias/<alias_name>

2. สร้าง นโยบายแบบกำหนดเอง สำหรับการเข้าถึงคีย์ KMS แบบจำกัด
ไปที่ IAM -> Policies แล้วคลิก Create Policy
ในขั้นตอน Specify permissions ให้เลือก JSON และป้อนข้อมูลต่อไปนี้เพื่อให้สิทธิ์การดำเนินการเข้าถึง KMS แก่นโยบาย อย่าลืมแทนที่ YOUR_KMS_ARN ด้วย ARN ของคีย์ที่คุณสร้าง

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowEncryptDecrypt",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt"
],
"Resource": <YOUR_KMS_ARN>
}
]
}
3. สร้าง IAM Role ให้ OpenAI ใช้ Assume และกำหนดให้กับนโยบายที่มีการเข้าถึง KMS ของคุณแบบจำกัด
OpenAI จะเรียกใช้ AssumeRole จากบัญชี AWS ที่ OpenAI เป็นเจ้าของ ขั้นตอนนี้ระบุว่า principal ของ AWS ของ OpenAI สามารถ Assume role แบบจำกัดเพื่อเข้าถึง KMS ของคุณได้
ไปที่ IAM -> Roles แล้วคลิก Create Role
ในขั้นตอน Select trusted entity ให้เลือก Custom trust policy

ป้อนข้อมูลต่อไปนี้ใน trust policy แบบกำหนดเองเพื่ออนุญาตให้ principal AWS ของ OpenAI เข้าถึงได้
principal คือ principal AWS ของ OpenAI - arn:aws:iam::790389265272:role/EnterpriseKeyManagement
ระบุ ExternalId ที่ OpenAI ควรส่งระหว่างกระบวนการ AssumeRole
สำหรับ ChatGPT หรือ API คุณสามารถใช้ organization id (org-xxx) ที่เชื่อมโยงกับเวิร์กสเปซของคุณได้ - https://platform.api.openai.org/settings/organization/general
สำหรับ API คุณสามารถใส่ API project ID ที่เฉพาะเจาะจงเพื่อความละเอียดมากขึ้น
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::790389265272:role/EnterpriseKeyManagement"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": [
<YOUR_OPENAI_ORGANIZATION_ID>,
]
}
}
}
]
}
ในขั้นตอน Add permissions ให้ค้นหาชื่อนโยบายของนโยบาย IAM ที่คุณสร้างในขั้นตอนก่อนหน้า คลิกcheckboxข้างชื่อนโยบาย แล้วคลิก Next

ในส่วน Name, review, and create ให้เลือกชื่อ role ใดก็ได้
4. ใช้ข้อจำกัดเพิ่มเติมตามแนวทางปฏิบัติด้านความปลอดภัยของคุณเอง
ด้านบนคือข้อมูลขั้นต่ำที่จำเป็นที่ OpenAI ต้องใช้ในการตั้งค่า EKM คุณสามารถใช้นโยบายคีย์หรือข้อจำกัดเพิ่มเติมตามแนวทางปฏิบัติด้านความปลอดภัยภายในของคุณเองได้ ตราบใดที่ OpenAI ยังสามารถเรียกใช้การดำเนินการเข้ารหัสและถอดรหัสบน KMS ของคุณได้ เมื่อคุณเรียก endpoint การลงทะเบียนคีย์กับ OpenAI ตามที่อธิบายไว้ด้านล่าง เราจะตรวจสอบความถูกต้องของการตั้งค่าของคุณ
หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้ว
ChatGPT Enterprise
โปรดติดต่อผู้ติดต่อ OpenAI ของคุณและแชร์ข้อมูลต่อไปนี้:
"role_arn": "arn:aws:iam::<YOUR_AWS_ACCOUNT_NUMBER>:role/<YOUR_ROLE>",
Role ARN ที่ OpenAI จะใช้ Assume ในคลาวด์ของคุณ
"kms_arn": "arn:aws:kms:<REGION>:<YOUR_AWS_ACCOUNT_NUMBER>:key/<UUID>"
Key Management System ARN สำหรับคีย์หลักที่คุณจัดการ
เราจะเปิดใช้งาน EKM สำหรับองค์กร/เวิร์กสเปซ ChatGPT ของคุณ
API
ลงทะเบียน external key ของคุณกับ OpenAI
ทำตามคำแนะนำในเอกสารอ้างอิง API นี้ External Keys in the Management API
ขั้นแรก ลงทะเบียน external key ของคุณในระดับองค์กร OpenAI ซึ่งจะสร้าง external key id
ในขั้นตอนนี้ เราจะตรวจสอบว่าข้อมูลที่คุณป้อนถูกต้องและเราสามารถยืนยันตัวตนกับ 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": "aws",
"name": "AWS EKM Config",
"role_arn": "arn:aws:iam::<YOUR_AWS_ACCOUNT_NUMBER>:role/<YOUR_ROLE>",
"kms_arn": "arn:aws:kms:<REGION>:<YOUR_AWS_ACCOUNT_NUMBER>:key/<UUID>",
"external_id": <your org id or project id>
}'จากนั้น สร้างโปรเจกต์ OpenAI ที่เชื่อมโยงกับ external key หลังจากนี้ EKM จะเปิดใช้งานในโปรเจกต์ของคุณ
เนื้อหาการตอบกลับของการเรียก API นี้จะให้ ID โปรเจกต์แก่คุณ (proj_xxx)
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"
}'
