교차 계정 액세스 권한 부여 - AWS Glue

교차 계정 액세스 권한 부여

계정 간에 Data Catalog 리소스에 대한 액세스 권한을 부여하면 추출, 변환, 로드(ETL) 작업에서 다른 계정의 데이터를 쿼리하고 결합할 수 있습니다.

AWS Glue에서 교차 계정 액세스 권한을 부여하는 방법

AWS Glue 메서드를 사용하거나 AWS Lake Formation 교차 계정 권한 부여를 사용하여 외부 AWS 계정에 데이터에 대한 액세스 권한을 부여할 수 있습니다. AWS Glue 매서드는 AWS Identity and Access Management(IAM) 정책을 사용하여 세분화된 액세스 제어를 수행합니다. Lake Formation은 관계형 데이터베이스 시스템의 GRANT/REVOKE 명령과 유사한 더 간단한 GRANT/REVOKE 권한 모델을 사용합니다.

이 섹션에서는 AWS Glue 메서드 사용에 대해 설명합니다. Lake Formation 교차 계정 권한 부여 사용에 대한 자세한 내용은 AWS Lake Formation Developer GuideGranting Lake Formation Permissions를 참조하세요.

리소스에 대한 교차 계정 액세스 권한을 부여하기 위한 두 가지 AWS Glue 방법이 있습니다.

  • Data Catalog 리소스 정책 사용

  • IAM 역할 사용

리소스 정책을 사용하여 교차 계정 액세스 권한 부여

다음은 Data Catalog 리소스 정책을 사용하여 교차 계정 액세스 권한을 부여하는 일반적인 단계입니다.

  1. 계정 A의 관리자(또는 기타 권한이 있는 자격 증명)가 계정 A의 Data Catalog에 리소스 정책을 연결합니다. 이 정책은 계정 B에게 계정 A의 카탈로그에 있는 리소스에 대한 작업을 수행할 수 있는 특정 교차 계정 권한을 부여합니다.

  2. 계정 B의 관리자는 계정 A에게서 받은 권한을 위임하는 계정 B의 사용자 또는 다른 IAM 자격 증명에 IAM 정책을 연결합니다.

    계정 B의 사용자 또는 다른 자격 증명이 이제 계정 A의 지정된 리소스에 대한 액세스 권한을 갖습니다.

    사용자가 리소스에 액세스하려면 리소스 소유자(계정 A) 상위 계정(계정 B) 모두의 권한이 필요합니다.

IAM 역할을 사용하여 교차 계정 액세스 권한 부여

다음은 IAM 역할을 사용하여 교차 계정 액세스 권한을 부여하는 일반적인 단계입니다.

  1. 리소스를 소유한 계정(계정 A)의 관리자(또는 권한이 있는 다른 자격 증명)가 IAM 역할을 생성합니다.

  2. 계정 A의 관리자는 문제의 리소스에 대한 교차 계정 액세스 권한을 부여하는 역할에 정책을 연결합니다.

  3. 계정 A의 관리자는 다른 계정(계정 B)의 IAM 자격 증명을 해당 역할을 맡을 수 있는 보안 주체로 식별하는 역할에 신뢰 정책을 연결합니다.

    AWS 서비스에 역할을 맡을 수 있는 권한을 부여하고 싶다면, 신뢰 정책의 보안 주체는 AWS 서비스 보안 주체가 됩니다.

  4. 이제, 계정 B의 관리자가 계정 B에 있는 하나 이상의 IAM 자격 증명에 권한을 위임해 해당 자격 증명이 역할을 맡을 수 있습니다. 그러면 계정 B의 해당 자격 증명에 계정 A의 리소스에 대한 액세스 권한이 부여됩니다.

IAM을 사용하여 권한을 위임하는 방법에 대한 자세한 내용은 IAM User GuideAccess Management를 참조하세요. 사용자, 그룹, 역할 및 권한에 대한 자세한 내용은 IAM 사용 설명서자격 증명(사용자, 그룹 및 역할)을 참조하세요.

두 가지 방법을 비교하려면 IAM 사용 설명서IAM 역할과 리소스 기반 정책의 차이점을 참조하세요. AWS Glue에서는 두 옵션을 모두 지원하지만, 리소스 정책은 Data Catalog 리소스에 대한 액세스 권한만 부여할 수 있다는 제한 사항이 있습니다.

