Athena를 사용하여 Lake Formation에 등록된 데이터를 쿼리할 때의 고려 사항 및 제한 사항 - Amazon Athena

Athena를 사용하여 Lake Formation에 등록된 데이터를 쿼리할 때의 고려 사항 및 제한 사항

Athena를 사용하여 Lake Formation에 등록된 데이터를 쿼리할 때는 다음을 고려하세요. 추가 정보는 AWS Lake Formation 개발자 안내서AWS Lake Formation의 알려진 문제를 참조하세요.

Avro 및 Custom SerDe를 사용하여 일부 상황에서 권한이 없는 사용자에게 표시되는 열 메타데이터

Lake Formation 열 수준 권한 부여를 통해 사용자가 Lake Formation 권한이 없는 열의 데이터에 액세스하는 것을 방지할 수 있습니다. 그러나 특정 상황에서 사용자는 데이터에 대한 권한이 없는 열을 포함하여 테이블의 모든 열을 설명하는 메타데이터에 액세스할 수 있습니다.

이 현상은 열 메타데이터가 Apache Avro 스토리지 형식을 사용하거나 테이블 스키마가 SerDe(Serializer/Deserializer) 정의와 함께 테이블 속성에 정의된 사용자 지정 SerDe를 사용하는 테이블의 테이블 속성에 저장될 때 발생합니다. Lake Formation과 함께 Athena를 사용할 때는 Lake Formation에 등록한 테이블 속성의 콘텐츠를 검토하고, 가능한 경우 테이블 속성에 저장된 정보를 제한하여 민감한 메타데이터가 사용자에게 표시되지 않도록 하는 것이 좋습니다.

뷰에 대한 Lake Formation 권한 작업

Lake Formation에 등록된 데이터의 경우 Athena 사용자는 VIEW가 기반으로 하는 테이블, 열 및 소스 Amazon S3 데이터 위치에 대한 Lake Formation 권한이 있는 경우에만 VIEW를 생성할 수 있습니다. Athena에서 VIEW를 생성한 후 Lake Formation 권한을 VIEW에 적용할 수 있습니다. VIEW에는 열 수준 권한을 사용할 수 없습니다. VIEW에 대한 Lake Formation 권한은 있지만 뷰의 기반이 되는 테이블 및 열에 대한 권한이 없는 사용자는 VIEW를 사용하여 데이터를 쿼리할 수 없습니다. 그러나 이러한 혼합 권한이 있는 사용자는 DESCRIBE VIEW, SHOW CREATE VIEWSHOW COLUMNS와 같은 문을 사용하여 VIEW 메타데이터를 볼 수 있습니다. 그러므로 각 VIEW에 대한 Lake Formation 권한을 기본 테이블 권한에 맞춰야 합니다. 테이블에 정의된 셀 필터는 해당 테이블의 VIEW에 적용되지 않습니다. 리소스 링크 이름이 원래 계정의 리소스와 같아야 합니다. 크로스 계정 설정에서 뷰 작업을 수행할 때 추가 제한 사항이 있습니다. 계정 간에 공유되는 뷰에 대한 권한 설정에 대한 자세한 내용은 계정 간 데이터 카탈로그 액세스을 참조하세요.

Iceberg DDL 지원

Athena는 현재 Lake Formation에 위치가 등록된 Iceberg 테이블에 대한 DDL 작업을 지원하지 않습니다. 이러한 Iceberg 테이블 중 하나에서 DDL 쿼리를 실행하려고 하면 Amazon S3 액세스 거부 오류가 반환되거나 쿼리 시간 초과로 실패할 수 있습니다. Iceberg 테이블에서 DDL 작업을 수행하려면 사용자가 Iceberg 테이블 위치에 직접 액세스할 수 있는 Amazon S3 권한이 있어야 합니다.

Lake Formation 세분화된 액세스 제어 및 Athena 작업 그룹

동일한 Athena 작업 그룹의 사용자는 Lake Formation 세분화된 액세스 제어를 통해 작업 그룹에 액세스할 수 있도록 구성한 데이터를 볼 수 있습니다. Lake Formation에서 세분화된 액세스 제어를 사용하는 방법에 대한 자세한 내용은 AWS 빅 데이터 블로그AWS Lake Formation을 사용하여 세분화된 액세스 제어 관리를 참조하세요.

Lake Formation에 등록되지 않은 Amazon S3의 Athena 쿼리 결과 위치

