Google Cloud の外部ボリュームへのプライベート接続

このトピックでは、Google Cloud Storage(GCS)上の外部ボリュームへのアウトバウンドプライベート接続を構成する方法について説明します。アウトバウンドパブリック接続とアウトバウンドプライベート接続の主な違いは、外部ボリュームの USE_PRIVATELINK_ENDPOINT プロパティの設定方法です。

外部ボリュームがプライベート接続を使用するように構成されている場合、Google Cloud Storageサービスへの接続は、Google Cloud内部ネットワークを経由します。アウトバウンドプライベート接続を使用するように外部ボリュームを構成することで、ストレージアカウントへのパブリックアクセスをブロックし、データアンロード操作にさらなるセキュリティを追加できます。

外部ボリュームを使用してIcebergテーブル用の外部クラウドストレージに接続する方法については、 外部ボリュームの構成 をご参照ください。

注釈

You can use Google Cloud Private Service Connect to access Snowflake-managed Iceberg tables and Iceberg tables that use a catalog integration for object storage. In addition, you can use Google Cloud Private Service Connect to access externally managed Iceberg tables and Iceberg tables created from Delta files in object storage.

アウトバウンド プライベート接続コスト

各プライベート・コネクティビティ・エンドポイントの料金は、処理されるデータ総量に応じて支払われます。これらのアイテムの価格については、 Snowflake Service Consumption Table をご参照ください。

ACCOUNT_USAGE および ORGANIZATION_USAGE スキーマで請求ビューをクエリする際、以下のサービスタイプでフィルターをかけることで、これらの項目のコストを調べることができます。

  • OUTBOUND_PRIVATELINK_ENDPOINT

  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

例えば、 USAGE_IN_CURRENCY_DAILY 表示をクエリし、これらのサービスタイプでフィルターをかけることができます。

考慮事項

同じクラウドストレージサービスに対して、アウトバウンドパブリック接続とアウトバウンドプライベート接続を構成できます。この場合、アウトバウンドパブリック接続用に専用の外部ボリュームを作成し、 USE_PRIVATELINK_ENDPOINT = FALSE を指定します。

制限事項

Google Cloud Storageボリュームへのアウトバウンドプライベート接続は、マルチリージョンバケットをサポートしていません。

外部ボリュームのプライベート接続を指定する

外部ボリュームの USE_PRIVATELINK_ENDPOINT プロパティは、プライベート接続でアクセスするか、パブリックネットワークを経由してアクセスするかを決定します。プライベート接続を使用するには、以下の例に示すように、外部ボリュームの作成または変更時に USE_PRIVATELINK_ENDPOINT = TRUE を設定します。

外部ボリュームを作成するには、次の構文を使用します。

CREATE OR REPLACE EXTERNAL VOLUME <ext_volume_name>
  STORAGE_LOCATIONS =
  (
    (
      NAME = 'my-gcs-loc'
      STORAGE_PROVIDER = 'gcs'
      STORAGE_BASE_URL = 'gcs://<bucket>/<prefix>/'
      USE_PRIVATELINK_ENDPOINT = [ TRUE | FALSE ]
    )
  )
  ALLOW_WRITES=true;
Copy

既存の外部ボリュームを変更するには、次の構文を使用します。

ALTER EXTERNAL VOLUME <ext_volume_name>
  UPDATE STORAGE_LOCATION = '<storage_location_name>'
  USE_PRIVATELINK_ENDPOINT = [ TRUE | FALSE ]
Copy

DESCRIBE EXTERNAL VOLUME コマンドは、 USE_PRIVATELINK_ENDPOINT プロパティとその値を含みます。

プライベートエンドポイントのプロビジョニング

以下の手順を使用して、Google Cloud Storageボリュームのプライベートエンドポイントをプロビジョニングします。

  1. Snowflakeで、 SYSTEM$PROVISION_PRIVATELINK_ENDPOINT システム関数を呼び出します。引数として、リージョナル Storage API エンドポイントとホスト名を指定します。例:

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
      'storage.us-east4.rep.googleapis.com',
      'storage.us-east4.rep.googleapis.com');
    
    Copy

    注釈

    Snowflake は、 Google Cloud リージョナル StorageAPI エンドポイントのみをサポートしています。 Google Cloud マルチリージョンバケットはサポートされていません。

    SYSTEM$PROVISION_PRIVATELINK_ENDPOINT を使用してSnowflake VNet にプライベートエンドポイントをプロビジョニングし、Snowflakeがプライベート接続を介して外部のGoogle Cloud Storageに接続できるようにします。USE_PRIVATELINK_ENDPOINT プロパティが有効になっている外部ボリュームから参照されるバケットだけが、エンドポイント経由でアクセスできます。

  2. Snowflakeで、 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO 関数を呼び出します。

    SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO の出力に "status": "APPROVED" が含まれる場合は、Snowflakeからストレージアカウントへの接続にプライベート接続を使用できます。

    `「 APPROVED」 ` ステータスを待つ間、次のステップに進むことができます。

外部ボリュームアクセスの構成

以下の手順を使用して、外部ストレージボリュームへのプライベート接続を構成します。

  1. 外部ボリュームを作成し、 USE_PRIVATELINK_ENDPOINT プロパティを TRUE に設定します。例:

    CREATE EXTERNAL VOLUME external_volume
      STORAGE_LOCATIONS =
      (
        (
          NAME = 'my-gcs-loc'
          STORAGE_PROVIDER = 'gcs'
          STORAGE_BASE_URL =  'gcs://<bucket>/<prefix>/'
          USE_PRIVATELINK_ENDPOINT = true
        )
      )
      ALLOW_WRITES=true;
    
    Copy
  2. CREATE ICEBERG TABLE コマンドを使用して、外部ボリュームを参照するIcebergテーブルを作成します。例:

    CREATE ICEBERG TABLE rand_table (data STRING)
      BASE_LOCATION='table'
      EXTERNAL_VOLUME=external_volume
      CATALOG='snowflake';
    
    Copy
  3. プライベートエンドポイントのステータスが「 APPROVED」になったら、Snowflakeから外部ボリュームへのデータのアンロードをテストします。

プライベート接続の無効化

外部ボリュームへのプライベート接続が不要になった場合は、そのボリュームの USE_PRIVATELINK_ENDPOINT プロパティを FALSE に設定してから、 SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT システム関数を呼び出してエンドポイントをでプロビジョニングします。例:

ALTER EXTERNAL VOLUME <ext_volume_name>
  UPDATE STORAGE_LOCATION = '<storage_location_name>'
  USE_PRIVATELINK_ENDPOINT = false;

SELECT SYSTEM$DEPROVISION_PRIVATELINK_ENDPOINT('storage.us-east4.rep.googleapis.com');
Copy