예를 들어, 계정 B의 사용자 Bob에게 계정 A의 데이터베이스 db1에 대한 액세스 권한을 부여하려면 다음 리소스 정책을 계정 A의 카탈로그에 연결합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase" ], "Principal": {"AWS": [ "arn:aws:iam::account-B-id:user/Bob" ]}, "Resource": [ "arn:aws:glue:us-east-1:account-A-id:catalog", "arn:aws:glue:us-east-1:account-A-id:database/db1" ] } ] }

또한 계정 B는 Bob이 계정 A의 db1에 대한 액세스 권한을 실제로 얻기 전에 Bob에게 다음 IAM 정책을 연결해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetDatabase" ], "Resource": [ "arn:aws:glue:us-east-1:account-A-id:catalog", "arn:aws:glue:us-east-1:account-A-id:database/db1" ] } ] }

Data Catalog 리소스 정책 추가 또는 업데이트

콘솔, API 또는 AWS Command Line Interface(AWS CLI)를 사용하여 AWS Glue Data Catalog 리소스 정책을 추가하거나 업데이트할 수 있습니다.

중요

AWS Lake Formation이 있는 계정에서 이미 교차 계정 권한을 부여한 경우 Data Catalog 리소스 정책을 추가하거나 업데이트하려면 추가 단계가 필요합니다. 자세한 내용은 AWS Lake Formation 개발자 가이드AWS Glue 및 Lake Formation을 모두 사용하여 계정 권한 관리를 참조하세요.

Lake Formation 교차 계정 부여가 있는지 확인하려면 glue:GetResourcePolicies API 또는 AWS CLI를 사용합니다. API가 이미 존재하는 Data Catalog 정책 이외의 정책을 반환하는 경우 Lake Formation 부여가 존재합니다. 자세한 내용은 AWS Lake Formation Developer GuideViewing All Cross-Account Grants Using the GetResourcePolicies API를 참조하세요.

Data Catalog 리소스 정책을 추가하거나 업데이트하려면(콘솔)
  1. https://console.aws.amazon.com/glue/에서 AWS Glue 콘솔을 엽니다.

    AWS Identity and Access Management(IAM) 관리 사용자 또는 glue:PutResourcePolicy 권한이 있는 사용자로 로그인합니다.

  2. 탐색 창에서 설정(Settings)을 선택합니다.

  3. [데이터 카탈로그 설정(Data catalog settings)] 페이지의 [권한(Permissions)]에서 리소스 정책을 텍스트 영역에 붙여넣습니다. 그런 다음 저장(Save)을 선택합니다.

    정책의 권한이 Lake Formation을 사용하여 부여된 권한에 추가된다는 알림이 콘솔에 표시되면 [계속(Proceed)]을 선택합니다.

Data Catalog 리소스 정책을 추가하거나 업데이트하려면(AWS CLI)
  • aws glue put-resource-policy 명령을 제출합니다. Lake Formation 권한 부여가 이미 있는 경우 --enable-hybrid 옵션을 'TRUE' 값과 함께 포함해야 합니다.

    이 명령의 사용 예는 AWS Glue 리소스 기반 액세스 제어 정책 예제 섹션을 참조하세요.

교차 계정 API 호출 수행

모든 AWS Glue Data Catalog 작업에는 CatalogId 필드가 있습니다. 교차 계정 액세스를 활성화하기 위한 필수 권한이 부여된 경우 호출자는 계정을 교차하여 Data Catalog API 호출을 수행할 수 있습니다. 호출자는 해당 대상 계정의 리소스에 액세스하기 위해 CatalogId의 대상 AWS 계정 ID를 전달하여 이렇게 합니다.

CatalogId 값을 입력하지 않으면 AWS Glue에서는 기본적으로 호출자의 계정 ID를 사용하고 교차 계정 호출이 수행되지 않습니다.

교차 계정 ETL 호출 수행

