AWS Lake Formation을 사용하여 AWS Glue Data Catalog 데이터베이스 및 테이블 교차 계정을 공유하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 5월 5일

AWS Lake Formation을 사용하여 AWS Glue Data Catalog 데이터베이스 및 테이블을 교차 계정을 공유하고 싶습니다.

해결 방법

Lake Formation의 교차 계정 기능을 사용하면 다른 AWS 계정에 대한 액세스 권한을 부여하여 데이터 레이크에 데이터를 쓰고 공유할 수 있습니다. 리소스는 태그 기반 액세스 제어 또는 명명된 리소스를 통해 공유할 수 있습니다. 이 문서에서는 명명된 리소스 방법을 사용하여 Data Catalog 리소스에 대한 교차 계정 액세스 권한을 부여하는 방법을 중점적으로 설명합니다.

사전 요구 사항의 충족 여부 확인

Data Catalog 리소스를 다른 계정과 공유하거나 다른 계정에서 공유된 리소스에 액세스하기 전에 다음과 같은 사전 요구 사항에 유의하십시오.

Lake Formation 권한 취소

Data Catalog 리소스에 대한 IAMAllowedPrincipals에서 모든 Lake Formation 권한을 취소합니다.

새 테이블에 Super 권한이 부여되지 않도록 방지

공유할 수 있는 테이블을 포함하는 Data Catalog 데이터베이스의 경우 새 테이블에서 IAMAllowedPrincipals:에 대해 Super 기본 권한이 부여되지 않도록 합니다.

  1. Lake Formation 콘솔을 엽니다.
  2. 탐색 창의 Data Catalog에서 데이터베이스(Databases)를 선택합니다.
  3. 업데이트할 데이터베이스를 선택합니다.
  4. 작업(Actions)을 선택한 다음 편집(Edit)을 선택합니다.
  5. 새로 생성된 테이블에 대한 기본 권한(Default permissions for newly created tables)에서 이 데이터베이스의 새 테이블에 대해서만 IAM 액세스 제어 사용(Use only IAM access control for new tables in this database)을 지웁니다.
  6. 저장(Save)을 선택합니다.

자세한 내용은 Super를 참조하세요.

교차 계정 액세스에 필요한 권한 추가

AWS Glue Data Catalog 리소스 정책이 계정에서 이미 사용되는 경우 정책을 제거하거나 교차 계정 부여에 필요한 새 권한을 정책에 추가할 수 있습니다. 다음은 계정 1111222233334444에서 계정 5555666677778888로 교차 계정 AWS Glue 액세스 권한을 제공하기 위한 샘플 리소스 정책입니다.

자세한 내용은 교차 계정 액세스 권한 부여를 참조하세요.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ram.amazonaws.com"
      },
      "Action": "glue:ShareResource",
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:table/*/*",
        "arn:aws:glue:us-east-1:1111222233334444:database/*",
        "arn:aws:glue:us-east-1:1111222233334444:catalog"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::5555666677778888:root"
      },
      "Action": "glue:*",
      "Resource": [
        "arn:aws:glue:us-east-1:1111222233334444:table/*/*",
        "arn:aws:glue:us-east-1:1111222233334444:database/*",
        "arn:aws:glue:us-east-1:1111222233334444:catalog"
      ]
    }
  ]
}

조직과의 공유 활성화

Data Catalog 리소스가 조직 간에 공유되는 경우 AWS RAM 콘솔을 사용하여 AWS Organizations와 공유할 수 있도록 합니다. 이 옵션을 활성화하는 AWS Identity and Access Management(IAM) 사용자 또는 역할에는 ram:EnableSharingWithAwsOrganization IAM 권한이 있어야 합니다.

자세한 내용은 교차 계정 액세스 사전 요구 사항을 참조하세요.

필요한 IAM 권한 부여

소스 계정: 명명된 리소스 방법을 사용하여 교차 계정 권한을 부여하려면 AWS Glue 및 AWS Resource Access Manager(AWS RAM)에 필요한 IAM 권한이 있어야 합니다. 이러한 권한을 부여하는 AWS 관리형 정책 AWSLakeFormationCrossAccountManager를 선택하거나 이 정책을 기반으로 새 정책을 생성할 수 있습니다.

대상 계정: 대상 계정의 데이터 레이크 관리자에게는 다음과 같은 추가 정책이 있어야 합니다. 이 정책을 통해 관리자는 AWS RAM 리소스 공유 초대를 수락하고 조직과의 리소스 공유를 활성화할 수 있습니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ram:AcceptResourceShareInvitation",
        "ram:RejectResourceShareInvitation",
        "ec2:DescribeAvailabilityZones",
        "ram:EnableSharingWithAwsOrganization"
      ],
      "Resource": "*"
    }
  ]
}

