기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Lake Formation의 데이터 필터링 및 셀 수준 보안
데이터 카탈로그 테이블에 대한 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인 그리드 셀은 음영 처리됩니다.](images/cells-diagram.png)
인물 테이블의 예를 계속 이어서, 행의 국가 열이 '영국'으로 설정된 경우 도로명 주소 열에 대한 액세스를 제한하고, 행의 국가 열이 '미국'으로 설정된 경우 도로명 주소 열에 대한 액세스를 허용하는 셀 수준 데이터 필터를 만들 수 있습니다.
필터는 읽기 작업에만 적용됩니다. 따라서 필터를 사용하여 SELECT
Lake Formation 권한만 부여할 수 있습니다.
중첩된 열의 셀 수준 보안
Lake Formation을 사용하면 셀 수준 보안이 적용된 데이터 필터를 정의하고 중첩된 열에 적용할 수 있습니다. 하지만 Amazon Athena, Amazon EMR, Amazon Redshift Spectrum과 같은 통합 분석 엔진은 행 및 열 수준의 보안을 갖춘 Lake Formation 관리형 중첩 테이블에 대한 쿼리 실행을 지원합니다.
제한 사항은 데이터 필터링 제한 사항 섹션을 참조하세요.
Lake Formation의 데이터 필터
데이터 필터를 생성하여 열 수준, 행 수준, 셀 수준의 보안을 구현할 수 있습니다. 테이블에 대한 SELECT
Lake Formation 권한을 부여할 때 데이터 필터를 선택합니다. 테이블에 중첩된 열 구조가 포함된 경우 하위 열을 포함하거나 제외하여 데이터 필터를 정의하고 중첩된 속성에 행 수준 필터 표현식을 정의할 수 있습니다.
각 데이터 필터는 데이터 카탈로그의 특정 테이블에 속합니다. 패널에 포함되는 정보는 다음과 같습니다.
-
필터 이름
-
필터와 연결된 테이블의 카탈로그 ID
-
테이블 이름
-
테이블이 포함된 데이터베이스의 명칭
-
열 사양 - 쿼리 결과에 포함하거나 제외할 열 및 중첩된 열(
struct
데이터 형식)의 목록입니다. -
행 필터 표현식 - 쿼리 결과에 포함할 행을 지정하는 행 필터 표현식. 일부 제한이 있긴 하지만 표현식의 구문은 PartiQL 언어의
WHERE
절 구문을 사용합니다. 모든 행을 지정하려면 콘솔의 행 수준 액세스에서 모든 행에 대한 액세스를 선택하거나 API 호출에AllRowsWildcard
를 사용하십시오.행 필터 표현식에서 지원되는 정보에 대한 자세한 내용은 행 필터 표현식에서의 PartiQL 지원 단원을 참조하세요.
가져올 수 있는 필터링 수준은 데이터 필터를 채우는 방법에 따라 다릅니다.
-
'모든 열' 와일드카드를 지정하고 행 필터 표현식을 제공하면 행 수준 보안(행 필터링)만 설정됩니다.
-
특정 열 및 중첩된 열을 포함시키거나 제외시키고 모든 행 와일드카드를 사용하여 '모든 행'을 지정하면 열 수준 보안(열 필터링)만 설정됩니다.
-
특정 열을 포함시키거나 제외시키고 행 필터 표현식도 제공하면 셀 수준 보안(셀 필터링)이 설정됩니다.
Lake Formation 콘솔의 다음 스크린샷은 셀 수준 필터링을 수행하는 데이터 필터를 보여줍니다. orders
테이블에 대한 쿼리의 경우, customer_name
열에 대한 액세스를 제한하고 쿼리 결과에는 product_type
열에 'pharma'가 포함된 행만 반환합니다.
![데이터 필터 창에는 데이터 필터 이름, 대상 데이터베이스, 대상 테이블, 그리고 모든 열에 액세스, 열 포함 및 열 제외 옵션이 있는 옵션 버튼 그룹, 열 선택(드롭다운 목록), 행 필터 표현식(여러 줄 텍스트 상자) 등의 필드가 세로로 정렬되어 있습니다. 열 제외 옵션이 선택되어 있고, customer_name 열이 제외 대상으로 선택되어 있으며, 행 필터 표현식 필드에 'product_type='pharma'가 포함되어 있습니다.](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\""] }