AWS Glue Iceberg REST 엔드포인트로 Amazon S3 테이블 접근하기

AWS Glue Iceberg REST 엔드포인트로 Amazon S3 테이블 접근하기 (Accessing tables using the AWS Glue Iceberg REST endpoint)

S3 테이블 버킷이 AWS Glue Data Catalog와 통합되면 AWS Glue Iceberg REST 엔드포인트를 사용해 PyIceberg나 Spark 같은 Apache Iceberg 호환 클라이언트에서 S3 테이블에 연결할 수 있어요. AWS Glue Iceberg REST 엔드포인트는 Iceberg 테이블과 상호작용하기 위한 표준화된 인터페이스를 제공하는 Iceberg REST Catalog Open API 스펙을 구현해요. 이 엔드포인트로 S3 테이블에 접근하려면 IAM 정책과 AWS Lake Formation 권한 부여를 조합해 권한을 구성해야 해요. 다음 절들에서는 필요한 IAM 역할 만들기, 필요한 정책 정의하기, 데이터베이스·테이블 수준 접근을 위한 Lake Formation 권한 설정하기 등 접근 설정 방법을 설명해요.

출처: 문서

본문

PyIceberg를 사용한 엔드투엔드 워크스루는 "Access data in Amazon S3 Tables using PyIceberg through the AWS Glue Iceberg REST endpoint" 문서를 참고하세요.

사전 조건

  • 테이블 버킷을 AWS 분석 서비스와 통합해요.
  • 테이블 네임스페이스를 만들어요.
  • 데이터 레이크 관리자 계정에 접근할 수 있어야 해요.

클라이언트용 IAM 역할 만들기

AWS Glue 엔드포인트로 테이블에 접근하려면 AWS Glue와 Lake Formation 작업에 대한 권한이 있는 IAM 역할을 만들어야 해요. 이 절차는 이 역할을 만들고 권한을 구성하는 방법을 설명해요.

  1. https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 열어요.
  2. 왼쪽 탐색 창에서 Policies를 선택해요.
  3. Create a policy를 선택하고 정책 편집기에서 JSON을 선택해요.
  4. AWS Glue와 Lake Formation 작업에 접근 권한을 부여하는 다음 인라인 정책을 추가해요.
    { "Version":"2012-10-17",
        "Statement": [
            { "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "glue:GetCatalog",
                    "glue:GetDatabase",
                    "glue:GetDatabases",
                    "glue:GetTable",
                    "glue:GetTables",
                    "glue:CreateTable",
                    "glue:UpdateTable"
                ],
                "Resource": [
                    "arn:aws:glue:us-east-1:111122223333:catalog",
                    "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog",
                    "arn:aws:glue:us-east-1:111122223333:catalog/s3tablescatalog/amzn-s3-demo-table-bucket",
                    "arn:aws:glue:us-east-1:111122223333:table/s3tablescatalog/amzn-s3-demo-table-bucket/<namespace>/*",
                    "arn:aws:glue:us-east-1:111122223333:database/s3tablescatalog/amzn-s3-demo-table-bucket/<namespace>"
                ]
            },
            { "Effect": "Allow",
                "Action": [
                    "lakeformation:GetDataAccess"
                ],
                "Resource": "*"
            }
        ]
    }
    
  5. 정책을 만든 뒤 IAM 역할을 만들고 Trusted entity type으로 Custom trust policy를 선택해요.
  6. Custom trust policy에 다음을 입력해요.
    { "Version":"2012-10-17",
        "Statement": [
            { "Effect": "Allow",
                "Principal": { "AWS": "arn:aws:iam::111122223333:role/Admin_role" },
                "Action": "sts:AssumeRole",
                "Condition": { }
            }
        ]
    }
    

Lake Formation에서 접근 정의하기

Lake Formation은 데이터 레이크 테이블에 대한 세분화된 접근 제어를 제공해요. S3 버킷을 AWS Glue Data Catalog와 통합하면 테이블이 Lake Formation의 리소스로 자동 등록돼요. 이 테이블들에 접근하려면 IAM 정책 권한에 더해 IAM 자격 증명에 특정 Lake Formation 권한을 부여해야 해요.

