

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Lake Formation 태그 기반 액세스 제어를 사용한 데이터 레이크 관리
<a name="managing-dl-tutorial"></a>

수천 명의 고객이 페타바이트 규모의 데이터 레이크를 구축하고 있습니다 AWS. 이러한 고객 중 다수는 AWS Lake Formation 를 사용하여 조직 전체에서 데이터 레이크를 쉽게 구축하고 공유합니다. 테이블과 사용자 수가 증가함에 따라 데이터 관리자와 관리자는 데이터 레이크에 대한 권한을 대규모로 쉽게 관리할 수 있는 방법을 찾고 있습니다. Lake Formation 태그 기반 액세스 제어(LF-TBAC)는 데이터 관리자가 데이터 분류 및 온톨로지에 따라 LF 태그를 생성한 다음 리소스에 연결하도록 하는 방식으로 이 문제를 해결합니다.**

LF-TBAC는 속성을 기반으로 권한을 정의하는 권한 부여 전략입니다. Lake Formation에서 이러한 속성을 LF 태그라고 합니다. 데이터 카탈로그 리소스 및 Lake Formation 보안 주체에 LF 태그를 연결할 수 있습니다. 데이터 레이크 관리자는 LF 태그를 사용하여 Lake Formation 리소스에 대한 권한을 할당하고 취소할 수 있습니다. 자세한 내용은 [Lake Formation 태그 기반 액세스 제어](tag-based-access-control.md) 섹션을 참조하세요.

 이 자습서에서는 AWS 퍼블릭 데이터 세트를 사용하여 Lake Formation 태그 기반 액세스 제어 정책을 생성하는 방법을 보여줍니다. 또한 Lake Formation 태그 기반 액세스 정책이 연결된 테이블, 데이터베이스 및 열을 쿼리하는 방법도 보여줍니다.

다음 사용 사례에 대해 LF-TBAC를 사용할 수 있습니다.
+ 데이터 레이크 관리자가 액세스 권한을 부여해야 하는 테이블과 보안 주체가 많습니다.
+ 온톨로지를 기반으로 데이터를 분류하고 분류에 따라 권한을 부여하려고 합니다.
+ 데이터 레이크 관리자는 느슨하게 결합된 방식으로 권한을 동적으로 할당하려고 합니다.

다음은 LF-TBAC를 사용하여 권한을 구성하기 위한 개략적인 단계입니다.

1. 데이터 관리자는 두 개의 LF 태그인 `Confidential` 및 `Sensitive`를 사용하여 태그 온톨로지를 정의합니다. `Confidential=True`인 데이터에는 더 엄격한 액세스 제어가 적용됩니다. `Sensitive=True`인 데이터에는 분석가의 구체적인 분석이 필요합니다.

1. 데이터 관리자는 데이터 엔지니어가 다양한 LF 태그가 있는 테이블을 구축할 수 있도록 다양한 권한 수준을 할당합니다.

1. 데이터 엔지니어는 `tag_database` 및 `col_tag_database`의 두 가지 데이터베이스를 구축합니다. `tag_database`의 모든 테이블은 `Confidential=True`로 구성됩니다. `col_tag_database`의 모든 테이블은 `Confidential=False`로 구성됩니다. `col_tag_database`에 있는 테이블의 일부 열에는 특정 분석 요구 사항에 따라 `Sensitive=True` 태그가 지정되어 있습니다.

1. 데이터 엔지니어는 분석가에게 특정 표현식 조건 `Confidential=True` 및`Confidential=False`,`Sensitive=True`이 있는 테이블에 대한 읽기 권한을 부여합니다.

1. 이 구성을 통해 데이터 분석가는 올바른 데이터로 분석을 수행하는 데 집중할 수 있습니다.

