Snowflake Open Catalogのプライベート接続エンドポイントの管理: Azure

以下の手順に従って、カタログのデータがAzureクラウドストレージに保存されているネットワークトラフィックのアウトバウンドプライベート接続を設定してください。

前提条件

  • Open Catalogアカウントと外部クラウドストレージの両方がAzureでホストされている必要があります。

  • Azureストレージアカウントのファイアウォールルールを設定して、特定のプライベート接続エンドポイントを経由するリクエストを許可する権限が必要です。

  • サードパーティのクエリエンジンまたはSnowflakeエンジンは、Azure Private Link介してAzureストレージにアクセスできる必要があります。このアクセスを許可するためのオプションは以下の通りです。

    • Azure Storageのプライベートエンドポイントを使用する。手順については、Azureドキュメントの Azure Storageのプライベートエンドポイントを使用する をご参照ください。

    • Azureサービスエンドポイントを使用する。

    • ファイアウォールの設定を変更して、クエリエンジンを実行するマシンの IP アドレスをホワイトリストに登録する。

    そうでない場合、アウトバウンドプライベート接続を有効にすると、エンジンはバケットに格納されたテーブルを読み書きできず、Open Catalogはバケットにメタデータを読み書きできません。

ステップ1: Open Catalog用のSnowflake CLI 接続を作成する

Open Catalogでプライベート接続を設定するには、Open Catalog用のSnowflake CLI 接続が必要です。この接続を作成するには、以下の手順に従ってください。Snowflake CLI がまだインストールされていない場合は、 Snowflake CLI のインストール をご参照ください。

始める前に

Open CatalogのSnowflake CLI 接続を作成するには、Open Catalogのアカウント識別子が必要です。アカウント識別子には、Snowflake組織名とOpen Catalogアカウント名が含まれます。例えば、 <orgname>.<my-snowflake-open-catalog-account-name> のようになります。

  • Snowflake 組織名(<orgname>)を調べるには、 アカウントの組織名とアカウント名を調べる <https://docs.snowflake.com/en/user-guide/admin-account-identifier.html#label-account-name-find>_ をご参照ください。

  • Snowflake Open Catalog アカウント名(<my-snowflake-open-catalog-account-name>)を検索するには、 Snowflake Open Catalogアカウントのアカウント名を検索 <https://other-docs.snowflake.com/en/opencatalog/find-account-name>_ をご参照ください。

重要

この接続を作成するには、サービス管理権限を持つOpen Catalogユーザーである必要があります。サービス管理者の権限については、 サービス管理者のロール ご参照ください。

Snowflake Open Catalog用にSnowflake CLI 接続を追加する

プライベート接続を有効にしたいSnowflake Open Catalogアカウントの接続を追加します。

  • 以下の値で 接続を追加 <https://docs.snowflake.com/en/developer-guide/snowflake-cli/connecting/configure-connections#add-a-connection>_ をします。その他のパラメーターについては、 Enter を押して、パラメーターの値の指定をスキップします。

    接続構成パラメーター

    この接続の名前

    接続の名前を指定します(例: myopencatalogconnection)。

    アカウント名

    Snowflake組織名の後にOpen Catalogのアカウント名をこの形式で指定します。

    <orgname>-<my-snowflake-open-catalog-account-name>

    例えば、 ABCDEFG-MYACCOUNT1 です。

    これらの名前を調べるには、 はじめに_ をご参照ください。

    ユーザー名

    Open Catalogのユーザー名を指定します(例: jsmith)。

    パスワード [任意]

    Open Catalogの接続を作成する場合、このパラメーターはオプション ではありません

    Open Catalogのパスワードを入力してください(例: MyPassword123456789)。

    接続のロール [任意]

    Open Catalogの接続を作成する場合、このパラメーターはオプション ではありません

    POLARIS_ACCOUNT_ADMIN を入力する必要があります

Snowflake CLI 接続のテスト

  • CLI 接続をテストするには、以下の例に従ってください。 myopencatalogconnection の接続をテストします。

    snow connection test -c myopencatalogconnection
    
    Copy

    応答は次のようになります。

    +------------------------------------------------------------------------------+
    | key              | value                                                     |
    |----------------------------+-------------------------------------------------|
    | Connection name  | myopencatalogconnection                                   |
    | Status           | OK                                                        |
    | Host             | ABCDEFG-MYACCOUNT1.snowflakecomputing.com                 |
    | Account          | ABCDEFG-MYACCOUNT1                                        |
    | User             | jsmith                                                    |
    | Role             | POLARIS_ACCOUNT_ADMIN                                     |
    | Database         | not set                                                   |
    | Warehouse        | not set                                                   |
    +------------------------------------------------------------------------------+
    
    Copy