일부 AWS Glue PySpark 및 Scala API에는 카탈로그 ID 필드가 있습니다. 교차 계정 액세스가 가능하도록 모든 필수 권한이 부여된 경우 ETL 작업은 대상 계정의 Data Catalog 리소스에 액세스할 수 있도록 카탈로그 ID 필드에 대상 AWS 계정 ID를 전달하여 계정 간에 API 작업에 대해 PySpark 및 Scala를 호출할 수 있습니다.

카탈로그 ID 값을 입력하지 않으면 AWS Glue에서는 기본적으로 호출자의 계정 ID를 사용하고 교차 계정 호출이 수행되지 않습니다.

catalog_id를 지원하는 PySpark API는 GlueContext 클래스 단원을 참조하십시오. catalogId를 지원하는 Scala API는 AWS Glue Scala GlueContext API 단원을 참조하십시오.

다음 예는 ETL 작업을 실행하기 위해 피부여자에게 필요한 권한을 보여줍니다. 이 예에서 grantee-account-id는 작업을 실행하는 클라이언트의 catalog-id이고, grantor-account-id는 리소스의 소유자입니다. 이 예에서는 부여자의 계정에 있는 모든 카탈로그 리소스에 대한 권한을 부여합니다. 부여되는 리소스의 범위를 제한하기 위해 카탈로그, 데이터베이스, 테이블 및 연결에 해당하는 특정 ARN을 제공할 수 있습니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "glue:GetConnection", "glue:GetDatabase", "glue:GetTable", "glue:GetPartition" ], "Principal": {"AWS": ["arn:aws:iam::grantee-account-id:root"]}, "Resource": [ "arn:aws:glue:us-east-1:grantor-account-id:*" ] } ] }
참고

부여자의 계정에 있는 테이블이 부여자의 계정에 있는 Amazon S3 위치를 가리키는 경우 피부여자의 계정에서 ETL 작업을 실행하는 데 사용하는 IAM 역할은 부여자의 계정에서 객체를 나열하고 가져올 수 있는 권한이 있어야 합니다.

계정 A의 클라이언트가 ETL 작업을 생성하고 실행할 수 있는 권한을 이미 가지고 있는 경우 교차 계정 액세스를 위해 ETL 작업을 설정하는 기본 단계는 다음과 같습니다.

  1. 교차 계정 데이터 액세스를 허용합니다(Amazon S3 교차 계정 액세스가 이미 설정된 경우에는 이 단계를 건너뜀).

    1. 계정 A에서 교차 계정 액세스를 허용하도록 계정 B에서 Amazon S3 버킷 정책을 업데이트합니다.

    2. 계정 B에서 버킷에 대한 액세스를 허용하도록 계정 A에서 IAM 정책을 업데이트합니다.

  2. 교차 계정 Data Catalog 액세스를 허용합니다.

    1. 계정 A에서 액세스를 허용하도록 계정 B에서 Data Catalog에 연결된 리소스 정책을 생성하거나 업데이트합니다.

    2. 계정 B에서 Data Catalog에 대한 액세스를 허용하도록 계정 A에서 IAM 정책을 업데이트합니다.

교차 계정 CloudTrail 로깅

AWS Glue 추출, 변환, 로드 작업이 AWS Lake Formation 교차 계정 권한 부여를 통해 공유되는 Data Catalog 테이블의 기본 데이터에 액세스하면 추가 AWS CloudTrail 로깅 동작이 있습니다.

이 설명을 위해 테이블을 공유한 AWS 계정은 소유자 계정이고 테이블을 공유한 계정은 수신자 계정입니다. 수신자 계정의 ETL 작업이 소유자 계정의 테이블에 있는 데이터에 액세스하면 수신자 계정의 로그에 추가된 데이터 액세스 CloudTrail 이벤트가 소유자 계정의 CloudTrail 로그에 복사됩니다. 이는 소유자 계정이 다양한 수신자 계정의 데이터 액세스를 추적할 수 있도록 하기 위한 것입니다. 기본적으로 CloudTrail 이벤트에는 사람이 읽을 수 있는 보안 주체 식별자(기본 ARN)가 포함되어 있지 않습니다. 수신자 계정의 관리자는 로그에 보안 주체 ARN을 포함하도록 선택할 수 있습니다.

자세한 내용은 AWS Lake Formation Developer GuideCross-Account CloudTrail Logging을 참조하세요.

