OpenAI 플랫폼에서 권한 관리하기
OpenAI 플랫폼에서 권한 관리하기 (Manage permissions in the OpenAI platform)
출처: 문서
역할 기반 접근 제어(Role-based access control, RBAC)를 사용하면 조직과 프로젝트 전반에서 누가 어떤 작업을 할 수 있는지 — API와 Dashboard 양쪽 모두에서 — 결정할 수 있어요. 두 표면이 동일한 권한으로 관리돼요: 엔드포인트(예: /v1/chat/completions)를 호출할 수 있는 사람은 동등한 Dashboard 페이지도 사용할 수 있으며, 권한이 없으면 관련 UI(예: Playground의 Upload 버튼)가 비활성화돼요. RBAC로 다음을 할 수 있어요:
- 사용자를 그룹화하고 규모에 맞게 권한을 할당하기
- 정확히 필요한 권한으로 커스텀 역할을 만들기
- 조직 또는 프로젝트 수준에서 접근 범위를 지정하기
- Dashboard와 API 양쪽에 일관된 권한을 적용하기
주요 개념
- Organization: 최상위 계정이에요. 조직 역할은 모든 프로젝트에 걸쳐 접근 권한을 부여할 수 있어요.
- Project: 키, 파일, 리소스를 위한 워크스페이스예요. 프로젝트 역할은 해당 프로젝트 안에서만 접근 권한을 부여해요.
- Groups: 역할을 할당할 수 있는 사용자 모음이에요. 그룹은 identity provider(SCIM 경유)에서 동기화해 멤버십을 자동으로 최신 상태로 유지할 수 있어요.
- Roles: 권한 묶음(예: Models Request 또는 Files Write)이에요. 조직 역할은 Organization settings 아래에서 만들 수 있고, 특정 프로젝트 역할은 해당 프로젝트 설정 아래에서 만들 수 있어요. 만들어진 조직 또는 프로젝트 역할은 사용자나 그룹에 할당할 수 있어요. 사용자는 여러 역할을 가질 수 있으며, 접근 권한은 이 역할들의 합집합(union)이에요.
- Permissions: 역할이 허용하는 구체적인 작업이에요(예: 모델에 요청하기, 파일 읽기, 파일 쓰기, 키 관리).
Permissions
아래 표는 사용 가능한 권한, 어떤 프리셋 역할이 이를 포함하는지, 커스텀 역할에서 구성할 수 있는지를 보여줘요.
| 영역 | 허용하는 작업 | Org owner 권한 | Org reader 권한 | Project owner 권한 | Project member 권한 | Project viewer 권한 | 커스텀 역할 가능 |
|---|---|---|---|---|---|---|---|
| List models | 이 조직이 접근할 수 있는 모델 나열하기 | Read |
Read |
Read |
Read |
Read |
✓ |
| Groups | 그룹 보기 및 관리 | Read, Write |
Read |
Read, Write |
Read, Write |
Read |
|
| Roles | 역할 보기 및 관리 | Read, Write |
Read |
Read, Write |
Read, Write |
Read |
|
| Organization Admin | 조직 사용자, 프로젝트, 초대, Admin API 키, 비율 한도 관리 | Read, Write |
|||||
| Usage | 사용량 대시보드 보기 및 내보내기 | Read |
✓ | ||||
| External Keys | Enterprise Key Management용 키 보기 및 관리 | Read, Write |
|||||
| IP allowlist | IP allowlist 보기 및 관리 | Read, Write |
|||||
| mTLS | 상호 TLS(mutual TLS) 설정 보기 및 관리 | Read, Write |
|||||
| OIDC | OIDC 구성 보기 및 관리 | Read, Write |
|||||
| Model capabilities | chat completions, audio, embeddings, images에 요청하기 | Request |
Request |
Request |
Request |
✓ | |
| Assistants | Assistants 생성 및 검색 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
✓ |
| Threads | Threads/Messages/Runs 생성 및 검색 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
✓ |
| Evals | Evals 생성, 검색, 삭제 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
✓ |
| Fine-tuning | 파인튜닝 작업 생성 및 검색 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
✓ |
| Files | 파일 생성 및 검색 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
✓ |
| Vector Stores | vector store 생성 및 검색 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
✓ | |
| Responses API | responses 생성 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
✓ | |
| Prompts | Responses API 및 Realtime API의 컨텍스트로 사용할 프롬프트 생성 및 검색 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
✓ |
| Webhooks | 프로젝트에서 웹훅 생성 및 보기 | Read, Write |
Read |
Read, Write |
Read, Write |
Read |
✓ |
| Datasets | Datasets 생성 및 검색 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
✓ |
| Apps | Dashboard에서 앱 생성, 관리, 검토 제출 | Read, Write |
✓ | ||||
| Tunnels | 조직 범위 tunnels 검사, 사용, 관리 | Read, Use, Manage |
✓ | ||||
| Project API Keys | 사용자가 자신의 API 키를 관리할 수 있는 권한 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
✓ |
| Project Administration | 관리 API로 프로젝트 사용자, 서비스 계정, API 키, 비율 한도 관리 | Read, Write |
Read, Write |
||||
| Batch | batch 작업 생성 및 관리 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
|
| Service Accounts | 프로젝트 서비스 계정 보기 및 관리 | Read, Write |
Read, Write |
||||
| Voices | 음성 생성 및 검색 | Read, Write |
Read, Write |
Read, Write |
Read, Write |
Read |
|
| Agent Builder | Agent Builder에서 에이전트와 워크플로 생성 및 관리 | Read, Write |
Read |
Read, Write |
Read, Write |
Read |
✓ |
Batch 권한의 함의
Batch 권한에는 batch 입력 파일 준비, 요청 실행, 결과 검색에 필요한 접근이 포함돼요. 이 실질적 접근은 batch 안에 제출할 수 있는 엔드포인트와는 별개이며, 후자는 Batch API 가이드에 나열돼 있어요.
| Batch 권한 | 추가로 부여되는 접근 |
|---|---|
Read (api.batch.read) |
/v1/files에 대한 Files Read (api.files.read) |
Write (api.batch.write) |
Batch Read/v1/models에 대한 List models (api.model.read 및 model.read)/v1/files에 대한 Files Read and Write (api.files.read 및 api.files.write)/v1/audio, /v1/chat/completions, /v1/embeddings, /v1/images, /v1/moderations, /v1/realtime, /v1/responses에 대한 Model capabilities Request (api.model.request 및 model.request) |
RBAC 설정하기
역할 변경과 그룹 동기화가 전파되도록 최대 30분을 허용해요.
-
그룹 만들기 팀용 그룹을 추가해요(예: Data Science 및 Support). IdP를 사용한다면 SCIM 동기화를 활성화해서 그룹 멤버십이 최신 상태로 유지되게 해요.
-
커스텀 역할 만들기 최소 권한에서 시작해요. 예를 들어:
- Model Tester: Models Read, Model Capabilities Request, Evals
- Model Engineer: Model Capabilities Request, Files Read/Write, Fine-tuning
- App Publisher: Apps Read, Apps Write
-
역할 할당하기
- Organization 수준 역할은 모든 곳(조직 내 모든 프로젝트)에 적용돼요.
- Project 수준 역할은 해당 프로젝트에서만 적용돼요. 역할을 사용자와 그룹에 할당할 수 있어요. 사용자는 여러 역할을 가질 수 있으며, 접근 권한은 합집합이에요.
-
검증하기 non-owner 계정을 사용해 예상 접근 권한(API 및 Dashboard)을 확인해요. 사용자가 필요한 것보다 더 많이 볼 수 있다면 역할을 조정해요.
최소 권한 원칙을 사용해요. 작업에 필요한 최소 권한으로 시작하고, 필요할 때만 권한을 추가해요.
접근 구성 예시
소규모 팀
- 핵심 팀에 Model Capabilities Request와 Files Read/Write가 있는 조직 수준 역할을 부여해요.
- 각 앱에 프로젝트를 만들고, 계약자에게는 프로젝트 수준 역할로 해당 프로젝트에만 접근을 부여해요.
더 큰 조직
- IdP에서 그룹을 동기화해요(예: Research, Support, Finance).
- 기능별 커스텀 역할을 만들고 조직 수준에서 할당하거나, 프로젝트에 더 엄격한 제어가 필요할 때만 프로젝트별 역할을 부여해요.
계약자 & 공급업체
- 조직 수준 역할이 없는 "Contractors" 그룹을 만들어요.
- 좁은 범위의 프로젝트 역할(예: 읽기 전용 접근)로 특정 프로젝트에 추가해요.
사용자 접근이 평가되는 방식
Dashboard에서 다음을 결합해요:
- organization 의 역할(직접 + 그룹 경유)
- project 의 역할(직접 + 그룹 경유)
실질적 권한은 할당된 모든 역할의 합집합이에요.
프로젝트 안에서 API 키로 요청하는 경우, API 키에 할당된 권한을 취하고, 사용자가 해당 권한을 부여하는 프로젝트 역할을 가지고 있는지 확인해요. 예를 들어 /v1/models를 요청하면 API 키에 api.model.read가 할당되어 있어야 하고, 사용자에게도 api.model.read가 있는 프로젝트 역할이 있어야 해요.
모범 사례
- 조직을 그룹으로 모델링하기: IdP의 팀을 미러링하고 개인이 아니라 그룹에 역할을 할당해요.
- 업무 분리하기: 모델 읽기 vs 파일 업로드 vs 키 관리.
- 프로젝트 경계: 실험, 스테이징, 프로덕션을 별도의 프로젝트로 분리해요.
- 정기적으로 검토하기: 사용하지 않는 역할과 키를 제거하고 민감한 키를 회전해요.
- non-owner로 테스트하기: 광범위 배포 전에 접근이 기대와 일치하는지 검증해요.