소개
SpiceDB는 Google의 Zanzibar 논문에서 영감을 받은 오픈소스 권한 시스템으로, 관계형 데이터베이스처럼 스키마를 정의하고 관계를 작성하여 애플리케이션에서 권한을 확인할 수 있습니다. Authzed에서 개발 및 유지보수하며, 주된 목적은 '주체 X가 자원 Z에서 작업 Y를 수행할 수 있는가?'라는 질문에 답하는 것입니다. 이 시스템은 중앙 집중식 서비스로 운영되어 제품군 및 마이크로서비스 아키텍처 전반에서 권한을 관리할 수 있습니다. 인증 솔루션과 완전히 독립적으로 작동하도록 설계되어 다양한 환경에 유연하게 통합할 수 있습니다.
상세정보
스키마 및 관계 정의
사용자는 스키마를 정의하여 객체 유형(예: user, folder, document)과 그들 사이의 관계(예: folder의 parent, viewer)를 명시할 수 있습니다. 예를 들어, folder 객체는 parent 관계를 통해 다른 folder와 연결될 수 있으며, document 객체는 folder와 viewer 관계를 통해 접근 권한을 상속받을 수 있습니다. 이러한 관계 기반 모델은 복잡한 접근 제어 로직을 직관적으로 표현할 수 있게 합니다.
권한 확인 API
SpiceDB는 gRPC 및 HTTP API를 통해 권한 확인을 제공합니다. 예를 들어, 사용자 ‘anne’가 folder ‘budget’에 대한 ‘view’ 권한을 가지는지 확인하기 위해 HTTP POST 요청을 보낼 수 있습니다. 요청에는 주체, 자원, 권한 유형 및 일관성 수준(예: minimizeLatency)이 포함됩니다. 응답은 권한이 부여되었는지 여부와 함께 확인 시점을 반환합니다.
역방향 인덱스 지원
SpiceDB는 ‘주체가 수행할 수 있는 작업은 무엇인가?’ 또는 ‘특정 자원에 접근할 수 있는 주체는 누구인가?’와 같은 역방향 쿼리를 지원합니다. 이는 사용자 인터페이스에서 메뉴 항목을 동적으로 숨기거나 보이게 하거나, 감사 로그에서 접근 경로를 추적하는 데 유용합니다.
다운로드·설치 방법
Windows 사용자는 AMD64 및 ARM64 아키텍처용 바이너리 릴리스를 GitHub releases 페이지에서 zip 형식으로 다운로드할 수 있습니다. 다운로드 후 압축을 해제하고 실행 파일을 적절한 디렉터리에 배치한 후, 시스템 경로에 추가하여 명령 프롬프트에서 spicedb 명령을 사용할 수 있습니다. 공식 문서에서는 Homebrew, APT, YUM 등을 통한 설치 방법도 제공하지만, Windows에서는 직접 바이너리 다운로드가 가장 일반적인 방법입니다.
기본 사용법/명령어
SpiceDB를 실행하려면 명령 프롬프트에서 spicedb serve 명령을 실행합니다. 이 명령은 기본적으로 gRPC 포트(50051)와 HTTP 포트(8443)를 열어 외부에서의 API 접근을 허용합니다. 보안을 위해 사전 공유 키(--grpc-preshared-key)를 설정하는 것이 권장됩니다. 예를 들어, spicedb serve --http-enabled true --grpc-preshared-key "mysecretkey" 명령으로 HTTP 및 gRPC 인터페이스를 모두 활성화하고 보안 키를 설정할 수 있습니다.
스키마를 작성하려면 HTTP API를 사용할 수 있습니다. 예를 들어, 다음과 같은 curl 명령으로 스키마를 작성할 수 있습니다:
curl --location 'http://localhost:8443/v1/schema/write'
--header 'Content-Type: application/json'
--header 'Accept: application/json'
--header 'Authorization: Bearer somerandomkeyhere'
--data '{
"schema": "definition user {} n definition folder { n relation parent: foldern relation viewer: user n permission view = viewer + parent->view n } n definition document {n relation folder: folder n relation viewer: user n permission view = viewer + folder->view n }"
}'
관계를 작성하려면 다음과 같은 형식으로 요청을 보냅니다:
curl --location 'http://localhost:8443/v1/relationships/write'
--header 'Content-Type: application/json'
--header 'Accept: application/json'
--header 'Authorization: Bearer somerandomkeyhere'
--data '{
"updates": [
{
"operation": "OPERATION_TOUCH",
"relationship": {
"resource": {
"objectType": "folder",
"objectId": "budget"
},
"relation": "viewer",
"subject": {
"object": {
"objectType": "user",
"objectId": "anne"
}
}
}
}
]
}'
권한을 확인하려면 다음과 같은 요청을 보냅니다:
curl --location 'http://localhost:8443/v1/permissions/check'
--header 'Content-Type: application/json'
--header 'Accept: application/json'
--header 'Authorization: Bearer somerandomkeyhere'
--data '{
"consistency": {
"minimizeLatency": true
},
"resource": {
"objectType": "folder",
"objectId": "budget"
},
"permission": "view",
"subject": {
"object": {
"objectType": "user",
"objectId": "anne"
}
}
}'
이런 경우에 유용합니다
SpiceDB는 마이크로서비스 아키텍처에서 중앙 집중식 권한 관리가 필요한 경우에 유용합니다. 예를 들어, 여러 서비스가 사용자, 문서, 폴더 등의 자원에 대한 접근을 제어해야 할 때, 각 서비스가 개별적으로 권한 로직을 구현하는 대신 SpiceDB에 질의하여 일관된 권한 결정을 내릴 수 있습니다. 이는 특히 사용자 역할이 복잡하고 동적으로 변경되는 SaaS 플랫폼에서 관리 부담을 줄이고 보안 일관성을 높이는 데 도움이 됩니다.
또한, 사용자 인터페이스에서 메뉴 항목이나 버튼의 표시 여부를 동적으로 결정해야 하는 경우, SpiceDB의 역방향 인덱스 기능을 사용하여 ‘현재 사용자가 수행할 수 있는 작업은 무엇인가?’를 실시간으로 쿼리할 수 있습니다. 이를 통해 프론트엔드에서 불필요한 권한 로직을 제거하고 백엔드에 위임할 수 있습니다.
지원 환경·시스템 요구사항
SpiceDB는 Windows 10 이상에서 AMD64 및 ARM64 아키텍처를 지원합니다. 실행에는 별도의 데이터베이스나 외부 의존성이 필요하지 않으며, 기본 설정에서는 메모리 내 저장소를 사용합니다. 프로덕션 환경에서는 Google Cloud Spanner, CockroachDB, MySQL 또는 PostgreSQL과 같은 외부 데이터스토어를 사용할 수 있도록 구성할 수 있습니다.
최신 버전·업데이트
현재 버전은 1.56.1이며, 최신 릴리스 정보 및 업데이트 내역은 GitHub releases 페이지에서 확인할 수 있습니다. 업데이트는 보안 패치, 성능 개선 및 새로운 기능 추가를 포함하며, semantic versioning을 따릅니다.
제한 사항·확인 사항
SpiceDB는 인증(authentication)을 처리하지 않으며, 별도의 인증 시스템(예: OAuth2, OpenID Connect)과 통합되어야 합니다. 인증 토큰의 검증은 애플리케이션 또는 미들웨어에서 수행되어야 하며, SpiceDB는 인증된 주체에 대해서만 권한을 평가합니다. 또한, Windows 서비스로서 백그라운드에서 자동 실행되도록 설정하려면 별도의 서비스 래퍼나 스크립트가 필요합니다.
FAQ
- SpiceDB는 무료로 사용할 수 있나요?
네, SpiceDB는 Apache-2.0 라이선스 하에 오픈소스로 제공되며, 상업적 사용을 포함하여 자유롭게 사용할 수 있습니다.
- Windows에서 SpiceDB를 실행하려면 관리자 권한이 필요한가요?
필수는 아닙니다. 일반 사용자 권한으로도 실행할 수 있으나, 네트워크 포트(50051, 8443)를 바인딩하려면 해당 포트가 사용 가능하고 방화벽에서 허용되어야 합니다.
시스템 요구사항
Array