Amazon S3의 Athena 쿼리 결과 위치는 Lake Formation에 등록할 수 없습니다. Lake Formation 권한은 이러한 위치에 대한 액세스를 제한하지 않습니다. 액세스를 제한하지 않는 한 Athena 사용자는 데이터에 대한 Lake Formation 권한이 없어도 쿼리 결과 파일과 메타데이터에 액세스할 수 있습니다. 이를 방지하려면 작업 그룹을 사용하여 쿼리 결과의 위치를 지정하고 작업 그룹 구성원에 맞게 Lake Formation 권한을 조정하는 것이 좋습니다. 그런 다음 IAM 권한 정책을 사용하여 쿼리 결과 위치에 대한 액세스를 제한할 수 있습니다. 쿼리 결과에 대한 자세한 내용은 쿼리 결과 및 최근 쿼리 작업 단원을 참조하세요.

Athena 작업 그룹을 사용하여 쿼리 기록에 대한 액세스 제한

Athena 쿼리 기록은 저장된 쿼리 및 전체 쿼리 문자열 목록을 드러냅니다. 작업 그룹을 사용하여 쿼리 기록에 대한 액세스를 분리하지 않으면 Lake Formation에서 데이터를 쿼리할 권한이 없는 Athena 사용자가 열 이름, 선택 기준 등을 비롯해 해당 데이터에 대해 실행되는 쿼리 문자열을 볼 수 있습니다. 작업 그룹을 사용하여 쿼리 기록을 분리하고 Athena 작업 그룹 구성원에 맞게 Lake Formation 권한을 조정하여 액세스를 제한하는 것이 좋습니다. 자세한 내용은 작업 그룹을 사용하여 쿼리 액세스 및 비용 제어 단원을 참조하세요.

계정 간 데이터 카탈로그 액세스

다른 계정의 데이터 카탈로그에 액세스하기 위해 Athena의 계정 간 AWS Glue 기능을 사용하거나 또는 Lake Formation에서 계정 간 액세스를 설정할 수 있습니다.

Athena 계정 간 데이터 카탈로그 액세스

Athena의 계정 간 AWS Glue 카탈로그 기능을 사용해 자신의 계정에 카탈로그를 등록할 수 있습니다. 이 기능은 Athena 엔진 버전 2 이상 버전에서만 사용할 수 있으며 계정 간 동일한 리전 사용으로 제한됩니다. 자세한 내용은 다른 계정의 데이터 카탈로그 등록 단원을 참조하십시오.

