AWS 기술 블로그

AWS Lake Formation과 Amazon S3 정책을 통한 안전한 액세스를 위한 AWS Glue Data Catalog의 하이브리드 액세스 모드 소개

이 글은 AWS Big Data Blog의 Introducing hybrid access mode for AWS Glue Data Catalog to secure access using AWS Lake Formation and IAM and Amazon S3 policies by Aarthi Srinivasan의 한국어 번역본입니다.

AWS Lake Formation을 사용하면 분석과 머신 러닝을 위한 데이터를 중앙에서 관리하고, 보호하고, 전사적으로 공유할 수 있습니다. Lake Formation을 사용해서, 사용자는 Amazon Simple Storage Service(Amazon S3)상에 구축된 데이터 레이크에 저장된 데이터와 AWS Glue Data Catalog 상의 메타데이터에 대한 액세스 제어를 한곳에서 데이터베이스 스타일로 익숙하게 관리할 수 있습니다. 세분화된 데이터 액세스 제어(fine-grained data access control)를 사용해 적합한 사용자가 테이블의 셀 수준까지 적절한 데이터에 액세스할 수 있는지 확인할 수 있습니다. 또한, Lake Formation을 사용해 조직 내부 또는 외부와 데이터를 더 간편하게 공유할 수 있습니다. 더 나아가, Lake Formation은 Amazon Athena, Amazon Redshift Spectrum, Amazon EMR, AWS Glue ETL for Apache Spark과 같은 AWS 분석 서비스와 통합되어 있습니다. 이러한 서비스에서 Lake Formation에서 관리되는 테이블에 대한 쿼리가 가능하며, 따라서 데이터에서 비즈니스 인사이트를 빠르고 안전하게 추출할 수 있습니다.

Lake Formation과 이 서비스에서 제공되는 데이터 레이크에 대한 데이터베이스 스타일의 권한 관리 기능이 제공되기 전에는, 사용자는 AWS Identity and Access Management(IAM) 정책과 S3 버킷 정책을 통해서 데이터 레이크의 데이터 및 해당 메타데이터에 대한 액세스를 별도로 관리해야 했습니다. Lake Formation에 비해 상대적으로 더 복잡하고 덜 정교하게 관리되는 IAM과 Amazon S3 액세스 관리 방법을 사용하는 경우, Lake Formation으로의 마이그레이션에 더 많은 시간이 필요했는데, 데이터 레이크 상의 특정 데이터베이스나 테이블은 IAM과 S3 정책 기반, 그리고 Lake Formation 정책 중 한 방식으로만 액세스 제어가 가능했으며 동시에 두 방법을 모두 사용하는 것은 불가능했기 때문입니다. 또한, 데이터 레이크에 대한 권한 관리는 다양한 형태로 수행될 수 있는데, 이런 다양한 형태의 권한관리 정책을 하나의 권한관리 모델에서 중간 과정 없이 한번에 새로운 권한관리 모델로 마이그레이션 하는 것은 운영팀에게도 도전적인 작업이 될 수밖에 없었습니다.

데이터 레이크의 권한관리 모델을 IAM과 S3 모델에서 Lake Formation으로 전환을 쉽게 수행할 수 있도록, AWS Glue Data Catalog을 위한 하이브리드 액세스 모드가 발표되었습니다. 새소식 페이지문서에서 자세한 내용을 참조할 수 있습니다. 이 기능을 사용하면 Lake Formation 기반 권한관리와 IAM과 S3 기반 권한관리 양쪽 모두를 사용해 카탈로그화된 데이터를 확보하고 액세스할 수 있습니다. 하이브리드 액세스 모드를 사용해, 데이터 관리자는 Lake Formation 기반 권한관리 방식으로 선택적으로, 그리고 점진적으로 옮겨갈 수 있으며, 한 번에 하나의 데이터 레이크 권한관리 형태에 집중할 수 있게 됩니다. 예를 들어, 기존의 ETL (추출, 변환, 로드) 데이터 파이프라인이 IAM과 S3 기반 권한관리 방식으로 데이터 액세스를 관리하는 경우를 가정해 보겠습니다. 이 상황에서, 이제 데이터 분석가가 Amazon Athena를 사용해 해당 데이터를 탐색하거나 쿼리할 수 있도록 하려면 어떻게 해야 할까요? 관리자는 ETL 데이터 파이프라인에 대한 액세스 변경 없이, 미세수준 권한관리를 포함한 Lake Formation 기반 권한관리 방식을 사용해 데이터 분석가에게 액세스를 제공할 수 있습니다.

