

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

# Lake Formation의 데이터 필터링 및 셀 수준 보안
<a name="data-filtering"></a>

데이터 카탈로그 테이블에 대한 Lake Formation 권한을 부여하면 데이터 필터링 사양을 포함하여 쿼리 결과 및 Lake Formation 통합 엔진에서 특정 데이터에 대한 액세스를 제한할 수 있습니다. Lake Formation은 데이터 필터링을 사용하여 열 수준 보안, 행 수준 보안 및 셀 수준 보안을 달성합니다. 소스 데이터에 중첩 구조가 포함된 경우 중첩 열에 데이터 필터를 정의하고 적용할 수 있습니다.

Lake Formation의 데이터 필터링 기능을 사용하면 다음과 같은 수준의 데이터 보안을 구현할 수 있습니다.

**컬럼 수준 보안**  
열 수준 보안(열 필터링)을 사용하여 데이터 카탈로그 테이블에 권한을 부여하면 사용자가 테이블에서 액세스 권한이 있는 특정 열 및 중첩된 열만 볼 수 있습니다. 대규모 다중 리전 통신 회사의 여러 애플리케이션에서 `persons` 테이블을 사용하는 경우를 생각해 보세요. 열 필터링을 사용하여 데이터 카탈로그 테이블에 대한 권한을 부여하면, HR 부서에서 일하지 않는 사용자가 주민등록번호나 생년월일과 같은 개인 식별 정보(PII)를 보지 못하도록 할 수 있습니다. 또한 보안 정책을 정의하고 중첩된 열의 일부 하위 구조에만 액세스 권한을 부여할 수 있습니다.

**행 수준 보안**  
행 수준 보안(행 필터링)을 사용하여 데이터 카탈로그 테이블에 권한을 부여하면 사용자가 테이블에서 액세스 권한이 있는 특정 데이터 행만 볼 수 있습니다. 필터링은 하나 이상의 열 값을 기반으로 합니다. 행 필터 표현식을 정의할 때 중첩된 열 구조를 포함할 수 있습니다. 예를 들어 통신 회사의 여러 리전 사무소에 자체 HR 부서가 있는 경우, HR 직원이 볼 수 있는 개인 기록을 해당 리전 내 직원에 대한 기록으로만 제한할 수 있습니다.

**셀 수준 보안**  
셀 수준 보안은 행 필터링과 열 필터링을 결합하여 매우 유연한 권한 모델을 제공합니다. 테이블의 행과 열을 그리드로 보는 경우, 셀 수준 보안을 사용하여 2차원 어디에서든 그리드의 개별 요소(셀)에 대한 액세스를 제한할 수 있습니다. 즉, 행에 따라 다른 열에 대한 액세스를 제한할 수 있습니다. 다음 다이어그램에 제한된 열이 음영으로 나타나 있습니다.

