Lake Formation을 활용한 세부 권한 설정 및 데이터 공유(1)

Sojeong Baek
Cloud Villains
Published in
8 min readMar 13, 2023

1. 개요

모던 데이터 아키텍처란?

  1. 확장 가능한 데이터 레이크를 신속하게 구축하고,
  2. 광범위하고 심층적인 데이터 서비스를 유기적으로 결합하여 사용할 수 있으며,
  3. 조직의 경계를 넘어 손쉽게 데이터를 공유함으로써 대규모 환경에서도 통합된 뷰를 제공하고,
  4. 통합 데이터가 통합된 보안 및 거버넌스를 준수하며,
  5. 비용 효율적임과 동시에 높은 성능을 자랑하는

아키텍처입니다.

오늘날 많은 양의 데이터들이 빠른 속도 및 다양한 형식으로 생성되고 있습니다. 이러한 데이터는 각 조직에게 중요한 자산이 되었고 이런 자산에 대한 적절한 보안 및 관리에 대한 중요성 또한 나날이 대두되고 있습니다. 또한 데이터 사일로 현상을 제거하고 조직 간 의미있는 데이터들을 유기적으로 공유하여 비즈니스를 위한 더 나은 의사 결정을 빠르게 내릴 수 있어야 합니다.

Lake Formation은 데이터 레이크를 안전하고 쉽게 구축하고 관리할 수 있게 도와주는 서비스입니다. Lake Formation을 활용하여 모던 데이터 아키텍처 요소들을 손쉽게 구현할 수 있습니다. 이 글에서는 액세스 제어에 대해서 알아보도록 하겠습니다.

실습에 앞서 필요한 내용은 다음과 같습니다.

  1. A 계정 내 ‘admin ‘유저
  2. A 계정 내 ‘DataAnalyst1’ 유저
  3. B 계정 내 ‘DataAnalyst2’ 유저
  4. A 계정 내 샘플 Glue Catalog Table(A 계정에서 본인이 갖고 있는 더미 데이터로 Glue Catalog 생성)

시작하기 앞서 Glue Crawler로 S3://mzc-test 버킷 내에 있는 SALES_DATA.csv에 대한 스키마를 추출하였습니다.

데이터는 아래와 같습니다.

2. Data Lake Location 등록

Lake Formation에 대한 첫 설정으로 데이터 레이크 위치를 설정해야 합니다. 설정된 데이터 레이크 위치는 Lake Formation을 통해 데이터를 안전하게 관리하게 됩니다.

위 그림처럼 각 리소스에 접근하기 위해서는 IAM 권한이 필요하고 추가적으로 Lake Formation 권한이 필요합니다. 예를 들면 Athena에 접근하기 위해서는 Athena에 대한 IAM 권한이 필요하며 Athena를 통해 쿼리할 데이터는 Lake Formation 권한을 통해 세부적인 접근 제어를 받습니다.

Register and ingest — Data lake locations 탭에서 위치를 지정해줍니다.

데이터가 있는 S3 버킷을 선택하고 나머지는 디폴트로 둔 뒤 저장합니다. 함께 연결되는 Role은 지정된 S3 Path의 오브젝트에 대한 권한(PutObject, GetObject, DeleteObject 및 ListBucket)을 부여합니다.

3. 세부 권한 제어

1) Named Resource 기반 액세스 제어

Lake Formation 데이터 액세스 제어에는 Named Resource 기반 및 Tag 기반의 크게 두가지 방법이 있습니다. 이름에서 유추할 수 있듯, 해당 방법은 지정된 리소스에 대해 액세스를 제어하는 방식입니다. 필터 생성을 통해 열 기반 또는 행 기반 세부 액세스 제어도 가능합니다.

Data catalog — Data filters에서 새 필터를 만듭니다.

