인가

인가 (Authorization)

인증과 인가는 줄여서 AuthN·AuthZ로 부르는데, 인증(AuthN) 은 "사용자가 누구인지" 검증, 인가(AuthZ) 는 "그 사용자가 무엇을 할 수 있는지" 결정하는 과정이에요. Weaviate는 사용자의 인증 상태에 따라 관리자 권한, 읽기 전용 권한, 또는 권한 없음까지 차등 접근을 부여합니다. v1.29.0부터는 더 세밀한 접근 제어를 위한 RBAC(Role-Based Access Control) 도 지원해요.

출처: 공식문서 - Authorization

상황부터 — 인가가 필요한 이유

로그인한 모든 사용자가 모든 것을 삭제·수정할 수 있다면 위험하겠죠. 인가는 "이 사용자는 이 리소스에 이 정도만 허용한다"를 정하는 규칙입니다. 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.yamlauthorization 섹션에서 구성합니다:

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.29 GA. 생산 권장.
  • Admin list — admin/read-only 이분법. RBAC와 병행 불가. 익명 사용자 권한 부여 가능.
  • 무차별 접근 — 개발 전용.

더 알아보기 (Learn more)