20230523 TIL - Redshift (2)

ohyujeong·2023년 5월 24일
0

TIL

목록 보기
25/27

📖 오늘의 학습

  • AWS Redshift : 권한과 보안, 백업과 데이터 복구, Redshift Spectrum, Redshift ML

Redshift 권한과 보안

사용자에게 Redshift 권한을 부여할 때, 그룹(Group)이나 역할(Role)별로 스키마에 접근 권한을 주는 것이 일반적이다. 사용자가 많을수록 권한 부여가 복잡해지고 실수 가능성이 높아 사용자별로 권한 설정은 하지 않는다.

이 중에서도 Role을 기반으로 하는 RBAC(Role Based Access Control) 이 선호되고 있는데, 그 이유는 Role은 다른 Role에 권한을 계승할 수 있기 때문에 관리가 용이하기 때문이다.

여러 Role에 속한 사용자의 경우는 각 Role의 권한을 모두 갖게 된다.

개인정보와 같이 민감한 정보가 있는 테이블들이라면 별도의 스키마를 설정하여 해당 스키마에 권한이 있는 Role을 소수의 사람에게 부여하는 것이 좋다.

사용자 그룹 권한 설정 예시

Schema / Groupanalytics_authorsanalytics_userspii_usersadmin
raw_dataREADREADXREAD, WRITE
analyticsREAD, WRITEREADXREAD, WRITE
adhocREAD, WRITEREAD, WRITEXREAD, WRITE
piiXXREADREAD, WRITE

Group에 속한 사용자들에게 Schema의 테이블들에 대한 권한을 위 테이블과 같이 주려고 할 때, 아래와 같이 쿼리를 작성한다.

GRANT ALL ON SCHEMA 를 먼저 해주어야 해당 스키마의 테이블에 대한 권한을 얻을 수 있기 때문에 항상 먼저 작성해준다.

GRANT ALL 은 모든 권한을 줄 때 사용하고, 읽기 권한만 줄 때는 GRANT USAGE, GRANT SELECT 를 사용한다.

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;

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

analytics_authors

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;

GRANT USAGE ON SCHEMA raw_data TO GROUP analytics_users;
GRANT SELECT ON ALL TABLES IN SCHEMA raw_data 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;

이렇게 테이블 전체에 대한 권한을 부여할 수 있기도 하고, 한 테이블 내에서 컬럼별, 레코드별로 보안 설정 또한 가능하다.

컬럼 레벨 보안

테이블 내의 특정 컬럼들을 특정 사용자/Group/Role 에만 접근 가능하게 할 수 있다. 보통 민감한 정보를 가지고 있는 컬럼을 권한이 없는 사용자들에게 감추는 목적으로 사용된다.

하지만 이렇게 관리하는 것은 관리가 어렵고 비효율적이다. 더 좋은 방법은 보호하고자 하는 컬럼을 별도 테이블로 구성하여 테이블 레벨의 보안을 설정하는 것이다. 그리고 가장 확실한 방법은 아예 그런 민감한 정보들을 데이터 시스템으로 들여오지 않는것이다..!

레코드 레벨 보안

테이블 내의 특정 레코드들을 특정 사용자/Group/Role 에만 접근 가능하게 할 수 있다.

특정 사용자/그룹의 특정 테이블 대상 SELECT, UPDATE, DELETE 작업에 추가 조건을 다는 형태로 동작한다. 이를 RLS (Record Level Security) Policy라고 부르고, CREATE RLS POLICY 명령을 사용하여 Policy를 만들고 이를 ATTACH RLS POLICY 명령을
사용해 특정 테이블에 추가한다.

컬럼 레벨 보안과 마찬가지로 별도의 테이블로 관리하거나, 아예 데이터 시스템으로 로딩하지 않는 것이 베스트이다.

테이블 레벨 아래로 내려가는 보안은 아주 특수한 경우에만 적용하는 것이 좋겠다. 😅


