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

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

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

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

注釈

AWS PrivateLink を使用して、Snowflake管理Icebergテーブルや、オブジェクトストレージにカタログ統合を使用しているIcebergテーブルにアクセスできます。さらに、 AWS PrivateLink を使用して、外部で管理されているIcebergテーブルや、オブジェクトストレージ内のDeltaファイルから作成されたIcebergテーブルにアクセスすることもできます。

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

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

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

  • OUTBOUND_PRIVATELINK_ENDPOINT

  • OUTBOUND_PRIVATELINK_DATA_PROCESSED

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

考慮事項

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

外部ボリュームへのアウトバウンドプライベート接続を設定する

外部ボリュームへのアウトバウンドプライベート接続を設定するには、 SQL を使用 するか、 Snowsightを使用 することができます。

SQL を使用する

構文の更新

外部ボリュームの 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から外部ボリュームへのデータのアンロードをテストします。

Snowsight を使用する

Snowsightでプライベート接続を使用して外部ボリュームのアクセスを設定するには、次のステップに従います。

  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. Snowsightを使用してS3用の外部ボリュームを作成する 手順に従い、外部ボリュームを構成するときにプライベート接続を有効にします。

    重要

    プライベート接続を有効にするには、 Configure external volume ページの Connectivity フィールドから、 Private (Azure Private Endpoint) を選択する必要があります。

  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 システム関数を呼び出します。