Configure an Apache Iceberg™ REST catalog integration with outbound private connectivity

This topic explains how to configure a catalog integration for Apache Iceberg™ tables managed in a remote catalog that complies with the open source Apache Iceberg™ REST OpenAPI specification.

With this configuration, you can use the catalog integration to connect to a remote Iceberg REST catalog through a private IP address instead of over the public internet.

The following diagram shows how an Iceberg table uses a catalog integration with an external Iceberg catalog.

How Iceberg tables that use a catalog integration work

For general information about outbound private connectivity in Snowflake, including outbound private connectivity costs, see Private connectivity for outbound network traffic.

This topic covers the configuration steps for the following catalog types:

  • Generic Iceberg REST catalogs

  • AWS Glue Data Catalog

  • Databricks Unity Catalog on AWS

Note

  • Private connectivity is only supported for catalog integrations on AWS that use AWS PrivateLink and Azure that use Azure Private Link.

  • Private connectivity is only available within the same cloud provider; the catalog and the Snowflake deployment must be running in the same cloud provider.

Step 1: Gather private connectivity information for your catalog

You must gather private connectivity information to specify it later when you provision a corresponding private connectivity endpoint in the Snowflake VPC or VNet. When you provision a corresponding private connectivity endpoint, you create an AWS PrivateLink endpoint in Snowflake when your Snowflake account is hosted in AWS or you create an Azure private endpoint when your Snowflake account is hosted on Azure.

  • To gather private connectivity information for your catalog, see the documentation for the remote REST Iceberg catalog.

    The following example is an AWS VPC Endpoint Service ID in AWS: com.amazonaws.vpce.us-west-2.vpce-svc-0123456789abcdef.

Step 2: Provision a private connectivity endpoint

In this step, you provision a private connectivity endpoint in the Snowflake VPC or VNet to enable Snowflake to connect to the remote Iceberg REST catalog by using private connectivity.

  • To provision a private connectivity endpoint, call the SYSTEM$PROVISION_PRIVATELINK_ENDPOINT system function.

    For instructions on specifying the arguments for this system function, see the documentation for the remote REST Iceberg catalog that you want to connect to through private connectivity.

    The following code block shows an example of provisioning an AWS PrivateLink endpoint:

    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
      'com.amazonaws.vpce.us-west-2.vpce-svc-0123456789abcdef',
      'my.catalog.com'
      );
    
    Copy

Step 3: Verify the endpoint status

In this step, you verify the endpoint status of the private connectivity endpoint in the Snowflake VPC or VNet that you provisioned in the previous step.

  • To verify the endpoint status, call the SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO system function:

    SELECT SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO();
    
    Copy

    The endpoint is ready to use when the status changes from pending to available.

Step 4: Additional catalog-specific configuration

Complete the additional configuration steps for your catalog type.

Note

For some catalogs or some types of private connectivity endpoints, you also need to approve the connection or allowlist the private connectivity endpoints on the catalog server side.

  • To complete the additional configuration steps, see the documentation for the remote REST Iceberg catalog, and then proceed to the next step.

Step 5: Create a catalog integration

In this step, to enable private connectivity, you configure a catalog integration for the catalog REST endpoint.

  • To configure this catalog integration, run the CREATE CATALOG INTEGRATION command.

    For example:

    CREATE OR REPLACE CATALOG INTEGRATION iceberg_rest_catalog_cat_int_private
      CATALOG_SOURCE = ICEBERG_REST
      TABLE_FORMAT = ICEBERG
      REST_CONFIG = (
        CATALOG_URI = '<rest_api_endpoint_url>'
        CATALOG_API_TYPE = PRIVATE
        CATALOG_NAME = '<catalog_name>'
      )
      REST_AUTHENTICATION = (
        TYPE = OAUTH
        OAUTH_TOKEN_URI = '<token_server_uri>'
        OAUTH_CLIENT_ID = '<oauth_client_id>'
        OAUTH_CLIENT_SECRET = '<oauth_client_secret>'
        OAUTH_ALLOWED_SCOPES = ('all-apis', 'sql')
    )
    ENABLED = true;
    
    Copy

    Important

    To use outbound private connectivity, you must specify CATALOG_API_TYPE=PRIVATE when you create the integration.

    For more information, including the supported authentication methods, see CREATE CATALOG INTEGRATION (Apache Iceberg™ REST).

Step 6: Verify your catalog integration

(Optional) Step 7: Update your catalog configuration

We recommend that you update the configuration for your remote catalog so that it’s only accessible through private connectivity.

  • To update your catalog configuration, see the documentation for the remote catalog that you want to connect to through private connectivity.

Next steps

This section contains some tasks that you can perform after you configure your catalog integration:

Monitor your private connectivity endpoints

Configure an external volume with outbound private connectivity

  • To enable private connectivity between Snowflake and your storage buckets, configure an external volume with outbound private connectivity.

    For more information about external volumes, see Configure an external volume.

    Note

    Catalog-vended credentials aren’t supported when you configure a catalog integration with outbound private connectivity.

Create a catalog-linked database

  • To create a Snowflake database that is connected to your external Iceberg REST catalog, create a catalog-linked database.

    For more information, see Create a catalog-linked database.

    Note

    When you create the catalog-linked database, specify a catalog integration that is configured with outbound private connectivity.

Write to your remote catalog

After you configure a catalog integration for Apache Iceberg™ REST and create a catalog-linked database, you can write to your remote catalog.