하이브리드 액세스 모드를 사용하면 동일한 데이터베이스 및 테이블에 대해 두 권한 모델이 공존할 수 있어서, 사용자 액세스 관리의 유연성이 크게 증가합니다. 이 기능이 Data Catalog의 자원에 대해 두가지 방식으로 관리할 수 있는 방안을 제공하지만, IAM user 또는 role은 두 방식 중 한가지 방식만을 사용해 자원에 액세스할 수 있습니다. Lake Formation 기반 권한관리가 특정 IAM principal에 대해 활성화되면 권한관리는 Lake Formation 기반으로만 관리되며 기존의 IAM과 S3 정책들은 무시됩니다. AWS CloudTrail logs는 Lake Formation 로그와 S3 액세스 로그를 통해 Data Catalog 자원 액세스와 관련된 모든 상세 정보를 제공합니다.

이 블로그 글에서는 이미 데이터 레이크가 IAM과 S3 기반 권한관리 방식을 통해 일부 사용자에게 액세스를 제공하고 있는 상황에서 다른 선택된 사용자들에게 하이브리드 액세스 모드 상황에서 Lake Formation 기반 권한관리 방식 적용을 어떻게 시작할 수 있는지에 대한 지침을 제시합니다. 하나의 AWS 계정 내, 그리고 두 계정 간에 하이브리드 액세스 모드를 구성하는 지침을 모두 살펴볼 예정입니다.

시나리오 1 – 단일 AWS 계정에서의 하이브리드 액세스 모드

이 시나리오에서는, IAM과 S3 정책 기반 권한관리 방식을 사용해 엑세스 제어중인 Data Catalog 내의 데이터베이스에 Lake Formation 권한이 있는 사용자를 추가하기 위한 절차를 보여줍니다. 설명을 위해 두 가지 페르소나를 사용합니다. Data-Engineer는 AWS Glue ETL job의 실행을 위해 IAM 정책과 S3 버킷 정책을 사용해 큰 단위의(coarse grained) 권한관리를 적용받고 있으며, Data-Analyst는 Amazon Athena를 사용해 데이터베이스를 쿼리하기 위해 Lake Formation 기반의 미세수준 권한관리를 적용받을 예정입니다.

아래 그림에 시나리오 1의 상황이 표시되어 있습니다. 여기서 Data-Engineer role은 IAM과 S3 기반 권한관리를 사용해 hybridsalesdb 데이터베이스에 액세스하고, Data-Analyst role은 Lake Formation 기반 권한관리를 사용해 데이터베이스에 액세스합니다.

전제 조건

Data Catalog의 데이터베이스를 하이브리드 액세스 모드를 사용해 Lake Formation 기반 권한관리와 IAM과 S3 기반 권한관리로 설정하기 위해 다음 전제조건이 만족되어야 합니다:

  • 실제 프로덕션 애플리케이션을 위해 사용중이 아닌 AWS 계정
  • Lake Formation이 이미 해당 계정에 설정되어 있어야 하며, 이 글에 안내된 내용을 따라 실행할 수 있는 Lake Formation 관리자 역할 또는 이와 유사한 역할이 필요합니다. 예를 들면 이 글에서는 데이터 레이크 관리자 역할을 LF-Admin 으로 부를 예정입니다. 데이터 레이크 관리자 역할을 위한 권한 설정에 대해 더 자세히 알고 싶으시면 데이터 레이크 관리자 생성하기 문서를 참조하세요.
  • 몇개의 테이블이 있는 Data Catalog에 등록된 샘플 데이터베이스. 이 글에서는, 아래 그림에서와 같이, 8개의 테이블이 있는 hybridsalesdb 샘플 데이터베이스가 사용됩니다. 원하시는 데이터세트를 사용하시면 됩니다.

페르소나 및 IAM 정책 구성

계정에는 IAM 역할로 구분되는 Data-EngineerData-Analyst의 두 페르소나가 존재합니다. 각각의 IAM 정책 및 액세스 내역은 아래 설명되어 있습니다.

Data-Engineer역할에 대한 다음 IAM 정책은 Data Catalog의 데이터베이스와 테이블 메타데이터에 대한 액세스를 허용합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue: Get*"
            ],
            "Resource": [
                "arn:aws:glue:<Region>:<account-id>:catalog",
                "arn:aws:glue:<Region>:<account-id>:database/hybridsalesdb",
                "arn:aws:glue:<Region>:<account-id>:table/hybridsalesdb/*"
            ]
        }
    ]
}

