Amazon Athena를 사용하여 공유 AWS Glue 데이터 카탈로그에 대한 계정 간 액세스를 구성합니다. - AWS 권장 가이드

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

Amazon Athena를 사용하여 공유 AWS Glue 데이터 카탈로그에 대한 계정 간 액세스를 구성합니다.

작성자: 데니스 아브도닌 () AWS

환경: 프로덕션

기술: DataLakes; 분석; 빅 데이터

워크로드: 기타 모든 워크로드

AWS서비스: 아마존 아테나; Glue AWS

요약

이 패턴은 AWS Identity and Access Management (IAM) 정책 샘플을 포함하여 Glue 데이터 카탈로그를 사용하여 Amazon Simple Storage Service (Amazon S3) 버킷에 저장된 데이터세트의 계정 간 공유를 구성하기 위한 step-by-step 지침을 제공합니다. AWS S3 버킷에 데이터 세트를 저장할 수 있습니다. 메타데이터는 AWS Glue 크롤러에 의해 수집되어 AWS Glue 데이터 카탈로그에 저장됩니다. S3 버킷과 AWS Glue 데이터 카탈로그는 데이터 AWS 계정이라고 하는 계정에 있습니다. 소비자 AWS 계정이라고 하는 다른 계정의 IAM 보안 주체에 대한 액세스를 제공할 수 있습니다. 사용자는 Amazon Athena 서버리스 쿼리 엔진을 사용하여 소비자 계정의 데이터를 쿼리할 수 있습니다.

사전 조건 및 제한 사항

사전 조건 

제품 버전

이 패턴은 Athena 엔진 버전 2Athena 엔진 버전 3에서만 작동합니다. Athena 엔진 버전 3로 업그레이드하는 것이 좋습니다. Athena 엔진 버전 1에서 Athena 엔진 버전 3으로 업그레이드할 수 없는 경우 빅 데이터 블로그에서 Amazon Athena를 통한 교차 계정 AWS Glue Data Catalog 액세스의 접근 방식을 따르십시오. AWS

아키텍처

대상 기술 스택

  • Amazon Athena

  • Amazon Simple Storage Service(S3)

  • AWS Glue

  • AWSID 및 액세스 관리 (IAM)

  • AWS키 관리 서비스 (AWSKMS)

다음 다이어그램은 IAM 권한을 사용하여 AWS Glue Data Catalog를 통해 한 AWS 계정 (데이터 계정) 의 S3 버킷에 있는 데이터를 다른 AWS 계정 (소비자 계정) 과 공유하는 아키텍처를 보여줍니다.

AWSGlue Data Catalog를 사용하여 데이터 계정과 소비자 계정 간에 S3 버킷의 데이터세트를 공유합니다.

이 다이어그램은 다음 워크플로를 보여줍니다.

  1. 데이터 계정의 S3 버킷 정책은 소비자 계정의 IAM 역할 및 데이터 계정의 AWS Glue Crawler 서비스 역할에 권한을 부여합니다.

  2. 데이터 계정의 AWS KMS 키 정책은 소비자 계정의 IAM 역할 및 데이터 계정의 AWS Glue Crawler 서비스 역할에 권한을 부여합니다.

  3. 데이터 계정의 AWS Glue 크롤러는 S3 버킷에 저장된 데이터의 스키마를 검색합니다.

  4. 데이터 계정의 AWS Glue Data Catalog의 리소스 정책은 소비자 계정의 IAM 역할에 대한 액세스 권한을 부여합니다.

  5. 사용자는 AWS CLI 명령을 사용하여 소비자 계정에서 명명된 카탈로그 참조를 생성합니다.

  6. IAM정책은 소비자 계정의 IAM 역할에 데이터 계정의 리소스에 대한 액세스 권한을 부여합니다. IAM역할의 신뢰 정책을 통해 소비자 계정의 사용자가 IAM 역할을 수임할 수 있습니다.

  7. 소비자 계정의 사용자는 IAM 역할을 맡고 쿼리를 사용하여 SQL 데이터 카탈로그의 개체에 액세스합니다.

  8. Athena 서버리스 엔진이 쿼리를 실행합니다. SQL

