Google Cloud の外部ステージへのプライベート接続

このトピックでは、 Google Cloud で外部ステージへのアウトバウンドプライベート接続を構成する方法について説明します。アウトバウンドパブリック接続とアウトバウンドプライベート接続の主な違いは、ストレージ統合の構成方法です。例えば、ストレージ統合に USE_PRIVATELINK_ENDPOINT プロパティを指定し、外部ステージでこのストレージ統合を参照することができます。外部ステージは、ストレージ統合からプライベートエンドポイントの構成を継承します。その後、 Google Cloud ステージへの接続は、 Google Cloud 内部ネットワークを経由します。アウトバウンドプライベート接続を使用するようにストレージ統合とステージを構成することで、ストレージアカウントへのパブリックアクセスをブロックし、データアンロードオペレーションにさらなるセキュリティを追加します。

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

各プライベート・コネクティビティ・エンドポイントの料金は、処理されるデータ総量に応じて支払われます。これらのアイテムの価格については、 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ステージへのアウトバウンドプライベート接続は、マルチリージョンバケットをサポートしていません。

ストレージ統合のプライベート接続を指定する

ストレージ統合を作成、交換、変更するときにプライベート接続を指定するには、以下の例に示すように USE_PRIVATELINK_ENDPOINT プロパティを含めます。プライベート接続を使用するには、統合に USE_PRIVATELINK_ENDPOINT = TRUE を設定します。

ストレージ統合

次の例は、1つ以上の場所を持つストレージ統合を作成するときに、 USE_PRIVATELINK_ENDPOINT プロパティを指定する方法を示しています。

CREATE OR REPLACE STORAGE INTEGRATION my_int
  TYPE=EXTERNAL_STAGE
  STORAGE_PROVIDER='gcs'
  STORAGE_ALLOWED_LOCATIONS=('gcs://<bucket>/<prefix>/')
  USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy

次の例は、ストレージ統合を変更し、 USE_PRIVATELINK_ENDPOINT プロパティを設定する方法を示しています。

ALTER STORAGE INTEGRATION my_int
  SET USE_PRIVATELINK_ENDPOINT = { TRUE | FALSE }
Copy
外部ステージ

USE_PRIVATELINK_ENDPOINT の構文の更新は、ステージの作成や変更時にはサポートされません。以下の例では、新しいステージまたは変更されたステージの URL を使用するために、ストレージ統合をどのように変更する必要があるかを示しています。

CREATE OR REPLACE STAGE my_gcs_stage
  URL = 'gcs://<bucket>/<prefix>/'
  STORAGE_INTEGRATION=my_int
Copy

外部ステージアクセスの構成

これらの手順は、 Google Cloud の外部ステージにデータをアンロードするために、ストレージ統合でアウトバウンドプライベート接続を使用する場合に固有のものです。

  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 リージョナルStorage API エンドポイントのみをサポートしています。 Google Cloud マルチリージョンバケットはサポートされていません。

    SYSTEM$PROVISION_PRIVATELINK_ENDPOINT を使用してSnowflake VNet でプライベートエンドポイントをプロビジョニングすると、プライベートエンドポイントがホスト名にバインドされます。これにより、ストレージ統合は、プライベート接続を使用して外部 Google Cloud ステージに接続できます。

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

    SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFO の出力に "status": "APPROVED" が含まれる場合、Snowflakeからストレージアカウントへの接続はプライベート接続を使用できます(他の必要なSnowflakeオブジェクトがアウトバウンドプライベート接続で有効になった後)。

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

  3. ストレージ統合を作成し、 USE_PRIVATELINK_ENDPOINT プロパティの値として TRUE を必ず指定してください。例:

    CREATE OR REPLACE STORAGE INTEGRATION outbound_private_link_int
      TYPE = EXTERNAL_STAGE
      STORAGE_PROVIDER = 'gcs'
      STORAGE_ALLOWED_LOCATIONS = ('gcs://mybucket1/path1/'')
      USE_PRIVATELINK_ENDPOINT = true
      ENABLED = true;
    
    Copy

    ストレージ統合用のロールの作成については、 Google Cloud Storageの統合の構成 を参照してください。

  4. ストレージ統合を参照する外部ステージを作成します。例:

    CREATE OR REPLACE STAGE my_gcs_stage
      URL = 'gcs://mybucket1/path1/'
      STORAGE_INTEGRATION = outbound_private_link_int;
    
    Copy
  5. プライベートエンドポイントのステータスが「 APPROVED 」になったら、Snowflakeから外部ステージへのデータのアンロードをテストします。例:

    COPY INTO @my_gcs_stage
      FROM mytable
      FILE_FORMAT = (FORMAT_NAME = my_csv_format);
    
    Copy
  6. 結果を Google Cloud ステージで表示します。

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

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

USE ROLE ACCOUNTADMIN;

ALTER STORAGE INTEGRATION my_int
  SET USE_PRIVATELINK_ENDPOINT = false;

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