참고: AWS RAM에서 리소스 공유 초대를 받는 IAM 사용자 또는 역할에는 Glue:PutResourcePolicy에 대하여 필요한 IAM 권한이 있어야 합니다.

대상 계정과 데이터베이스 및 테이블 공유

데이터베이스 및 데이터베이스의 모든 테이블을 조직에 속하지 않은 대상 계정과 공유하려면 다음을 수행합니다.

참고: 소스 계정에서 데이터베이스의 모든 테이블을 공유하는 경우 소스 계정에서 생성된 새 테이블은 대상 계정과 자동으로 공유됩니다.

소스 계정에서 다음을 수행합니다.

  1. Lake Formation 콘솔을 열고 데이터 레이크 관리자로 로그인합니다.
  2. 탐색 창에서 데이터베이스(Databases)를 선택합니다.
  3. 공유할 데이터베이스를 선택합니다.
  4. 작업(Actions)을 선택한 다음, 권한 부여(Grant)를 선택합니다.
  5. 외부 계정(External account)을 선택합니다.
  6. AWS 계정 ID 또는 AWS 조직 ID에 대상 계정의 계정 ID를 입력합니다.
  7. 테이블(Table) 경우 모든 테이블(All tables)이 선택되어 있는지 확인합니다.
  8. 테이블 권한(Table permissions)부여 가능 권한(Grantable permissions)에서 부여할 액세스 권한을 선택합니다.
  9. 권한 부여(Grant)를 선택합니다.