참고: IAM모범 사례에서는 IAM 역할에 권한을 부여하고 ID 페더레이션을 사용하는 것이 좋습니다.

도구

  • Amazon Athena는 표준을 사용하여 Amazon S3에서 직접 데이터를 분석할 수 있도록 지원하는 대화형 쿼리 서비스입니다. SQL

  • Amazon Simple Storage Service(S3)는 원하는 양의 데이터를 저장, 보호 및 검색하는 데 도움이 되는 클라우드 기반 객체 스토리지 서비스입니다.

  • AWSGlue는 완전 관리형 추출, 변환 및 로드 (ETL) 서비스입니다. 이를 통해 데이터 스토어와 데이터 스트림 간에 데이터를 안정적으로 분류, 정리, 보강하고 이동할 수 있습니다.

  • AWSIdentity and Access Management (IAM) 를 사용하면 리소스 인증 및 사용 권한을 부여받은 사용자를 제어하여 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있습니다.

  • AWS키 관리 서비스 (AWSKMS) 를 사용하면 암호화 키를 생성하고 제어하여 데이터를 보호할 수 있습니다.

에픽

작업설명필요한 기술

S3 버킷에 있는 데이터에 대한 액세스 권한을 부여합니다.

다음 템플릿을 기반으로 S3 버킷 정책을 생성하고 데이터가 저장된 버킷에 정책을 할당합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<consumer account id>:role/<role name>", "arn:aws:iam::<data account id>:role/service-role/AWSGlueServiceRole-data-bucket-crawler" ] }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::data-bucket/*" }, { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<consumer account id>:role/<role name>", "arn:aws:iam::<data account id>:role/service-role/AWSGlueServiceRole-data-bucket-crawler" ] }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::data-bucket" } ] }

버킷 정책은 소비자 계정의 IAM 역할과 데이터 계정의 AWS Glue Crawler 서비스 역할에 권한을 부여합니다.

클라우드 관리자

(필요한 경우) 데이터 암호화 키에 대한 액세스 권한을 부여합니다.

S3 버킷이 AWS KMS 키로 암호화된 경우 소비자 계정의 IAM 역할과 데이터 계정의 AWS Glue Crawler 서비스 역할에 키에 대한 kms:Decrypt 권한을 부여하십시오.

다음 문으로 키 정책을 업데이트합니다.

{ "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<consumer account id>:role/<role name>", "arn:aws:iam::<data account id>:role/service-role/AWSGlueServiceRole-data-bucket-crawler" ] }, "Action": "kms:Decrypt", "Resource": "arn:aws:kms:<region>:<data account id>:key/<key id>" }
클라우드 관리자

크롤러에게 데이터에 대한 액세스 권한을 부여합니다.

