Lake Formation의 데이터 필터링 및 셀 수준 보안 - AWS Lake Formation

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

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인 그리드 셀은 음영 처리됩니다.

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

필터는 읽기 작업에만 적용됩니다. 따라서 필터를 사용하여 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'가 포함되어 있습니다.

문자열 리터럴 '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\""] }
다음 사항도 참조하세요.