AWS Lakeformation Lab #2 ( QuickSight )
1. 사전 준비
- 해당 Lab은 IAM 을 사용하는 것이 아니라 QuickSight 계정 및 그룹을 사용하는 Lab이므로 QuickSight 가입이 필수적으로 필요하다.
- 참고
- 아마존 QuickSight 서브스크립션 가입하기 - Amazon QuickSight
2. Glue Catalog Database
2.1 데이터 확인
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으로 이관시킬려면 해당 권한을 비활성화 해야한다.
3. Glue Crawler
3.1 Crawler 생성
Glue Crawler 를 통해 데이터를 Crawling 하여 Data Catalog로 생성.
AWS Management Console → Glue → DataCatalog 내 Crawlers → Create crawler
- crawler 이름 :
cr_lk_init_price
3.2 Datasource 추가
- S3 path :
s3://blee-lab/lakeformation/data/
- 나머지 내용은 그대로
3.3 Security & Role
- IAM Role : GlueSerivceRole 정책을 가지고있는 Role 이면 됨. (미리 생성해놓게 있어서 그대로 수행)
- 나머지 항목은
디폴트
3.4 Output Setting
- Target database :
lk_db
- 위에서 생성한 Database
3.5 Run Crawler
3.6 테이블 및 데이터 확인
- 테이블명은 S3 내 폴더 Key를 따라감.
4. QuickSight
QuickSight Account 는 사전에 만들어 놓아져있는 계정을 사용함.
새롭게 만들 경우 크게 어려움 없이Next
→Next
버튼으로 사용 가능함.
4.1 사용자 및 그룹 생성
4.1.1 그룹 생성
lk_group1
lk_group2
4.1.2 사용자 생성
lk_user1 → lk_group1
lk_user2 → lk_group2
- 독자 → 작성자로 변경 필요(데이터세트 확인 불가), 만들어진 Dashboard만 보려면 확인이 가능하나 작성까지 확인하기 위해서는 작성자로 변경
4.1.3 초대메일 및 암호 입력
4.1.4 생성된 사용자, 그룹 할당
- QuickSight 관리 → 그룹관리 → 그룹 선택 → 사용자 추가
4.1.5 사용자 로그인 후 현재 상태 확인
- 현재 독자이므로 Dashboard만 사용이 가능하다 → 데이터 세트 까지 확인 하기 위해서 작성자로 변경
4.2 데이터셋 생성(lk_user1, lk_group1)
- 데이터에 대한 권한이 없기 때문에 테이블 목록에 나오지 않는다.
5. Lake formation 권한 부여
5.1 QuickSight
5.1.1 Group ARN
- Group 내 ARN 값을 복사(메모장에 복사)
aws quicksight describe-group --aws-account-id xxxxxxxx --namespace default --group-name lk_group1 { "Status": 200, "Group": { "Arn": "arn:aws:quicksight:ap-northeast-2:xxxxxxx:group/default/lk_group1", "GroupName": "lk_group1", "Description": "gold + All column\n", "PrincipalId": "group/d-9b671572e9/fbdc3e89-560c-4294-a5bc-dd184ed8867a" }, "RequestId": "1b87ebd3-da8f-4384-852c-34e062b063b6" }
5.1.2 User ARN
- Group 으로 권한 부여하는 것이 아닐 경우 User 별로 권한 부여를 해야한다.
- User ARN 은 아래와 같이 찾을 수 있다.
aws quicksight describe-user --aws-account-id xxxxx --namespace default --user-name lk_user1 { "Status": 200, "User": { "Arn": "arn:aws:quicksight:ap-northeast-2:xxxxx:user/default/lk_user1", "UserName": "lk_user1", "Email": "bjlee0689@nate.com", "Role": "AUTHOR", "IdentityType": "QUICKSIGHT", "Active": true, "PrincipalId": "user/d-9b671572e9/4b12446b-2ef6-4145-9e0b-8c849c8e153d" }, "RequestId": "78d30867-3c09-4d95-8f1d-46a00c92df12" }
5.2 Lake formation 권한 부여
- 테이블에 대한 권한을 전체 부여
- 대상 Group :
lk_group1
5.3 데이터 권한 확인
- 4.2 데이터셋 생성(lk_user1, lk_group1) 과 동일한 방법으로 데이터 셋 생성
에러발생
- 해당 버킷에 대한 권한이 QuickSight 자체에 없기 때문에 관리자 계정에서 해당 버킷도 데이터 사용할 수 있도록 포함 시켜줘야함
- 위 사항이 적용 되려면 조금 걸리거나 새롭게 그냥 데이터세트를 만들면 됨.
- 데이터 확인 후 저장 및 게시
5.4 시각화
6. 심화 권한 관리
6.1 전제조건
lk_group1은
metal
이Gold
인 데이터만 확인이 가능하고
lk_group2은metal
이Iron
인 데이터와 radius 컬럼을 제외한 나머지만 사용이 가능하다.
6.2 권한 말소
이전에 lk_group1 에 부여되었던 권한은 말소 시켜야함 → 아래 그림처럼(Revoke)
6.3 DataFilter
Row (행) 기반으로 데이터 Filter을 걸기 위해서는 Lakeformation에서 Data filters라는 메뉴에서 필터를 생성해야 한다.
AWS Management Console → Lakeformation 서비스 → Data catalog 내 Data filters
6.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’
6.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’
6.4 권한부여
- 5.2 Lake formation 권한 부여 와 동일하게 권한을 부여 하나 Row Filter 만 위에서 생성한 항목 추가
6.4.1 lk_group1
6.4.2 lk_group2
6.5 확인
DataSet 생성하는 형태로 확인, DataSet 생성은 4.2 데이터셋 생성(lk_user1, lk_group1) 과 동일한 방법으로 데이터 셋 생성
6.5.1 lk_group1
- Gold 데이터만 조회됨을 확인 함.
6.5.2 lk_group2
- radius 컬럼 제외 및 Iron 데이터만 조회 됨을 확인 함.
7. Clean
- Lake Formation 에서 적용한 Permissions 삭제
- QuickSight 사용자 삭제
- QuickSight 그룹 삭제
- Console로 삭제 되지 않기 때문에 CLI를 이용해야 함.
aws quicksight delete-group --aws-account-id xxxxxx --namespace default --group-name lk_group1 { "Status": 200, "RequestId": "57d822b4-00b6-463b-bfd9-308deb1c7d00" }