다음 IAM 정책을 크롤러의 서비스 역할에 연결하십시오.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::data-bucket/*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::data-bucket" } ] }
클라우드 관리자

(필요한 경우) 크롤러에게 데이터 암호화 키에 대한 액세스 권한을 부여합니다.

S3 버킷이 AWS KMS 키로 암호화된 경우 다음 정책을 추가하여 크롤러의 서비스 역할에 키에 대한 kms:Decrypt 권한을 부여하십시오.

{ "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:<region>:<data account id>:key/<key id>" }
클라우드 관리자

소비자 계정의 IAM 역할과 크롤러에게 데이터 카탈로그에 대한 액세스 권한을 부여하십시오.

  1. AWS관리 콘솔에 로그인하고 AWSGlue 콘솔을 엽니다.

  2. 탐색 창의 데이터 카탈로그에서 설정을 선택합니다.

  3. 권한 섹션에 다음 문을 추가한 다음 저장을 선택합니다.

{ "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "AWS" : [ "arn:aws:iam::<consumer account id>:role/<role name>", "arn:aws:iam::<data account id>:role/service-role/AWSGlueServiceRole-data-bucket-crawler" ] }, "Action" : "glue:*", "Resource" : [ "arn:aws:glue:<region>:<data account id>:catalog", "arn:aws:glue:<region>:<data account id>:database/*", "arn:aws:glue:<region>:<data account id>:table/*" ] } ] }

이 정책은 데이터 계정의 모든 데이터베이스와 테이블에서 모든 AWS Glue 작업을 허용합니다. 소비자 보안 주체에게 필요한 권한만 부여하도록 정책을 사용자 지정할 수 있습니다. 예를 들어 데이터베이스의 특정 테이블이나 뷰에 대한 읽기 전용 액세스를 제공할 수 있습니다.

클라우드 관리자
작업설명필요한 기술

데이터 카탈로그에 대한 명명된 참조를 생성합니다.

명명된 데이터 카탈로그 참조를 만들려면 CloudShell또는 를 사용하여 AWS CLI 로컬에 설치하여 다음 명령을 실행하십시오.

aws athena create-data-catalog --name <shared catalog name> --type GLUE --parameters catalog-id=<data account id>
클라우드 관리자

소비자 계정의 IAM 역할에 데이터 액세스 권한을 부여하십시오.

다음 정책을 소비자 계정의 IAM 역할에 연결하여 역할에 데이터에 대한 교차 계정 액세스 권한을 부여하십시오.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::data-bucket/*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::data-bucket" }, { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:<region>:<data account id>:catalog", "arn:aws:glue:<region>:<data account id>:database/*", "arn:aws:glue:<region>:<data account id>:table/*" ] } ] }

그런 다음 다음 템플릿을 사용하여 신뢰 정책에서 IAM 역할을 수락할 수 있는 사용자를 지정하십시오.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<consumer account id>:user/<IAM user>" }, "Action": "sts:AssumeRole" } ] }

마지막으로, 사용자가 속한 사용자 그룹에 동일한 정책을 연결하여 IAM 역할을 수임할 권한을 사용자에게 부여하십시오.

클라우드 관리자

(필요한 경우) 소비자 계정의 IAM 역할에 데이터 암호화 키에 대한 액세스 권한을 부여합니다.

S3 버킷이 AWS KMS 키로 암호화된 경우, 다음 정책을 소비자 계정 내 IAM 역할에 추가하여 키에 대한 kms:Decrypt 권한을 부여하십시오.

{ "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:<region>:<data account id>:key/<key id>" }
클라우드 관리자

소비자 계정의 IAM 역할로 전환하여 데이터에 액세스하십시오.

데이터 소비자는 데이터 계정의 데이터에 액세스하는 IAM역할로 전환하십시오.

데이터 소비자

데이터에 액세스합니다.

Athena를 사용하여 데이터를 쿼리합니다. 예를 들어 Athena 쿼리 편집기를 열고 다음 쿼리를 실행합니다.

SELECT * FROM <shared catalog name>.<database name>.<table name>

명명된 카탈로그 참조를 사용하는 대신 Amazon 리소스 이름 (ARN) 으로 카탈로그를 참조할 수도 있습니다.

참고: 쿼리 또는 뷰에서 동적 카탈로그 참조를 사용하는 경우 참조를 이스케이프된 큰따옴표(\”)로 묶어야 합니다. 예:

SELECT * FROM \"glue:arn:aws:glue:<region>:<data account id>:catalog\".<database name>.<table name>

자세한 내용은 Amazon Athena 사용 설명서의 AWSGlue 데이터 카탈로그에 대한 계정 간 액세스를 참조하십시오.

데이터 소비자

관련 리소스

추가 정보

크로스 계정 공유 대안으로 Lake Formation 사용

AWSLake Formation을 사용하여 계정 간에 AWS Glue 카탈로그 개체에 대한 액세스 권한을 공유할 수도 있습니다. Lake Formation은 열 및 행 수준에서 세분화된 액세스 제어, 태그 기반 액세스 제어, ACID 트랜잭션을 위한 관리 테이블 및 기타 기능을 제공합니다. Lake Formation은 Athena와 잘 통합되어 있지만 이 IAM 패턴의 유일한 접근 방식에 비해 추가 구성이 필요합니다. Lake Formation을 사용하거나 전체 솔루션 아키텍처의 더 넓은 맥락에서 액세스 IAM 제어만 사용할지 결정하는 것이 좋습니다. 고려 사항에는 관련된 다른 서비스와 이러한 서비스가 두 접근 방식과 통합되는 방식이 포함됩니다.