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;
Copy

다음 예제에서는 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;
Copy

전달자 토큰 또는 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;
Copy

SigV4

다음 다이어그램은 Snowflake가 API Gateway 및 SigV4 인증을 사용하여 REST 카탈로그 서버와 상호 작용하는 방법을 보여줍니다.

Iceberg REST 카탈로그가 Amazon API Gateway, IAM 및 S3와 함께 작동하는 방식을 보여주는 다이어그램.

이 섹션의 단계에 따라 Amazon API GatewaySignature Version 4 (SigV4) 인증에서 REST API를 사용하여 공개적으로 액세스할 수 없는 Snowflake를 Iceberg REST 카탈로그에 안전하게 연결합니다.

  1. Amazon API Gateway에서 REST API 만들기

  2. IAM 정책을 생성하고 역할에 연결

  3. API Gateway 리소스 정책 연결(비공개 APIs만 해당)

  4. 사용자 API의 IAM 기반 승인 선택

  5. 엔드포인트 URL 검색

  6. SigV4용 카탈로그 통합 만들기

  7. IAM에서 신뢰 관계 구성

Amazon API Gateway에서 REST API 만들기

Snowflake를 Iceberg REST 카탈로그에 연결하려면 Amazon API Gateway에서 REST API 리소스 가 필요합니다.

Amazon API Gateway에 아직 Iceberg 카탈로그용 REST API 리소스가 없는 경우, Iceberg 카탈로그 OpenAPI 정의 파일을 가져오거나 엔드포인트를 수동으로 추가하여 간단한 REST API를 생성할 수 있습니다.

  1. AWS 관리 콘솔에서 API Gateway 를 검색하여 선택합니다.

  2. Create API 를 선택합니다.

  3. REST API 에서 Build 를 선택합니다. 비공개 REST API를 생성하려면 REST API Private 에서 Build 를 선택합니다.

  4. 다음 옵션 중 하나를 선택합니다.

    • 엔드포인트를 수동으로 추가하여 API를 생성하려면 New API 를 선택합니다.

    • OpenAPI 정의 파일을 사용하여 API를 생성하려면 Import API 를 선택한 다음 파일을 업로드하거나 코드 편집기에 정의를 붙여넣습니다.

  5. API name 및 선택 사항 Description 을 입력합니다.

    참고

    비공개 REST API를 생성할 때 VPC 엔드포인트 ID를 입력할 필요가 없습니다.

  6. Create API 를 선택합니다.

API Gateway에서 REST API를 생성하고 개발하는 방법에 대한 자세한 내용은 Amazon API Gateway 개발자 가이드 를 참조하십시오.

IAM 정책을 생성하고 역할에 연결

이 단계에서는 Snowflake가 API 게이트웨이에 연결하는 데 사용할 수 있는 AWS IAM 역할을 생성합니다. API를 호출할 수 있는 권한을 부여하는 정책을 역할에 연결합니다.

  1. AWS 관리 콘솔에서 IAM 을 검색하여 선택합니다.

  2. 왼쪽 탐색 창에서 Policies 를 선택합니다.

  3. Create policy 를 선택한 다음 Policy editor 에 대한 JSON 을 선택합니다.

  4. 빈 정책을 API 메서드를 호출할 수 있는 권한이 있는 정책으로 교체합니다. 예를 들어, 다음 일반 정책은 AWS 계정의 모든 API Gateway 리소스에 대한 호출 작업을 허용합니다

    {
      "Version": "2012-10-17",
      "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "execute-api:Invoke"
            ],
            "Resource": "arn:aws:execute-api:*:<aws_account_id>:*"
        }
      ]
    }
    
    Copy

    중요

    가장 좋은 방법은 사용 사례에 필요한 최소한의 권한을 부여하는 정책을 사용하는 것입니다. 추가 지침 및 예시 정책은 IAM 권한으로 API에 대한 액세스 제어 섹션을 참조하십시오.

  5. Next 를 선택합니다.

  6. Policy name (예: snowflake_access)과 선택 사항인 Description 을 입력합니다.

  7. Create policy 를 선택합니다.

  8. IAM 대시보드의 왼쪽 탐색 창에서 Roles 를 선택합니다.

  9. 정책을 연결할 역할을 선택합니다. 카탈로그 통합을 생성할 때 이 역할을 지정합니다. 역할이 없는 경우 새 역할을 생성합니다.

  10. Permissions 탭의 역할 Summary 페이지에서 Add permissions » Attach policies 를 선택합니다.

  11. API Gateway에 대해 생성한 정책을 검색하여 옆의 확인란을 선택한 다음 Add permissions 를 선택합니다.

  12. 역할 Summary 페이지에서 ARN 역할을 복사합니다. 카탈로그 통합을 생성할 때 이 ARN을 지정합니다.

