AWS Glue 데이터 카탈로그에 대한 교차 계정 액세스 - Amazon Athena

AWS Glue 데이터 카탈로그에 대한 교차 계정 액세스

Athena의 계정 간 AWS Glue 카탈로그 기능을 사용해 자신의 계정이 아닌 다른 계정의 AWS Glue 카탈로그를 등록할 수 있습니다. AWS Glue에 요구되는 IAM 권한을 구성하고 카탈로그를 Athena DataCatalog 리소스로 등록하면 Athena를 사용해 계정 간 쿼리를 실행할 수 있습니다. Athena 콘솔을 사용하여 다른 계정의 카탈로그를 등록하는 방법에 대한 자세한 내용은 다른 계정의 데이터 카탈로그 등록 단원을 참조하세요.

AWS Glue에서 계정 간 액세스에 대한 자세한 내용은 AWS Glue 개발자 안내서계정 간 액세스 권한 부여를 참조하세요.

시작하기 전에

이 기능은 기존의 Athena DataCatalog 리소스 API 및 계정 간 액세스를 활성화하는 기능을 사용하므로 시작하기 전에 다음 리소스를 읽어보는 것이 좋습니다.

고려 사항 및 제한

현재 Athena 계정 간 AWS Glue 카탈로그에는 다음과 같은 제한 사항이 있습니다.

  • Athena 엔진 버전 2 이상이 지원되는 AWS 리전에서만 기능을 사용할 수 있습니다. Athena 엔진 버전에 대한 자세한 내용은 Athena 엔진 버전 관리 단원을 참조하세요. 작업 그룹의 엔진 버전을 업그레이드하려면 Athena 엔진 버전 변경 섹션을 참조하세요.

  • 다른 계정의 AWS Glue Data Catalog를 자신의 계정에 등록할 때 해당 특정 리전에 있는 다른 계정의 데이터에만 연결되는 리전별 DataCatalog 리소스를 생성합니다.

  • 현재 계정 간 AWS Glue 카탈로그를 포함한 CREATE VIEW 문은 지원되지 않습니다.

  • AWS 관리형 키를 사용하여 암호화된 카탈로그는 여러 계정에서 쿼리할 수 없습니다. 여러 계정에서 쿼리하려는 카탈로그의 경우 고객 관리형 키(KMS_CMK)를 대신 사용하세요. 고객 관리형 및 AWS 관리형 키의 차이점에 대한 자세한 내용은 AWS Key Management Service 개발자 안내서의 고객 키 및 AWS 키를 참조하세요.

시작하기

다음 상황에서는 다음 예제처럼 '차용자' 계정(666666666666)이 AWS Glue 카탈로그를 참조하는 SELECT 쿼리를 실행하려 합니다. 이 카탈로그는 '소유자' 계정(999999999999)에 속해 있습니다.

SELECT * FROM ownerCatalog.tpch1000.customer

다음 절차에서 1a 및 1b 단계는 차용자와 소유자의 관점에서 소유자 계정의 AWS Glue 리소스에 대한 액세스 권한을 차용자 계정에 부여하는 방법을 보여줍니다. 이 예제에서는 tpch1000 데이터베이스와 customer 테이블에 액세스 권한을 부여합니다. 이러한 예제 이름을 요구 사항에 맞게 변경합니다.

1a 단계: 소유자의 AWS Glue 리소스에 액세스하는 정책을 가진 차용자 역할 생성

소유자 계정의 AWS Glue 리소스에 대한 액세스 권한이 포함된 차용자 계정 역할을 생성하려면 AWS Identity and Access Management(IAM) 콘솔 또는 IAM API를 사용할 수 있습니다. 다음 절차에서는 IAM 콘솔을 사용합니다.

차용자 역할 및 정책을 생성하여 소유자 계정의 AWS Glue 리소스에 액세스
  1. 차용자 계정에서 IAM 콘솔에 로그인합니다(https://console.aws.amazon.com/iam/).

  2. 서비스 탐색 창에서 액세스 관리를 확장하고 정책을 선택합니다.

  3. 정책 생성을 선택합니다.

  4. 정책 편집기에서 JSON을 선택합니다.

  5. 정책 편집기에서 다음 정책을 입력한 다음 필요에 따라 수정합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }
  6. 다음을 선택합니다.

  7. 검토 및 생성 페이지의 정책 이름에 정책 이름(예: CrossGluePolicyForBorrowerRole)을 입력합니다.

  8. 정책 생성을 선택합니다.

  9. 탐색 창에서 역할을 선택합니다.

  10. 역할 생성을 선택합니다.

  11. 신뢰할 수 있는 엔티티 페이지에서 AWS 계정 선택 후 다음을 선택합니다.

  12. 권한 추가 페이지에서 검색 상자에 생성한 정책의 이름을 입력합니다(예: CrossGluePolicyForBorrowerRole).

  13. 정책 이름 옆에 있는 확인란을 선택하고, 다음을 선택합니다.

  14. 이름, 검토 및 생성 페이지에서 역할 이름(Role name)에서 역할 이름을 입력합니다(예: CrossGlueBorrowerRole).

  15. 역할 생성을 선택합니다.

