Apache Iceberg™ REST 카탈로그에 대한 카탈로그 통합 구성¶
Apache Iceberg™ REST 카탈로그 통합 을 통해 Snowflake는 오픈 소스 Apache Iceberg REST OpenAPI 사양 을 준수하는 원격 카탈로그에서 관리되는 Apache Iceberg™ 테이블 에 액세스할 수 있습니다.
REST 카탈로그에 연결하는 중¶
공용 엔드포인트 또는 비공개 네트워크를 사용하는 Iceberg REST API에 연결할 수 있습니다.
공용 엔드포인트¶
퍼블릭 엔드포인트를 사용하여 Iceberg REST API에 연결하려면 다음 인증 메서드를 사용하는 카탈로그 통합을 생성할 수 있습니다.
OAuth
전달자 토큰 또는 개인 액세스 토큰(PAT)
SigV4
비공개 네트워크¶
비공개 네트워크에서 호스팅되는 Iceberg REST API에 연결하려면 Signature Version 4(SigV4) 인증을 사용하는 카탈로그 통합을 생성할 수 있습니다.
카탈로그 통합 만들기¶
CREATE CATALOG INTEGRATION(Apache Iceberg™ REST) 명령을 사용하여 선택한 인증 메서드에 대한 카탈로그 통합을 생성합니다. REST_CONFIG 및 REST_AUTHENTICATION 인자에 지정하는 값은 선택한 인증 메서드에 따라 달라집니다.
OAuth¶
다음 예에서는 OAuth를 사용하여 Tabular에 연결하는 REST 카탈로그 통합을 만듭니다.
CREATE OR REPLACE CATALOG INTEGRATION tabular_catalog_int
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://api.tabular.io/ws'
WAREHOUSE = '<tabular_warehouse_name>'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://api.tabular.io/ws/v1/oauth/tokens'
OAUTH_CLIENT_ID = '<oauth_client_id>'
OAUTH_CLIENT_SECRET = '<oauth_secret>'
OAUTH_ALLOWED_SCOPES = ('catalog')
)
ENABLED = TRUE;
다음 예제에서는 OAuth를 사용하여 Databricks Unity Catalog에 연결하는 REST 카탈로그 통합을 생성합니다.
CREATE OR REPLACE CATALOG INTEGRATION unity_catalog_int_oauth
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'default'
REST_CONFIG = (
CATALOG_URI = 'https://my-api/api/2.1/unity-catalog/iceberg'
)
REST_AUTHENTICATION = (
TYPE = OAUTH
OAUTH_TOKEN_URI = 'https://my-api/oidc/v1/token'
OAUTH_CLIENT_ID = '123AbC ...'
OAUTH_CLIENT_SECRET = '1365910ab ...'
OAUTH_ALLOWED_SCOPES = ('all-apis', 'sql')
)
ENABLED = TRUE;
전달자 토큰 또는 PAT¶
다음 예제에서는 PAT 토큰을 사용하여 Databricks Unity Catalog에 연결하는 REST 카탈로그 통합을 생성합니다.
CREATE OR REPLACE CATALOG INTEGRATION unity_catalog_int_pat
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://my-api/api/2.1/unity-catalog/iceberg'
)
REST_AUTHENTICATION = (
TYPE = BEARER
BEARER_TOKEN = 'eyAbCD...eyDeF...'
)
ENABLED = TRUE;
SigV4¶
다음 다이어그램은 Snowflake가 API Gateway 및 SigV4 인증을 사용하여 REST 카탈로그 서버와 상호 작용하는 방법을 보여줍니다.
이 섹션의 단계에 따라 Amazon API Gateway 및 Signature Version 4 (SigV4) 인증에서 REST API를 사용하여 공개적으로 액세스할 수 없는 Snowflake를 Iceberg REST 카탈로그에 안전하게 연결합니다.
Amazon API Gateway에서 REST API 만들기¶
Snowflake를 Iceberg REST 카탈로그에 연결하려면 Amazon API Gateway에서 REST API 리소스 가 필요합니다.
Amazon API Gateway에 아직 Iceberg 카탈로그용 REST API 리소스가 없는 경우, Iceberg 카탈로그 OpenAPI 정의 파일을 가져오거나 엔드포인트를 수동으로 추가하여 간단한 REST API를 생성할 수 있습니다.
AWS 관리 콘솔에서 API Gateway 를 검색하여 선택합니다.
Create API 를 선택합니다.
REST API 에서 Build 를 선택합니다. 비공개 REST API를 생성하려면 REST API Private 에서 Build 를 선택합니다.
다음 옵션 중 하나를 선택합니다.
엔드포인트를 수동으로 추가하여 API를 생성하려면 New API 를 선택합니다.
OpenAPI 정의 파일을 사용하여 API를 생성하려면 Import API 를 선택한 다음 파일을 업로드하거나 코드 편집기에 정의를 붙여넣습니다.
API name 및 선택 사항 Description 을 입력합니다.
참고
비공개 REST API를 생성할 때 VPC 엔드포인트 ID를 입력할 필요가 없습니다.
Create API 를 선택합니다.
API Gateway에서 REST API를 생성하고 개발하는 방법에 대한 자세한 내용은 Amazon API Gateway 개발자 가이드 를 참조하십시오.
IAM 정책을 생성하고 역할에 연결¶
이 단계에서는 Snowflake가 API 게이트웨이에 연결하는 데 사용할 수 있는 AWS IAM 역할을 생성합니다. API를 호출할 수 있는 권한을 부여하는 정책을 역할에 연결합니다.
AWS 관리 콘솔에서 IAM 을 검색하여 선택합니다.
왼쪽 탐색 창에서 Policies 를 선택합니다.
Create policy 를 선택한 다음 Policy editor 에 대한 JSON 을 선택합니다.
빈 정책을 API 메서드를 호출할 수 있는 권한이 있는 정책으로 교체합니다. 예를 들어, 다음 일반 정책은 AWS 계정의 모든 API Gateway 리소스에 대한 호출 작업을 허용합니다
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "execute-api:Invoke" ], "Resource": "arn:aws:execute-api:*:<aws_account_id>:*" } ] }
중요
가장 좋은 방법은 사용 사례에 필요한 최소한의 권한을 부여하는 정책을 사용하는 것입니다. 추가 지침 및 예시 정책은 IAM 권한으로 API에 대한 액세스 제어 섹션을 참조하십시오.
Next 를 선택합니다.
Policy name (예:
snowflake_access
)과 선택 사항인 Description 을 입력합니다.Create policy 를 선택합니다.
IAM 대시보드의 왼쪽 탐색 창에서 Roles 를 선택합니다.
정책을 연결할 역할을 선택합니다. 카탈로그 통합을 생성할 때 이 역할을 지정합니다. 역할이 없는 경우 새 역할을 생성합니다.
Permissions 탭의 역할 Summary 페이지에서 Add permissions » Attach policies 를 선택합니다.
API Gateway에 대해 생성한 정책을 검색하여 옆의 확인란을 선택한 다음 Add permissions 를 선택합니다.
역할 Summary 페이지에서 ARN 역할을 복사합니다. 카탈로그 통합을 생성할 때 이 ARN을 지정합니다.
API Gateway 리소스 정책 연결(비공개 APIs만 해당)¶
REST API가 비공개인 경우 API에 Amazon API Gateway 리소스 정책을 연결해야 합니다. Snowflake는 리소스 정책을 통해 Snowflake 계정이 있는 Amazon Virtual Private Cloud(VPC)에서 API를 호출할 수 있습니다.
Snowflake에서 SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO 함수를 호출하여 내 Snowflake 계정이 있는 VPC에 대한 ID를 검색합니다. 함수 출력에서 VPC ID를 복사합니다.
SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();
출력:
{"snowflake-vpc-id":["vpc-c1c234a5"]}
API Gateway 리소스 정책 연결하기 섹션의 지침에 따라 REST API에 리소스 정책을 연결합니다.
다음 예제 정책을 붙여넣고 수정합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "<api_gateway_arn>", "Condition": { "StringNotEquals": { "aws:sourceVpc": "<snowflake_vpc_id>" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:sts::123456789012:assumed-role/<my_api_permissions_role_name>/snowflake" }, "Action": "execute-api:Invoke", "Resource": "<api_gateway_arn>/*/*/*", "Condition": { "StringEquals": { "aws:sourceVpc": "<snowflake_vpc_id>" } } } ] }
정책의 첫 번째 문은 Snowflake VPC에서 시작되지 않은 모든 요청을 거부합니다. 두 번째 문은 가정된 역할 세션 주체 를 사용하는 Snowflake VPC에서 시작된 요청에서 호출 작업(모든 메서드에 대해)을 허용합니다.
API Gateway 리소스 정책에 대해 자세히 알아보려면 다음을 참조하십시오.
엔드포인트 URL 검색¶
REST API 엔드포인트 URL(또는 호출 URL)을 검색합니다. 엔드포인트 URL을 검색하려면 먼저 API를 스테이지에 배포해야 합니다.
Amazon API Gateway 콘솔에서 REST API를 선택합니다.
왼쪽 탐색 창에서 Stages 를 선택합니다.
Stage details 에서 Invoke URL 을 복사합니다.
카탈로그 통합을 생성할 때 엔드포인트 URL을 지정합니다.
SigV4용 카탈로그 통합 만들기¶
Amazon API Gateway에 REST API가 있고 IAM 권한을 사용하여 API에 대한 액세스를 제어하는 초기 단계를 완료한 후에는 Snowflake에서 카탈로그 통합을 생성할 수 있습니다.
명령 구문과 매개 변수 설명을 살펴보려면 CREATE CATALOG INTEGRATION(Apache Iceberg™ REST) 섹션을 참조하십시오.
공용 REST API
공용 REST API에 대한 카탈로그 통합을 생성하려면 ICEBERG_REST
를 CATALOG_SOURCE
로 지정하고 SIGV4
인증을 사용합니다.
API 엔드포인트 URL 및 IAM 역할 ARN과 같은 세부 정보를 포함합니다.
CREATE OR REPLACE CATALOG INTEGRATION my_rest_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://asdlkfjwoalk-execute-api.us-west-2-amazonaws.com/MyApiStage'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
ENABLED = TRUE;
비공개 REST API
비공개 REST API에 대한 카탈로그 통합을 생성하려면 CATALOG_API_TYPE
매개 변수를 AWS_PRIVATE_API_GATEWAY
으로 설정해야 합니다.
CREATE OR REPLACE CATALOG INTEGRATION my_rest_catalog_integration
CATALOG_SOURCE = ICEBERG_REST
TABLE_FORMAT = ICEBERG
CATALOG_NAMESPACE = 'my_namespace'
REST_CONFIG = (
CATALOG_URI = 'https://asdlkfjwoalk-execute-api.us-west-2-amazonaws.com/MyApiStage'
)
REST_AUTHENTICATION = (
TYPE = SIGV4
CATALOG_API_TYPE = AWS_PRIVATE_API_GATEWAY
SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my_api_permissions_role'
)
ENABLED = TRUE;
IAM에서 신뢰 관계 구성¶
다음으로 카탈로그 통합을 만들 때 Snowflake 계정에 대해 생성된 AWS IAM 사용자 및 외부 ID에 대한 정보를 검색하고 IAM 역할에 대한 신뢰 관계를 구성해야 합니다.
Snowflake에서 DESCRIBE CATALOG INTEGRATION 명령을 호출합니다.
DESCRIBE CATALOG INTEGRATION my_rest_catalog_integration;
다음 값을 기록합니다.
값
설명
API_AWS_IAM_USER_ARN
Snowflake 계정용으로 생성된 AWS IAM 사용자입니다(예:
arn:aws:iam::123456789001:user/abc1-b-self1234
). Snowflake는 전체 Snowflake 계정에 대해 단일 IAM 사용자를 프로비저닝합니다.API_AWS_EXTERNAL_ID
신뢰 관계를 구축하는 데 필요한 외부 ID입니다.
AWS 관리 콘솔에서 IAM 을 검색하여 선택합니다.
왼쪽 탐색 창에서 Roles 를 선택합니다.
카탈로그 통합에 대해 생성한 IAM 역할을 선택합니다.
Trust relationships 탭을 선택합니다.
Edit trust policy 를 선택합니다.
기록한 값으로 정책 문서를 수정합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "<api_aws_iam_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<api_aws_external_id>" } } } ] }
Update policy 를 선택하여 변경 사항을 저장합니다.