콘텐츠로 이동

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 준비 순서#

  1. DataAPI 접근에 사용할 role 이름을 확정한다.
  2. 필요한 role을 Altibase에 생성한다.
  3. 애플리케이션 사용자와 운영자 사용자를 생성한다.
  4. 서비스가 접근해야 하는 스키마와 테이블에 객체 권한을 부여한다.
  5. SQL 실행 계정에는 access role을 부여한다.
  6. 모니터링 계정에는 monitoring role을 부여한다.
  7. DataAPI 환경변수에 설정한 role 이름이 실제 DB의 role 이름과 일치하는지 확인한다.
  8. 로그인 및 주요 엔드포인트 호출을 통해 사용자의 접근 권한 범위가 의도대로 제한되는지 검증한다.

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 실행 관련 객체 권한을 부여하지 않는 것이 안전하다. 마찬가지로 애플리케이션 계정에 모니터링 기능이 필요 없다면 역할을 명확히 분리하여 운영하는 것을 권장한다.