Data-Engineer 역할에 대한 다음 IAM 정책은 대상 데이터베이스와 테이블의 S3 위치에 대한 데이터 액세스 권한을 부여합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowDataLakeBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:Put*",
                "s3:Get*",
                "s3:Delete*"
            ],
            "Resource": [
                "arn:aws:s3:::<bucket-name>",
                "arn:aws:s3:::<bucket-name>/<prefix>/"
            ]
        }
    ]
}

또한, Data-Engineer는 AWS managed policy 중 arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess 를 사용해 AWS Glue 콘솔 액세스할 수 있으며, AWS Glue ETL 스크립트 실행을 위해 다음과 같이 iam:Passrole을 사용할 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
       {
           "Sid": "PassRolePermissions",
           "Effect": "Allow",
           "Action": [
               " iam:PassRole" ],
           "Resource": [  
           "arn:aws:iam::<account-id>:role/Data-Engineer"
            ]
        }
    ]
}

아래의 정책 역시 Data-Engineer의 trusted policy에 추가되어, AWS Glue가 ETL 스크립트를 Data-Engineer 역할을 대신해 수행 가능하도록 수임(assume) 할 수 있도록 허용해 줍니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "glue.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

AWS Glue ETL 스크립트 실행을 위해 추가적으로 필요한 권한 설정을 확인하기 위해서는 AWS Glue Studio를 위한 IAM 권한 설정 문서를 참조하세요.

Data-Analyist 역할은 Lake Formation 사용자에게 권한 부여하기 문서에 설명된 데이터 레이크 기본 사용자 권한을 보유하고 있습니다.

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "glue:GetTable",
            "glue:GetTables",
            "glue:GetTableVersions",
            "glue:SearchTables",
            "glue:GetDatabase",
            "glue:GetDatabases",
            "glue:GetPartitions",
            "lakeformation:GetDataAccess",
            "lakeformation:GetResourceLFTags",
            "lakeformation:ListLFTags",
            "lakeformation:GetLFTag",
            "lakeformation:SearchTablesByLFTags",
            "lakeformation:SearchDatabasesByLFTags"
        ],
        "Resource": "*"
    }
    ]
}

또한, Data-Analyist는 Athena 쿼리 결과를 Lake Formation에 의해 관리되지 않는 S3 버킷에 쓰기 위한 권한을 가지며, AWS managed policy 중 arn:aws:iam::aws:policy/AmazonAthenaFullAccess 를 사용해 Athena 콘솔에 대한 전체 액세스 권한을 가집니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::<athena-results-bucket>"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:Put*",
                "s3:Get*",
                "s3:Delete*"
            ],
            "Resource": [
                "arn:aws:s3:::<athena-results-bucket>/*"
            ]
        }
    ]
}

Data-Analyst를 위한 Lake Formation 권한 설정

하이브리드 액세스 모드의 Lake Formation에서 Amazon S3 상의 데이터 위치를 설정하고 Data-Analyst role에 액세스 권한을 부여하기 위해 다음 작업들을 순서대로 완료합니다.

1. AWS 관리 콘솔에 Lake Formation 관리자 역할로 접속합니다.

2. Lake Formation 화면으로 이동합니다.

3. 왼쪽 탐색 메뉴의 Administration 항목 아래에서 Data lake locations를 선택합니다.

4. Register location 버튼을 누르고 사용자의 데이터베이스와 테이블의 Amazon S3 위치 정보를 입력합니다. 해당 S3 위치에 데이터에 대한 액세스 권한을 가진 IAM 역할을 선택합니다. 보다 자세한 내용은 위치 등록에 사용되는 역할들을 위한 요건들 문서를 참조하세요.

5. Permission mode 아래서 Hybrid access mode를 선택하고 Register location을 선택합니다.

6. 왼쪽 탐색 메뉴의 Administration 항목 아래에서 Data lake locations를 선택합니다. 등록된 위치의 Permission modeHybrid access mode로 나타나는지 확인합니다.

7. 왼쪽 탐색 메뉴의 Data Catalog 항목 아래에서 Databases를 선택합니다. 목록의 데이터베이스 중 hybridsalesdb를 선택합니다. 이전 단계에서 등록한 S3 위치 상에 존재하는 데이터가 보관된 데이터베이스를 선택하면 됩니다. Actions 드롭다운 메뉴에서 Grant를 선택합니다.

8. IAM users and roles 항목을 위해 Data-Analyst를 선택합니다. LF-Tags or catalog resources 아래에서 Named Data Catalog resource를 선택하고 Databaseshybridsalesdb를 선택합니다.

