Redshift 권한과 보안

yjbenkang·2024년 11월 3일

권한과 보안이란 측면에서 Redshift가 제공해주는 기능을 알아보고자하는 글이다.

사용자별 테이블 권한 설정

  • 일반적으로 사용자별 테이블별 권한설정은 하지 않음
    • 너무 복잡하고 실수의 가능성이 높음
  • 역할 (Role) 혹은 그룹(Group) 별로 스키마별 접근 권한을 주는 것이 일반적
    • RBAC(Role Based Access Control)가 새로운 트렌드 : 그룹보다 더 편리
    • 여러 역할에 속한 사용자의 경우는 각 역할의 권한을 모두 갖게 됨 (Inclusive)
  • 개인정보와 관련한 테이블들이라면 별도 스키마 설정
    • 극히 일부 사람만 속한 역할에 접근 권한을 줌
  • 뒤의 예는 그룹을 적용했지만 GROUP이란 키워드를 ROLE로 바꾸어도 동작

사용자 그룹 권한 설정 (1)

  • 앞서 생성한 그룹들의 권한을 아래처럼 설정하고 싶음
analytics_authorsanalytics_userspii_usersadmin
raw_data 테이블들읽기읽기X읽기,쓰기
analytics 테이블들읽기,쓰기읽기X읽기,쓰기
adhoc 테이블들읽기,쓰기읽기,쓰기X읽기,쓰기
pii 테이블들XX읽기읽기,쓰기

사용자 그룹 권한 설정 - analytics_authors

GRANT USAGE ON SCHEMA raw_data TO GROUP analytics_authors;
GRANT SELECT ON ALL TABLES IN SCHEMA raw_data TO GROUP analytics_authors;

GRANT ALL ON SCHEMA analytics TO GROUP analytics_authors;
GRANT ALL ON ALL TABLES IN SCHEMA analytics TO GROUP analytics_authors;

GRANT ALL ON SCHEMA adhoc to GROUP analytics_authors;
GRANT ALL ON ALL TABLES IN SCHEMA adhoc TO GROUP analytics_authors;

사용자 그룹 권한 설정 - analytics_users

GRANT USAGE ON SCHEMA raw_data TO GROUP analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA raw_data TO GROUP analytics_users;

GRANT USAGE ON SCHEMA analytics TO GROUP analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA analytics TO GROUP analytics_users;

GRANT ALL ON ALL TABLES IN SCHEMA adhoc to GROUP analytics_users;
GRANT ALL ON SCHEMA adhoc TO GROUP analytics_users;

사용자 그룹 권한 설정 - pii_users

GRANT USAGE ON SCHEMA pii TO GROUP pii_users;
GRANT SELECT ON ALL TABLES IN SCHEMA pii TO GROUP pii_users;

이렇게 하면 일일이 다 그룹에 다 설정을 해줘야 하므로 번거롭다.

컬럼 레벨 보안 (Column Level Security)

  • 테이블내의 특정 컬럼(들)을 특정 사용자나 특정 그룹/역할에만 접근 가능하게 하는 것
  • 보통 개인정보 등에 해당하는 컬럼을 권한이 없는 사용자들에게 감추는 목적으로 사용됨
    • 사실 가장 좋은 방법은 아예 그런 컬럼을 별도 테이블로 구성하는 것임
    • 더 좋은 방법은 보안이 필요한 정보를 아예 데이터시스템으로 로딩하지 않는 것임, 가장 좋은 보안은 보안을 하지 않는 것

레코드 레벨 보안(Row Level Security)

  • 테이블 내의 특정 레코드(들)을 특정 사용자나 특정 그룹/역할에만 접근 가능하게 하는 것
  • 특정 사용자/그룹의 특정 테이블 대상 SELECT, UPDATE, DELETE 작업에 추가조건을 다는 형태로 동작
    • 이를 RLS (Record LEvel Security) Policy라고 부름
    • CREATE RLS POLICY 명령을 사용하여 Policy를 만들고 이를 ATTACH RLS POLICY 명령을 사용해 특정 테이블에 추가함
  • 일반적으로 더 좋은 방법은 아예 별도의 테이블로 관리하는 것임
    • 다시 한번 더 좋은 방법은 보안이 필요한 정보를 아예 데이터 시스템으로 로딩하지 않는 것임

Google Colab에서 실습해보기

analytics_authors 사용자 그룹에 권한설정하기


analytics, adhoc 테이블엔 읽기,쓰기 권한을 모두 부여하고 raw_data 테이블엔 읽기 권한만 부여

analytics_users 사용자 그룹에 권한 설정하기


adhoc 테이블엔 읽기,쓰기 권한을 모두 부여하고 analytics, raw_data 테이블엔 읽기 권한만 부여

pii_users 사용자 그룹에 권한 설정하기


pii 테이블에 읽기 권한만 부여

권한이 부여되지 않은 그룹에 속한 사용자로 쓰기작업 실행해보기


yongjin 유저는 analytics_authors, analytics_users 그룹에 속해있다. 따라서 raw_data 테이블엔 읽기 권한만 주어져있다. 따라서 위와 같이 DELETE라는 쓰기 명령을 실행했을 경우 permission denied라는 에러를 보여주며 권한이 제한된다.

profile
keep growing

0개의 댓글