Amazon Web Services の外部ボリュームへのプライベート接続

このトピックでは、 AWS の外部ボリュームへのアウトバウンドプライベート接続を設定するための構成の詳細を説明します。アウトバウンドパブリック接続とアウトバウンドプライベート接続の主な違いは、外部ボリュームの USE_PRIVATELINK_ENDPOINT プロパティの設定方法です。

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

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

注釈

You can use AWS PrivateLink to access Snowflake-managed Iceberg tables and Iceberg tables that use a catalog integration for object storage. In addition, you can use AWS PrivateLink 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 を指定します。

構文の更新

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

CREATE EXTERNAL VOLUME および ALTER EXTERNAL VOLUME の新しい構文は以下のようになります。

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

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

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

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

以下の手順を使用して、アウトバウンドプライベート接続を使い AWS 上の外部ボリュームにデータをアンロードします。

  1. SYSTEM$PROVISION_PRIVATELINK_ENDPOINT システム関数を呼び出して、 Snowflake VNet にプライベートエンドポイントをプロビジョニングし、Snowflakeがプライベート接続を介して外部 AWS クラウドストレージに接続できるようにします。

    次の例で示すように、 AWS S3バケットを個別に指定するのではなく、ワイルドカード文字(*)を使用する必要があります。ワイルドカードを使用しても、すべてのS3バケットがプライベート接続でアクセスされるわけではありません。USE_PRIVATELINK_ENDPOINT パラメーターが有効になっている外部ボリュームから参照されるバケットだけが、エンドポイント経由でアクセスできます。

    USE ROLE ACCOUNTADMIN;
    
    SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
        'com.amazonaws.us-west-2.s3',
        '*.s3.us-west-2.amazonaws.com');
    
    Copy

    この関数はプライベートエンドポイントをホスト名にバインドし、 AWS PrivateLink がオブジェクト上で有効になっている限り、外部ボリュームがプライベートエンドポイントを使用してストレージロケーションに接続できるようにします。

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

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

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

  3. 外部ボリュームを作成し、 USE_PRIVATELINK_ENDPOINT プロパティが TRUE に設定されていることを確認します。例:

    CREATE EXTERNAL VOLUME external_volume
      STORAGE_LOCATIONS =
        (
          (
            NAME = 'my-s3-loc'
            STORAGE_PROVIDER = 's3'
            STORAGE_BASE_URL = 's3://bucketinuswest2/'
            STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::001234567890:role/myrole'
            USE_PRIVATELINK_ENDPOINT = TRUE
          )
        )
      ALLOW_WRITES=TRUE;
    
    Copy
  4. CREATE ICEBERG TABLE コマンドを使用して、外部ボリュームを参照するIcebergテーブルを作成します。例:

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

エンドポイントのデプロビジョン

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