9. Database permissions 아래에서 Describe를 선택합니다. Hybrid access mode 아래에서 Make Lake Formation permissions effective immediately 체크박스를 선택합니다. 이후 Grant를 누릅니다.

10. 다시 왼쪽 탐색 메뉴의 Data Catalog 항목 아래에서 Databases를 선택한 후, hybridsalesdb를 선택합니다. 이후 Actions 드롭다운 메뉴에서 Grant를 선택합니다.

11. Grant 입력 화면에서 IAM users and roles 항목을 위해 Data-Analyst를 선택합니다. LF-Tags or catalog resources 아래에서 Named Data Catalog resource를 선택하고 Databaseshybridsalesdb를 선택합니다.

12. Tables 항목의 드롭다운 입력에서 hybridcustomer, hybridproduct, hybridsales_order의 3개 테이블을 선택합니다.

13. Table permissions 아래에서, 테이블 권한으로 SelectDescribe를 선택합니다.

14. Hybrid access mode 아래에서 Make Lake Formation permissions effective immediately 체크박스를 선택합니다.

15. Grant를 누릅니다.

16. 왼쪽 탐색 메뉴의 Permissions 항목 아래에서 Data lake permissions를 선택해 부여된 권한을 살펴봅니다. Principal = Data-Analyst로 설정해 Data lake permissions를 필터링합니다.

17. 왼쪽 탐색 메뉴에서 Hybrid access mode를 선택합니다. 앞에서 추가한 Data-Analysthybridsalesdb 데이터베이스와 세개의 테이블에 대하여 잘 설정되었는지 확인합니다.

18. Lake Formation 관리자 role 에서 로그아웃 합니다.

Data-Analyst에 대한 Lake Formation 기반 권한설정 확인

1. Data-Analyst 로 콘솔에 로그인합니다.

2. Athena 콘솔로 이동합니다. 만일 Athena를 처음 사용하는 경우라면 쿼리 결과 위치 설정하기 문서를 참조해서 쿼리 결과를 저장할 S3 버킷 위치를 설정합니다.

3. Athena query editor에서 테이블에 대한 프리뷰 쿼리를 실행합니다.

Data-Engineer에 대한 IAM과 S3 기반 권한설정 확인

1. Data-Analyst 에서 로그아웃 후 콘솔에 다시 Data-Engineer로 로그인합니다.

2. AWS Glue 콘솔을 열고 왼쪽 탐색 메뉴에서 ETL jobs를 선택합니다.

3. Create job 아래에서 Script editor를 선택합니다. Engine으로 Spark을 선택하고 옵션에서 Start fresh를 선택한 후 Create script를 누릅니다.

4. 제공되는 샘플 스크립트를 다운로드 받아 저장 후 엽니다.

5. 스튜디오 스크립트 에디터에 해당 스크립트를 복사해서 새로운 작업으로 붙여넣습니다.

6. catalog_id, database, table_name을 현재 진행중인 환경에 맞게 수정합니다.

7. Save 이후 작업 실행을 위해 Data-Engineer의 IAM 역할을 입력한 후 Run 을 눌러 AWS Glue ETL 스크립트를 수행합니다.

8. ETL 스크립트가 성공적으로 실행된 후에, ETL 스크립트의 Runs 탭에서 제공되는 output logs 링크를 선택합니다.

9. 테이블 스키마, 첫 20 행, 그리고 전체 행 수 및 컬럼 수를 AWS CloudWatch logs에서 확인합니다.

위와 같이, IAM과 S3 권한관리 기반으로 Data Catalog 데이터베이스를 액세스하고 있는 역할에 영향을 주지 않도록 하면서, 새로운 역할에 동일한 데이터베이스에 대해 Lake Formation 기반 권한관리를 사용할 수 있습니다.

시나리오 2 – 두 AWS 계정 간의 하이브리드 액세스 모드 구성

이 시나리오는 데이터 생산자가 데이터베이스와 데이터베이스 내의 테이블을 소비자 계정에 공유하는 계정 간 공유에 대한 내용입니다. 생산자는 소비자 계정의 AWS Glue ETL 워크로드에 데이터베이스에 대한 모든 액세스를 제공합니다. 동시에, 생산자는 동일 데이터베이스의 몇 개의 테이블을 Lake Formation을 사용해 소비자 계정에 공유합니다. 아래에서, 두 가지 액세스 방식을 모두 지원하기 위해 하이브리드 액세스 모드를 어떻게 활용할 수 있는지 설명합니다.

