3. DB role과 권한 준비#
DataAPI는 Altibase role을 HTTP 엔드포인트 접근 제어의 기준으로 사용한다. DBA는 DataAPI를 사용하기 전에 role, 사용자, 객체 권한을 준비해야 한다.
3.1 기본 role#
role의 이름은 아래의 환경변수에 설정할 수 있다. 이때 설정한 role의 이름과 동일한 이름으로 Altibase에 role을 생성하고, 사용자에게 해당 role을 부여해야 한다.
| 환경변수 | 기본값 | 용도 |
|---|---|---|
| DATA_API_ACCESS_ROLE | DATA_API_ACCESS | SQL 조회, 실행, 스트리밍 엔드포인트 접근 |
| DATA_API_MONITORING_ROLE | DATA_API_MONITORING | Actuator와 connectionpools 모니터링 엔드포인트 접근 |
3.2 엔드포인트별 role#
| 엔드포인트 | 필요한 role | 비고 |
|---|---|---|
| POST /dataapi/auth/token | 없음 | 공개 엔드포인트이지만 올바른 DB 사용자 자격증명이 필요하다. |
| POST /dataapi/auth/refresh | 없음 | 공개 엔드포인트이지만 유효한 Refresh 토큰과 서버 세션 상태가 필요하다. |
| POST /dataapi/auth/session/reset | 없음 | 공개 엔드포인트이지만 올바른 DB 사용자 자격증명이 필요하다. |
| POST /dataapi/auth/logout | DATA_API_ACCESS 또는 DATA_API_MONITORING | Bearer Access 토큰이 필요하다. |
| POST /dataapi/query/records | DATA_API_ACCESS | records 형태의 buffered 조회 엔드포인트이다. |
| POST /dataapi/query/values | DATA_API_ACCESS | columns + rows 형태의 buffered 조회 엔드포인트이다. |
| POST /dataapi/execute | DATA_API_ACCESS | DML/DDL 실행 엔드포인트이다. |
| POST /dataapi/stream/records | DATA_API_ACCESS | records 형태의 NDJSON 스트리밍 조회 엔드포인트이다. |
| POST /dataapi/stream/values | DATA_API_ACCESS | columns + rows 형태의 NDJSON 스트리밍 조회 엔드포인트이다. |
| GET /dataapi/actuator/... | DATA_API_MONITORING | health, info, metrics, prometheus, connectionpools에 적용된다. |
로그인 및 로그아웃 엔드포인트는 DATA_API_ACCESS role과 DATA_API_MONITORING role 모두 사용할 수 있다.
SQL 엔드포인트는 DATA_API_ACCESS role을 가진 사용자만 접근할 수 있으며, /actuator 하위의 모니터링 엔드포인트는 DATA_API_MONITORING role을 가진 사용자만 접근할 수 있다.
3.3 DBA 준비 순서#
- DataAPI 접근에 사용할 role 이름을 확정한다.
- 필요한 role을 Altibase에 생성한다.
- 애플리케이션 사용자와 운영자 사용자를 생성한다.
- 서비스가 접근해야 하는 스키마와 테이블에 객체 권한을 부여한다.
- SQL 실행 계정에는 access role을 부여한다.
- 모니터링 계정에는 monitoring role을 부여한다.
- DataAPI 환경변수에 설정한 role 이름이 실제 DB의 role 이름과 일치하는지 확인한다.
- 로그인 및 주요 엔드포인트 호출을 통해 사용자의 접근 권한 범위가 의도대로 제한되는지 검증한다.
3.4 SQL 준비 예시#
아래 예시는 기본 role 이름을 사용하는 최소 예시이며, 실제 객체 권한은 서비스가 접근해야 하는 스키마와 운영 정책에 맞게 조정한다.
# role 생성
CREATE ROLE DATA_API_ACCESS;
CREATE ROLE DATA_API_MONITORING;
#사용자 생성
CREATE USER data_api_app IDENTIFIED BY strong_password;
CREATE USER data_api_ops IDENTIFIED BY strong_password;
#권한 부여
GRANT DATA_API_ACCESS TO data_api_app;
GRANT DATA_API_MONITORING TO data_api_ops;
GRANT SELECT, INSERT, UPDATE, DELETE ON schema.table TO data_api_app;
GRANT SELECT ON schema.table TO data_api_ops;
보안상 운영자 전용 계정에는 SQL 실행 관련 객체 권한을 부여하지 않는 것이 안전하다. 마찬가지로 애플리케이션 계정에 모니터링 기능이 필요 없다면 역할을 명확히 분리하여 운영하는 것을 권장한다.