다음 단계는 Iceberg 클라이언트가 테이블에 연결할 수 있도록 Lake Formation 접근 제어를 적용하는 방법을 설명해요. 이 권한을 적용하려면 데이터 레이크 관리자로 로그인해야 해요.

외부 엔진이 테이블 데이터에 접근하도록 허용하기

Lake Formation에서 외부 엔진이 데이터에 접근하게 하려면 전체 테이블 접근(full table access)을 켜야 해요. 이렇게 하면 서드파티 애플리케이션이 요청한 테이블에 대한 전체 권한이 있는 IAM 역할을 사용할 때 Lake Formation에서 임시 자격 증명을 얻을 수 있어요.

https://console.aws.amazon.com/lakeformation/ 에서 Lake Formation 콘솔을 열어요.

  1. https://console.aws.amazon.com/lakeformation/ 에서 Lake Formation 콘솔을 열고 데이터 레이크 관리자로 로그인해요.
  2. Administration 아래 탐색 창에서 Application integration settings를 선택해요.
  3. Allow external engines to access data in Amazon S3 locations with full table access를 선택한 다음 Save를 선택해요.

테이블 리소스에 Lake Formation 권한 부여하기

다음으로 Iceberg 호환 클라이언트를 위해 만든 IAM 역할에 Lake Formation 권한을 부여해요. 이 권한 덕분에 역할이 네임스페이스에서 테이블을 만들고 관리할 수 있어요. 데이터베이스 수준과 테이블 수준 권한을 모두 제공해야 해요. 자세한 내용은 "Granting Lake Formation permission on a table or database" 문서를 참고하세요.

엔드포인트를 사용하도록 환경 설정하기

테이블 접근에 필요한 권한으로 IAM 역할을 설정한 뒤에는 다음 명령으로 AWS CLI를 역할로 구성해 로컬 머신에서 Iceberg 클라이언트를 실행할 수 있어요.

aws sts assume-role --role-arn "arn:aws:iam::<accountid>:role/<glue-irc-role>" --role-session-name <glue-irc-role>

AWS Glue REST 엔드포인트로 테이블에 접근하려면 Iceberg 호환 클라이언트에서 카탈로그를 초기화해야 해요. 이 초기화는 sigv4 속성, 엔드포인트 URI, 웨어하우스 위치를 포함한 커스텀 속성 지정을 요구해요. 이 속성들을 다음과 같이 지정해요.

  • Sigv4 속성 – Sigv4를 켜야 하고, 서명 이름(signing name)은 glue예요.
  • 웨어하우스 위치 – 테이블 버킷이며 <accountid>:s3tablescatalog/<table-bucket-name> 형식으로 지정해요.
  • 엔드포인트 URI – 리전별 엔드포인트는 AWS Glue 서비스 엔드포인트 참조 안내서를 참고하세요.

다음 예시는 pyIceberg 카탈로그를 초기화하는 방법을 보여줘요.

rest_catalog = load_catalog(
    "s3tablescatalog",
    **{
        "type": "rest",
        "warehouse": "<accountid>:s3tablescatalog/<table-bucket-name>",
        "uri": "https://glue.<region>.amazonaws.com/iceberg",
        "rest.sigv4-enabled": "true",
        "rest.signing-name": "glue",
        "rest.signing-region": region
    }
)

AWS Glue Iceberg REST 엔드포인트 구현에 대한 추가 정보는 AWS Glue User Guide의 "Connecting to the Data Catalog using AWS Glue Iceberg REST endpoint" 문서를 참고하세요.

더 알아보기 (Learn more)

  • S3 Tables를 AWS 분석 서비스와 통합하기 (Integrating S3 Tables with AWS analytics services)
  • Amazon S3 Tables Iceberg REST 엔드포인트로 테이블 접근하기 (Accessing tables using the Amazon S3 Tables Iceberg REST endpoint)