공유할 데이터 카탈로그에 AWS Glue에서 구성된 리소스 정책이 있는 경우 AWS Resource Access Manager에 액세스할 수 있도록 업데이트해야 하고 다음 예제와 같이 계정 A의 데이터 카탈로그를 사용할 수 있는 권한을 계정 B에 부여해야 합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "ram.amazonaws.com" }, "Action": "glue:ShareResource", "Resource": [ "arn:aws:glue:<REGION>:<ACCOUNT-A>:table/*/*", "arn:aws:glue:<REGION>:<ACCOUNT-A>:database/*", "arn:aws:glue:<REGION>:<ACCOUNT-A>:catalog" ] }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<ACCOUNT-B>:root" }, "Action": "glue:*", "Resource": [ "arn:aws:glue:<REGION>:<ACCOUNT-A>:table/*/*", "arn:aws:glue:<REGION>:<ACCOUNT-A>:database/*", "arn:aws:glue:<REGION>:<ACCOUNT-A>:catalog" ] } ] }

자세한 내용은 AWS Glue 데이터 카탈로그에 대한 교차 계정 액세스 단원을 참조하십시오.

Lake Formation에서 계정 간 액세스 설정

AWS Lake Formation에서는 하나의 계정을 사용하여 중앙 데이터 카탈로그를 관리할 수 있습니다. 이 기능을 사용해 계정 간 액세스를 데이터 카탈로그 메타데이터 및 기본 데이터에 구현할 수 있습니다. 예를 들어 소유자 계정은 다른 (수신자) 계정에게 테이블에 대한 SELECT 권한을 부여할 수 있습니다.

Athena 쿼리 편집기에 표시되는 공유 데이터베이스 또는 테이블의 경우 Lake Formation에서 공유 데이터베이스 또는 테이블에 연결되는 리소스 링크를 생성합니다. Lake Formation의 수신자 계정이 소유자의 테이블을 쿼리하면 CloudTrail은 수신자 계정과 소유자 계정의 로그에 데이터 액세스 이벤트를 추가합니다.

공유된 뷰의 경우 다음 사항에 유의하십시오.

  • 쿼리는 소스 테이블이나 뷰가 아닌 대상 리소스 링크에서 실행되며 출력이 대상 계정에 공유됩니다.

  • 뷰만 공유하는 것으로는 충분하지 않습니다. 뷰 생성과 관련된 모든 테이블은 계정 간 공유의 일부여야 합니다.

  • 공유된 리소스에 생성된 리소스 링크의 이름이 소유자 계정의 리소스 이름과 일치해야 합니다. 이름이 일치하지 않으면 Failed analyzing stored view 'awsdatacatalog.my-lf-resource-link.my-lf-view': line 3:3: Schema schema_name does not exist와 같은 오류 메시지가 표시됩니다.

Lake Formation에서 계정 간 액세스에 대한 자세한 내용은 AWS Lake Formation 개발자 안내서의 다음 리소스를 참조하세요.

교차 계정 액세스

Lake Formation에서 리소스 링크가 작동하는 방식

계정 간 CloudTrail 로깅

Lake Formation에 등록된 CSE-KMS 암호화 Amazon S3 위치

다음과 같은 특성을 가진 Apache Iceberg와 같은 OTF(오픈 테이블 형식) 테이블은 Athena로 쿼리할 수 없습니다.

  • 테이블은 Lake Formation에 등록된 Amazon S3 데이터 위치를 기반으로 합니다.

  • Amazon S3의 객체가 CSE(클라이언트 측 암호화)를 사용하여 암호화됩니다.

  • 암호화에서는 AWS KMS 고객 관리형 키(CSE_KMS)를 사용합니다.

CSE_KMS 키로 암호화된 OTF가 아닌 테이블을 쿼리하려면 CSE 암호화에 사용하는 AWS KMS 키의 정책에 다음 블록을 추가하세요. <KMS_KEY_ARN>은 데이터를 암호화하는 AWS KMS 키의 ARN입니다. <IAM-ROLE-ARN>은 Lake Formation에 Amazon S3 위치를 등록하는 IAM 역할의 ARN입니다.

{ "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "kms:Decrypt", "Resource": "<KMS-KEY-ARN>", "Condition": { "ArnLike": { "aws:PrincipalArn": "<IAM-ROLE-ARN>" } } }

Lake Formation에 등록된 분할된 데이터 위치는 테이블 하위 디렉터리에 있어야 함

Lake Formation에 등록된 분할된 테이블은 Amazon S3 테이블의 하위 디렉터리인 디렉터리에 분할된 데이터가 있어야 합니다. 예를 들어, 위치가 s3://amzn-s3-demo-bucket/mytable이고 파티션이 s3://amzn-s3-demo-bucket/mytable/dt=2019-07-11, s3://amzn-s3-demo-bucket/mytable/dt=2019-07-12 등인 테이블은 Lake Formation에 등록하고 Athena를 사용하여 쿼리할 수 있습니다. 반면, 위치가 s3://amzn-s3-demo-bucket/mytable이고 파티션이 s3://amzn-s3-demo-bucket/dt=2019-07-11, s3://amzn-s3-demo-bucket/dt=2019-07-12 등인 테이블은 Lake Formation에 등록할 수 없습니다. 이러한 파티션은 s3://amzn-s3-demo-bucket/mytable의 하위 디렉토리가 아니기 때문에 Athena에서 읽을 수도 없습니다.

CTAS(Create Table As Select) 쿼리에 Amazon S3 쓰기 권한 필요

CTAS(Create Table As Statements)에는 테이블의 Amazon S3 위치에 대한 쓰기 액세스 권한이 필요합니다. Lake Formation에 등록된 데이터에 대해 CTAS 쿼리를 실행하려면 Athena 사용자는 데이터 위치를 읽을 수 있는 적절한 Lake Fomation 권한과 더불어 테이블의 Amazon S3 위치에 쓸 수 있는 IAM 권한이 있어야 합니다. 자세한 내용은 쿼리 결과에서 테이블 생성(CTAS) 단원을 참조하세요.

기본 데이터베이스에 대해 DESCRIBE 권한 필요

Lake Formation에서 볼 수 있으려면 default 데이터베이스에 대한 Lake Formation DESCRIBE 권한이 필요합니다. 다음 예제에서는 AWS CLI 명령으로 AWS 계정 111122223333datalake_user1 사용자에게 default 데이터베이스에 대한 DESCRIBE 권한을 부여합니다.

aws lakeformation grant-permissions --principal DataLakePrincipalIdentifier=arn:aws:iam::111122223333:user/datalake_user1 --permissions "DESCRIBE" --resource '{ "Database": {"Name":"default"}}

자세한 내용은 AWS Lake Formation 개발자 안내서DESCRIBE를 참조하세요.