1b 단계: 차용자에 대해 AWS Glue 액세스 권한을 부여하는 소유자 정책 생성

소유자 계정(999999999999)으로부터 차용자의 역할에 AWS Glue 액세스 권한을 부여하려면 AWS Glue 콘솔 또는 AWS Glue PutResourcePolicy API 작업을 사용합니다. 다음 절차에서는 AWS Glue 콘솔을 사용합니다.

소유자로부터 차용자 계정에 AWS Glue 액세스 권한을 부여하려면
  1. 소유자 계정에서 AWS Glue 콘솔에 로그인합니다(https://console.aws.amazon.com/glue/).

  2. 탐색 창에서 데이터 카탈로그를 확장하고 카탈로그 설정을 선택합니다.

  3. 권한(Permissions) 상자에 다음과 같은 정책을 입력합니다. rolename에 1a 단계에서 차용자 계정이 생성한 역할(예: CrossGlueBorrowerRole)을 입력합니다. 권한 범위를 늘리고자 한다면 데이터베이스 및 테이블 리소스 유형에 와일드카드 문자 *를 사용할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::666666666666:user/username", "arn:aws:iam::666666666666:role/rolename" ] }, "Action": "glue:*", "Resource": [ "arn:aws:glue:us-east-1:999999999999:catalog", "arn:aws:glue:us-east-1:999999999999:database/tpch1000", "arn:aws:glue:us-east-1:999999999999:table/tpch1000/customer" ] } ] }

완료 후 AWS Glue API를 사용해 계정 간 호출을 몇 차례 테스트하여 권한이 예상대로 구성되었는지 확인하는 것이 좋습니다.

2단계: 차용자가 소유자 계정에 속한 AWS Glue Data Catalog 등록

다음 절차는 Athena 콘솔을 사용하여 소유자 Amazon Web Services 계정의 AWS Glue Data Catalog를 데이터 소스로 구성하는 방법을 보여줍니다. 콘솔 대신 API 작업을 사용하여 카탈로그를 등록하는 방법에 대한 자세한 내용은 API를 사용하여 소유자 계정에 속한 Athena 데이터 카탈로그 등록 단원을 참조하세요.

다른 계정에 속한 AWS Glue Data Catalog 등록
  1. https://console.aws.amazon.com/athena/에서 Athena 콘솔을 엽니다.

  2. 콘솔 탐색 창이 표시되지 않으면 왼쪽의 확장 메뉴를 선택합니다.

    확장 메뉴를 선택합니다.
  3. 관리를 확장하고 데이터 소스를 선택합니다.

  4. 오른쪽 위에서 데이터 소스 생성(Create data source)을 선택합니다.

  5. 데이터 소스 선택 페이지의 데이터 소스에서 S3 - AWS Glue Data Catalog를 선택하고 다음을 선택합니다.

  6. 데이터 소스 세부 정보 입력(Enter data source details) 페이지의 AWS Glue Data Catalog 섹션에서 AWS Glue Data Catalog 선택(Choose an AWS Glue Data Catalog)다른 계정의 AWS Glue Data Catalog(AWS Glue Data Catalog in another account)를 선택합니다.

  7. 데이터 세트 세부 정보(Dataset details)에 다음 정보를 입력합니다.

    • 데이터 소스 이름(Data source name) – 다른 계정의 데이터 카탈로그를 참조할 때 SQL 쿼리에 사용할 이름을 입력합니다.

    • 설명(Description) - (선택 사항) 다른 계정의 데이터 카탈로그에 대한 설명을 입력합니다.

    • 카탈로그 ID(Catalog ID) - 데이터 카탈로그가 속한 계정의 Amazon Web Services 계정 ID(12자리)를 입력합니다. Amazon Web Services 계정 ID는 카탈로그 ID입니다.

  8. (선택 사항) 태그를 확장하고 데이터 소스에 연결할 키 값 페어를 입력합니다. 태그에 대한 자세한 내용은 Athena 리소스 태깅 단원을 참조하세요.

  9. 다음을 선택합니다.

  10. 검토 및 생성(Review and create) 페이지에서 제공한 정보를 검토한 다음 데이터 소스 생성(Create data source)을 선택합니다. 데이터 소스 세부 정보(Data source details) 페이지는 등록한 데이터 카탈로그에 대한 데이터베이스 및 태그를 나열합니다.

  11. 데이터 소스(Data Source)을 선택합니다. 등록한 데이터 카탈로그가 데이터 소스 이름(Data source name) 열에 나열됩니다.

  12. 새 데이터 카탈로그에 대한 정보를 보거나 편집하려면 카탈로그를 선택한 다음 작업(Actions), 편집(Edit)을 선택합니다.

  13. 새 데이터 카탈로그를 삭제하려면 카탈로그를 선택한 다음 작업(Actions), 삭제(Delete)를 선택합니다.

3단계: 차용자가 쿼리 제출

다음 예제처럼 차용자가 catalog.database.table 구문을 사용해 카탈로그를 참조하는 쿼리를 제출합니다.

SELECT * FROM ownerCatalog.tpch1000.customer

정규화된 구문을 사용하는 대신 차용자는 QueryExecutionContext를 통해 이를 전달하여 상황에 맞게 카탈로그를 지정할 수도 있습니다.

추가적인 Amazon S3 권한

  • 차용자 계정이 Athena 쿼리를 사용하여 소유자 계정의 테이블에 새 데이터를 쓰는 경우 테이블이 소유자 계정에 있더라도 소유자는 Amazon S3의 해당 데이터에 대한 액세스 권한을 자동으로 보유하지 않습니다. 달리 구성하지 않는 한 차용자가 Amazon S3에 있는 정보의 객체 소유자이기 때문입니다. 소유자에게 데이터에 대한 액세스 권한을 부여하려면 추가 단계로 개체에 대한 권한을 적절히 설정합니다.

  • MSCK REPAIR TABLE 같은 특정한 계정 간 DDL 작업은 Amazon S3 권한을 요구합니다. 예를 들어 소유자 계정 S3 버킷에 있는 데이터를 포함한 소유자 계정의 테이블에 대해 차용자 계정이 계정 간 MSCK REPAIR 작업을 수행할 경우 쿼리가 성공하려면 해당 버킷이 차용자가 맡은 역할에 권한을 부여해야 합니다.

버킷 권한 부여에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서ACL 버킷 권한을 설정하는 방법을 참조하세요.

동적으로 카탈로그 사용

어떤 경우에는 계정 간 AWS Glue 카탈로그를 등록하는 사전 단계 없이 신속히 테스트를 수행해야 할 수 있습니다. 앞서 이 설명서에서 설명한 필수 IAM 및 Amazon S3 권한을 올바르게 구성했다면 DataCatalog 리소스를 생성하지 않고도 계정 간 쿼리를 동적으로 수행할 수 있습니다.

등록 없이 카탈로그를 명시적으로 참조하려면 다음 예제의 구문을 사용합니다.

SELECT * FROM "glue:arn:aws:glue:us-east-1:999999999999:catalog".tpch1000.customer

"glue:<arn>" 형식을 사용합니다. 여기서 <arn>은(는) 사용하고자 하는 AWS Glue Data Catalog ARN입니다. 이 예제에서 Athena는 이 구문을 사용하여 마치 DataCatalog 객체를 별도로 생성한 것처럼 999999999999 계정의 AWS Glue 데이터 카탈로그를 동적으로 가리키도록 할 수 있습니다.

동적 카탈로그 사용에 대한 참고 사항

동적 카탈로그를 사용할 때 다음 사항에 유의해야 합니다.

  • 동적 카탈로그를 사용하려면 Athena 데이터 카탈로그 API 작업에 일반적으로 사용하는 IAM 권한이 필요합니다. 주된 차이점은 데이터 카탈로그 리소스 이름이 glue:* 이름 지정 규칙을 따른다는 것입니다.

  • 카탈로그 ARN은 쿼리가 실행되는 리전과 동일한 리전에 속해야 합니다.

  • DML 쿼리 또는 뷰에서 동적 카탈로그를 사용할 경우 이스케이프된 큰따옴표(\")로 묶어야 합니다. DDL 쿼리에서 동적 카탈로그를 사용할 경우 백틱 문자(`)로 묶어야 합니다.

API를 사용하여 소유자 계정에 속한 Athena 데이터 카탈로그 등록

2단계에서 설명한 대로 Athena 콘솔을 사용하는 대신 API 작업을 사용하여 소유자 계정에 속한 데이터 카탈로그를 등록할 수 있습니다.

Athena DataCatalog 리소스의 생성자는 Athena CreateDataCatalog API 작업을 실행하는 데 필요한 권한이 있어야 합니다. 요구 사항에 따라 추가 API 작업에 액세스해야 할 수도 있습니다. 자세한 내용은 데이터 카탈로그 예제 정책 단원을 참조하세요.

다음 CreateDataCatalog 요청 본문은 계정 간 액세스를 위한 AWS Glue 카탈로그를 등록합니다.

# Example CreateDataCatalog request to register a cross-account Glue catalog: { "Description": "Cross-account Glue catalog", "Name": "ownerCatalog", "Parameters": {"catalog-id" : "999999999999" # Owner's account ID }, "Type": "GLUE" }

다음 샘플 코드는 Java 클라이언트를 사용하여 DataCatalog 객체를 생성합니다.

# Sample code to create the DataCatalog through Java client CreateDataCatalogRequest request = new CreateDataCatalogRequest() .withName("ownerCatalog") .withType(DataCatalogType.GLUE) .withParameters(ImmutableMap.of("catalog-id", "999999999999")); athenaClient.createDataCatalog(request);

이 단계가 끝나면 ListDataCatalogs API 작업을 호출할 때 차용자에게 ownerCatalog가 표시되어야 합니다.

추가적인 리소스