Azure Private LinkとSnowflake Open Catalog¶
このトピックでは、インバウンドプライベート接続を使用してSnowflake Open Catalogアカウントとクエリエンジンを直接接続するAzure Private Linkの構成方法について説明します。
前提条件¶
Snowflake Open CatalogアカウントはAzure上でホストされています。
Open Catalogアカウントのプライベート接続 URL を使用して DNS サービスを構成するために必要な権限があります。
ステップ1: Open Catalogアカウント設定を取得する¶
Azure Private Linkを使用したOpen Catalogへのアクセスを構成するために以下の設定を取得します。
Snowflakeオープンカタログにサインインします。
ナビゲーションメニューで、 設定 を選択します。
設定ページで、以下の設定の値をテキストエディターにコピーします。
PrivateLink アカウント URL
リージョンレス PrivateLink アカウント URL
PrivateLink OCSP URL
リージョンレス PrivateLink OCSP URL
Private Linkサービス ID
これらの値は、 Azure Private Linkを使用したOpen Catalogへのアクセスの構成および Azure Private Linkを使用したOpen Catalogへの接続の際に貼り付けます。
各設定の説明については、Snowflakeドキュメントの SYSTEM$GET_PRIVATELINK_CONFIG システム関数の戻り値 をご参照ください。このトピックでは、アカウント設定の名前は JSON 形式です。
注釈
該当する場合、説明はSnowflakeアカウントを指しますが、実際の値はSnowflake Open Catalogアカウントの値であることを忘れないでください。例えば、 privatelink-account-url
はSnowflake Open Catalogアカウントの URL です。
オプション: JSON 形式でこれらの値を取得するには、 Open Catalog用にSnowflake CLI 接続を作成し、 SYSTEM$GET_PRIVATELINK_CONFIG システム関数を呼び出します。
ステップ2: Azure Private Linkを使用したOpen Catalogへのアクセスを構成する¶
注意
このセクションでは、 VNet 環境を構成するためのOpen Catalog固有の詳細のみを説明します。また、必要なファイアウォールの更新および DNS 記録の実際の構成に対して、Snowflakeは責任を負いません。これらの構成タスクのいずれかに問題がある場合は、Microsoftサポートに直接お問い合わせください。
このセクションでは、Azure Private Linkを使用して VNet をOpen Catalog VNet に接続する方法について説明します。
手順を完了するには、Azure CLI またはAzure PowerShell を使用する必要があります。インストールのヘルプについては、Microsoftドキュメントの Azure CLI または Azure PowerShell をご参照ください。
Azure Private Linkを使用してSnowflake Open Catalogへの接続を開始した後、Azureポータルで接続の承認状態を確認できます。
プライベートエンドポイントの作成¶
注釈
Snowflakeアカウント用のプライベートエンドポイントを既に作成しており、そのアカウントがOpen Catalogアカウントと同じデプロイメント内にある場合は、Open Catalogアカウント用の新しいプライベートエンドポイントを作成する必要はありません。オプションでこのステップを省略することもできます。
Azureアカウントの詳細を取得します。次の例では、Azure CLI の
az account list
コマンドを使用します。Name CloudName SubscriptionId State IsDefault ------- ---------- ------------------------------------ ------- ---------- MyCloud AzureCloud 13c... Enabled True
Azureポータルで、 Private Link を検索し、検索結果にある Private Link を選択します。
プライベートエンドポイント をクリックし、 追加 をクリックします。
基礎 タブで、 サブスクリプション、 リソースグループ、 名前、 リージョン の各フィールドをお使いの環境に合わせて入力し、 次へ: リソース をクリックします。
リソース タブで、 接続方法 について、 リソース ID またはエイリアスでAzureリソースに接続 を選択します。
リソース ID またはエイリアス には、 プライベート接続用のOpen Catalogアカウント設定を取得した際に取得した
Private Link Service ID
の値を入力します。エイリアス値に関するエラーメッセージが表示された場合は、 Snowflakeサポート に連絡してリソース ID 値を確認し、その値を使用してこの手順を繰り返してください。
プライベートエンドポイントが承認されると、Private Linkセンターページのプライベートエンドポイントセクションの CONNECTION STATE に 保留中 という値が表示されます。次の手順で認証を完了すると、この値は 承認済み に変わります。
インバウンドプライベート接続の有効化¶
この手続きでは、Open CatalogアカウントのAzure Private Linkを有効にします。この構成により、クエリエンジンはプライベート接続を介してOpen Catalogに接続できます。プライベートエンドポイントリソース ID、サブスクリプション ID、およびフェデレーションユーザーのアクセス認証情報を含むフェデレーショントークン値が必要です。
これらの値を取得するには、Azure CLI で以下のコマンドを実行します。
プライベートエンドポイントリソース ID を取得するには、以下のコマンドを実行し、その値をテキストエディターにコピーします。
az network private-endpoint show
サブスクリプション ID を取得するには、以下のコマンドを実行し、出力の SubscriptionID 列の値に注意してください。
az account list --output table
フェデレーショントークンの値を取得するには、以下のコマンドを実行し、accessTokenの値をテキストエディターにコピーします。
az account get-access-token --subscription <SubscriptionID>
SubscriptionID
は、前のステップで取得した一意の識別子です。
重要
Azureアクセストークンを生成するユーザーは、サブスクリプションに対する読み取りアクセス権限を持っている必要があります。最小の権限は Microsoft.Subscription/subscriptions/acceptOwnershipStatus/read です。または、既定のロール
Reader
により、粒度の荒い権限が付与されます。accessToken
値は機密情報であり、パスワード値のように扱う必要があります。この値は、共有 しないでください。Snowflakeサポートに連絡する必要がある場合は、サポートチケットを作成する前に、コマンドと URLs からアクセストークンを編集します。
Snowflakeオープンカタログにサインインします。
ナビゲーションメニューで、 設定 を選択します。
承認 を選択します。
Private Linkの承認ダイアログで、アカウントのプライベート接続を有効にします。
ID には、テキストエディターにコピーしたプライベートエンドポイントリソース ID を入力します。
フェデレーショントークン に、テキストエディターにコピーしたトークン値を入力します。
保存 を選択します。
DNS を設定する¶
Open Catalogへのリクエストはすべてプライベートエンドポイントを経由する必要があります。Open Catalogアカウントと OCSP URLs をプライベートエンドポイントの IP アドレスに解決するには、 DNS を更新します。
エンドポイント IP アドレスを取得するには、Azureポータルの検索バーに、作成したプライベートエンドポイントの名前を入力します。
ネットワークインターフェイスの結果を選択します。
プライベート IP アドレス の値をコピーします。
プライベート接続用のOpen Catalogアカウント設定から適切なエンドポイント値がプライベート IP アドレスに解決されるように DNS を構成します。
ステップ3: Azure Private Linkを介してOpen Catalogに接続する¶
サービス接続を登録し、Azure Private Linkを通じてクエリエンジンをOpen Catalogに接続するには、次のコードを使用します。
import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('iceberg_lab') \ .config('spark.jars.packages', 'org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.4.1,<maven_coordinate>') \ .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \ .config('spark.sql.defaultCatalog', 'opencatalog') \ .config('spark.sql.catalog.opencatalog', 'org.apache.iceberg.spark.SparkCatalog') \ .config('spark.sql.catalog.opencatalog.type', 'rest') \ .config('spark.sql.catalog.opencatalog.uri','https://<open_catalog_privatelink_account_url>/polaris/api/catalog') \ .config('spark.sql.catalog.opencatalog.header.X-Iceberg-Access-Delegation','vended-credentials') \ .config('spark.sql.catalog.opencatalog.credential','<client_id>:<client_secret>') \ .config('spark.sql.catalog.opencatalog.warehouse','<catalog_name>') \ .config('spark.sql.catalog.opencatalog.scope','PRINCIPAL_ROLE:<principal_role_name>') \ .getOrCreate()
パラメーター¶
注釈
<open_catalog_account_identifier>
に指定した値と一致するように、 DNS サービスを設定してください。
パラメーター |
説明 |
---|---|
|
接続先のカタログ名を指定します。 |
|
外部クラウドストレージプロバイダーのMaven座標を指定します:
|
|
サービスプリンシパルが使用するクライアント ID を指定します。 |
|
サービスプリンシパルが使用するクライアントシークレットを指定します。 |
|
AWS PrivateLink またはAzure Private Linkを使用してSnowflakeアカウントに接続するための URL を指定します。
|
|
サービスプリンシパルに付与されるプリンシパルロールを指定します。 |
ステップ4(オプション): Snowflakeのカタログ統合を作成する¶
Snowflakeを使用してOpen Catalogが管理するテーブルをクエリする場合、 IP のプライベートアドレスを使用するSnowflake用のカタログを作成します。このカタログ統合を作成するには、SnowflakeアカウントがOpen Catalogアカウントと同じデプロイメント内にある必要があります。
例については、Snowflakeドキュメントの 例: プライベート IP アドレスを使用したカタログ統合 <https://docs.snowflake.com/en/user-guide/tables-iceberg-open-catalog-query#example-catalog-integration-that-uses-a-private-ip-address>
_ をご参照ください。
注釈
Snowflake Open Catalog UI のプライベート接続を構成することもできます。この構成とOpen Catalogアカウントのプライベート接続を設定することで、パブリックインターネット経由ではなく、プライベート接続経由でOpen Catalog UI にアクセスすることができます。
このアクセスを構成するには、 Snowflake Open Catalog UI 用プライベート接続の構成をご参照ください。