전제 조건

  • 하이브리드 액세스 모드로 등록된 데이터베이스나 테이블의 계정 간 공유를 위해, 생산자 또는 권한 부여자는 하이브리드 액세스 모드의 자원에 대한 권한 부여를 위해 Lake Formation의 Data Catalog settings의 계정 간 공유 버전 4를 사용하고 있어야 합니다. 계정 간 공유 버전 3에서 버전 4로 전환하는 경우, 이미 Lake Formation 에 등록된 (즉, Lake Formation 모드를 사용하는) 위치의 데이터베이스와 테이블의 경우 기존 Lake Formation의 권한은 영향을 받지 않습니다. 하이브리드 액세스 모드로 새로운 데이터세트 위치를 등록하거나 이 카탈로그 자원에 새로운 Lake Formation 권한을 설정하기 위해서 사용자는 계정 간 공유 버전 4가 필요합니다.
  • 소비자 또는 수신자 계정은 다른 버전의 계정 간 공유를 사용할 수 있습니다. 만일 사용자의 계정이 계정 간 공유 버전 1이나 버전 2를 사용중이고 업그레이드를 원한다면, 버전 4로 업그레이드하기 전에 일단 계정 간 공유 버전 설정 업데이트 문서를 참조해 카탈로그 설정을 버전 3으로 업그레이드 해야 합니다.

생산자 계정 설정은 시나리오 1과 유사하며, 아래에서 시나리오 2를 위한 추가적으로 필요한 작업을 살펴볼 예정입니다.

생산자 계정 A에 대한 설정

소비자 Data-Engineer 역할은 생산자의 S3 버킷 정책을 사용해 Amazon S3에 대한 액세스 권한을, 그리고 생산자의 Data Catalog 자원 정책을 사용해 Data Catalog 액세스 권한을 부여받습니다.
생산자 계정의 S3 버킷 정책은 아래와 같습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
        "Sid": "data engineer role permissions",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<consumer-account-id>:role/Data-Engineer"
        },
        "Action": [
            "s3:GetLifecycleConfiguration",
            "s3:ListBucket",
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject"
        ],
        "Resource": [
            "arn:aws:s3:::<producer-account-databucket>",
            "arn:aws:s3:::<producer-account-databucket>/*"
        ]
        }
    ]
}

생산자 계정의 Data Catalog 자원 정책은 아래와 같습니다. 사용자는 또한 계정 간 공유 활성화를 위해 AWS Resource Access Manager(AWS RAM)에게 glue:ShareResource IAM 권한을 부여해야 합니다.

{
"Version" : "2012-10-17",
"Statement" : [
    {
    "Effect" : "Allow",
    "Principal" : {
        "AWS" : "arn:aws:iam::<consumer-account-id>:role/Data-Engineer"
    },
    "Action" : "glue:Get*",
    "Resource" : [
        "arn:aws:glue:<Region>:<producer-account-id>:catalog", 
        "arn:aws:glue:<Region>:<producer-account-id>:database/hybridsalesdb", 
        "arn:aws:glue:<Region>:<producer-account-id>:table/hybridsalesdb/*"
    ]
    },
    {
        "Effect" : "Allow",
        "Principal" : {
        "Service" : "ram.amazonaws.com"
        },
        "Action" : "glue:ShareResource",
        "Resource" : [
            "arn:aws:glue:<Region>:<producer-account-id>:table/*/*", 
            "arn:aws:glue:<Region>:<producer-account-id>:database/*", 
            "arn:aws:glue:<Region>:<producer-account-id>:catalog"
        ]
        }
    ]
}

계정 간 공유 버전 설정 및 S3 버킷 등록

1. Lake Formation 콘솔에 IAM 관리자 역할 또는 PutDataLakeSettings() API에 대한 IAM 권한을 가진 역할로 로그인합니다. S3 버킷에 샘플 데이터 및 관련된 Data Catalog 데이터베이스와 테이블을 보유한 AWS 리전을 선택합니다.

2. 왼쪽 탐색 메뉴의 Administration 항목 아래에서 Data Catalog settings를 선택합니다. Cross-account version settings의 드롭다운 메뉴에서 Version 4를 선택 후 Save를 누릅니다.
참고 : 만일 현재 상황에서 카탈로그 자원을 Lake Formation을 사용해 생산자 계정에 공유중인 다른 계정이 있다면, 공유 버전 변경이 영향을 미칠 수 있습니다. 자세한 내용은 계정 간 데이터 공유 버전 설정 업데이트 문서를 참고하세요.

