AWS Glue Data Catalog 뷰 사용 - Amazon Athena

AWS Glue Data Catalog 뷰 사용

이 기능은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수도 있습니다. 자세한 내용을 알아보려면 AWS 서비스 약관 문서의 베타 및 미리 보기 섹션을 참조하세요.

Amazon Athena, Amazon Redshift 등의 AWS 서비스 전반에 걸쳐 단일 공통 뷰를 원하는 경우 AWS Glue Data Catalog 뷰를 사용합니다. Data Catalog 뷰에서 액세스 권한은 뷰를 쿼리하는 사용자 대신 뷰를 만든 사용자가 정의합니다. 이러한 권한 부여 방법을 정의자 의미 체계라고 합니다.

다음은 Data Catalog 뷰를 사용할 수 있는 방법을 보여주는 사용 사례입니다.

  • 액세스 제어 강화 - 사용자에게 필요한 권한 수준에 따라 데이터 액세스를 제한하는 뷰를 생성합니다. 예를 들어 Data Catalog 뷰를 사용하여 인사 관리(HR) 부서 소속이 아닌 직원은 개인 식별 정보를 보지 못하도록 할 수 있습니다.

  • 완전한 기록 보장 - Data Catalog 뷰에 특정 필터를 적용하여 Data Catalog 뷰의 데이터 레코드가 항상 완전한지 확인할 수 있습니다.

  • 보안 강화 - Data Catalog 뷰에서 뷰를 생성하려면 뷰를 생성하는 쿼리 정의가 그대로 유지되어야 합니다. 이렇게 하면 Data Catalog 뷰가 악의적인 행위자의 SQL 명령에 덜 취약해집니다.

  • 기본 테이블에 대한 액세스 방지 - 정의자 의미 체계를 통해 사용자는 기본 테이블을 사용하지 않으면서 뷰에 액세스할 수 있습니다. 뷰를 정의하는 사용자에게만 테이블에 대한 액세스 권한이 필요합니다.

Data Catalog 뷰 정의는 AWS Glue Data Catalog에 저장됩니다. 즉, AWS Lake Formation을 사용하여 리소스 부여, 열 부여 또는 태그 기반 액세스 제어를 통해 액세스 권한을 부여할 수 있습니다. Lake Formation에서 액세스 권한 부여 및 취소에 대한 자세한 내용은 AWS Lake Formation 개발자 안내서의 Granting and revoking permissions on Data Catalog resources를 참조하십시오.

권한

Data Catalog 뷰에는 Lake Formation Admin, DefinerInvoker의 세 가지 역할이 필요합니다.

  • Lake Formation Admin - 모든 Lake Formation 권한을 구성할 수 있는 액세스 권한이 있습니다.

  • Definer - Data Catalog 뷰를 생성합니다. Definer 역할에는 뷰 정의가 참조하는 모든 기본 테이블에 대해 부여 가능한 전체 SELECT 권한이 있어야 합니다.

  • Invoker - Data Catalog 뷰를 쿼리하거나 해당 메타데이터를 확인할 수 있습니다. 쿼리 호출자를 표시하려면 invoker_principal() DML 함수를 사용할 수 있습니다. 자세한 내용은 invoker_principal() 섹션을 참조하세요.

Definer 역할의 신뢰 관계는 다음 예제와 같이 AWS Glue 및 Lake Formation 서비스 보안 주체에 대한 sts:AssumeRole 작업을 허용해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "glue.amazonaws.com", "lakeformation.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

Athena 액세스를 위한 IAM 권한도 필요합니다. 자세한 내용은 Amazon Athena의 AWS 관리형 정책 섹션을 참조하세요.

제한 사항

  • Data Catalog 뷰는 다른 뷰를 참조할 수 없습니다.

  • 뷰 정의에서 최대 10개의 테이블을 참조할 수 있습니다.

  • 기본 테이블이 Lake Formation에 등록되어 있어야 합니다.

  • DEFINER 보안 주체는 IAM 역할만 될 수 있습니다.

  • DEFINER 역할에는 기본 테이블에 대한 전체 SELECT(부여 가능) 권한이 있어야 합니다.

  • UNPROTECTED Data Catalog 뷰는 지원되지 않습니다.

  • 사용자 정의 함수(UDF)는 뷰 정의에서 지원되지 않습니다.

  • Athena 페더레이션 데이터 소스는 Data Catalog 뷰에서 사용할 수 없습니다.

  • 외부 Hive 메타스토어에는 Data Catalog 뷰가 지원되지 않습니다.

  • Athena는 기한 경과 뷰를 감지하면 오류 메시지를 표시합니다. 다음 중 하나가 발생하면 기한 경과 뷰가 보고됩니다.

    • 뷰가 존재하지 않는 테이블 또는 데이터베이스를 참조합니다.

    • 스키마 또는 메타데이터 변경이 참조된 테이블에서 이루어집니다.

    • 참조된 테이블이 삭제되고 다른 스키마 또는 구성으로 재생성됩니다.

Data Catalog 뷰 생성

다음 예제 구문은 Definer 역할의 사용자가 orders_by_date Data Catalog 뷰를 생성하는 방법을 보여줍니다. 이 예제에서는 Definer 역할에 default 데이터베이스의 orders 테이블에 대한 전체 SELECT 권한이 있다고 가정합니다.

CREATE PROTECTED MULTI DIALECT VIEW orders_by_date SECURITY DEFINER AS SELECT orderdate, sum(totalprice) AS price FROM orders WHERE order_city = 'SEATTLE' GROUP BY orderdate

Data Catalog 뷰 쿼리

뷰가 생성된 후 Lake Formation Admin은 Data Catalog 뷰에 대한 SELECT 권한을 Invoker 보안 주체에게 부여할 수 있습니다. 그러면 Invoker 보안 주체는 뷰에서 참조하는 기본 테이블에 액세스하지 않고도 뷰를 쿼리할 수 있습니다. 다음은 Invoker 쿼리의 예입니다.

SELECT * from orders_by_date where price > 5000

Data Catalog 뷰 업데이트

Lake Formation Admin 또는 DefinerALTER VIEW UPDATE DIALECT 구문을 사용하여 뷰 정의를 업데이트할 수 있습니다. 다음 예제에서는 orders 테이블 대신 returns 테이블에서 열을 선택하도록 뷰 정의를 수정합니다.

ALTER VIEW orders_by_date UPDATE DIALECT AS SELECT return_date, sum(totalprice) AS price FROM returns WHERE order_city = 'SEATTLE' GROUP BY orderdate

Data Catalog 뷰 생성 및 관리 구문에 대한 자세한 내용은 Glue Data Catalog 뷰 구문 섹션을 참조하세요.