AWS Glue 데이터 카탈로그의 리소스에 대한 크로스 계정 액세스 권한을 제공하려면 어떻게 해야 합니까?

6분 분량
0

다른 계정의 AWS Glue 데이터 카탈로그와 함께 Amazon EMR, Amazon Athena 및 AWS Glue와 같은 서비스를 사용하고 싶습니다.

해결 방법

AWS Glue 데이터 카탈로그의 크로스 계정 리소스에 액세스하는 방법은 연결에 사용하는 AWS 서비스에 따라 다릅니다. 또한 해당 액세스 방법은 데이터 카탈로그에 대한 액세스를 제어하기 위해 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를 사용하고 있는지 확인합니다.

데이터 카탈로그는 (일부 테이블은 Lake Formation을 사용하고 일부 테이블은 AWS Glue 권한을 사용하는) 하이브리드 환경에 있을 수 있습니다. 데이터 카탈로그를 Lake Formation으로 업그레이드하려면 AWS Lake Formation 모델에 대한 AWS Glue 데이터 권한 업그레이드를 참조하세요.

참고: 이 문서에서는 단일 AWS 리전 내에서 크로스 계정 액세스를 위한 솔루션 옵션을 다룹니다. 다른 리전의 리소스에 액세스하는 것은 이 문서의 범위를 벗어납니다. 본인 계정의 데이터 카탈로그를 다른 AWS 리전의 계정으로 복제하려면 GitHub에서 AWS Glue 데이터 카탈로그 복제 유틸리티를 참조하세요.

Lake Formation 없이 데이터 카탈로그 액세스

Lake Formation을 사용하지 않는 경우 다음을 수행하여 계정 B의 AWS Glue 데이터 카탈로그에서 계정 A에 대한 리소스 수준 권한을 부여합니다.

참고: 계정 A는 추출, 전환, 적재(ETL) 계정이고 계정 B는 AWS Glue 데이터 카탈로그 리소스가 있는 계정입니다.

AWS Glue ETL 작업을 사용해 리소스에 액세스

1.    계정 B에서 다음과 유사한 리소스 정책을 연결합니다. 이렇게 하면 계정 B에서 계정 A의 데이터베이스 및 테이블에 액세스할 수 있습니다. 탐색 창에서 Catalog settings(카탈로그 설정)를 선택하여 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/*"
      ]
    }
  ]
}

참고: AWS Glue 데이터 카탈로그와 함께 Athena를 사용하는 경우 정책에 기본 데이터베이스를 포함하세요. 이렇게 하면 GetDatabaseCreateDatabase 작업이 성공합니다. 자세한 내용은 AWS 리전별 기본 데이터베이스 및 카탈로그에 대한 액세스 정책을 참조하세요.

이 정책에서 다음과 같이 값을 변경합니다.

  • 1111222233334444를 계정 A의 계정 ID로 변경
  • 5555666677778888을 계정 B의 계정 ID로 변경
  • us-east-1을 사용자의 리전으로 변경
  • DOC-EXAMPLE-DB를 데이터베이스 이름으로 변경

3.    계정 A에 필요한 권한을 제공한 후 계정 A가 계정 B의 데이터 카탈로그에 액세스할 수 있는지 테스트할 수 있습니다. 이 테스트를 수행하려면 다음의 스크립트를 사용해 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을 사용하여 다른 계정의 데이터 카탈로그에 액세스하려면 Amazon EMR에서 Hive 및 Spark를 사용하여 다른 AWS 계정의 AWS Glue 데이터 카탈로그를 쿼리하려면 어떻게 해야 합니까?를 참조하세요.

Athena를 사용하여 리소스 액세스

Athena를 사용하여 다른 계정의 데이터 카탈로그에 액세스하려면 AWS Glue 데이터 카탈로그에 대한 크로스 계정 액세스를 참조하세요.

Lake Formation을 사용하여 데이터 카탈로그 액세스

Lake Formation을 사용하는 경우 다음 방법 중 하나를 사용하여 데이터 카탈로그에 대한 교차 계정 액세스 권한을 부여할 수 있습니다.

  • 지정된 리소스
  • 태그 기반 액세스 제어(TBAC)

중요: 데이터 카탈로그의 새 테이블에서 IAMAllowedPrincipals에 대한 기본 수퍼 권한을 가지지 않게 하려면 다음을 수행합니다.

1.    AWS Lake Formation 콘솔을 엽니다.

2.    탐색 창에서 Data Catalog(데이터 카탈로그)를 선택한 다음 Settings(설정)를 선택합니다.

3.    Use only IAM access control for new databases(새 데이터베이스에 IAM 액세스 제어만 사용) 및 Use only IAM access control for new tables in this database(이 데이터베이스의 새 테이블에 IAM 액세스 제어만 사용)를 모두 선택 취소합니다.

4.    Save(저장)를 선택합니다.

자세한 내용은 데이터 레이크의 기본 보안 설정 변경을 참조하세요.

지정된 리소스 메서드를 사용하여 교차 계정 권한 부여

AWS Resource Access Manager(AWS RAM)는 지정된 리소스 메서드를 사용하여 데이터베이스 권한을 제공하는 데 사용됩니다.

계정 B의 데이터 카탈로그 리소스에 대한 Lake Formation 권한을 계정 A에 부여하려면 다음을 수행합니다.

1.    계정 B의 데이터 카탈로그에서 다음과 유사한 리소스 정책을 연결합니다.

{
  "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의 데이터 카탈로그 데이터베이스 및 테이블에 대한 Lake Formation 권한을 부여하려면 지정된 리소스 메서드를 사용하여 데이터 카탈로그 권한 부여를 참조하세요.

TBAC를 사용하여 교차 계정 권한 부여

TBAC를 사용하면 정책 태그를 정의하고 이러한 태그를 AWS Glue 데이터베이스, 테이블 및 열에 할당할 수 있습니다. 그런 다음 해당 태그를 사용하여 이러한 데이터 카탈로그 리소스에 대한 세분화된 액세스를 적용할 수 있습니다. 자세한 내용은 태그 기반 액세스 제어를 사용하여 데이터 공유를 참조하세요.

TBAC를 사용하여 Lake Formation 권한을 부여하려면 다음을 수행합니다.

1.    계정 B의 데이터 카탈로그에서 다음과 유사한 리소스 정책을 연결합니다.

{
  "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 메서드를 사용하여 데이터 카탈로그 리소스에 대한 Lake Formation 권한을 부여합니다. 자세한 내용은 LF-TBAC 메서드를 사용하여 데이터 카탈로그 권한 부여를 참조하세요.


관련 정보

교차 계정 액세스 권한 부여

AWS Glue 리소스 ARN 지정

Lake Formation 권한 모델로의 업그레이드에 대한 정보

Hive 메타스토어와 AWS Glue 데이터 카탈로그 간 마이그레이션

액세스 제어를 위한 AWS Glue 리소스 정책

AWS 공식
AWS 공식업데이트됨 일 년 전