3. IAM 관리자에서 로그아웃 후 Lake Formation 관리자 역할로 Lake Formation 콘솔에 다시 로그인합니다.

4. 왼쪽 탐색 메뉴의 Administration 항목 아래에서 Data lake locations를 선택합니다.

5. Register location 버튼을 누르고 사용자의 데이터베이스와 테이블의 Amazon S3 위치 정보를 입력합니다.

6. 해당 S3 위치에 데이터에 대한 액세스 권한을 가진 IAM 역할을 선택합니다. 보다 자세한 내용은 위치 등록에 사용되는 역할들을 위한 요건들 문서를 참조하세요.

7. Permission mode 아래서 Hybrid access mode를 선택하고 Register location을 선택합니다.

8. 왼쪽 탐색 메뉴의 Administration 항목 아래에서 Data lake locations를 선택합니다. 등록된 위치의 Permission modeHybrid access mode로 나타나는지 확인합니다.

계정 간 권한 부여

hybridsalesdb 데이터베이스를 소비자 계정에 공유하기 위한 절차는 시나리오 1의 단계와 유사합니다.

1. Lake Formation 콘솔의 왼쪽 탐색 메뉴의 Data Catalog 항목 아래에서 Databases를 선택합니다. 목록의 데이터베이스 중 hybridsalesdb를 선택합니다. 이전 단계에서 등록한 S3 위치 상에 존재하는 데이터가 보관된 데이터베이스를 선택하면 됩니다. Actions 드롭다운 메뉴에서 Grant를 선택합니다.

2. Principals 에서 External accounts를 선택하고 소비자 계정 ID를 입력합니다. LF-Tags or catalog resources 아래에서 Named Data Catalog resource를 선택하고 Databaseshybridsalesdb를 선택합니다.


3. Database permissionsGrantable permissions 양 쪽 모두 Describe를 선택합니다.

4. Hybrid access mode 아래에서 Make Lake Formation permissions effective immediately 체크박스를 선택하고 Grant를 누릅니다.

참고: 체크박스를 선택하면 소비자 계정의 Lake Formation 관리자 역할이, 동일 데이터베이스에 대한 소비자 계정의 IAM과 S3 권한관리를 통한 액세스를 방해하지 않으면서 Lake Formation 기반 권한관리를 사용할 수 있도록 합니다.

5. 소비자 계정 ID에 테이블 수준 권한을 부여하기 위해 2번 단계를 데이터베이스 선택 단계까지 반복합니다. 테이블 수준 권한 설정을 위해 Tables 의 드롭다운 메뉴에서 임의의 테이블 3개를 선택합니다.

6. Table permissionsGrantable permissions 양쪽 모두에서 Select를 선택합니다. 아래의 Hybrid access mode 에서 Make Lake Formation permissions effective immediately 체크박스를 선택한 후 Grant를 누릅니다.

7. 왼쪽 탐색 메뉴에서 Data lake permissions를 선택합니다. 소비자 계정에 대한 권한설정 결과를 확인합니다.

8. 왼쪽 탐색 메뉴에서 Hybrid access mode를 선택하고 자원과 principal이 잘 등록되었는지 확인합니다.

이제 IAMAllowedPrincipal 가상 그룹에 대한 액세스 권한 회수 없이 Lake Formation 권한관리 기반으로 계정 간 공유를 활성화했습니다.

소비자 계정 B에 대한 설정

시나리오 1에서와 유사하게, 시나리오 2에서 Data-AnalystData-Engineer 역할이 소비자 계정에서 생성되지만 생산자 계정에서 공유받은 데이터베이스와 테이블을 액세스합니다.

arn:aws:iam::aws:policy/AWSGlueConsoleFullAccessarn:aws:iam::aws:policy/CloudWatchFullAccess 에 더해, Data-Engineer 역할은 AWS Glue Studio에서 Apache Spark 작업을 생성하고 실행할 권한 또한 보유하고 있습니다.

Data-Engineer는, Lake Formation에 하이브리드 액세스 모드로 등록되어 있는, 생산자 계정의 S3 버킷에 대한 액세스를 부여하는 다음의 IAM 정책을 보유하고 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowDataLakeBucket",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:GetLifecycleConfiguration",
                "s3:Put*",
                "s3:Get*",
                "s3:Delete*"
            ],
            "Resource": [
                "arn:aws:s3:::<producer-account-databucket>/*",
                "arn:aws:s3:::<producer-account-databucket>"
            ]
        }
    ]
}

