Lake Formation의 데이터 필터 - AWS 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'가 포함되어 있습니다.

문자열 리터럴 '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. row-security-only 앞의 스크린샷을 참조하여 모든 열에 액세스 옵션을 선택하고 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\""] }
다음 사항도 참조하세요.