Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
AWS Glue Data Catalog의 리소스에 대한 교차 계정 액세스를 제공하려면 어떻게 해야 합니까?
다른 계정의 AWS Glue Data Catalog에서 Amazon EMR, Amazon Athena, AWS Glue와 같은 서비스를 사용하려고 합니다.
해결 방법
AWS Glue Data Catalog에서 교차 계정 리소스에 액세스하는 방법은 연결에 사용하는 AWS 서비스에 따라 다릅니다. 이 액세스 방법은 Data Catalog에 대한 액세스를 제어하기 위해 AWS Lake Formation을 사용하는지 여부에 따라서도 달라집니다.
Lake Formation을 사용 중인지 확실하지 않고 테이블을 공유하려는 경우 다음 AWS Command Line Interface(AWS CLI) 명령을 실행하십시오.
aws glue get-table --database-name DOC-EXAMPLE-DB --name DOC-EXAMPLE-TABLE --query 'Table.IsRegisteredWithLakeFormation'
이 명령에서 다음 값을 바꿔야 합니다.
- DOC-EXAMPLE-DB를 데이터베이스 이름으로 바꿉니다.
- DOC-EXAMPLE-TABLE을 해당 테이블 이름으로 바꿉니다.
명령이 true를 반환하면 Lake Formation을 사용하고 있는 것입니다.
참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하십시오.
Data Catalog는 일부 테이블은 Lake Formation을 사용하고 또 다른 일부 테이블은 AWS Glue 권한을 사용하는 하이브리드 환경에 있을 수 있습니다. Data Catalog를 Lake Formation으로 업그레이드하려면 AWS Glue 데이터 권한을 AWS Lake Formation 모델로 업그레이드를 참조하십시오.
참고: 이 문서에서는 단일 AWS 리전 내 교차 계정 액세스를 위한 솔루션 옵션을 다룹니다. 다른 리전의 리소스에 액세스하는 것은 이 문서의 범위를 벗어납니다. Data Catalog를 사용자의 계정에서 다른 AWS 리전의 계정으로 복제하려면 GitHub의 AWS Glue Data Catalog 복제 유틸리티를 참조하십시오.
Lake Formation을 사용하지 않고 Data Catalog에 액세스
Lake Formation을 사용하지 않는 경우 다음을 수행하여 계정 B의 AWS Glue Data Catalog에서 계정 A에 리소스 수준 권한을 부여합니다.
참고: 계정 A는 ETL(추출, 전환 및 적재) 계정이고 계정 B는 AWS Glue Data Catalog 리소스가 있는 계정입니다.
AWS Glue ETL 작업을 사용한 리소스 액세스
1. 계정 B에서 다음과 비슷한 리소스 정책을 연결합니다. 이렇게 하면 계정 A가 계정 B의 데이터베이스 및 테이블에 액세스할 수 있습니다. 탐색 창에서 카탈로그 설정을 선택하면 AWS Glue 콘솔을 사용하여 정책을 연결할 수 있습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:root" }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:5555666677778888:catalog", "arn:aws:glue:us-east-1:5555666677778888:database/DOC-EXAMPLE-DB", "arn:aws:glue:us-east-1:5555666677778888:table/DOC-EXAMPLE-DB/*" ] } ] }
이 정책에서 다음 값을 바꿔야 합니다.
- 1111222233334444를 계정 A의 계정 ID로 바꿉니다.
- 5555666677778888을 계정 B의 계정 ID로 바꿉니다.
- us-east-1을 선택한 리전으로 바꿉니다.
- DOC-EXAMPLE-DB를 데이터베이스 이름으로 바꿉니다.
또한 작업 실행에 사용되는 계정 A의 특정 역할에 대한 액세스를 제한할 수 있습니다. 정책에 역할의 ARN을 포함시키면 됩니다. 예를 들면 다음과 같습니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:role/service-role/AWSGlueServiceRole-Glue-Test" }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:5555666677778888:catalog", "arn:aws:glue:us-east-1:5555666677778888:database/DOC-EXAMPLE-DB", "arn:aws:glue:us-east-1:5555666677778888:table/DOC-EXAMPLE-DB/*" ] } ] }
이 정책에서 다음 값을 바꿔야 합니다.
- 1111222233334444를 계정 A의 계정 ID로 바꿉니다.
- 5555666677778888을 계정 B의 계정 ID로 바꿉니다.
- us-east-1을 선택한 리전으로 바꿉니다.
- DOC-EXAMPLE-DB를 데이터베이스 이름으로 바꿉니다.
- AWSGlueServiceRole-Glue-Test를 ETL 작업을 실행하는 데 사용되는 역할의 ARN으로 바꿉니다.
2. ETL 작업을 실행하는 계정 A의 AWS Identity and Access Management(IAM) 사용자가 계정 B의 데이터베이스 및 테이블에 액세스해야 합니다. 계정 A에서 AWS Glue ETL 작업의 IAM 역할에 IAM 정책을 연결하여 계정 B의 데이터베이스 및 테이블에 액세스합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetConnection", "glue:GetTable", "glue:GetPartition" ], "Resource": [ "arn:aws:glue:us-east-1:5555666677778888:catalog", "arn:aws:glue:us-east-1:5555666677778888:database/default", "arn:aws:glue:us-east-1:5555666677778888:database/DOC-EXAMPLE-DB", "arn:aws:glue:us-east-1:5555666677778888:table/DOC-EXAMPLE-DB/*" ] } ] }
참고: Athena를 AWS Glue Data Catalog와 함께 사용하는 경우 정책에 기본 데이터베이스를 포함합니다. 이렇게 하면 GetDatabase 및 CreateDatabase 작업이 성공합니다. 자세한 내용은 AWS 리전별 기본 데이터베이스 및 카탈로그에 대한 액세스 정책을 참조하십시오.
이 정책에서 다음 값을 바꿔야 합니다.
- 1111222233334444를 계정 A의 계정 ID로 바꿉니다.
- 5555666677778888을 계정 B의 계정 ID로 바꿉니다.
- us-east-1을 선택한 리전으로 바꿉니다.
- DOC-EXAMPLE-DB를 데이터베이스 이름으로 바꿉니다.
3. 계정 A에 필요한 권한을 제공한 후 계정 A가 계정 B의 Data Catalog에 액세스할 수 있는지 테스트할 수 있습니다. 이를 테스트하려면 다음 스크립트를 사용하여 ETL 작업을 생성합니다.
"""Create Spark Session with cross-account AWS Glue Data Catalog""" from pyspark.sql import SparkSession spark_session = SparkSession.builder.appName("Spark Glue Example") \ .config("hive.metastore.client.factory.class", \ "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory") \ .config("hive.metastore.glue.catalogid", "5555666677778888") \ .enableHiveSupport() \ .getOrCreate() table_df = spark_session.sql("SELECT * FROM DOC-EXAMPLE-DB.DOC-EXAMPLE-TABLE limit 10") table_df.show()
스크립트에서 다음 값을 바꿔야 합니다.
- 5555666677778888을 계정 B의 계정 ID로 바꿉니다.
- DOC-EXAMPLE-DB를 데이터베이스 이름으로 바꿉니다.
- DOC-EXAMPLE-TABLE을 해당 테이블 이름으로 바꿉니다.
Amazon EMR을 사용한 리소스 액세스
Amazon EMR을 사용하여 다른 계정의 Data Catalog에 액세스하려면 Amazon EMR에서 Hive 및 Spark를 사용하여 다른 AWS 계정에 있는 AWS Glue Data Catalog를 쿼리하려면 어떻게 해야 합니까?를 참조하십시오.
Athena를 사용한 리소스 액세스
Athena를 사용하여 다른 계정의 Data Catalog에 액세스하려면 AWS Glue Data Catalog에 대한 교차 계정 액세스를 참조하십시오.
Lake Formation을 사용한 Data Catalog 액세스
Lake Formation을 사용하는 경우 다음 방법 중 하나를 사용하여 Data Catalog에 대한 교차 계정 액세스 권한을 부여할 수 있습니다.
- 명명된 리소스
- TBAC(태그 기반 액세스 제어)
중요: Data Catalog의 새 테이블에서 IAMAllowedPrincipals에 대한 기본 Super 권한이 생기지 않도록 다음을 수행하십시오.
1. AWS Lake Formation 콘솔을 엽니다.
2. 탐색 창에서 Data Catalog를 선택한 다음 카탈로그 설정을 선택합니다.
3. 새 데이터베이스에 IAM 액세스 제어만 사용과 이 데이터베이스의 새 테이블에 IAM 액세스 제어만 사용의 선택을 모두 취소합니다.
4. 저장을 선택합니다.
자세한 내용은 데이터 레이크의 기본 보안 설정 변경을 참조하십시오.
명명된 리소스 방법을 사용하여 교차 계정 권한 부여
AWS Resource Access Manager(AWS RAM)는 명명된 리소스를 사용하여 데이터베이스 권한을 제공하는 데 사용됩니다.
- 조직의 다른 계정에서 리소스에 액세스하려면 조직 내에서 리소스 공유를 활성화합니다.
- 조직 외부의 다른 계정에 있는 리소스에 액세스하려면 공유 Data Catalog 테이블 및 데이터베이스 액세스 및 보기를 참조하십시오.
계정 B의 Data Catalog 리소스에 대해 계정 A에 Lake Formation 권한을 부여하려면 다음을 수행합니다.
1. 계정 B의 Data Catalog에 다음과 유사한 리소스 정책을 연결합니다.
{ "Effect": "Allow", "Action": [ "glue:ShareResource" ], "Principal": { "Service": [ "ram.amazonaws.com" ] }, "Resource": [ "arn:aws:glue:us-east-1:5555666677778888:table/*/*", "arn:aws:glue:us-east-1:5555666677778888:database/*", "arn:aws:glue:us-east-1:5555666677778888:catalog" ] }
정책에서 5555666677778888을 계정 B의 계정 ID로 바꿔야 합니다.
2. 명명된 리소스 방법을 사용하여 계정 B의 Data Catalog 데이터베이스 및 테이블에 Lake Formation 권한을 부여합니다. 자세한 내용은 명명된 리소스 방법을 사용한 Data Catalog 권한 부여를 참조하십시오.
TBAC를 사용한 교차 계정 권한 부여
TBAC를 사용하여 정책 태그를 정의하고 이러한 태그를 AWS Glue 데이터베이스, 테이블 및 열에 할당할 수 있습니다. 이후 태그를 사용하여 이러한 Data Catalog 리소스에 대해 세분화된 액세스를 적용할 수 있습니다. 자세한 내용은 태그 기반 액세스 제어를 사용한 데이터 공유를 참조하십시오.
TBAC를 사용하여 Lake Formation 권한을 부여하려면 다음을 수행합니다.
1. 계정 B의 Data Catalog에 다음과 유사한 리소스 정책을 연결합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111222233334444:root" }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:5555666677778888:catalog", "arn:aws:glue:us-east-1:5555666677778888:database/*", "arn:aws:glue:us-east-1:5555666677778888:table/*" ], "Condition": { "Bool": { "glue:EvaluatedByLakeFormationTags": true } } } ] }
정책에서 다음 값을 바꿔야 합니다.
- 1111222233334444를 계정 A의 계정 ID로 바꿉니다.
- 5555666677778888을 계정 B의 계정 ID로 바꿉니다.
2. 정책 태그를 생성합니다.
3. TBAC 방법을 사용하여 Data Catalog 리소스에 Lake Formation 권한을 부여합니다. 자세한 내용은 LF-TBAC 방법을 사용하여 Data Catalog 권한 부여를 참조하십시오.
관련 정보
Lake Formation 권한 모델로의 업그레이드에 대해
- 언어
- 한국어

관련 콘텐츠
AWS 공식업데이트됨 2년 전