대상 계정에서 다음을 수행합니다.

  1. AWS RAM 콘솔을 엽니다.
  2. 탐색 창의 나와 공유(Shared with me)에서 리소스 공유(Resource shares)를 선택합니다.
  3. 액세스 권한이 부여된 리소스 공유 목록을 검토합니다.
  4. 소스 계정에서 공유 리소스에 대한 초대를 수락하려면 리소스 공유 ID를 선택하고 리소스 공유 수락(Accept resource share)을 선택합니다.
  5. Lake Formation 콘솔을 엽니다.
  6. 탐색 창에서 데이터베이스(Databases)를 선택합니다.
    목록에서 공유 데이터베이스를 볼 수 있습니다. 이 데이터베이스의 소유자 계정 ID(Owner account ID)에는 소스 계정의 계정 ID가 표시됩니다.
  7. 공유 데이터베이스를 선택한 다음 작업(Actions)을 선택합니다.
  8. 리소스 링크 생성(Create resource link)을 선택합니다.
  9. 리소스 링크 생성(Create resource link) 페이지에서 다음을 수행합니다.
    리소스 링크 이름(Resource link name)에 리소스 링크의 이름을 입력합니다.
    공유 데이터베이스(Shared database)의 경우 공유 데이터베이스의 이름이 선택되어 있는지 확인합니다.
    공유 데이터베이스의 소유자 ID(Shared database's owner ID)에 원본 계정의 계정 ID를 입력합니다.
  10. 생성(Create)을 선택합니다.
    리소스 링크가 생성됩니다.

리소스 링크는 메타데이터 데이터베이스와 테이블, 일반적으로 다른 AWS 계정의 공유 데이터베이스와 테이블에 대한 링크인 Data Catalog 객체입니다. 데이터 레이크의 데이터에 대한 교차 계정 액세스를 가능하게 합니다. 리소스 링크가 생성된 후 데이터 레이크 관리자 액세스 권한으로 공유 데이터베이스의 테이블을 쿼리할 수 있습니다.

공유 데이터베이스의 IAM 사용자/보안 주체에 액세스 권한을 부여하려면 리소스 링크 및 공유 데이터베이스에 필요한 권한을 부여합니다. 이렇게 하면 IAM 사용자/보안 주체가 Lake Formation 콘솔에서 공유 데이터베이스 및 리소스 링크를 볼 수 있습니다. IAM 사용자는 Amazon Athena 콘솔 또는 Amazon Redshift Spectrum에서 데이터베이스 및 리소스 링크를 볼 수도 있습니다.

IAM 사용자에게 리소스 링크에 대한 액세스 권한을 부여하려면 다음을 수행합니다.

  1. Lake Formation 콘솔을 열고 데이터 레이크 관리자로 로그인합니다.
  2. 탐색 창에서 데이터베이스(Databases)를 선택합니다.
  3. 생성한 리소스 링크를 선택합니다.
  4. 작업(Actions)을 선택한 다음, 권한 부여(Grant)를 선택합니다.
  5. 보안 주체(Principals) 아래에서 IAM 사용자 및 역할(IAM users and roles)을 선택합니다.
  6. IAM 사용자 및 역할(IAM users and roles)에서 액세스 권한을 부여해야 하는 IAM 사용자 또는 보안 주체를 선택합니다.
  7. 리소스 링크 권한(Resource link permissions) 아래에서 설명(Describe)을 선택합니다.
  8. 권한 부여(Grant)를 선택합니다.

IAM 사용자에게 공유 데이터베이스에 대한 액세스 권한을 부여하려면 다음을 수행합니다.

  1. Lake Formation 콘솔을 열고 데이터 레이크 관리자로 로그인합니다.
  2. 탐색 창에서 데이터베이스(Databases)를 선택합니다.
  3. 공유 데이터베이스를 선택합니다.
  4. 작업(Actions)을 선택한 다음, 권한 부여(Grant)를 선택합니다.
  5. 보안 주체(Principals) 아래에서 IAM 사용자 및 역할(IAM users and roles)을 선택합니다.
  6. IAM 사용자 및 역할(IAM users and roles)에서 액세스 권한을 부여해야 하는 IAM 사용자 또는 보안 주체를 선택합니다.
  7. 데이터베이스 권한(Database permissions)에서 설명(Describe)을 선택합니다.
    참고: 이 단계에서는 사용자에게 공유 데이터베이스를 볼 수 있는 최소 권한을 제공합니다.
  8. 권한 부여(Grant)를 선택합니다.

데이터베이스의 모든 테이블 또는 특정 테이블에 대한 액세스 권한을 부여하려면 모든 테이블(All tables) 옵션을 선택합니다.

  1. 리소스 링크를 선택합니다.
  2. 작업(Actions)을 선택한 다음, 권한 부여(Grant)를 선택합니다.
  3. IAM 사용자 및 역할(IAM users and roles)을 선택합니다.
  4. IAM 사용자 및 역할(IAM users and roles)에서 액세스 권한을 부여할 사용자/보안 주체를 선택합니다.
  5. LF 태그 또는 카탈로그 리소스(LF-Tags or catalog resources)에서 다음을 수행합니다.
    데이터베이스의 모든 테이블에 대한 액세스 권한을 부여하려면 테이블 - 선택 사항(Tables - optional)에서 모든 테이블(All tables)을 선택합니다.
    데이터베이스의 특정 테이블에만 액세스 권한을 부여하려면 테이블 - 선택 사항(Tables - optional)에서 테이블을 선택합니다.
  6. 테이블 권한(Table permissions)부여 가능 권한(Grantable permissions)에서 선택(Select)설명(Describe)을 선택합니다.
  7. 권한 부여(Grant)를 선택합니다.

참고: 소스 계정의 부여 가능 권한(Grantable permissions)에 대해 선택한 권한만 부여할 수 있습니다.

필요한 권한을 부여한 후 대상 계정에서 Athena의 테이블을 성공적으로 쿼리할 수 있습니다.

대상 계정과 테이블만 공유

개별 테이블을 대상 계정과 공유하려면 다음 변경 사항과 함께 이전 섹션의 지침을 따르십시오.

소스 계정:

Lake Formation 콘솔에서 대상 계정에 대한 액세스 권한을 부여하려면 데이터베이스를 선택하는 대신 개별 테이블을 선택합니다.

대상 계정:

  • AWS RAM 콘솔에서 리소스 공유를 수락하여 Lake Formation 콘솔의 공유 테이블에 액세스합니다.
  • 공유 테이블에 대한 리소스 링크를 생성합니다. 리소스 링크가 생성된 후 데이터 레이크 관리자 액세스 권한으로 공유 테이블을 쿼리할 수 있습니다.
  • 공유 테이블의 IAM 사용자/보안 주체에게 액세스 권한을 부여하려면 리소스 링크에 대한 권한을 부여해야 합니다.

추가 고려 사항

  • 테이블에 대한 권한을 부여하면 테이블의 특정 열에 대해서만 액세스를 제한할 수 있습니다. 이렇게 하면 대상 계정이 공유 테이블의 열만 볼 수 있습니다.
  • 대상 계정의 IAM 사용자/보안 주체가 소스 계정의 Amazon Simple Storage Service(Amazon S3) 경로에 액세스할 수 있는지 확인합니다.
  • 소스 계정에서 이전에 부여된 권한을 취소하면 대상 계정이 공유 데이터베이스/테이블에 액세스할 수 없습니다. 하지만 대상 계정에서 생성한 리소스 링크는 자동으로 삭제되지 않습니다. 리소스 링크를 수동으로 삭제해야 합니다.
  • 데이터베이스/테이블을 삭제해도 AWS RAM의 리소스 공유는 자동으로 삭제되지 않습니다. 따라서 공유 데이터베이스 또는 테이블을 삭제하기 전에 교차 계정 권한을 수동으로 취소해야 합니다.