이름을 지정한 후에 액세스 제어를 하고자 하는 DB 및 테이블을 선택합니다. Column-level access의 경우 gender, country, city 및 product를 선택합니다. Row filter expression에는 select 문 작성 시에 where 절 뒤에 들어갈 내용을 그대로 쓰면 됩니다. 해당 박스에 gender = ‘Female’이라고 입력합니다.

이로써 선택된 열 중에서도 gender 컬럼의 데이터가 ‘Female’인 데이터에만 액세스할 수 있도록 하는 필터를 생성했습니다.

Permissions — Data lake permissions 페이지 내 Grant 버튼을 클릭해서 권한 부여 페이지로 이동합니다.

권한을 주고자 하는 Principal로 DataAnalyst1 유저를 선택합니다. 리소스를 특정하여 권한을 줄 것이기 때문에 Named data catalog resources를 선택합니다. 액세스할 DB와 테이블 리소스로 sales-db 및 sales_data를 선택합니다.

여기서 Data fileters는 옵션으로 선택하지 않으면, 해당 DB 및 테이블에 대한 전체 액세스 권한을 주게 됩니다. 여기서는 더 세분화된 액세스 제어를 위해 방금 생성한 필터를 선택합니다.

2) 태그 기반 액세스 제어

각 테이블 또는 열에 태그를 지정할 수 있으며 지정된 특정 태그 별로 데이터에 대한 액세스를 제어할 수 있습니다.

Permission — LF-Tags 페이지에서 LF-tag를 생성해보겠습니다.

데이터 엔지니어가 접근해야 할 분석용 데이터와 어드민만 접근할 수 있는 인적 정보를 분리하여 관리하기 위해서 key-value 형태로 data:analytics 및 data:personel 두 가지 태그를 생성했습니다.

저장을 누른 뒤 태그가 생성된 것을 확인할 수 있습니다.

생성된 태그를 데이터에 할당할 차례입니다.

Data catalog — Tables 페이지 내에서 태그를 할당하고자 하는 테이블을 선택합니다. 테이블 세부 페이지 내 Schema 탭에서 Edit schema 버튼을 클릭합니다.

데이터 분석에 필요한 컬럼에 대해서만 체크박스 선택 후에 Edit tags를 클릭합니다.

연결하고자 하는 태그를 지정한 뒤 저장합니다. Edit schema 페이지에서도 태그 변경 사항을 저장합니다.

테이블 세부 페이지에서 조금 내려가면 LF-Tags 박스에서 태그가 연결된 컬럼들을 확인할 수 있습니다.

이로써 해당 컬럼들에 대해 ‘data:analytics’ 태그가 연결되었습니다.

태그 설정이 완료되었으니 태그 기반으로 데이터 액세스 권한을 주도록 하겠습니다.

Permissions — Data lake permissions 페이지 내 Grant 버튼을 클릭해서 권한 부여 페이지로 이동합니다.

권한을 주고자 하는 Principal로는 DataAnalyst1 유저를 선택합니다. 그 후 LF-Tags 기반으로 데이터를 제어하기 위해 Resources matched by LF-Tags를 선택하고 data:analytics 태그를 선택하였습니다.

DB 전체에 대한 권한을 주는 것이 아니기 때문에 Table permissions 박스 내에 select,Insert, Delete, Describe 및 Alter을 할 수 있게 체크박스를 선택했습니다. 그리고 Database permissions과 권한 부여 관련은 설정은 조회만 할 수 있도록 Describe를 선택했습니다.

DataAnalyst1으로 새롭게 AWS 콘솔 및 Athena 페이지로 접근했습니다.쿼리로 데이터를 select해본 결과, 접근 권한을 받은 컬럼에 대해서만 select이 가능한 것을 확인했습니다.

Lake Formation을 활용하여 데이터에 대한 세부 권한을 제어하는 두 가지 방법에 대해서 알아봤는데요, 다음 게시글에서는 손쉽게 다른 계정에 데이터 공유를 하는 법에 대해 알아보겠습니다. 👋

--

--

Sojeong Baek
Cloud Villains

A junior solutions architect loves tech and business.