AWS 데이터레이크 환경을 운영하면서 가장 고민이 많았던 부분 중 하나가 데이터를 어떻게 공유할 것인가였습니다.
조직이 커지면서 계정이 분리되고(Multi Account), 데이터를 생산하는 팀과 소비하는 팀이 나뉘다 보니
“어디까지 열어줘야 하는지”,
“누가 어떤 방식으로 접근하는지”를 관리하는 게 점점 어려워졌습니다.
그동안 여러 방식의 데이터 공유를 경험했고,
시행착오도 꽤 겪으면서 각 방식의 장단점이 분명해졌습니다.
이에 회사 상황에 맞는 데이터 공유 방식을 시스템화하기에 앞서,
먼저 개념과 선택 기준을 리마인드겸 정리해 보고자 합니다.
목표
데이터 조회 시 권한 체크 흐름을 보고 권한 문제가 발생하는 지점을 이해합니다.
데이터를 공유하는 방법들과 각 방법들의 흐름을 이해합니다.
각 방법들을 살펴보고 적합한 데이터 공유 방법을 선택 할 수 있게 됩니다.
설명
데이터 공유 방법의 종류와 기준
여기서 말하는 데이터는 Glue Catalog에 등록된 테이블 (스키마 또는 테이블 데이터) 을 의미합니다.
데이터는 “무엇을 공유할 것인가”와 “어디까지 통제할 것인가”에 따라 선택이 달라집니다.
- 기본적으로 LakeFormation(LF)으로 관리하고 예외 상황만 따로 관리가 효과가 큼
AWS 데이터레이크 환경에서 데이터 공유는 크게 세 가지으로 나눌 수 있습니다.
1. 빠르게 데이터 파일만 공유: S3/IAM
2. 스키마,테이블까지 공유: Glue Data Catalog
3. (권장) 아니야 위의 것을 안하고 한번에 공유하고 관리: LakeFormation
데이터 조회 시 권한 체크 동작 흐름
큰 흐름은 다음과 같습니다.
사용자의 데이터 조회
- Athena 쿼리로 테이블 접근- Glue ETL이 Catalog 테이블을 입력으로 읽는 경우- EMR/Redshift Spectrum이 Catalog 테이블을 참조하는 경우- boto3를 통한 Athena, Glue, EMR, Redshift 에서 Catalog 테이블을 접근
Lake Formation 으로 관리 한다는 것은...
Lake Formation 에서 Data lake location에 S3 데이터 위치(버킷/프리픽스)를 등록하는 것
등록된 S3 위치를 가리키는 Glue Data Catalog 객체(데이터베이스/테이블) 에 대해 Lake Formation 권한 모델이 적용됩니다.
등록 시 지정한 IAM 역할을 Lake Formation이 assume 해서, 통합 서비스 (Athena/EMR/Glue 등)에 임시 자격 증명(credential vending) 을 발급
등록한 경로 아래 하위 폴더까지 관리 범위에 포함
Hybrid access mode로 등록하면, Data Catalog의 일부 데이터베이스/테이블만 LakeFormation 권한을 적용하는 식으로 점진적 전환이 가능
예시로 이해하기
예제 상황
Producer / 데이터레이크 Account A
S3에 데이터를 저장
Glue Data Catalog에 메타데이터를 관리
Consumer / 분석팀 Account B
공유받은 데이터를 Athena/Glue/ETL 등으로 활용
빠르게 데이터만 공유: S3 / IAM
가장 기본적인 방식으로, S3 객체 자체만 공유하는 구조입니다.
특징
버킷 정책 + 소비 계정 IAM 권한으로 S3 접근 허용
소비 계정에서 공유 받은 데이터의 메타정보인 직접 테이블을 생성해야 함
Glue Catalog 메타데이터는 공유되지 않음
인지해야 할 사항
빠르게 데이터만 열어줘야 할 때 가장 적합하지만
데이터만 공유를 받으니 스키마 동기화를 위해서는 glue crawler를 사용하거나 기타 보완이 필요.
구체적인 적용 흐름
1. Producer(AccountA)- 공유할 S3 버킷/프리픽스 확인- bucket에 정책에 Consumer(Account B) 접근 허용 추가- (암호화 사용 시) KMS Key 정책에 Consumer 허용 추가2. Consumer(AccountB)- 사용할 IAM Role/User에 S3 Read 권한 부여- Glue Data Catalog에 직접 테이블 생성 또는 Crawler로 스키마 생성- Athena/Glue/EMR에서 생성한 테이블로 조회 시작
스키마·테이블까지 공유: Glue Data Catalog
데이터뿐 아니라 테이블 정의(스키마) 까지 함께 공유하는 방식입니다.
특징
데이터 소유 Account의 Glue Data Catalog에 리소스 정책 설정
소비 Account는 Athena에서 외부 DataCatalog로 등록
ownerCatalog.db.table 형태로 테이블 쿼리 가능
인지해야 할 사항
Glue Catalog 권한 확인 후
- S3 접근은 S3/IAM 정책으로 별도 검사
구체적인 적용 흐름
1. Producer(Account A)- 공유할 DB/테이블 대상 확정- Data Catalog Resource Policy에 Consumer(Account B) 권한 추가- 공유할 S3 버킷/프리픽스 확인- bucket에 정책에 Consumer(Account B) 접근 허용 추가2. Consumer(Account B)- Consumer IAM Role/User에 Account A에게 받은 Glue 권한 부여- lakeformation 에서 외부 Data Catalog 등록- producerCatalog.db.table 형태로 쿼리 가능
아니야 위의 것을 안하고 LF 하나로 둘다 한꺼번에 공유하고 관리: LakeFormation (권장)
데이터레이크 전용 거버넌스 서비스인 Lake Formation에서 Data location을 활용하는 방식입니다.
특징
DB / 테이블 단위 권한 관리
행(row) / 열(column) 단위 접근 제어 가능
AWS RAM 초대 수락 + Resource Link 생성 필요
장점
데이터 접근을 정책 중심으로 관리 가능
계정/역할/사용자 단위로 세밀한 통제 가능
구체적인 적용 흐름
1. Producer(Account A)- 기존 Glue 테이블 점검 등록할 S3 경로의 DB/테이블 확인- Lake Formation Data lake location 등록 S3 경로 선택 LF가 assume할 IAM Role 지정 필요 시 Hybrid access mode 체크 (Hybrid access mode에는 기존 IAM 접근 유지 vs LF 적용 대상 분리)- Lake Formation에서 DB/테이블 권한 부여 Consumer 계정/ORG/OU에 Grant- AWS RAM 공유 초대 생성 Consumer 계정에 리소스 공유 초대 전달- (Hybrid 사용 시) LF 적용 대상 opt-in 설정 "Make LF Permissions effective immediately" 사용 가능2. Consumer(Account B)- AWS RAM 콘솔에서 초대 수락- Lake Formation에서 Resource Link 생성- Resource Link 권한 부여 Describe (Resource Link) Grant on target (원본 리소스)- Consumer 내부 IAM Role/User 에 권한 위임 (Hybrid 사용 시) opt-in 설정