Data-Engineer는 소비자 계정의 전체 Data Catalog과 생산자 계정의 hybridsalesdb 및 해당 데이터베이스 내 테이블들에 대한 액세스를 부여하는 다음의 IAM 정책을 보유하고 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "glue:*"
            ],
            "Resource": [
                "arn:aws:glue:<Region>:<consumer-account-id>:catalog",
                "arn:aws:glue:<Region>:<consumer-account-id>:database/*",
                "arn:aws:glue:<Region>:<consumer-account-id>:table/*/*",

            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:Get*"
            ],
            "Resource": [
                "arn:aws:glue:<Region>:<producer-account-id>:catalog",
                "arn:aws:glue:<Region>:<producer-account-id>:database/hybridsalesdb",
                "arn:aws:glue:<Region>:<producer-account-id>:table/hybridsalesdb/*"
            ]
        }
    ]
}

Data-Analyst는 시나리오 1과 유사한, 즉 기본적인 데이터 레이크 사용자 권한을 부여하는 IAM 정책을 보유하고 있습니다. 더 자세한 내용은 Lake Formation 사용자에게 권한 부여하기 문서를 참조하세요.

AWS RAM 초대 수락

1. Lake Formation 콘솔에 Lake Formation 관리자 역할로 로그인합니다.

2. AWS RAM 콘솔을 열고, 왼쪽 탐색 메뉴의 Shared with me 메뉴 아래에서 Resource shares를 선택합니다. 생산자 계정에서 생성된 데이터베이스 수준 공유와 테이블 수준 공유에 대한 총 두개의 초대 항목을 확인할 수 있어야 합니다.

3. 각각의 초대를 선택하고 생산자 계정 ID를 확인한 후 Accept resource share 를 선택합니다.

Data-Analyst에게 Lake Formation 권한 부여

1. Lake Formation 콘솔을 엽니다. Lake Formation 관리자 상황에서 소비자 계정 화면에서 공유받은 데이터베이스와 테이블을 확인할 수 있어야 합니다.

2. 왼쪽 탐색 메뉴의 Data catalog에서 Databases를 선택합니다. hybridsalesdb 데이터베이스 왼쪽의 라디오 버튼을 선택한 후 Actions 드롭다운 메뉴에서 Create resource link를 선택합니다.

3. Resource link name에 rl_hybridsalesdb를 이름으로 입력하고 다른 항목은 변경하지 않고 Create를 선택합니다.

4. rl_hybridsalesdb 왼쪽의 라디오 버튼을 선택한 후 Actions 드롭다운 메뉴에서 Grant를 선택합니다.

5. Resource link에 대한 Describe 권한을 Data-Analyst에게 부여합니다.

6. 다시, 왼쪽 탐색 메뉴의 Data catalog에서 Databases를 선택합니다. hybridsalesdb 데이터베이스 왼쪽의 라디오 버튼을 선택한 후 Actions 드롭다운 메뉴에서 Grant on target을 선택합니다.

7. IAM 사용자 및 역할에 대해 Data-Analyst를 선택하고, 이미 선택되어 있는 hybridsalesdb는 변경하지 않습니다.

8. Database permissions 아래에서 Describe를 선택합니다. Hybrid access mode 아래에서 Make Lake Formation permissions effective immediately 체크박스를 선택합니다. 이후 Grant를 누릅니다.

9. 왼쪽 탐색 메뉴의 Data catalog에서 Databases를 선택합니다. hybridsalesdb 데이터베이스 왼쪽의 라디오 버튼을 선택한 후 Actions 드롭다운 메뉴에서 Grant on target을 선택합니다.

10. IAM 사용자 및 역할에 대해 Data-Analyst를 선택하고, hybridsalesdb 데이터베이스의 모든 테이블을 선택합니다. Table permissions 아래 Select를 선택합니다.

11. Hybrid access mode 아래에서 Make Lake Formation permissions effective immediately 체크박스를 선택합니다.

12. 왼쪽 탐색 메뉴의 Data lake permissions 메뉴로부터 Data-Analyst 역할에 부여된 권한을 살펴보고 확인합니다.

13. Lake Formation 관리자 역할에서 로그아웃 합니다.

Data-Analyst로 Lake Formation 권한 검증

1. 콘솔에 Data-Analyst로 로그인합니다.

