AWS Lake formation Lab
1. IAM User 추가
- lk_test1 : AdministratorAccess
- lk_test2 : AdministratorAccess
![Untitled](https://blog.kakaocdn.net/dn/A0Zlg/btssfT8t1xg/REvUyB3jVkh4z4KcCkezi1/img.png)
2. Glue Catalog Database
2.1 데이터 확인
![Untitled](https://blog.kakaocdn.net/dn/bavTZK/btssfD5UfWI/ZUEeR8GXQ8sJnOkH8zKkkk/img.png)
![Untitled](https://blog.kakaocdn.net/dn/dwXbKL/btsshtuuZjX/DuUtPMqAP3YEtGc6fSOtI0/img.png)
2.2 Database 생성
AWS Management Console → Lakeformation → DataCatalog, Database → Create Database
- database :
lk_db
- Use only IAM access control for new tables in this database :
비활성화
- 해당 옵션을 활성화 하게 된다면, IAM 정책을 통해 Glue 권한이 있을 경우 모든 데이터를 확인이 가능하기 때문에 데이터 권한 자체를 Lakeformation으로 이관시킬려면 해당 권한을 비활성화 해야한다.
![Untitled](https://blog.kakaocdn.net/dn/upWGd/btssvebNpYf/q9Tng1gIpjqwkHkpo2mV41/img.png)
![Untitled](https://blog.kakaocdn.net/dn/bveQLa/btssfvfIOHg/4UjgOMnrTukXpQMVZpByl0/img.png)
3. Glue Crawler
3.1 Crawler 생성
Glue Crawler 를 통해 데이터를 Crawling 하여 Data Catalog로 생성.
AWS Management Console → Glue → DataCatalog 내 Crawlers → Create crawler
![Untitled](https://blog.kakaocdn.net/dn/FOutQ/btssvvqWqSj/VKjhPfkHSaFOvUX7RwmwF1/img.png)
- crawler 이름 :
cr_lk_init_price
![Untitled](https://blog.kakaocdn.net/dn/PrwwB/btssgsCONgP/yQNYDVvpZROFOXIGElzCtK/img.png)
3.2 Datasource 추가
![Untitled](https://blog.kakaocdn.net/dn/DYGjK/btssht2hS3i/aWfh82T0RM0RVBRw8e7MJ0/img.png)
- S3 path :
s3://blee-lab/lakeformation/data/
- 나머지 내용은 그대로
![Untitled](https://blog.kakaocdn.net/dn/qKTyu/btsshwSjctD/AR8OnK35ePU59iTph6mZ2K/img.png)
3.3 Security
- IAM Role : GlueSerivceRole 정책을 가지고있는 Role 이면 됨. (미리 생성해놓게 있어서 그대로 수행)
- 나머지 항목은
디폴트
![Untitled](https://blog.kakaocdn.net/dn/bZekBM/btssf1epkAa/nMP5Ytzxc4f1ZWWkg1qsj1/img.png)
3.4 Output Setting
- Target database :
lk_db
- 위에서 생성한 Database
![Untitled](https://blog.kakaocdn.net/dn/J20ws/btssf1lcPaA/U2vdbC4WxRgLhAAqYhnT71/img.png)
3.5 Run Crawler
![Untitled](https://blog.kakaocdn.net/dn/XqhKw/btssgqkG445/nkVc5QxGRJLt8dSbchgAPk/img.png)
3.6 테이블 및 데이터 확인
![Untitled](https://blog.kakaocdn.net/dn/lMePE/btssilbTJ1Z/mVXQipNk9UqSRktx7Y48XK/img.png)
- 테이블명은 S3 내 폴더 Key를 따라감.
![Untitled](https://blog.kakaocdn.net/dn/duNXUb/btssf3DipXd/CE6LOWRm3KqBmve8VZzSNK/img.png)
![Untitled](https://blog.kakaocdn.net/dn/mfYel/btssqCD3eHJ/z3f7Pdraik4ifRLbTvhHB1/img.png)
4. 사용자별 확인
lk_test1 로 테스트 진행
현재 lk_test1과 lk_test2는 동일한 권한임
4.1 해당 테이블 여부 확인
Athena를 통해 확인 결과 테이블 목록이 보이지 않음 → Lakeformation으로 권한 부여가 안되어있음.
![Untitled](https://blog.kakaocdn.net/dn/yiXAN/btssvwci1gt/JpSQdvBVR9SkskwyRNIgfK/img.png)
데이터 조회
권한이 없어서 조회가 안되다는 에러 메세지
![Untitled](https://blog.kakaocdn.net/dn/PKneB/btssfHgaXFQ/TNPgYWZintd3uvvkVTyvdK/img.png)
Glue Database 정보 조회
Glue 관련하여 스키마같은 정보 또한 권한이 없기 때문에 확인 불가
![Untitled](https://blog.kakaocdn.net/dn/9WACx/btssvfhtnmt/QapOKHl4KrxDDVAHSxCS21/img.png)
4.2 권한 부여
Lakeformation을 사용할 수 있는 master 계정으로 lk_test1 계정에 권한 부여 수행
AWS Management Console → Lakeformation → Permissions → Data Lake permissions 메뉴로 이동
![Untitled](https://blog.kakaocdn.net/dn/dypcmQ/btsshr4tb2a/teBcbQ1sMKBY39bOOcOD60/img.png)
![Untitled](https://blog.kakaocdn.net/dn/baU2LU/btssilbTJ35/ZpoWO3bu1RxgdiCkOJGWSK/img.png)
- Principals
- IAM Users and roles :
lk_test1
- IAM Users and roles :
- LF-Tags or catalog resources
- Named data catalog resources 선택
- Databases :
lk_db
- Tables :
data
- Table permissions
- Table permissions :
Select, Describe
- Table permissions :
- Data Permissions :
All Data access
![Untitled](https://blog.kakaocdn.net/dn/bdvUrN/btssimWbI7r/fokooxKX7QJkslu8aWOCaK/img.png)
4.3 데이터 확인
4.3.1 Glue DataCatalog
새롭게 테이블이 추가 된 것을 확인할 수 있다.
![Untitled](https://blog.kakaocdn.net/dn/yxqJT/btssgm3Dsul/sfwg2Ir1PhLnkz7bJeJFck/img.png)
![Untitled](https://blog.kakaocdn.net/dn/bxikRK/btssveJDbO4/voWlpjyCKSNNzGsmzYX0eK/img.png)
4.3.2 Athena 데이터 조회
![Untitled](https://blog.kakaocdn.net/dn/ng6ev/btssvgUZun3/WeKEjXT7i3KmW7ToiWVjA0/img.png)
5. 심화 권한 관리
5.1 전제조건
lk_test1 사용자는
metal
이Gold
인 데이터만 확인이 가능하고
lk_test2 사용자는metal
이Iron
인 데이터와 radius 컬럼을 제외한 나머지만 사용이 가능하다.
5.2 권한 말소
이전에 lk_test1 에 부여되었던 권한은 말소 시켜야함
![Untitled](https://blog.kakaocdn.net/dn/bOHfqr/btssuwjkpyu/YlhjEuPB99F5X4Fk3KCIyk/img.png)
5.3 DataFilter
Row (행) 기반으로 데이터 Filter을 걸기 위해서는 Lakeformation에서 Data filters라는 메뉴에서 필터를 생성해야 한다.
AWS Management Console → Lakeformation 서비스 → Data catalog 내 Data filters
![Untitled](https://blog.kakaocdn.net/dn/dEsIe2/btssgt9yN4R/ja9oqE0BvpKqbBLe2ceIhk/img.png)
5.3.1 metal == Gold
- Data Filter Name :
MetalGold
- Target database :
lk_db
- Target table :
data
- Column-level access :
Access to all columns
, 컬럼은 전체 보여줘야하기 때문에 - Row filter expression :
metal = ‘Gold’
![Untitled](https://blog.kakaocdn.net/dn/F77Oo/btssk9vvhhO/CzWC1UKZmVmbvK3Kzm18Jk/img.png)
5.3.2 metal == Iron
- Data Filter Name :
MetalIron
- Target database :
lk_db
- Target table :
data
- Column-level access :
Exclude Columns
, radius 선택 (해당 컬럼은 제외 하기 위해서) - Row filter expression :
metal = ‘Iron’
![Untitled](https://blog.kakaocdn.net/dn/beUxHB/btsshmvf84j/qu57ALlRfyJmGKa7X47Hn1/img.png)
5.4 권한 부여
4.2 권한 부여 와 동일 방법으로 부여 하나 Row Filter만 추가 하면 됨.
5.4.1 lk_test1
![Untitled](https://blog.kakaocdn.net/dn/dI6Sah/btssqn74VKv/lmp8of6KjlvyBu20EfbfC1/img.png)
5.4.2 lk_test2
![Untitled](https://blog.kakaocdn.net/dn/FDr3U/btssveiyvRU/aawjNOX2CNoExvLvuFkkwk/img.png)
5.5 확인
5.5.1 lk_test1
Gold + 모든 컬럼만 확인 가능한 상태
![Untitled](https://blog.kakaocdn.net/dn/cB5tG7/btssuxoZp0k/8ukBoAYjVrySC5KMqi3u81/img.png)
5.5.2 lk_test2
Iron + radius 컬럼 제외 컬럼만 확인
![Untitled](https://blog.kakaocdn.net/dn/b30nTt/btssfvtgi4h/gOKJn912SywLBre8I3wEp1/img.png)