AWS Glue 리소스 소유권과 작업

AWS 계정은 리소스 생성자와 상관없이 계정에서 생성된 AWS Glue Data Catalog 리소스를 소유합니다. 특히, 리소스 소유자는 해당 리소스에 대한 생성 요청을 인증한 주요 엔터티(즉, AWS 계정 루트 사용자, IAM 사용자 또는 IAM 역할)의 AWS 계정입니다. 예를 들면 다음과 같습니다.

  • AWS 계정의 루트 사용자 자격 증명을 사용하여 Data Catalog에서 테이블을 생성하는 경우 AWS 계정이Data Catalog 리소스 소유자입니다.

  • AWS 계정에서 IAM 사용자를 생성하고 이 사용자에게 테이블을 생성할 수 있는 권한을 부여하면 이 사용자가 생성한 모든 테이블은 사용자가 속한 AWS 계정이 소유합니다.

  • 테이블 생성 권한이 있는 AWS 계정에서 IAM 역할을 생성하면 역할을 수임할 수 있는 모든 사람이 테이블을 생성할 수 있습니다. 하지만, AWS 계정은 해당 역할을 사용하여 생성된 테이블 리소스를 소유합니다.

각 AWS Glue 리소스에 대해 서비스는 적용되는 일련의 API 작업을 정의합니다. 이러한 API 작업에 대한 권한을 부여하기 위해 AWS Glue에서는 정책에서 지정할 수 있는 작업을 정의합니다. 일부 API 작업에서는 API 작업을 수행하기 위해 복수의 작업에 대한 권한이 필요할 수 있습니다.

교차 계정 리소스 소유권 및 결제

AWS 계정 하나(계정 A)의 사용자가 다른 계정(계정 B)에서 새 리소스(예: 데이터베이스)를 생성하는 경우 리소스의 소유자는 해당 리소스가 생성된 계정인 계정 B입니다. 계정 B의 관리자는 읽기 및 쓰기와 세 번째 계정에게 액세스 권한 부여 등을 비롯해 새 리소스에 액세스하기 위한 전체 권한을 자동으로 가져옵니다. 계정 A의 사용자는 계정 B가 부여한 적절한 권한이 있는 경우에만 방금 생성한 리소스에 액세스할 수 있습니다.

스토리지 비용과 새 리소스와 직접 연관된 기타 비용이 리소스 소유자인 계정 B에게 청구됩니다. 리소스를 생성한 사용자의 요청 비용은 요청자의 계정인 계정 A로 청구됩니다.

AWS Glue 결제 및 요금에 대한 자세한 내용은 AWS 요금 책정 방식을 참조하세요.

교차 계정 액세스 제한 사항

AWS Glue 교차 계정 액세스에는 다음과 같은 제한 사항이 있습니다.

  • 리전의 AWS Glue 지원 이전에 Amazon Athena 또는 Amazon Redshift Spectrum을 사용하여 데이터베이스와 테이블을 생성했으며 리소스 소유자 계정이 Amazon Athena 데이터 카탈로그를 AWS Glue로 마이그레이션하지 않은 경우에는 AWS Glue에 대한 교차 계정 액세스가 허용되지 않습니다. GetCatalogImportStatus(get_catalog_import_status)를 사용하여 현재 마이그레이션 상태를 찾을 수 있습니다. Athena 카탈로그를 AWS Glue로 마이그레이션하는 방법에 대한 자세한 내용은 Amazon Athena 사용 설명서AWS Glue Data Catalog로 단계별 업그레이드를 참조하세요.

  • 교차 계정 액세스는 데이터베이스, 테이블, 사용자 정의 함수 및 연결을 포함한 Data Catalog 리소스에 대해서만 지원됩니다.

  • AWS Glue 크롤러를 사용할 때 Data Catalog에 대한 교차 계정 액세스는 지원되지 않습니다.

  • Athena에서 Data Catalog에 대한 교차 계정 액세스를 사용하려면 카탈로그를 Athena DataCatalog 리소스로 등록해야 합니다. 지침은 Amazon Athena 사용 설명서다른 계정에서 AWS Glue Data Catalog 등록을 참조하세요.