API Gateway 리소스 정책 연결(비공개 APIs만 해당)

REST API가 비공개인 경우 API에 Amazon API Gateway 리소스 정책을 연결해야 합니다. Snowflake는 리소스 정책을 통해 Snowflake 계정이 있는 Amazon Virtual Private Cloud(VPC)에서 API를 호출할 수 있습니다.

  1. Snowflake에서 SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO 함수를 호출하여 내 Snowflake 계정이 있는 VPC에 대한 ID를 검색합니다. 함수 출력에서 VPC ID를 복사합니다.

    SELECT SYSTEM$GET_SNOWFLAKE_PLATFORM_INFO();
    
    Copy

    출력:

    {"snowflake-vpc-id":["vpc-c1c234a5"]}
    
  2. 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>"
            }
          }
        }
      ]
    }
    
    Copy

정책의 첫 번째 문은 Snowflake VPC에서 시작되지 않은 모든 요청을 거부합니다. 두 번째 문은 가정된 역할 세션 주체 를 사용하는 Snowflake VPC에서 시작된 요청에서 호출 작업(모든 메서드에 대해)을 허용합니다.

API Gateway 리소스 정책에 대해 자세히 알아보려면 다음을 참조하십시오.

사용자 API의 IAM 기반 승인 선택

REST API에서 액세스를 제공할 각 메서드에 대해 IAM 기반 승인을 선택합니다. IAM 기반 승인을 사용하면 Snowflake는 사용자가 구성한 IAM 역할을 사용하여 API를 호출할 수 있습니다.

  1. Amazon API Gateway 콘솔에서 REST API를 선택합니다.

  2. 각 메서드에 대해:

    1. Resources 의 목록에서 메서드를 선택합니다.

    2. Method request settings 에서 Edit 를 선택합니다.

    3. Authorization 에서 AWS IAM 을 선택합니다.

    4. Save 를 선택합니다.

  3. 승인 변경 사항을 적용하려면 Deploy API 를 선택합니다. 자세한 내용은 API Gateway 콘솔에서 REST API 배포하기 섹션을 참조하십시오.

엔드포인트 URL 검색

REST API 엔드포인트 URL(또는 호출 URL)을 검색합니다. 엔드포인트 URL을 검색하려면 먼저 API를 스테이지에 배포해야 합니다.

  1. Amazon API Gateway 콘솔에서 REST API를 선택합니다.

  2. 왼쪽 탐색 창에서 Stages 를 선택합니다.

  3. 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_RESTCATALOG_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;
Copy

비공개 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;
Copy

IAM에서 신뢰 관계 구성

다음으로 카탈로그 통합을 만들 때 Snowflake 계정에 대해 생성된 AWS IAM 사용자 및 외부 ID에 대한 정보를 검색하고 IAM 역할에 대한 신뢰 관계를 구성해야 합니다.

  1. Snowflake에서 DESCRIBE CATALOG INTEGRATION 명령을 호출합니다.

    DESCRIBE CATALOG INTEGRATION my_rest_catalog_integration;
    
    Copy

    다음 값을 기록합니다.

    설명

    API_AWS_IAM_USER_ARN

    Snowflake 계정용으로 생성된 AWS IAM 사용자입니다(예: arn:aws:iam::123456789001:user/abc1-b-self1234). Snowflake는 전체 Snowflake 계정에 대해 단일 IAM 사용자를 프로비저닝합니다.

    API_AWS_EXTERNAL_ID

    신뢰 관계를 구축하는 데 필요한 외부 ID입니다.

  2. AWS 관리 콘솔에서 IAM 을 검색하여 선택합니다.

  3. 왼쪽 탐색 창에서 Roles 를 선택합니다.

  4. 카탈로그 통합에 대해 생성한 IAM 역할을 선택합니다.

  5. Trust relationships 탭을 선택합니다.

  6. Edit trust policy 를 선택합니다.

  7. 기록한 값으로 정책 문서를 수정합니다.

    {
      "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>"
            }
          }
        }
      ]
    }
    
    Copy
  8. Update policy 를 선택하여 변경 사항을 저장합니다.