AWS GlueIceberg REST 엔드포인트를 사용하여 Amazon S3 Tables에 액세스
S3 Tables 버킷이 AWS Glue Data Catalog와 통합되면 AWS Glue Iceberg REST 엔드포인트를 사용하여 PyIceberg 또는 Spark와 같은 Apache Iceberg 호환 클라이언트에서 S3 Tables에 연결할 수 있습니다. AWS Glue Iceberg REST 엔드포인트는 Iceberg 테이블과 상호 작용하기 위한 표준화된 인터페이스를 제공하는 Iceberg REST Catalog Open API 사양
PyIceberg를 사용한 엔드 투 엔드 연습은 AWS GlueIceberg REST 엔드포인트를 통해 PyIceberg를 사용하여 Amazon S3 Tables의 데이터 액세스
클라이언트에 대한 IAM 역할 생성
AWS Glue 엔드포인트를 통해 테이블에 액세스하려면 AWS Glue 및 Lake Formation 작업에 대한 권한이 있는 IAM 역할을 생성해야 합니다. 이 절차에서는 이 역할을 생성하고 해당 권한을 구성하는 방법을 설명합니다.
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. 왼쪽 탐색 창에서 정책을 선택합니다.
정책 생성을 선택하고 정책 편집기에서 JSON을 선택합니다.
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:
<region>
:<account-id>
:catalog", "arn:aws:glue:<region>
:<account-id>
:catalog/s3tablescatalog", "arn:aws:glue:<region>
:<account-id>
:catalog/s3tablescatalog/<s3_table_bucket_name>
", "arn:aws:glue:<region>
:<account-id>
:table/s3tablescatalog/<s3_table_bucket_name>
/<namespace>
/*", "arn:aws:glue:<region>
:<account-id>
:database/s3tablescatalog/<s3_table_bucket_name>
/<namespace>
" ] } ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" } ] }
Lake Formation에서 액세스 정의
Lake Formation은 데이터 레이크 테이블의 데이터를 위한 세분화된 액세스 제어를 제공합니다. S3 버킷을 AWS Glue Data Catalog과 통합한 경우 테이블이 Lake Formation에 리소스로 자동으로 등록되어 있습니다. 이러한 테이블에 액세스하려면 IAM 정책 권한 외에도 IAM 자격 증명에 특정 Lake Formation 권한을 부여해야 합니다.
다음 단계에서는 Iceberg 클라이언트가 테이블에 연결할 수 있도록 Lake Formation 액세스 제어를 적용하는 방법을 설명합니다. 이러한 권한을 적용하려면 데이터 레이크 관리자로 로그인해야 합니다.
외부 엔진이 테이블 데이터에 액세스하도록 허용
Lake Formation에서는 외부 엔진이 데이터에 액세스할 수 있도록 전체 테이블 액세스를 활성화해야 합니다. 이렇게 하면 요청된 테이블에 대한 전체 권한이 있는 IAM 역할을 사용할 때 타사 애플리케이션이 Lake Formation에서 임시 자격 증명을 가져올 수 있습니다.
Lake Formation 콘솔(https://console.aws.amazon.com/lakeformation/
Lake Formation 콘솔(https://console.aws.amazon.com/lakeformation/
)을 열고 데이터 레이크 관리자로 로그인합니다. 탐색 창의 관리에서 애플리케이션 통합 설정을 선택합니다.
외부 엔진이 전체 테이블 액세스 권한으로 Amazon S3 위치의 데이터에 액세스하도록 허용을 선택합니다. 그런 다음 저장을 선택합니다.
테이블 리소스에 대한 Lake Formation 권한 부여
다음으로 Iceberg 호환 클라이언트에 대해 생성한 IAM 역할에 Lake Formation 권한을 부여합니다. 이러한 권한을 통해 역할은 네임스페이스에서 테이블을 생성하고 관리할 수 있습니다. 데이터베이스 및 테이블 수준 권한을 모두 제공해야 합니다.
데이터베이스 권한을 부여하려면
https://console.aws.amazon.com/lakeformation/
에서 AWS Lake Formation 콘솔을 열고 데이터 레이크 관리자로 로그인합니다. 탐색 창에서 데이터 권한을 선택한 다음 권한 부여를 선택합니다.
권한 부여 페이지의 위탁자에서 IAM 사용자 및 역할을 선택하고 AWS Glue IcebergREST endpoint 액세스를 위해 생성한 IAM 역할을 선택합니다.
LF 태그 또는 카탈로그 리소스에서 명명된 데이터 카탈로그 리소스를 선택합니다.
카탈로그에서 테이블 버킷에 대해 생성된 AWS Glue 데이터 카탈로그를 선택합니다. 예:
.<accoundID>
:s3tablescatalog/<table-bucket-name>
데이터베이스에서
mynamespace
을 선택합니다.테이블 권한에서 테이블 생성 및 설명을 선택합니다.
권한 부여를 선택합니다.
테이블 권한을 부여하려면
https://console.aws.amazon.com/lakeformation/에서 AWS Lake Formation 콘솔을 열고 데이터 레이크 관리자로 로그인합니다.
탐색 창에서 데이터 권한을 선택한 다음 권한 부여를 선택합니다.
권한 부여 페이지의 위탁자에서 IAM 사용자 및 역할을 선택하고 AWS Glue Iceberg REST endpoint 액세스를 위해 생성한 IAM 역할을 선택합니다.
LF 태그 또는 카탈로그 리소스에서 명명된 데이터 카탈로그 리소스를 선택합니다.
카탈로그에서 테이블 버킷에 대해 생성된 AWS Glue 데이터 카탈로그를 선택합니다. 예:
.<accoundID>
:s3tablescatalog/<table-bucket-name>
데이터베이스에서 생성한 S3 테이블 버킷 네임스페이스를 선택합니다.
테이블에서 ALL_TABLES를 선택합니다.
테이블 권한에서 Super를 선택합니다.
권한 부여를 선택합니다.
엔드포인트를 사용하도록 환경 설정
테이블 액세스에 필요한 권한으로 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를 활성화해야 하며 서명 이름은
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 사용 설명서의 AWS GlueIceberg REST 엔드포인트를 사용하여 Data Catalog에 연결을 참조하세요.