**Topics**
+ [대상 독자](#tut-manage-dl-roles)
+ [사전 조건](#tut-manage-dl-prereqs)
+ [1단계: 리소스 프로비저닝](#tut-manage-dl-provision-resources)
+ [2단계: 데이터 위치 등록, LF 태그 온톨로지 생성 및 권한 부여](#tut-manage-dl-register-datalocation-lftag)
+ [3단계: Lake Formation 데이터베이스 생성](#tut-manage-dl-tbac-create-databases)
+ [4단계: 테이블 권한 부여](#tut-manage-dl-grant-table-permissions)
+ [5단계: Amazon Athena에서 쿼리를 실행하여 권한 확인](#tut-manage-dl-tbac-run-query)
+ [6단계: AWS 리소스 정리](#tut-manage-dl-tbac-clean-up-db)

## 대상 독자
<a name="tut-manage-dl-roles"></a>



이 자습서는 데이터 관리자, 데이터 엔지니어 및 데이터 분석가를 대상으로 합니다. Lake Formation에서 권한을 관리하고 AWS Glue Data Catalog 관리하는 경우 생산 계정 내의 데이터 관리자는 지원하는 함수에 따라 기능적 소유권을 가지며 다양한 소비자, 외부 조직 및 계정에 액세스 권한을 부여할 수 있습니다.

다음 테이블에는 이 자습서에서 사용되는 역할이 나열되어 있습니다.


| Role | 설명 | 
| --- | --- | 
| 데이터 관리자(관리자) | lf-data-steward 사용자는 다음과 같은 액세스 권한을 가집니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/managing-dl-tutorial.html)  | 
| 데이터 엔지니어 | `lf-data-engineer` 사용자는 다음과 같은 액세스 권한을 가집니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/managing-dl-tutorial.html) | 
| 데이터 분석가 | lf-data-analyst 사용자는 다음과 같은 액세스 권한을 가집니다.[See the AWS documentation website for more details](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/managing-dl-tutorial.html)  | 

## 사전 조건
<a name="tut-manage-dl-prereqs"></a>

이 자습서를 시작하기 전에 올바른 권한이 AWS 계정 있는 관리 사용자로 로그인하는 데 사용할 수 있는이 있어야 합니다. 자세한 내용은 [초기 AWS 구성 작업 완료](getting-started-setup.md#initial-aws-signup) 단원을 참조하십시오.

이 자습서에서는 사용자가 IAM에 대해 잘 알고 있다고 가정합니다. IAM에 대한 자세한 내용은 [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 참조하세요.

## 1단계: 리소스 프로비저닝
<a name="tut-manage-dl-provision-resources"></a>

이 자습서에는 빠른 설정을 위한 AWS CloudFormation 템플릿이 포함되어 있습니다. 템플릿을 검토한 후 필요에 맞게 사용자 지정할 수 있습니다. 이 템플릿은 이 연습을 수행하기 위해 세 가지 역할([대상 독자](#tut-manage-dl-roles) 참조)을 생성하고 nyc-taxi-data 데이터세트를 로컬 Amazon S3 버킷에 복사합니다.
+ Amazon S3 버킷
+ 적절한 Lake Formation 설정
+ 적절한 Amazon EC2 리소스
+ 자격 증명이 있는 세 가지 IAM 역할

**리소스 생성**

1. 미국 동부(버지니아 북부) 리전의 [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) AWS CloudFormation 콘솔에 로그인합니다.

1. [스택 시작](https://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/new?templateURL=https://aws-bigdata-blog.s3.amazonaws.com/artifacts/lakeformationtbac/cfn/tbac_permission.json)을 선택합니다.

1.  **다음**을 선택합니다.

1.  **사용자 구성** 섹션에서 세 가지 역할에 대한 암호를 입력합니다(`DataStewardUserPassword`, `DataEngineerUserPassword` 및 `DataAnalystUserPassword`).

1.  마지막 페이지의 세부 정보를 검토하고 **이 IAM 리소스를 생성할 AWS CloudFormation 수 있음을 승인합니다**를 선택합니다.

1.  **생성(Create)**을 선택합니다.

   스택 생성에는 최대 5분이 걸릴 수 있습니다.

**참고**  
자습서를 완료한 후 요금이 계속 발생하지 CloudFormation 않도록에서 스택을 삭제할 수 있습니다. 스택의 이벤트 상태에서 리소스가 성공적으로 삭제되었는지 확인하세요.

## 2단계: 데이터 위치 등록, LF 태그 온톨로지 생성 및 권한 부여
<a name="tut-manage-dl-register-datalocation-lftag"></a>

이 단계에서 데이터 관리자 사용자는 두 개의 LF 태그(`Confidential` 및 `Sensitive`)로 태그 온톨로지를 정의하고 새로 생성된 LF 태그를 리소스에 연결할 수 있는 권한을 특정 IAM 보안 주체에게 제공합니다.

**데이터 위치 등록 및 LF 태그 온톨로지 정의**

1. 데이터 관리자 사용자(`lf-data-steward`)로서 첫 번째 단계를 수행하여 Amazon S3의 데이터와 Lake Formation의 데이터 카탈로그를 확인합니다.

   1.  CloudFormation 스택을 배포할 때 사용한 암호`lf-data-steward`로 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) Lake Formation 콘솔에 로그인합니다.

   1. 탐색 창의 **권한**에서 **관리 역할 및 작업**을 선택합니다.

   1. **데이터 레이크 관리자** 섹션에서 **추가**를 선택합니다.

   1. **관리자 추가** 페이지의 **IAM 사용자 및 역할**에서 사용자 `lf-data-steward`를 선택합니다.

   1. **저장**을 선택하여 `lf-data-steward`를 Lake Formation 관리자로 추가합니다.

1. 다음으로, IAM 기반 액세스 제어 대신 Lake Formation 권한을 사용하여 카탈로그 리소스를 제어하도록 데이터 카탈로그 설정을 업데이트합니다.

   1. 탐색 창의 **관리**에서 **데이터 카탈로그 설정**을 선택합니다.

   1. **새 데이터베이스에 대해 IAM 액세스 제어만 사용**을 선택 취소합니다.

   1. **새 데이터베이스의 새 테이블에 대해 IAM 액세스 제어만 사용**을 선택 취소합니다.

   1. **저장**을 클릭합니다.

1. 다음으로, 데이터 레이크의 데이터 위치를 등록합니다.

   1. 탐색 창의 **관리**에서 **데이터 레이크 위치**를 선택합니다.

   1. **위치 등록**을 선택합니다.

   1. **위치 등록 페이지**에서 **Amazon S3 경로**에 `s3://lf-tagbased-demo-{{Account-ID}}`를 입력합니다.

   1. **IAM** 역할의 경우 기본값 `AWSServiceRoleForLakeFormationDataAccess`를 그대로 둡니다.

   1. **Lake Formation**을 권한 모드로 선택합니다.

   1. **위치 등록**을 선택합니다.

1. 다음으로, LF 태그를 정의하여 온톨로지를 생성합니다.

   1. 탐색 창의 **권한**에서 **LF 태그 및 권한**을 선택합니다.

   1. **LF 태그 추가**를 선택합니다.

   1. **키**에 `Confidential`를 입력합니다.

   1. **값**에 대해 `True` 및 `False`를 추가합니다.

   1. **LF 태그 추가**를 선택합니다.

   1. 단계를 반복하여 값이 `True`인 **LF 태그** `Sensitive`를 생성합니다.

   이 연습에 필요한 모든 LF 태그를 생성했습니다.

**IAM 사용자에게 권한 부여**

1. 다음으로, 특정 IAM 보안 주체에게 새로 생성된 LF 태그를 리소스에 연결할 수 있는 권한을 제공합니다.

   1. 탐색 창의 **권한**에서 **LF 태그 및 권한**을 선택합니다.

   1. **LF 태그 권한** 섹션에서 **권한 부여**를 선택합니다.

   1. **권한 유형**에서 **LF 태그 키-값 페어 권한**을 선택합니다.

   1. **IAM 사용자 및 역할**을 선택합니다.

   1. **IAM 사용자 및 역할**의 경우 `lf-data-engineer` 역할을 검색하고 선택합니다.

   1. **LF 태그** 섹션에서 값이 `True` 및 `False`인 `Confidential` 키를 추가하고 값이 `True`인 `key` `Sensitive`를 추가합니다.

   1. **권한**에서 **권한**과 **부여 가능한 권한**에 대해 **설명** 및 **연결**을 선택합니다.

   1. **권한 부여**를 선택합니다.

1. 그런 다음 `lf-data-engineer`에 데이터 카탈로그와에서 생성한 기본 Amazon S3 버킷에 데이터베이스를 생성할 수 있는 권한을 부여합니다 AWS CloudFormation.

   1. 탐색 창의 **관리**에서 **관리 역할 및 작업**을 선택합니다.

   1.  **데이터베이스 생성자** 섹션에서 **권한 부여**를 선택합니다.

   1. **IAM 사용자 및 역할**에 대해 `lf-data-engineer` 역할을 선택합니다.

   1. **카탈로그 권한**에 대해 **데이터베이스 생성**을 선택합니다.

   1. **권한 부여**를 선택합니다.

1. 다음으로, Amazon S3 버킷`(s3://lf-tagbased-demo-{{Account-ID}})`에 대한 권한을 `lf-data-engineer` 사용자에게 부여합니다.

   1. 탐색 창의 **권한**에서 **데이터 위치**를 선택합니다.

   1. **권한 부여**를 선택합니다.

   1. **내 계정**을 선택합니다.

   1. **IAM 사용자 및 역할**에 대해 `lf-data-engineer` 역할을 선택합니다.

   1. **스토리지 위치에** CloudFormation 템플릿에서 생성한 Amazon S3 버킷을 입력합니다`(s3://lf-tagbased-demo-{{Account-ID}})`.

   1. **권한 부여**를 선택합니다.

1. 다음으로, **LF 태그** 표현식 `Confidential=True`와 관련된 리소스에 대해 `lf-data-engineer`에게 부여 가능한 권한을 부여합니다.

   1. 탐색 창의 **권한**에서 **데이터 레이크 권한**을 선택합니다.

   1. **권한 부여**를 선택합니다.

   1. **IAM 사용자 및 역할**을 선택합니다.

   1.  `lf-data-engineer` 역할을 선택합니다.

   1. **LF 태그 또는 카탈로그 리소스** 섹션에서 **LF 태그와 일치하는 리소스**를 선택합니다.

   1. **LF 태그 키-값 페어 추가**를 선택합니다.

   1.  값이 `True`인 `Confidential` 키를 추가합니다.

   1. **데이터베이스 권한** 섹션에서 **데이터베이스 권한** 및 **부여 가능한 권한**에 대해 **설명**을 선택합니다.

   1. **테이블 권한** 섹션에서 **테이블 권한**과 **부여 가능한 권한** 모두에 대해 **설명**, **선택** 및 **변경**을 선택합니다.

   1.  **권한 부여**를 선택합니다.

1. 다음으로, LF 태그 표현식 `Confidential=False`와 관련된 리소스에 대해 `lf-data-engineer`에게 부여 가능한 권한을 부여합니다.

   1. 탐색 창의 **권한**에서 **데이터 레이크 권한**을 선택합니다.

   1. **권한 부여**를 선택합니다.

   1. **IAM 사용자 및 역할**을 선택합니다.

   1. `lf-data-engineer` 역할을 선택합니다.

   1.  **LF 태그와 일치하는 리소스**를 선택합니다.

   1. **LF 태그 추가**를 선택합니다.

   1.  값이 `False`인 `Confidential` 키를 추가합니다.

   1. **데이터베이스 권한** 섹션에서 **데이터베이스 권한** 및 **부여 가능한 권한**에 대해 **설명**을 선택합니다.

   1. **테이블 및 열 권한** 섹션에서는 아무 것도 선택하지 않습니다.

   1. **권한 부여**를 선택합니다.

1. 다음으로, **LF 태그** 키-값 페어 `Confidential=False` 및 `Sensitive=True`와 연결된 리소스에 대해 `lf-data-engineer`에게 부여 가능한 권한을 부여합니다.

   1. 탐색 창의 **권한**에서 **데이터 권한**을 선택합니다.

   1. **권한 부여**를 선택합니다.

   1. **IAM 사용자 및 역할**을 선택합니다.

   1. `lf-data-engineer` 역할을 선택합니다.

   1. **LF 태그 또는 카탈로그 리소스** 섹션에서 **LF 태그와 일치하는 리소스**를 선택합니다.

   1. **LF 태그 추가**를 선택합니다.

   1.  값이 `False`인 `Confidential` 키를 추가합니다.

   1. **LF 태그 키-값 페어 추가**를 선택합니다.

   1. 값이 `True`인 `Sensitive` 키를 추가합니다.

   1. **데이터베이스 권한** 섹션에서 **데이터베이스 권한** 및 **부여 가능한 권한**에 대해 **설명**을 선택합니다.

   1. **테이블 권한** 섹션에서 **테이블 권한**과 **부여 가능한 권한** 모두에 대해 **설명**, **선택** 및 **변경**을 선택합니다.

   1. **권한 부여**를 선택합니다.

## 3단계: Lake Formation 데이터베이스 생성
<a name="tut-manage-dl-tbac-create-databases"></a>

이 단계에서는 두 개의 데이터베이스를 생성하고 테스트 목적으로 데이터베이스와 특정 열에 LF 태그를 연결합니다.

**데이터베이스 수준 액세스를 위한 데이터베이스 및 테이블 생성**

1. 먼저 `tag_database` 데이터베이스와 `source_data` 테이블을 생성하고 적절한 LF 태그를 연결합니다.

   1. **데이터 카탈로그**의 Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))에서 **데이터베이스**를 선택합니다.

   1. **데이터베이스 생성**을 선택합니다.

   1. **이름**에 `tag_database`를 입력합니다.

   1. **위치에** CloudFormation 템플릿에서 생성한 Amazon S3 위치를 입력합니다`(s3://lf-tagbased-demo-{{Account-ID}}/tag_database/)`.

   1. **이 데이터베이스의 새 테이블에 대해 IAM 액세스 제어만 사용**을 선택 취소합니다.

   1. **데이터베이스 생성**을 선택합니다.

1. 다음으로, `tag_database` 내에 새 테이블을 생성합니다.

   1. **데이터베이스** 페이지에서 `tag_database` 데이터베이스를 선택합니다.

   1.  **테이블 보기**를 선택하고 **테이블 생성**을 클릭합니다.

   1. **이름**에 `source_data`를 입력합니다.

   1. **데이터베이스**로 `tag_database` 데이터베이스를 선택합니다.

   1. **테이블 형식**에서 **표준 AWS Glue 테이블**을 선택합니다.

   1. **데이터 위치**에서 **내 계정 내의 지정된 경로**를 선택합니다.

   1. 경로 포함에 CloudFormation 템플릿에서 `tag_database` 생성한 경로를 입력합니다`(s3://lf-tagbased-demo{{Account-ID}}/tag_database/)`.

   1. **데이터 형식**에서 **CSV**를 선택합니다.

   1. **스키마 업로드**에서 다음과 같은 열 구조의 JSON 배열을 입력하여 스키마를 생성합니다.

      ```
       [
                     {
                          "Name": "vendorid",
                          "Type": "string"
                     },
                     {
                          "Name": "lpep_pickup_datetime",
                          "Type": "string"                    
                     },
                     {
                          "Name": "lpep_dropoff_datetime",
                          "Type": "string"  
                    
                     },
                        {
                          "Name": "store_and_fwd_flag",
                          "Type": "string"                                
                     },
                        {
                          "Name": "ratecodeid",
                          "Type": "string"                   
                          
                     },
                        {
                          "Name": "pulocationid",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "dolocationid",
                          "Type": "string"                   
                          
                     },
                        {
                          "Name": "passenger_count",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "trip_distance",
                          "Type": "string"                    
                          
                     }, 
                        {
                          "Name": "fare_amount",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "extra",
                          "Type": "string"                   
                          
                     },
                        {
                          "Name": "mta_tax",
                          "Type": "string"                    
                          
                     },
                     {
                          "Name": "tip_amount",
                          "Type": "string"                   
                          
                     },
                        {
                          "Name": "tolls_amount",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "ehail_fee",
                          "Type": "string"                    
                          
                     }, 
                     {
                          "Name": "improvement_surcharge",
                          "Type": "string"                   
                          
                     },
                     {
                          "Name": "total_amount",
                          "Type": "string"                    
                          
                     },
                     {
                          "Name": "payment_type",
                          "Type": "string"                    
                          
                     }
       ]
      ```

   1. **업로드**를 선택합니다. 스키마를 업로드한 후 테이블 스키마는 다음 스크린샷과 같아야 합니다.  
![공급업체 ID, 픽업 및 인계 날짜/시간, 위치 IDs, 모든 문자열 데이터 유형을 포함한 18개의 열이 있는 테이블 스키마입니다.](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/tutorial-manage-dl-tbac1.jpg)

   1. **제출**을 선택합니다.

1. 다음으로 데이터베이스 수준에서 LF 태그를 연결합니다.

   1. **데이터베이스** 페이지에서 `tag_database`를 찾아서 선택합니다.

   1. **작업** 메뉴에서 **LF 태그 편집**을 선택합니다.

   1. **새 LF 태그 할당**을 선택합니다.

   1. **할당된 키**에 대해 이전에 생성한 `Confidential` LF 태그를 선택합니다.

   1. **값**에서 `True`를 선택합니다.

   1. **저장**을 선택합니다.

   이렇게 하면 tag\_database 데이터베이스에 대한 LF 태그 할당이 완료됩니다.

**열 수준 액세스를 위한 데이터베이스 및 테이블 생성**

다음 단계를 반복하여 `col_tag_database` 데이터베이스와 `source_data_col_lvl` 테이블을 생성하고 열 수준에서 LF 태그를 연결합니다.

1. **데이터베이스** 페이지에서 **데이터베이스 생성**을 선택합니다.

1. **이름**에 `col_tag_database`를 입력합니다.

1. **위치에** CloudFormation 템플릿에서 생성한 Amazon S3 위치를 입력합니다`(s3://lf-tagbased-demo-{{Account-ID}}/col_tag_database/)`.

1. **이 데이터베이스의 새 테이블에 대해 IAM 액세스 제어만 사용**을 선택 취소합니다.

1. **데이터베이스 생성**을 선택합니다.

1. **데이터베이스** 페이지에서 새 데이터베이스`(col_tag_database)`를 선택합니다.

1. **테이블 보기**를 선택하고 **테이블 생성**을 클릭합니다.

1. **이름**에 `source_data_col_lvl`를 입력합니다.

1. **데이터베이스**에서 새 데이터베이스`(col_tag_database)`를 선택합니다.

1. **테이블 형식**에서 **표준 AWS Glue 테이블**을 선택합니다.

1. **데이터 위치**에서 **내 계정 내의 지정된 경로**를 선택합니다.

1. `col_tag_database` `(s3://lf-tagbased-demo-{{Account-ID}}/col_tag_database/)`에 대해 Amazon S3 경로를 입력합니다.

1. **데이터 형식**에서 `CSV`를 선택합니다.

1. `Upload schema`에서 다음 스키마 JSON을 입력합니다.

   ```
   [
                  {
                       "Name": "vendorid",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "lpep_pickup_datetime",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "lpep_dropoff_datetime",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "store_and_fwd_flag",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "ratecodeid",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "pulocationid",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "dolocationid",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "passenger_count",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "trip_distance",
                       "Type": "string"
                       
                       
                  }, 
                     {
                       "Name": "fare_amount",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "extra",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "mta_tax",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "tip_amount",
                       "Type": "string"
                       
                       
                  },
                     {
                       "Name": "tolls_amount",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "ehail_fee",
                       "Type": "string"
                       
                       
                  }, 
                  {
                       "Name": "improvement_surcharge",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "total_amount",
                       "Type": "string"
                       
                       
                  },
                  {
                       "Name": "payment_type",
                       "Type": "string"
                       
                       
                  }
   ]
   ```

1. `Upload`을 선택합니다. 스키마를 업로드한 후 테이블 스키마는 다음 스크린샷과 같아야 합니다.  
![공급업체 ID, 픽업 및 인계 날짜/시간, 요금 금액을 포함한 18개의 열이 있는 테이블 스키마입니다.](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/tutorial-manage-dl-tbac2.jpg)

1. **제출**을 선택하여 테이블 생성을 완료합니다.

1. 이제 `Sensitive=True` LF 태그를 `vendorid` 및 `fare_amount` 열에 연결합니다.

   1. **테이블** 페이지에서 생성한 테이블`(source_data_col_lvl)`을 선택합니다.

   1. **작업** 메뉴에서 **스키마**를 선택합니다.

   1. `vendorid` 열을 선택하고 **LF 태그 편집**을 선택합니다.

   1. **할당된 키**에 대해 **Sensitive**를 선택합니다.

   1.  **값**으로 **True**를 선택합니다.

   1. **저장**을 선택합니다.

1. 다음으로, `Confidential=False` LF 태그를 `col_tag_database`에 연결합니다. 에서 로그인할 `col_tag_database` 때가 데이터베이스를 설명하는 `lf-data-analyst` 데 필요합니다 Amazon Athena.

   1. **데이터베이스** 페이지에서 `col_tag_database`를 찾아서 선택합니다.

   1. **작업** 메뉴에서 **LF 태그 편집**을 선택합니다.

   1. **새 LF 태그 할당**을 선택합니다.

   1. **할당된 키**에 대해 이전에 생성한 `Confidential` LF 태그를 선택합니다.

   1. **값**에서 `False`를 선택합니다.

   1. **저장**을 선택합니다.

## 4단계: 테이블 권한 부여
<a name="tut-manage-dl-grant-table-permissions"></a>

LF 태그 `Confidential` 및 `Sensitive`를 사용하여 데이터 분석가에게 데이터베이스 `tag_database` 및 테이블 `col_tag_database` 사용 권한을 부여합니다.

1. 다음 단계에 따라 LF 태그 `Confidential=True`(데이터베이스: tag\_database)와 연결된 객체에 대해 데이터베이스에 대한 `Describe` 권한과 테이블에 대한 `Select` 권한을 가질 수 있도록 `lf-data-analyst` 사용자에게 권한을 부여합니다.

   1. Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))에 `lf-data-engineer`로 로그인합니다.

   1. **권한**에서 **데이터 레이크 권한**을 선택합니다.

   1. **권한 부여**를 선택합니다.

   1. **보안 주체**에서 **IAM 사용자 및 역할**을 선택합니다.

   1. **IAM 사용자 및 역할**에 대해 `lf-data-analyst`를 선택합니다.

   1. **LF 태그 또는 카탈로그 리소스**에서 **LF 태그와 일치하는 리소스**를 선택합니다.

   1. **LF 태그 추가**를 선택합니다.

   1. **키**로 `Confidential`를 선택합니다.

   1. **값**에서 `True`를 선택합니다.

   1. **데이터베이스 권한**에서 `Describe`을 선택합니다.

   1. **테이블 권한**에서 **선택** 및 **설명**을 선택합니다.

   1. **권한 부여**를 선택합니다.

1. 다음으로, 단계를 반복하여 데이터 분석가에게 `Confidential=False`의 LF 태그 표현식에 대한 권한을 부여합니다. 이 **LF 태그**는 Amazon Athena에서 `lf-data-analyst`로 로그인했을 때 `col_tag_database`와 `source_data_col_lvl` 테이블을 설명하는 데 사용됩니다.

   1. Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))에 `lf-data-engineer`로 로그인합니다.

   1. **데이터베이스** 페이지에서 `col_tag_database` 데이터베이스를 선택합니다.

   1. **작업**과 **권한 부여**를 선택합니다.

   1. **보안 주체**에서 **IAM 사용자 및 역할**을 선택합니다.

   1. **IAM 사용자 및 역할**에 대해 `lf-data-analyst`를 선택합니다.

   1. **LF 태그와 일치하는 리소스**를 선택합니다.

   1. **LF 태그 추가**를 선택합니다.

   1. **키**로 `Confidential`를 선택합니다.

   1.  **값**에서 `False`를 선택합니다.

   1. **데이터베이스 권한**에서 `Describe`을 선택합니다.

   1. **테이블 권한**에서는 아무 것도 선택하지 않습니다.

   1. **권한 부여**를 선택합니다.

1. 다음으로, 단계를 반복하여 데이터 분석가에게 `Confidential=False` 및 `Sensitive=True`의 LF 태그 표현식에 대한 권한을 부여합니다. 이 LF 태그는 Amazon Athena에서 `lf-data-analyst`로 로그인했을 때 `col_tag_database`와 `source_data_col_lvl`(열 수준) 테이블을 설명하는 데 사용됩니다.

   1. Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))에 `lf-data-engineer`로 로그인합니다.

   1. 데이터베이스 페이지에서 데이터베이스 `col_tag_database`를 선택합니다.

   1. **작업**과 **권한 부여**를 선택합니다.

   1. **보안 주체**에서 **IAM 사용자 및 역할**을 선택합니다.

   1.  **IAM 사용자 및 역할**에 대해 `lf-data-analyst`를 선택합니다.

   1. **LF 태그와 일치하는 리소스**를 선택합니다.

   1. **LF 태그 추가**를 선택합니다.

   1. **키**로 `Confidential`를 선택합니다.

   1. **값**에서 `False`를 선택합니다.

   1. **LF 태그 추가**를 선택합니다.

   1. **키**로 `Sensitive`를 선택합니다.

   1. **값**에서 `True`를 선택합니다.

   1. **데이터베이스 권한**에서 `Describe`을 선택합니다.

   1. **테이블 권한**에서 `Select` 및 `Describe`을 선택합니다.

   1. **권한 부여**를 선택합니다.

## 5단계: Amazon Athena에서 쿼리를 실행하여 권한 확인
<a name="tut-manage-dl-tbac-run-query"></a>

이 단계에서는 Amazon Athena를 사용하여 두 테이블`(source_data and source_data_col_lvl)`에 대해 `SELECT` 쿼리를 실행합니다. Amazon S3 경로를 쿼리 결과 위치`(s3://lf-tagbased-demo-{{Account-ID}}/athena-results/)`로 사용합니다.

1. `lf-data-analyst`로 Athena 콘솔([https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home))에 로그인합니다.

1. Athena 쿼리 편집기의 왼쪽 패널에서 `tag_database`를 선택합니다.

1. `source_data` 옆에 있는 추가 메뉴 옵션 아이콘(세로 점 3개)을 선택하고 **테이블 미리 보기**를 선택합니다.

1. **쿼리 실행**을 선택합니다.

   쿼리 실행에는 몇 분 정도 걸립니다. LF 태그는 데이터베이스 수준에서 연결되어 있고 `source_data` 테이블은 데이터베이스 `tag_database`에서 `LF-tag`를 자동으로 상속했기 때문에 이 쿼리는 출력의 모든 열을 표시합니다.

1. `col_tag_database` 및 `source_data_col_lvl`을 사용하여 다른 쿼리를 실행합니다.

   두 번째 쿼리는 `Non-Confidential` 및 `Sensitive`로 태그 지정된 두 열을 반환합니다.

1. 정책 부여가 없는 열에 대한 Lake Formation 태그 기반 액세스 정책 동작을 확인할 수도 있습니다. 테이블 `source_data_col_lvl`에서 태그가 지정되지 않은 열을 선택하면 Athena가 오류를 반환합니다. 예를 들어 다음 쿼리를 실행하여 태그가 지정되지 않은 열 `geolocationid`를 선택할 수 있습니다.

   ```
   SELECT geolocationid FROM "col_tag_database"."source_data_col_lvl" limit 10;
   ```

## 6단계: AWS 리소스 정리
<a name="tut-manage-dl-tbac-clean-up-db"></a>

에 원치 않는 요금이 부과되지 않도록이 자습서에서 사용한 AWS 리소스를 삭제할 AWS 계정수 있습니다.

1. Lake Formation 콘솔에 `lf-data-engineer`로 로그인하고 데이터베이스 `tag_database` 및 `col_tag_database`를 삭제합니다.

1. 다음으로, `lf-data-steward`로 로그인하고 위에서 `lf-data-engineer` 및 `lf-data-analyst.`에게 부여된 **LF 태그 권한**, **데이터 권한** 및 **데이터 위치 권한**을 모두 정리합니다.

1.  CloudFormation 스택을 배포하는 데 사용한 IAM 자격 증명을 사용하여 계정 소유자로 Amazon S3 콘솔에 로그인합니다.

1. 다음 버킷을 삭제합니다.
   + lf-tagbased-demo-accesslogs-{{acct-id}}
   + lf-tagbased-demo-{{acct-id}}

1. [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) CloudFormation 콘솔에 로그인하고 생성한 스택을 삭제합니다. 스택 상태가 `DELETE_COMPLETE`로 변경될 때까지 기다립니다.