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 のインストール](https://docs.snowflake.com/en/developer-guide/snowflake-cli/installation/installation)をご参照ください。

始める前に

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 エンドポイント用で、もう一方は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ドキュメントのAzureストレージのプライベートエンドポイントを使用するおよびチュートリアル:Azureプライベートエンドポイントを使用してストレージアカウントに接続するをご参照ください。

  2. Azureでは、以下の手順に従います:

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

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

トラブルシューティング

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

Open Catalogでテーブルのスキーマを表示できません

症状

Open Catalogでカタログ内のテーブルを選択すると(例:catalog1)、次のエラーメッセージが表示されます:「このリソースにアクセスする権限がありません。」

原因

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

解決策

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

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

症状

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

原因

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

解決策

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