인가
인가 (Authorization)
인증과 인가는 줄여서 AuthN·AuthZ로 부르는데, 인증(AuthN) 은 "사용자가 누구인지" 검증, 인가(AuthZ) 는 "그 사용자가 무엇을 할 수 있는지" 결정하는 과정이에요. Weaviate는 사용자의 인증 상태에 따라 관리자 권한, 읽기 전용 권한, 또는 권한 없음까지 차등 접근을 부여합니다. v1.29.0부터는 더 세밀한 접근 제어를 위한 RBAC(Role-Based Access Control) 도 지원해요.
상황부터 — 인가가 필요한 이유
로그인한 모든 사용자가 모든 것을 삭제·수정할 수 있다면 위험하겠죠. 인가는 "이 사용자는 이 리소스에 이 정도만 허용한다"를 정하는 규칙입니다. Weaviate의 인가 스킴은 세 가지예요.
- RBAC(Role-Based Access Control)
- Admin list
- 무차별 접근(Undifferentiated access)
v1.29부터 — RBAC는 Weaviate에서v1.29부터 일반 공개(GA) 기능입니다.
RBAC (역할 기반 접근 제어)
RBAC는 사용자의 역할에 따라 리소스 접근을 제한하는 방식이에요. Weaviate에서 역할(role)을 정의하고 그 역할에 권한(permission) 을 할당한 뒤, 사용자를 역할에 배정하면 해당 역할의 권한을 상속받습니다.
- RBAC를 켜면 Weaviate가 모든 인가 결정을 보안 감사(security audit)용으로 자동 로깅합니다.
- 사전 정의 역할(
root,viewer)과 커스텀 역할을 조합해 사용.
전용 RBAC 문서에서 구성을 다루지만, 이 페이지에서는 두 스킴(Admin list, 무차별)과 함께 다룹니다.
Admin list
Admin list 스킴은 admin(전체 접근) 또는 read-only(읽기 전용) 사용자 목록을 지정합니다. 권한을 커스터마이즈하거나 확장할 수 없어요. 더 세밀한 제어가 필요하면 RBAC를 쓰세요. Admin list는 RBAC와 함께 쓸 수 없습니다.
Admin list는 환경변수로 구성하며, Docker Compose의 docker-compose.yml에서 예시:
services:
weaviate:
environment:
# Example authentication configuration using API keys
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
AUTHENTICATION_APIKEY_ENABLED: 'true'
AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'user-a-key,user-b-key,user-c-key'
AUTHENTICATION_APIKEY_USERS: 'user-a,user-b,user-c'
# Authorization configuration — Enable admin list
AUTHORIZATION_ADMINLIST_ENABLED: 'true'
# MUST define at least one admin user
AUTHORIZATION_ADMINLIST_USERS: 'user-a'
AUTHORIZATION_ADMINLIST_READONLY_USERS: 'user-b'
user-a는 내장 admin 권한,user-b는 viewer 권한,user-c는 권한 없음이 돼요.
Kubernetes(Helm) 배포는 values.yaml의 authorization 섹션에서 구성합니다:
authentication:
anonymous_access:
enabled: false
apikey:
enabled: true
allowed_keys:
- user-a-key
- user-b-key
- user-c-key
users:
- user-a
- user-b
- user-c
authorization:
admin_list:
enabled: true
users: # MUST define at least one admin user
- user-a
read_only_users:
- user-b
익명 사용자에게 권한 부여
익명 사용자는 Weaviate에서 anonymous로 식별됩니다. Admin list 스킴에서는 익명 사용자에게 권한을 부여할 수 있어요(RBAC는 익명과 비호환). 아래처럼 anonymous 키워드를 씁니다.
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
AUTHORIZATION_ADMINLIST_ENABLED: 'true'
AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'user-a-key'
AUTHENTICATION_APIKEY_USERS: 'user-a'
AUTHORIZATION_ADMINLIST_USERS: 'user-a' # admin access to "user-a" only
AUTHORIZATION_ADMINLIST_READONLY_USERS: 'anonymous' # read-only access to anonymous
무차별 접근 (Undifferentiated access)
인증을 끄고 익명 접근을 켜면 모든 요청이 전체 접근을 얻게 돼요. 개발·평가 목적 외에는 강력히 권장하지 않습니다.
요약
- 인가는 사용자가 무슨 권한을 갖는지 결정. 세 가지 스킴(RBAC / Admin list / 무차별).
- RBAC — 세밀하고 감사 로깅 지원,
v1.29GA. 생산 권장. - Admin list — admin/read-only 이분법. RBAC와 병행 불가. 익명 사용자 권한 부여 가능.
- 무차별 접근 — 개발 전용.