Snowflake Open CatalogのSnowflake CLI 接続をデフォルトに設定する

使用する接続に必要な POLARIS_ACCOUNT_ADMIN ロールが常に付与されるようにするには、Open Catalog用に作成したSnowflake CLI 接続をデフォルトの接続として設定します。デフォルト接続の詳細については、 デフォルト接続の設定 <https://docs.snowflake.com/en/developer-guide/snowflake-cli/connecting/configure-connections#set-the-default-connection>_ をご参照ください。

  1. この例に従います。これは、 myopencatalogconnection 接続をデフォルトとして設定します。

    snow connection set-default myopencatalogconnection
    
    Copy
  2. 正しいユーザーとロールを使用していることを確認するには、以下を実行してください。

    snow sql -q "Select current_user(); select current_role();"
    
    Copy

    応答はOpen Catalogのユーザー名を返し、 CURRENT ROLE は POLARIS_ACCOUNT_ADMIN である必要があります。

    +----------------+
    | CURRENT_USER() |
    |----------------|
    | JSMITH        |
    +----------------+
    select current_role();
    +-----------------------+
    | CURRENT_ROLE()        |
    |-----------------------|
    | POLARIS_ACCOUNT_ADMIN |
    +-----------------------+
    
    Copy

ステップ2: ストレージアカウントのプライベート接続エンドポイントのプロビジョニングする

Open Catalogアカウントで使用するストレージアカウントごとに、プライベート接続エンドポイントをプロビジョニングする必要があります。

注釈

データレイクストレージのストレージアカウント(BLOBストレージアカウントではない)にプライベート接続エンドポイントをプロビジョニングする場合は、2つのプライベート接続エンドポイントをプロビジョニングする必要があります。これらのエンドポイントの1つは DFS エンドポイント、もう1つはBLOBエンドポイントです。例については、 データレイクストレージのストレージアカウントへのプライベート接続エンドポイントをプロビジョニングするをご参照ください。

Open Catalog用のSnowflake CLI 接続を使用して、以下のシステム関数を呼び出します。

  1. ストレージアカウントのプライベート接続エンドポイントをプロビジョニングするには、 SYSTEM$PROVISION_PRIVATELINK_ENDPOINTシステム関数を呼び出します。

  2. プライベート接続エンドポイントが使用可能であることを確認するには、 SYSTEM$GET_PRIVATELINK_ENDPOINTS_INFOシステム関数を呼び出します。

手順については、Snowflakeドキュメントの プライベート接続エンドポイントの管理: Azure をご参照ください。説明ではSnowflake Open CatalogアカウントではなくSnowflakeアカウントを参照していますが、Open Catalogでもプロセスは同じです。

重要

  • 説明で言及されている ACCOUNTADMIN ロールではなく、 POLARIS_ACCOUNT_ADMIN ロールを使用する必要があります。

  • 設定したデフォルトのSnowflake CLI 接続に POLARIS_ACCOUNT_ADMIN ロールが付与されていない場合は、コマンドに次のステートメントを含める必要があります: USE ROLE POLARIS_ACCOUNT_ADMIN;

  • コマンドの場合、 $ の直前にスラッシュを入れなければなりません。例えば、 snow sql -q "SELECT SYSTEM\$GET_PRIVATELINK_CONFIG();" です。

例: データレイクストレージのストレージアカウントに対してプライベート接続エンドポイントをプロビジョニングする

Icebergテーブルの保存にデータレイクストレージのストレージアカウントを使用する場合、アカウントに2つのプライベート接続エンドポイントをプロビジョニングする必要があります。詳細については、Azureドキュメントの プライベートエンドポイントの作成 をご参照ください。

例:

BLOBエンドポイントにプライベートエンドポイントをプロビジョニングする

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'/subscriptions/mysubscriptionid/resourceGroups/mystorage/providers/Microsoft.Storage/storageAccounts/storagedemo',
  'storagedemo.blob.core.windows.net',
  'blob'
);
Copy

DFS エンドポイントにプライベートエンドポイントをプロビジョニングする

