OpenAI에서 사용할 RSA-3072 비대칭 키 쌍을 클라우드 공급자에서 생성해 등록하세요.
개인 키는 AWS KMS, Azure Key Vault 또는 Google Cloud KMS에 그대로 보관됩니다. OpenAI는 등록 시 해당 개인 키와 쌍을 이루는 공개 키의 사본을 저장합니다.
키를 등록해도 제품 기능이나 스토리지가 자동으로 설정되지는 않습니다. 이 가이드에서는 PSP 복호화에 사용할 키를 다룹니다.
시작하기 전에
- 조직 ID를 준비하세요. 클라우드 신뢰 관계 설정, 키 등록, API 액세스에는 모두 같은 조직을 사용하세요.
- 외부 키 읽기 및 쓰기 권한이 있는 조직 관리자 API 키를 만드세요. 키를
OPENAI_ADMIN_KEY환경 변수에 안전하게 설정하세요. 프로젝트 추론용 키는 사용할 수 없습니다. - 활성 상태의 RSA-3072 키를 만들고 이 가이드에서 지정한 범위의 공개 키 읽기 권한을 OpenAI에 부여할 수 있어야 합니다.
- 권한이 있는 사용자만 개인 키를 사용할 수 있도록 제한하세요. 이전 키 버전이 필요한 레코드가 있는 동안에는 해당 버전을 보관하세요.
클라우드 키 설정
키를 등록하기 전에 사용하는 클라우드 공급자에 해당하는 단계를 따르세요. 모든 공급자에서 RSA-3072를 사용하며, OpenAI에는 공개 키와 메타데이터를 읽을 수 있는 권한만 부여합니다.
키 등록
예시에서는 curl과 Bash 호환 셸을 사용합니다. OPENAI_ADMIN_KEY를 안전하게 불러온 다음 조직 ID를 설정하세요.
API_BASE="https://api.openai.com/v1"
ORG_ID="<OPENAI_ORG_ID>"
: "${OPENAI_ADMIN_KEY:?Load your organization admin key securely}"
KEYS_URL="$API_BASE/organization/external_keys"
등록 요청 준비
purpose에 지정할 수 있는 열거형 값은 ekm(기본값)과 psp_decryption입니다. 이 가이드에서 설정하는 비대칭 키에는 psp_decryption을 사용하세요. ekm은 엔터프라이즈 키 관리(EKM)용입니다.
사용 중인 공급자에 해당하는 요청을 registration.json으로 저장하세요. JSON에서는 셸 변수가 실제 값으로 치환되지 않으므로 예시 값을 직접 바꾸세요.
AWS KMS 요청
{
"type": "aws",
"purpose": "psp_decryption",
"name": "asymmetric-key-aws",
"role_arn": "<CUSTOMER_ROLE_ARN>",
"external_id": "<OPENAI_ORG_ID>",
"kms_arn": "<CUSTOMER_KMS_KEY_ARN>"
}
Azure Key Vault 요청
{
"type": "azure",
"purpose": "psp_decryption",
"name": "asymmetric-key-azure",
"tenant_id": "<CUSTOMER_TENANT_ID>",
"vault_uri": "https://<CUSTOMER_VAULT_NAME>.vault.azure.net",
"key_name": "<OPENAI_ORG_ID>--asymmetric-key",
"key_version": "<CUSTOMER_KEY_VERSION>"
}
Google Cloud KMS 요청
{
"type": "gcp",
"purpose": "psp_decryption",
"name": "asymmetric-key-gcp",
"workload_identity_project_number": "<CUSTOMER_GCP_PROJECT_NUMBER>",
"workload_identity_pool_id": "openai-keys",
"workload_identity_provider_id": "openai-google",
"audience": "<OPENAI_ORG_ID>",
"kms_project_id": "<CUSTOMER_KMS_PROJECT_ID>",
"kms_key_ring_name": "asymmetric-keys",
"kms_key_name": "asymmetric-key",
"kms_key_location": "us-central1",
"kms_key_version": "1"
}
1. 키 등록 및 검증
curl --fail-with-body -sS "$KEYS_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID" \
-H "Content-Type: application/json" \
--data @registration.json
등록 시 키를 먼저 검증한 후 저장합니다. 등록에 성공하면 HTTP 200 응답에 extkey ID와 공급자 설정이 포함됩니다. 응답 필드의 예시는 다음과 같습니다.
{
"id": "extkey_11111111111111111111111111111111",
"object": "organization.external_key",
"name": "asymmetric-key-gcp",
"type": "gcp",
"purpose": "psp_decryption",
"api_project_ids": []
}
응답으로 받은 등록 ID를 저장하세요.
KEY_ID="<EXTERNAL_KEY_ID>"
2. 키 재검증(선택 사항)
GET 요청은 저장된 등록 정보를 반환합니다. POST /validate 요청은 현재 키에 액세스할 수 있는지 다시 확인하고 저장된 공개 키와 대조해 키의 유효성을 검증합니다. 레코드를 복호화하거나 스냅샷을 갱신하지는 않습니다.
curl --fail-with-body -sS "$KEYS_URL/$KEY_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID"
curl --fail-with-body -sS -X POST "$KEYS_URL/$KEY_ID/validate" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID"
예상 응답(HTTP 200)
{ "status": "success" }
키, 권한 또는 네트워크를 변경한 후에는 다시 검증하세요. IAM을 변경했다면 변경 사항이 반영된 후에 재시도하세요.
등록한 키를 PSP 복호화에 사용하려면 프로젝트에서 해당 키를 선택하세요.
키 목록 조회
purpose=psp_decryption을 지정하면 PSP 복호화용으로 등록한 비대칭 키 목록을 조회할 수 있습니다. 필터를 생략하면 모든 용도의 키가 반환되고 purpose=ekm을 지정하면 EKM용 키만 반환됩니다.
curl --fail-with-body -sS --get "$KEYS_URL" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID" \
--data-urlencode "purpose=psp_decryption" \
--data-urlencode "order=asc" \
--data-urlencode "limit=20"
has_more 값이 true인 동안에는 after에 last_id 값을 지정해 다음 페이지를 요청하세요. purpose, order, limit 값은 그대로 유지하세요.
키 교체
- AWS에서는 새 키를 만들고 Azure 또는 GCP에서는 새 키 버전을 만든 다음 읽기 권한을 부여하세요.
- 새 키 또는 키 버전을 등록하세요.
- 프로젝트에서 새
extkeyID를 선택한 후 올바르게 선택되었는지 확인하세요.
등록 정보는 등록 시점의 고정된 스냅샷이므로 클라우드에서 키를 교체해도 갱신되지 않습니다. 이전 개인 키가 필요한 레코드가 있으면 해당 키를 보관하세요. 선택한 키를 변경해도 기존 레코드는 마이그레이션되지 않습니다.
키 삭제
키 등록을 삭제하기 전에 모든 활성 프로젝트에서 해당 키의 선택을 해제하거나 다른 키로 교체하세요.
curl --fail-with-body -sS -X DELETE "$KEYS_URL/$KEY_ID" \
-H "Authorization: Bearer $OPENAI_ADMIN_KEY" \
-H "OpenAI-Organization: $ORG_ID"
삭제에 성공하면 HTTP 200 응답에 object: "organization.external_key.deleted"가 포함됩니다. 클라우드에 있는 키는 삭제되지 않습니다.
문제 해결
| 오류 | 확인할 사항 |
|---|---|
| 401 또는 403 | 조직 관리자 API 키를 사용하고 외부 키를 등록할 권한이 있는지 확인하세요. |
400 external_key_provider_error |
클라우드 신뢰 관계, 읽기 권한, 네트워크 액세스, 키의 활성 상태와 알고리즘을 확인하세요. |
| 400 요청 검증 오류 | 키 용도, AWS 키 자체의 ARN, Azure 또는 GCP 키의 정확한 버전을 확인하세요. |
| 404 | 등록 ID와 조직을 확인하세요. 삭제된 등록 정보나 다른 조직의 등록 정보는 사용할 수 없습니다. |
external_key_used_by_active_projects |
해당 키를 선택한 모든 활성 프로젝트에서 선택을 해제하거나 다른 키로 교체하세요. |
| 키가 더 이상 일치하지 않음 | 새 키 또는 키 버전을 등록하고 새 등록 ID를 선택하세요. |
지원을 요청할 때는 오류 내용과 x-request-id를 공유하세요. 자격 증명은 절대 공유하지 마세요.