2. Athena 콘솔을 엽니다. 만일 Athena를 처음으로 사용한다면 쿼리 결과 위치 설정하기 문서에 따라 S3 버킷 상 쿼리 결과 위치를 설정합니다.

  •  Query Editor 페이지의 왼쪽 Data 영역에서, Data source로 AWSDataCatalog을 선택합니다. Tables영역에서, 목록의 여러 테이블 이름 중 하나의 오른쪽 3개의 점으로 이루어진 부분을 눌러 상세 메뉴를 열고, Preview Table을 선택하고 쿼리를 실행합니다.

3. Data-Analyst에서 로그아웃합니다.

Data-Engineer로 IAM과 S3 권한 검증

1. 콘솔에 Data-Engineer로 로그인 합니다.

2. 시나리오 1에서 사용했던 방법과 동일한 방법으로 AWS Glue Studio 내에서 AWS Glue ETL 스크립트 실행을 통해 IAM과 S3 액세스를 검증합니다.

위와 같은 방법을 통해 계정 간 데이터 공유 유즈케이스에서도, 기존의 Data-Engineer에 대한 IAM과 S3 액세스에 영향을 미치지 않으면서도, Data-Analyst 라는 새로운 역할에 Lake Formation 권한관리를 추가할 수 있습니다.

자원 정리

이 블로그 내용 확인을 위해 사용자가 보유한 S3 상 데이터세트를 사용했다면 Lake Formation의 데이터베이스상의 Data-Analyst 역할과 계정 간 부여 관련된 권한들을 제거하기를 권장드립니다. 또한, Lake Formation에 등록한 하이브리드 액세스 모드 적용과 S3 버킷 등록 내역도 삭제할 수 있습니다. 생산자와 소비자 계정에서 모든 관련된 Lake Formation 권한을 삭제한 후에 Data-AnalystData-Engineer IAM 역할을 삭제할 수 있습니다.

고려사항

현재, Lake Formation 관리자 역할만이 다른 사용자가 리소스에 대한 Lake Formation 권한 관리를 사용하도록 참여시킬 수 있으며, 이는 Lake Formation 또는 IAM과 S3 권한관리 중 하나의 방법을 통한 사용자 권한 적용이 조직의 데이터 접근 정책과 설정에 대한 전체적인 지식과 이해가 필요한 관리 작업이기 때문입니다. 추가로, 위에서는 LF-Tags가 아닌 named-resource만을 사용해서 권한을 부여하고 하이브리드 액세스 모드를 적용하는 것에 대해 설명했지만, 만일 사용자가 권한 부여를 위해 LF-Tags를 사용중인 상황이면, 권한 부여 작업 이후에, 왼쪽 탐색 메뉴의 Hybrid access mode 화면을 사용하거나 AWS SDK 또는 AWS CLI에서 CreateLakeFormationOptin() API를 사용해 하이브리드 액세스 모드를 적용할 수 있습니다.

결론

이 글에서는 Data Catalog를 위한 하이브리드 액세스 모드 설정 과정을 단계별로 살펴보았으며, 어떻게 사용자들에게 선택적으로 Lake Formation 기반 권한관리 모델을 적용할 수 있는지에 대해 살펴보았습니다. 기존에 IAM과 S3 기반 권한관리의 적용을 받는 사용자들은 중단 없이 계속 동일한 방식으로 액세스하게 됩니다. Lake Formation을 사용해, 데이터 사이언티스트가 Amazon Sagemaker로 특정 데이터를 탐색하고 있는 상황에서도, 비즈니스 분석가가 Amazon Athena나 Amazon Redshift Spectrum을 통해 Data Catalog 상의 테이블을 적절한 권한으로 액세스할 수 있도록 미세 수준 접근 권한을 추가할 수 있으며, 동시에, 데이터 엔지니어가 IAM과 S3 기반 권한관리를 통해 동일한 데이터에 대해 Amazon EMR과 AWS Glue를 사용한 작업을 수행하도록 할 수도 있습니다. Data Catalog를 위한 하이브리드 액세스 모드를 통해 데이터 중복이나 복제 없이 다양한 사용자가 다른 권한관리 기반 하에서 데이터에 액세스하는 워크로드를 구현할 수 있습니다. 하이브리드 액세스 모드 문서를 참조하시면 더욱 자세한 내용을 확인하실 수 있습니다.

JongHyok Lee

JongHyok Lee

이종혁 Sr Analytics Specialist SA는 데이터와 애플리케이션 영역의 분석, 설계 및 구현과 관련된 다양한 경험을 바탕으로 고객분들께서 AWS의 분석 서비스들을 잘 활용하실 수 있도록 기술적인 도움을 드리고 있습니다.