SELECT SYSTEM$PROVISION_PRIVATELINK_ENDPOINT(
'/subscriptions/mysubscriptionid/resourceGroups/mystorage/providers/Microsoft.Storage/storageAccounts/storagedemo',
  'storagedemo.dfs.core.windows.net',
  'dfs'
);
Copy

ステップ3: ストレージアカウントに対してパブリックネットワークアクセスを構成する

Azureで、ストレージアカウントのネットワーク設定に移動し、パブリックネットワークアクセスを構成します。このアクセスは以下のいずれかに構成できます。

  • すべてのパブリックネットワークアクセスを無効にする

  • 指定した仮想ネットワークと IP アドレス以外のすべてのパブリックネットワークアクセスを無効にする

詳細については、Azureドキュメントの Azureストレージのファイアウォールと仮想ネットワークの構成 をご参照ください。

ステップ4: カタログのプライベート接続を有効にする

このステップでは、Open Catalogアカウントのカタログのプライベート接続を有効にします。新規または既存のカタログのプライベート接続を有効にできます。

新規カタログのプライベート接続の有効化

Azureストレージを使用してカタログを作成するの手順に従います。カタログに対して、 Private Link トグルが 有効 になっていることを確認します。

既存カタログへのプライベート接続の有効化

  1. オープンカタログにサインインします。

  2. ナビゲーションメニューで、 カタログ を選択します。

  3. カタログのリストで、プライベート接続を有効にするカタログを選択します。

  4. カタログの詳細タブで、 PrivateLink トグルを 有効 に設定します。

ステップ5: ストレージアカウントに対してプライベートエンドポイント接続を承認する

接続を承認するには、まずカタログにテーブルを作成するか、ロードする必要があります。これらのアクションのいずれかを実行すると、Azureにプライベートエンドポイント接続の承認リクエストが生成されます。

  1. クエリエンジンを使用して、次のいずれかを実行します。

    • カタログにテーブルが保存されていない場合は、Open Catalogアカウントにテーブルを作成し、クエリエンジンを使用してデータを挿入します。

    • カタログにテーブルが保存されている場合は、そのテーブルをロードしてみてください。

    注釈

    テーブルにデータを挿入できない場合、クエリエンジンにAzure Private Linkを構成していない可能性があります。その場合、クエリエンジンはAzure Private Linkを開始てカタログに接続されていません。これを解決するには、クエリエンジンにAzure Private Linkを構成します。詳細については、 Azure Storage のプライベート エンドポイントを使用する とAzureドキュメントの チュートリアル: Azureプライベートエンドポイントを使用してストレージアカウントに接続する をご参照ください。

  2. Azureでは、以下の手順に従ってください。

    1. ストレージアカウントのネットワーク設定に移動します。

    2. プライベートエンドポイント接続の接続リクエストを承認します。テーブルを作成した場合、リクエストを承認するとAzureストレージアカウントに作成されます。

トラブルシューティング

このセクションでは、ネットワークトラフィックのアウトバウンドプライベート接続に関する問題のトラブルシューティングについて説明します。

Open Catalogでテーブルのスキーマを表示できない

症状

Open Catalogで、カタログのテーブル(例えば、 catalog1)を選択しましたが、次のエラーメッセージ、「このリソースへのアクセス許可がありません。」を受け取りました。

原因

Azureで、 VPC エンドポイントを介してネットワークトラフィックをルーティングするために、ストレージアカウントのネットワーク設定を正常に更新しました。しかし、Open Catalogではこのカタログのプライベート接続を有効にしていないため、Open Catalogはあなたのバケットにアクセスできません。

解決策

カタログ(例えば、catalog1)のプライベート接続を有効にします。詳細については、 カタログのプライベート接続を有効にするをご参照ください。

クエリエンジンで「サブスコープ認証情報の取得に失敗しました」エラーメッセージを受け取った

症状

クエリエンジンを使用してテーブルにデータを読み書きしようとしましたが、以下のエラーメッセージが表示されました: 「サブスコープ認証情報の取得に失敗しました。」

原因

ストレージアカウントをロックダウンしましたが、プライベート接続エンドポイントをプロビジョニングしていないか、Open Catalogアカウントでプライベート接続を有効にしていません。その結果、Open Catalogはサブスコープ認証情報を生成してクエリエンジンに返すことができず、クエリエンジンはストレージにアクセスできません。

解決策

以下のステップを実行します。