Redshift 백업 - 고정비용일 때

Redshift는 기본적으로 마지막 백업으로부터 바뀐 부분만 저장하는 백업 방식을 취한다. 이를 Snapshot이라고 부르며, 이를 통해 과거로 돌아가 그 시점의 내용으로 특정 테이블을 복구하거나 Reshift 클러스터를 새로 생성하는 것도 가능하다.

자동 백업 기능

자동 백업 기능도 제공하는데 별도로 설정해주지 않았다면 1일까지의 변경을 백업할 수 있고 최대 35일까지 가능하다. 이 백업은 Redshift 클러스터를 생성한 Region에 있는 S3에 저장된다.

매뉴얼 백업

언제든 원할 때 사용자가 수동으로 생성하는 백업으로 사용자가 삭제할 때까지 유지된다. 생성 시 보존 기한을 지정할 수도 있다. 단, 유지하는 동안의 저장 비용이 청구되니 주의해야한다.

백업에서 테이블 복구

_

Redshift 백업 - 가변비용일 때 (Serverless)

고정비용일 때에 비하면 제한적인 부분이 많고 좀 더 복잡하다. 고정비용은 최대 35일까지 지원이 가능하지만 가변비용에서는 최대 24시간으로 상당히 제한적이다.

Serverless에서는 snapshot개념의 복원 지점을 Recovery Points 라고 부른다. 이를 사용하여 데이터 복구를 위해서는 Recovery Pointssnapshot 으로 변경한 다음에야 테이블 복구나 새로운 Redshift 클러스터를 생성할 수 있다.


Redshift Spectrum

Redshift의 확장 기능으로 S3에 있는 파일들을 마치 테이블처럼 SQL로 다룰 수 있게하는 서비스이다. 로그파일과 같은 비구조화 데이터를 처리하는 데에 유용하다.

Redshift로 데이터를 가져오는 오버헤드 없이 S3에 있는 파일들을 외부테이블로 처리하면서 Redshift의 테이블과 조인이 가능하다.

AWS의 또 다른 서비스인 Athena (Apache Presto) 가 비슷한 기능을 제공한다.

Fact / Dimension 테이블

보통 S3에 있는 외부테이블들은 크기가 크고 중심이 되는 데이터가 많아 Fact 테이블이 되고, Redshift에 있는 테이블들은 좀 더 상세한 내용을 다루는 Dimension 테이블이 된다.

Fact 테이블

분석의 초점이 되는 양적 정보를 포함하는 중앙 테이블로, 일반적으로 매출 수익, 판매량 또는 이익과 같은 사실 또는 측정 항목을 포함하며 비즈니스 결정에 사용된다.

테이블의 크기가 Dimension 테이블보다 훨씬 크고 외래키를 통해 여러 Dimension 테이블과 연결된다.

Dimension 테이블

Fact 테이블에 대한 상세 정보를 제공하는 테이블이다. Fact 테이블의 데이터에 맥락을 제공하여 사용자가 다양한 방식으로 데이터를 조각내고 분석 가능하게 도와주는 역할을 한다.

일반적으로 primary key를 가지며, fact 테이블의 foreign key에서 참조한다.

앞서 생성했던 실습 테이블로 아래와 같이 예를 들 수 있다.
Fact 테이블 : user_session_channel
Dimension 테이블 : user, channel (user_session_channel에 사용된 사용자/채널에 대한 정보)

Redshift ML

SQL만 사용하여 머신러닝 모델을 훈련하고 사용할 수 있게 해주는 Redshift 기능이다. 이미 모델이 만들어져 있다면 이를 사용하는 것도 가능하다. AWS SageMaker에 의해 지원된다.

SageMaker 는 Auto Pilot이라 하여 최적화된 모델을 자동 생성해주는 기능을 제공한다.

profile
거친 돌이 다듬어져 조각이 되듯

0개의 댓글