![\[그리드는 5개의 행과 6개의 열로 표시됩니다. 행과 열에는 Col1, Col2, Row1, Row2 등과 같은 헤더가 있습니다. 좌표가 R3,C1; R3,C2; R3,C3; R5,C1; R5;C2; R5,C5; R5,C6인 그리드 셀은 음영 처리됩니다.\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/cells-diagram.png)


인물 테이블의 예를 계속 이어서, 행의 국가 열이 '영국'으로 설정된 경우 도로명 주소 열에 대한 액세스를 제한하고, 행의 국가 열이 '미국'으로 설정된 경우 도로명 주소 열에 대한 액세스를 허용하는 셀 수준 데이터 필터를 만들 수 있습니다.**

필터는 읽기 작업에만 적용됩니다. 따라서 필터를 사용하여 `SELECT` Lake Formation 권한만 부여할 수 있습니다.

**중첩된 열의 셀 수준 보안**  
Lake Formation을 사용하면 셀 수준 보안이 적용된 데이터 필터를 정의하고 중첩된 열에 적용할 수 있습니다. 하지만 Amazon Athena, Amazon EMR, Amazon Redshift Spectrum과 같은 통합 분석 엔진은 행 및 열 수준의 보안을 갖춘 Lake Formation 관리형 중첩 테이블에 대한 쿼리 실행을 지원합니다.

제한 사항은 [데이터 필터링 제한 사항](data-filtering-notes.md) 섹션을 참조하세요.

**Topics**
+ [Lake Formation의 데이터 필터](#data-filters-about)
+ [행 필터 표현식에서의 PartiQL 지원](partiql-support.md)
+ [셀 수준 필터링으로 테이블을 쿼리하는 데 필요한 권한](row-filtering-prereqs.md)
+ [데이터 필터 관리](managing-filters.md)

## Lake Formation의 데이터 필터
<a name="data-filters-about"></a>

데이터 필터를 생성하여 열 수준, 행 수준, 셀 수준의 보안을 구현할 수 있습니다.** 테이블에 대한 `SELECT` Lake Formation 권한을 부여할 때 데이터 필터를 선택합니다. 테이블에 중첩된 열 구조가 포함된 경우 하위 열을 포함하거나 제외하여 데이터 필터를 정의하고 중첩된 속성에 행 수준 필터 표현식을 정의할 수 있습니다.



각 데이터 필터는 데이터 카탈로그의 특정 테이블에 속합니다. 패널에 포함되는 정보는 다음과 같습니다.
+ 필터 이름
+ 필터와 연결된 테이블의 카탈로그 ID
+ 테이블 이름
+ 테이블이 포함된 데이터베이스의 명칭
+ 열 사양 - 쿼리 결과에 포함하거나 제외할 열 및 중첩된 열(`struct` 데이터 형식)의 목록입니다.
+ 행 필터 표현식 - 쿼리 결과에 포함할 행을 지정하는 행 필터 표현식. 일부 제한이 있긴 하지만 표현식의 구문은 PartiQL 언어의 `WHERE` 절 구문을 사용합니다. 모든 행을 지정하려면 콘솔의 **행 수준 액세스**에서 **모든 행에 대한 액세스**를 선택하거나 API 호출에 `AllRowsWildcard`를 사용하십시오.

  행 필터 표현식에서 지원되는 정보에 대한 자세한 내용은 [행 필터 표현식에서의 PartiQL 지원](partiql-support.md) 단원을 참조하세요.

가져올 수 있는 필터링 수준은 데이터 필터를 채우는 방법에 따라 다릅니다.
+ '모든 열' 와일드카드를 지정하고 행 필터 표현식을 제공하면 행 수준 보안(행 필터링)만 설정됩니다.
+ 특정 열 및 중첩된 열을 포함시키거나 제외시키고 모든 행 와일드카드를 사용하여 '모든 행'을 지정하면 열 수준 보안(열 필터링)만 설정됩니다.
+ 특정 열을 포함시키거나 제외시키고 행 필터 표현식도 제공하면 셀 수준 보안(셀 필터링)이 설정됩니다.

Lake Formation 콘솔의 다음 스크린샷은 셀 수준 필터링을 수행하는 데이터 필터를 보여줍니다. `orders` 테이블에 대한 쿼리의 경우, `customer_name` 열에 대한 액세스를 제한하고 쿼리 결과에는 `product_type` 열에 'pharma'가 포함된 행만 반환합니다.

![\[데이터 필터 창에는 데이터 필터 이름, 대상 데이터베이스, 대상 테이블, 그리고 모든 열에 액세스, 열 포함 및 열 제외 옵션이 있는 옵션 버튼 그룹, 열 선택(드롭다운 목록), 행 필터 표현식(여러 줄 텍스트 상자) 등의 필드가 세로로 정렬되어 있습니다. 열 제외 옵션이 선택되어 있고, customer_name 열이 제외 대상으로 선택되어 있으며, 행 필터 표현식 필드에 'product_type='pharma'가 포함되어 있습니다.\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/data-filter-sample-pharma.png)


문자열 리터럴 `'pharma'`로 묶을 때는 작은따옴표를 사용한다는 점에 유의하세요.

Lake Formation 콘솔을 사용하여 이 데이터 필터를 만들거나 다음 요청 객체를 `CreateDataCellsFilter` API 작업에 제공할 수 있습니다.

```
{
     "Name": "restrict-pharma",
     "DatabaseName": "sales",
     "TableName": "orders",
     "TableCatalogId": "111122223333",      
     "RowFilter": {"FilterExpression": "product_type='pharma'"},
     "ColumnWildcard": {
         "ExcludedColumnNames": ["customer_name"]
     }
}
```

데이터 필터를 테이블에 필요한 만큼 생성할 수 있습니다. 이렇게 하려면 테이블에 대한 권한 부여 옵션을 사용할 수 있는 `SELECT` 권한이 있어야 합니다. 데이터 레이크 관리자는 기본적으로 해당 계정의 모든 테이블에 데이터 필터를 만들 수 있는 권한을 가집니다.** 일반적으로 보안 주체에게 테이블에 대한 권한을 부여할 때는 가능한 데이터 필터 중 일부만 사용합니다. 예를 들어 `orders` 테이블에 행 보안 전용 데이터 필터인 두 번째 데이터 필터를 만들 수 있습니다. 앞의 스크린샷을 참조하여 **모든 열에 액세스** 옵션을 선택하고 `product_type<>pharma`의 행 필터 표현식을 포함할 수 있습니다. 이 데이터 필터의 이름은 `no-pharma`일 수 있습니다. `product_type` 열이 'pharma'로 설정된 모든 행에 대한 액세스를 제한합니다.

이 데이터 필터의 `CreateDataCellsFilter` API 작업에 대한 요청 객체는 다음과 같습니다.

```
{
     "Name": "no-pharma",
     "DatabaseName": "sales",
     "TableName": "orders",
     "TableCatalogId": "111122223333",      
     "RowFilter": {"FilterExpression": "product_type<>'pharma'"},
     "ColumnNames": ["customer_id", "customer_name", "order_num"
          "product_id", "purchase_date", "product_type", 
          "product_manufacturer", "quantity", "price"]
}
```

그런 다음 관리자에게는 `restrict-pharma` 데이터 필터가 있는 `orders` 테이블의 `SELECT`를, 관리자가 아닌 사용자에게는 `no-pharma` 데이터 필터가 있는 `orders` 테이블의 `SELECT`를 부여할 수 있습니다. 의료 부문의 사용자에게는 모든 행과 열에 대한 전체 액세스 권한(데이터 필터 없음)을 부여하거나, 가격 정보에 대한 액세스를 제한하는 또 다른 데이터 필터를 사용하여 `orders` 테이블에 `SELECT`를 부여할 수 있습니다.

 데이터 필터 내에서 열 수준 및 행 수준 보안을 지정할 때 중첩된 열을 포함하거나 제외할 수 있습니다. 다음 예시에서는 인증된 열 이름(큰따옴표로 묶음)을 사용하여 `product.offer` 필드에 대한 액세스 권한을 지정합니다. 이는 열 이름에 특수 문자가 포함된 경우 오류가 발생하지 않도록 하고 최상위 열 수준 보안 정의에 대해 이전 버전과의 호환성을 유지하기 위해 중첩된 필드에 중요합니다.

```
{
     "Name": "example_dcf",
     "DatabaseName": "example_db",
     "TableName": "example_table",
     "TableCatalogId": "111122223333",      
     "RowFilter": { "FilterExpression": "customer.customerName <> 'John'" },
     "ColumnNames": ["customer", "\"product\".\"offer\""]
}
```

**다음 사항도 참조하세요.**  
[데이터 필터 관리](managing-filters.md)

# 행 필터 표현식에서의 PartiQL 지원
<a name="partiql-support"></a>

PartiQL 데이터 유형, 연산자 및 집계의 하위 집합을 사용하여 행 필터 표현식을 생성할 수 있습니다. Lake Formation에서는 필터 표현식에 사용자 정의 함수 또는 표준 PartiQL 함수를 사용할 수 없습니다. 비교 연산자를 사용하여 열을 상수(예: `views >= 10000`)와 비교할 수 있지만, 열을 다른 열과 비교할 수는 없습니다.

 행 필터 표현식은 단순 표현식일 수도 있고 복합 표현식일 수도 있습니다. 표현식의 총 길이는 2048자 미만이어야 합니다.

**단순 표현식**  
단순 표현식의 형식은 다음과 같습니다. ` <column name > <comparison operator ><value >` 
+ **열 이름**

  테이블 스키마에 있는 최상위 데이터 열, 파티션 열 또는 중첩된 열이어야 하며 아래에 나열된 [지원되는 데이터 유형](#row-filter-supported-datatypes)에 속해야 합니다.
+ **비교 연산자**

   지원되는 연산자는 `=, >, <, >=, <=, <>,!=, BETWEEN, IN, LIKE, NOT, IS [NOT] NULL`입니다.
+  모든 문자열 비교와 `LIKE` 패턴 일치는 대/소문자를 구분합니다. 파티션 열에는 IS [NOT] NULL 연산자를 사용할 수 없습니다.
+ **열 값**

   열 값은 열 이름의 데이터 유형과 일치해야 합니다.

**복합 표현식**  
복합 표현식의 형식은 다음과 같습니다. `( <simple expression >) <AND/OR >(<simple expression >)`. 복합 표현식은 논리 연산자 `AND/OR`를 사용하여 추가로 결합할 수 있습니다.

## 지원되는 데이터 유형
<a name="row-filter-supported-datatypes"></a>

지원되지 않는 데이터 형식이 포함된 AWS Glue Data Catalog 테이블을 참조하는 행 필터는 오류가 발생합니다. 다음은 데이터 형식에 매핑되는 테이블 열 및 상수에 대해 지원되는 Amazon Redshift 데이터 형식입니다.
+ `STRING, CHAR, VARCHAR`
+ `INT, LONG, BIGINT, FLOAT, DECIMAL, DOUBLE`
+ `BOOLEAN`
+  `STRUCT` 

Amazon Redshift의 데이터 유형에 대한 자세한 정보는 **Amazon Redshift 데이터베이스 개발자 안내서의 [데이터 유형](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)을 참조하세요.

## 행 필터 표현식
<a name="Row-Filter-Expressions"></a>

**Example**  
다음은 열이 있는 테이블에 적합한 행 필터 표현식의 예입니다. ` country (String), id (Long), year (partition column of type Integer), month (partition column of type Integer)`   
+ `year > 2010 and country != 'US'`
+ `(year > 2010 and country = 'US') or (month < 8 and id > 23)`
+ `(country between 'Z' and 'U') and (year = 2018)`
+ `(country like '%ited%') and (year > 2000)`

**Example**  
다음은 중첩된 열이 있는 테이블에 적합한 행 필터 표현식의 예입니다. `year > 2010 and customer.customerId <> 1 `   
 중첩된 행 수준 식을 정의할 때 파티션 열 아래의 중첩된 필드를 참조해서는 안 됩니다.

문자열 상수는 작은따옴표로 묶어야 합니다.

## 예약어
<a name="partiql-reserved-keywords"></a>

행 필터 표현식에 PartiQL 키워드가 포함된 경우 열 이름이 키워드와 충돌할 수 있으므로 구문 분석 오류가 발생합니다. 이런 경우에는 큰따옴표를 사용하여 열 이름을 이스케이프 처리하세요. 예약된 키워드의 예로는 "first", "last", "asc", "missing"이 있습니다. 예약된 키워드 목록은 PartiQL 사양을 참조하세요.

## PartiQL 참조
<a name="partiql-ref"></a>

PartiQL에 대한 자세한 내용은 [https://partiql.org/](https://partiql.org/) 섹션을 참조하세요.

# 셀 수준 필터링으로 테이블을 쿼리하는 데 필요한 권한
<a name="row-filtering-prereqs"></a>

셀 수준 필터링이 있는 테이블에 대해 쿼리를 실행하려면 다음 AWS Identity and Access Management (IAM) 권한이 필요합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lakeformation:StartQueryPlanning",
                "lakeformation:GetQueryState",
                "lakeformation:GetWorkUnits",
                "lakeformation:GetWorkUnitResults"
            ],
            "Resource": "*"
        }
    ]
}
```

------

Lake Formation 권한에 대한 자세한 내용은 [Lake Formation 페르소나 및 IAM 권한 참조](permissions-reference.md) 섹션을 참조하세요.

# 데이터 필터 관리
<a name="managing-filters"></a>

열 수준, 행 수준 및 셀 수준 보안을 구현하기 위해 데이터 필터를 생성하고 유지 관리할 수 있습니다. 각 데이터 필터는 데이터 카탈로그 테이블에 속합니다. 테이블에 대해 여러 데이터 필터를 생성한 다음 테이블에 대한 권한을 부여할 때 하나 이상의 데이터 필터를 사용할 수 있습니다. 또한 `struct` 데이터 유형이 있는 중첩 열에 데이터 필터를 정의하고 적용하여 사용자가 중첩 열의 하위 구조에만 액세스하도록 할 수 있습니다.

데이터 필터를 생성하거나 보려면 권한 부여 옵션과 함께 `SELECT` 권한이 필요합니다. 사용자 계정의 보안 주체가 데이터 필터를 보고 사용할 수 있도록 하려면 데이터 필터에 대한 `DESCRIBE` 권한을 부여하면 됩니다.

**참고**  
Lake Formation은 다른 계정에서 공유하는 데이터 필터에 대한 `Describe` 권한 부여를 지원하지 않습니다.

 AWS Lake Formation 콘솔, API 또는 ()를 사용하여 데이터 필터를 관리할 수 있습니다 AWS Command Line Interface AWS CLI.

데이터 필터에 대한 자세한 내용은 [Lake Formation의 데이터 필터](data-filtering.md#data-filters-about) 섹션을 참조하세요.

# 데이터 필터 생성
<a name="creating-data-filters"></a>

각 데이터 카탈로그 테이블에 대해 하나 이상의 데이터 필터를 생성할 수 있습니다.

**데이터 카탈로그 테이블에 대한 데이터 필터를 생성하려면(콘솔)**

1. Lake Formation 콘솔([https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/))을 엽니다.

   데이터 레이크 관리자, 대상 테이블 소유자 또는 대상 테이블에 대한 Lake Formation 권한이 있는 보안 주체로 로그인합니다.

1. 탐색 창의 **데이터 카탈로그**에서 **데이터 필터**를 선택합니다.

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

1. **데이터 필터 생성** 대화 상자에 다음 정보를 입력합니다.
   + 데이터 필터 이름 
   + 대상 데이터베이스 - 테이블이 포함된 데이터베이스를 지정합니다.
   + 대상 테이블 
   + 열 수준 액세스 - 행 필터링만 지정하려면 이 설정을 **모든 열에 액세스**로 둡니다. 열 또는 셀 필터링을 지정하려면 **열 포함** 또는 **열 제외**를 선택한 다음 포함하거나 제외할 열을 지정합니다.

     중첩 열 - 중첩 열이 포함된 테이블에 필터를 적용하는 경우 데이터 필터 내에 중첩된 구조 열의 하위 구조를 명시적으로 지정할 수 있습니다.

     이 파일러의 보안 주체에게 SELECT 권한을 부여하면 다음 쿼리를 실행하는 보안 주체는 `customer.customerName`에 대한 데이터만 볼 수 있고 `customer.customerId`에 대한 데이터는 보지 못하게 됩니다.

     ```
     SELECT "customer" FROM "example_db"."example_table";
     ```  
![\[Column-level access settings with options to include specific columns and filter rows.\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/nested-column-filter.png)

      `customer` 열에 권한을 부여하면 보안 주체는 해당 열과 열(`customerName` 및 `customerID`) 아래의 중첩된 필드에 대한 액세스 권한을 받습니다.
   + 행 필터 표현식 - 행 또는 셀 필터링을 지정하려면 필터 표현식을 입력합니다. 지원되는 데이터 유형 및 연산자는 [행 필터 표현식에서의 PartiQL 지원](partiql-support.md) 섹션을 참조하세요. **모든 행에 액세스**를 선택하여 모든 행에 대한 액세스를 허용합니다.

     행 필터 표현식에 중첩된 열의 일부 열 구조를 포함하여 특정 값이 포함된 행을 필터링할 수 있습니다.

     보안 주체에게 행 필터 표현식 `Select * from example_nestedtable where customer.customerName <>'John'`이 있는 테이블에 대한 권한이 부여되고 **열 수준** 액세스가 **모든 열에 대한 액세스**로 설정된 경우 쿼리 결과에는 `customerName <>'John'`이 true로 평가되는 행만 표시됩니다.

   다음 스크린샷은 셀 필터링을 구현하는 데이터 필터를 보여줍니다. `orders` 테이블에 대한 쿼리에서는 `customer_name` 열에 대한 액세스를 거부하고 `product_type` 열에 'pharma'가 포함된 행만 표시합니다.  
![\[데이터 필터 창에는 데이터 필터 이름, 대상 데이터베이스, 대상 테이블, 그리고 모든 열에 액세스, 열 포함 및 열 제외 옵션이 있는 옵션 버튼 그룹, 열 선택(드롭다운 목록), 행 필터 표현식(여러 줄 텍스트 상자) 등의 필드가 세로로 정렬되어 있습니다. 열 제외 옵션이 선택되어 있고, customer_name 열이 제외 대상으로 선택되어 있으며, 행 필터 표현식 필드에 'product_type='pharma'가 포함되어 있습니다.\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/data-filter-sample-pharma.png)

1. **Create filter(필터 생성)**를 선택합니다.

**중첩된 필드에 셀 필터 정책이 적용된 데이터 필터를 만들려면**

 이 섹션에서는 다음 샘플 스키마를 사용하여 데이터 셀 필터를 생성하는 방법을 보여줍니다.

```
[
    { name: "customer", type: "struct<customerId:string,customerName:string>" },
    { name: "customerApplication", type: "struct<appId:string>" },
    { name: "product", type: "struct<offer:struct<prodId:string,listingId:string>,type:string>" },
    { name: "purchaseId", type: "string" },
]
```

1. **데이터 필터 생성** 페이지에서 데이터 필터 이름을 입력합니다.

1.  그런 다음 드롭다운을 사용하여 데이터베이스 이름과 테이블 이름을 선택합니다.

1. **열 수준 액세스** 섹션에서 포함된 열을 선택하고 중첩된 열(`customer.customerName`)을 선택합니다.

1. **행 수준 액세스** 섹션에서 **모든 행에 액세스** 옵션을 선택합니다.

1. **Create filter(필터 생성)**를 선택합니다.

   이 필터에 대한 `SELECT` 권한을 부여하면 보안 주체는 `customerName` 열의 모든 행에 액세스할 수 있습니다.

1. 다음으로, 동일한 데이터베이스/테이블에 대해 다른 데이터 필터를 정의합니다.

1. **열 수준 액세스** 섹션에서 포함된 열을 선택하고 또 다른 중첩된 열(`customer.customerid`)을 선택합니다.

1. **행 수준 액세스** 섹션에서 **행 필터링**을 선택하고 **행 필터 표현식**(`customer.customerid <> 5`)을 입력합니다.

1. **Create filter(필터 생성)**를 선택합니다.

   이 필터에 대한 `SELECT` 권한을 부여하면 보안 주체는 `customerName`의 모든 행과 `customerId` 열에서 값이 5인 셀을 제외한 `customerId` 필드에 대한 액세스 권한을 받습니다.

# 데이터 필터 권한 부여
<a name="granting-filter-perms"></a>

데이터 필터에 대한 `SELECT`, `DESCRIBE` 및 `DROP` Lake Formation 권한을 보안 주체에게 부여할 수 있습니다.

처음에는 테이블에 대해 데이터 필터를 생성한 사람만 해당 데이터 필터를 볼 수 있습니다. 다른 보안 주체가 데이터 필터를 보고 이를 사용하여 데이터 카탈로그 권한을 부여할 수 있도록 하려면 다음 중 하나를 수행해야 합니다.
+ 권한 부여 옵션을 사용하여 보안 주체에게 테이블에 대한 `SELECT` 권한을 부여하고 해당 권한 부여에 데이터 필터를 적용합니다.
+ 보안 주체에게 데이터 필터에 대한 `DESCRIBE` 또는 `DROP` 권한을 부여합니다.

외부 AWS 계정에 `SELECT` 권한을 부여할 수 있습니다. 그러면 해당 계정의 데이터 레이크 관리자가 계정의 다른 보안 주체에 그러한 권한을 부여할 수 있습니다. 외부 계정에 권한을 부여할 때는 외부 계정 관리자가 자신의 계정에 있는 다른 사용자에게 권한을 추가로 전파할 수 있도록 권한 부여 옵션을 포함해야 합니다. 계정 내 보안 주체에 권한을 부여하는 경우 권한 부여 옵션을 통한 권한 부여는 선택 사항입니다.

 AWS Lake Formation 콘솔, API 또는 AWS Command Line Interface ()를 사용하여 데이터 필터에 대한 권한을 부여하고 취소할 수 있습니다AWS CLI.

------
#### [ Console ]

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) Lake Formation 콘솔을 엽니다.

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

1. **권한** 페이지의 **데이터 권한** 섹션에서 **권한 부여**를 선택합니다.

1. **데이터 권한 부여** 페이지에서 권한을 부여할 보안 주체를 선택합니다.

1. LF 태그 또는 카탈로그 리소스 섹션에서 **명명된 데이터 카탈로그 리소스**를 선택합니다. 그런 다음 권한을 부여하려는 데이터베이스, 테이블, 데이터 필터를 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/grant-data-filter-perms-step2.png)

1. **데이터 필터 권한** 섹션에서 선택한 보안 주체에 부여할 권한을 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/grant-perms-on-filters.png)

------
#### [ AWS CLI ]
+ `grant-permissions` 명령을 입력합니다. `resource` 인수에 대해서는 `DataCellsFilter`를 지정하고 `Permissions` 인수(선택적으로 `PermissionsWithGrantOption` 인수)에 대해서는 `DESCRIBE` 또는 `DROP`을 지정합니다.

  다음 예제는 권한 부여 옵션을 사용하여 데이터 필터 `restrict-pharma`에 대한 `DESCRIBE` 권한을 사용자 `datalake_user1`에게 부여합니다. 이 데이터 필터는 AWS 계정 1111-2222-3333의 `sales` 데이터베이스에 있는 `orders` 테이블에 속합니다.

  ```
  aws lakeformation grant-permissions --cli-input-json file://grant-params.json
  ```

  다음은 `grant-params.json` 파일의 내용입니다.

  ```
  {
      "Principal": {"DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"},
      "Resource": {
          "DataCellsFilter": {
              "TableCatalogId": "111122223333",
              "DatabaseName": "sales",
              "TableName": "orders",
              "Name": "restrict-pharma"
          }
      },
      "Permissions": ["DESCRIBE"],
      "PermissionsWithGrantOption": ["DESCRIBE"]
  }
  ```

------

# 데이터 필터에서 제공하는 데이터 권한 부여
<a name="granting-data-perms-for-filters"></a>

데이터 필터는 테이블 내 데이터의 하위 집합을 나타냅니다. 보안 주체에 데이터 액세스 권한을 제공하려면 해당 보안 주체에게 `SELECT` 권한을 부여해야 합니다. 이 권한으로 보안 주체는 다음을 수행할 수 있습니다.
+ 해당 계정과 공유된 테이블 목록에서 실제 테이블 이름을 볼 수 있습니다.
+ 공유 테이블에 데이터 필터를 생성하고 해당 사용자에게 해당 데이터 필터에 대한 권한을 부여합니다.

------
#### [ Console ]

**SELECT 권한을 부여하려면**

1. Lake Formation 콘솔의 **권한** 페이지로 이동한 다음 **권한 부여**를 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/permissions-grant-action.png)

1. 액세스 권한을 부여하려는 보안 주체를 선택하고 **명명된 데이터 카탈로그 리소스**를 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/grant-data-filter-perms-step2.png)

1. 필터가 나타내는 데이터에 대한 액세스를 제공하려면 **데이터 필터 권한**에서 **선택**을 선택합니다.  
![\[\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/grant-data-filter-perms-step3.png)

------
#### [ CLI ]

`grant-permissions` 명령을 입력합니다. 리소스 인수에 대해 `DataCellsFilter`를 지정하고 권한 인수에 대해 `SELECT`를 지정합니다.

다음 예제에서는의 `sales` 데이터베이스에 `restrict-pharma`있는 `orders` 테이블에 속하는 `datalake_user1` 데이터 필터의 사용자에게 권한 부여 옵션과 `SELECT` 함께를 부여합니다 AWS 계정 `1111-2222-3333`.

```
aws lakeformation grant-permissions --cli-input-json file://grant-params.json 
```

다음은 `grant-params.json` 파일의 내용입니다.

```
{
    "Principal": {
        "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"
    },
    "Resource": {
        "DataCellsFilter": {
            "TableCatalogId": "111122223333", 
            "DatabaseName": "sales", 
            "TableName": "orders", 
            "Name": "restrict-pharma"
        }
    },
    "Permissions": ["SELECT"]
}
```

------

# 데이터 필터 보기
<a name="view-data-filters"></a>

Lake Formation 콘솔 AWS CLI또는 Lake Formation API를 사용하여 데이터 필터를 볼 수 있습니다.

데이터 필터를 보려면 데이터 레이크 관리자이거나 데이터 필터에 대한 필수 권한이 있어야 합니다.

------
#### [ Console ]

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) Lake Formation 콘솔을 엽니다.

1. 탐색 창의 **데이터 카탈로그**에서 **데이터 필터**를 선택합니다.

   페이지에 액세스할 수 있는 데이터 필터가 표시됩니다.  
![\[데이터 필터 페이지에는 필터 이름, 테이블, 데이터베이스 및 테이블 카탈로그 ID 열과 함께 사용 가능한 데이터 필터가 표시되어 있습니다. 이 스크린샷은 test-df, cloudtrailtest_cloudtrail, lakeformation_cloudtrail, 수정된 계정 ID와 같은 값을 가진 단일 데이터 필터를 보여줍니다. 테이블 위에는 왼쪽에서 오른쪽으로 새로 고침/다시 로드, 보기(회색으로 표시됨), 삭제(회색으로 표시됨) 및 '새 필터 생성'이라는 네 개의 버튼이 있습니다. 검색 필드(비어 있음)도 있습니다.\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/list-data-filters.jpg)

1. 데이터 필터 세부 정보를 보려면 데이터 필터를 선택한 다음 보기를 선택합니다. 데이터 필터 세부 정보가 포함된 새 창이 나타납니다.  
![\['데이터 필터 보기' 창에는 선택한 데이터 필터에 대한 추가 정보가 표시됩니다. 표시되는 정보에는 이름, 데이터베이스, 테이블, 열 수준 액세스 설정, 행 필터 표현식 및 열이 포함됩니다.\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/list-data-filters-details.jpg)

------
#### [ AWS CLI ]

`list-data-cells-filter` 명령을 입력하고 테이블 리소스를 지정합니다.

다음 예제는 `cloudtrailtest_cloudtrail` 테이블에 대한 데이터 필터를 나열합니다.

```
aws lakeformation list-data-cells-filter --table '{ "CatalogId":"123456789012", 
"DatabaseName":"lakeformation_cloudtrail", "Name":"cloudtrailtest_cloudtrail"}'
```

------
#### [ API/SDK ]

`ListDataCellsFilter` API를 사용하고 테이블 리소스를 지정합니다.

다음 예제는 Python을 사용하여 `myTable` 테이블에 대한 처음 20개의 데이터 필터를 나열합니다.

```
response = client.list_data_cells_filter(
    Table = {
        'CatalogId': '111122223333',
        'DatabaseName': 'mydb',
        'Name': 'myTable'
    },
    MaxResults=20
)
```

------

# 데이터 필터 권한 나열
<a name="listing-filter-perms"></a>

Lake Formation 콘솔을 사용하여 데이터 필터에 부여된 권한을 볼 수 있습니다.

데이터 필터에 대한 권한을 보려면 데이터 레이크 관리자이거나 데이터 필터에 대한 필수 권한이 있어야 합니다.

------
#### [ Console ]

1. 에 로그인 AWS Management Console 하고 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) Lake Formation 콘솔을 엽니다.

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

1. **데이터 권한** 페이지에서 검색 필드를 클릭하거나 탭하고 **속성** 메뉴에서 **리소스 유형**을 선택합니다.

1. **리소스 유형** 메뉴에서 **리소스 유형: 데이터 셀 필터**를 선택합니다.

   권한이 있는 데이터 필터가 나열됩니다. **권한** 및 **부여 가능** 열을 보려면 가로로 스크롤해야 할 수도 있습니다.  
![\[데이터 권한 페이지에는 보안 주체, 리소스 유형, 데이터베이스, 테이블, 리소스, 카탈로그, 권한 등의 열이 포함된 권한 테이블이 표시됩니다. 리소스 유형 열에는 네 행 모두에 '데이터 셀 필터'가 표시되어 있습니다. 첫 번째 행과 두 번째 행의 권한은 설명, 삭제 및 선택입니다. 세 번째 행의 권한은 설명입니다. 테이블 위에는 필터 지우기 버튼과 현재 검색이 리소스 유형: 데이터 셀 필터임을 나타내는 타일이 있습니다. 그 위에는 검색(텍스트) 필드가 있고 그 위에는 새로 고침, 취소 및 권한 부여 버튼이 있습니다.\]](http://docs.aws.amazon.com/ko_kr/lake-formation/latest/dg/images/data-permissions-cell-filters.png)

------
#### [ AWS CLI ]
+ `list-permissions` 명령을 입력합니다. `resource` 인수에 대해서는 `DataCellsFilter`를 지정하고 `Permissions` 인수(선택적으로 `PermissionsWithGrantOption` 인수)에 대해서는 `DESCRIBE` 또는 `DROP`을 지정합니다.

  다음 예제는 데이터 필터 `restrict-pharma`에 대한 권한 부여 옵션과 함께 `DESCRIBE` 권한을 나열합니다. 결과는 AWS 계정 1111-2222-3333의 `sales` 데이터베이스에 있는 보안 주체 `datalake_user1` 및 `orders` 테이블에 부여된 권한으로 제한됩니다.

  ```
  aws lakeformation list-permissions --cli-input-json file://list-params.json
  ```

  다음은 `grant-params.json` 파일의 내용입니다.

  ```
  {
      "Principal": {"DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/datalake_user1"},
      "Resource": {
          "DataCellsFilter": {
              "TableCatalogId": "111122223333",
              "DatabaseName": "sales",
              "TableName": "orders",
              "Name": "restrict-pharma"
          }
      },
      "Permissions": ["DESCRIBE"],
      "PermissionsWithGrantOption": ["DESCRIBE"]
  }
  ```

------