内部ステージ用のAzureプライベートエンドポイント

このトピックでは、Microsoft Azureプライベートエンドポイントを介してSnowflake内部ステージに接続するための概念と、詳細な手順について説明します。

このトピックの内容:

概要

AzureプライベートエンドポイントAzure Private Link を組み合わせて、Snowflake内部ステージへの安全な接続を提供できます。この設定により、Snowflake内部ステージへのデータのロードとアンロードの操作にはAzure内部ネットワークを使用し、パブリックインターネットを介さないようになります。

Microsoftが内部ステージアクセス用のプライベートエンドポイントをサポートする前は、Snowflake内部ステージへの安全なアクセスを容易にするために、Azure VNet 内にプロキシファームを作成する必要がありました。Snowflake内部ステージ用のプライベートエンドポイントのサポートが追加されたことで、ユーザーとクライアントアプリケーションは、プライベートAzureネットワークを介してSnowflake内部ステージにアクセスできるようになりました。次の図は、この新しいサポートをまとめたものです。

Connect to internal stage using Azure Private Link

BEFORE 図の番号に関して次の点に注意してください。

  • ユーザーには、Snowflake内部ステージに接続するための2つのオプションがあります。

    • オプションAは、番号1で示されているように、内部ステージへの直接のオンプレミス接続を許可します。

    • オプションBは、番号2および3で示されているように、プロキシファームを介した内部ステージへの接続を許可します。

  • プロキシファームを使用している場合、ユーザーは番号4で示されているようにSnowflakeに直接接続することもできます。

AFTER 図の番号に関して次の点に注意してください。

  • この機能の更新により、プロキシファームを介してSnowflakeまたはSnowflake内部ステージに接続する必要がなくなります。

  • オンプレミスユーザーは、番号5に示すようにSnowflakeに直接接続できます。

  • Snowflake内部ステージに接続するには、オンプレミスユーザーは、番号6のプライベートエンドポイントに接続し、次に番号7に示すようにAzure PrivateLinkを使用して、Snowflake内部ステージに接続します。

Azureには、各Snowflakeアカウントに、内部ステージとして使用するための専用のストレージアカウントがあります。ストレージアカウント URIs は、ストレージアカウントへの接続がプライベート接続(つまり、Azure Private Link)を使用するかどうかによって異なります。プライベート接続 URL には、 URL に privatelink セグメントが含まれています。

パブリックストレージアカウント URI

<ストレージアカウント名>.blob.core.windows.net

プライベート接続ストレージアカウント URI

<ストレージアカウント名>.privatelink.blob.core.windows.net

利点

Snowflake内部ステージにアクセスするためにプライベートエンドポイントを実装すると、次の利点があります。

  • 内部ステージのデータは、パブリックインターネットを通過しません。

  • Azure VNet の外部で実行されるクライアントおよび SaaS アプリケーション(Microsoft PowerBI など)は、Snowflakeに安全に接続できます。

  • 管理者は、内部ステージデータにアクセスするためにファイアウォール設定を変更する必要がありません。

  • 管理者は、ユーザーがストレージアカウントに接続する方法に関して、一貫したセキュリティと監視を実装できます。

制限事項

  • 単一のプライベートエンドポイントは、単一のサービスエンドポイントと通信できます。したがって、内部ステージへのプライベート接続で使用するために、Snowflakeアカウントごとに1つのプライベートエンドポイントを構成します。これはMicrosoft Azureの制限であり、Snowflakeの制限ではないことに注意してください。

Snowflake内部ステージにアクセスするためのプライベートエンドポイントの構成

Snowflake内部ステージにアクセスするようにプライベートエンドポイントを構成するには、組織内にある次の3つのロールから、サポートが必要です。

  1. Snowflakeアカウント管理者(つまり、Snowflake ACCOUNTADMIN システムロールを持つユーザー)。

  2. Microsoft Azure管理者。

  3. ネットワーク管理者。

組織によっては、次の構成ステップを実装するために、構成作業を複数の人またはチームと調整する必要がある場合があります。

次のステップを実行して、Azureプライベートエンドポイントを介したSnowflake内部ステージへの安全なアクセスを構成および実装します。

  1. Snowflakeアカウント管理者として、Snowflakeアカウントで次のステートメントを実行し、 privatelink_internal_stage キーで定義された内部ステージストレージアカウントの ResourceID を記録します。詳細については、 ENABLE_INTERNAL_STAGES_PRIVATELINK および SYSTEM$GET_PRIVATELINK_CONFIG をご参照ください。

    use role accountadmin;
    alter account set ENABLE_INTERNAL_STAGES_PRIVATELINK = true;
    select key, value from table(flatten(input=>parse_json(system$get_privatelink_config())));
    
  2. Azure管理者として、Azureポータルからプライベートエンドポイントを作成します。

    次のステップで使用するために、プライベートエンドポイント詳細インターフェイスの Properties タブに表示されているように、 privateEndpointResourceID 値を記録します。

    Target sub-resource 値が blob に設定されていることを確認します。

  3. Snowflake管理者として、関数の引数として privateEndpointResourceID 文字列値を使用して次のステートメントを実行します。このステップは、プライベートエンドポイントを介したSnowflake内部ステージへのアクセスを許可します。

    use role accountadmin;
    select system$authorize_stage_privatelink_access('privateEndpointResourceID');
    
  4. ネットワーク管理者として、 DNS 設定を更新し、 URLs を次のように解決します。

    <ストレージアカウント名>.blob.core.windows.net から <ストレージアカウント名>.privatelink.blob.core.windows.net

    Azure VNet でプライベート DNS ゾーンを使用する場合は、 <ストレージアカウント名>.privatelink.blob.core.windows.net のエイリアスの記録を作成します。

    詳細については、 Azureプライベートエンドポイント DNS 構成 をご参照ください。

    ちなみに

    • テストには別のSnowflakeアカウントを使用し、テスト VNet でプライベート DNS ゾーンを構成して機能をテストすることにより、テストが分離されて他のワークロードに影響を与えないようにします。

    • 別のSnowflakeアカウントを使用できない場合は、テストユーザーを使用して、 DNS の変更を実行したテスト VPC からSnowflakeにアクセスします。

    • オンプレミスアプリケーションからテストするには、 DNS 転送を使用して、 DNS 設定を実行する VNet 内のAzureプライベート DNS にリクエストを転送します。クライアントマシンから次のコマンドを実行して、返された IP アドレスがストレージアカウントのプライベート IP アドレスであることを確認します。

      dig <storage_account_name>.blob.core.windows.net
      

トラブルシューティング

パブリックインターネット経由でSnowflakeステージにアクセスし、プライベート DNS サービスを使用してサービスのホスト名を解決するAzureアプリケーションは、このトピックで説明されているように、ステージへのプライベートエンドポイント接続が確立されている場合、Snowflakeステージにアクセスできません。

プライベートエンドポイント接続が作成されると、Microsoft Azureはパブリック DNS サービスに CNAME 記録を自動的に作成し、ストレージアカウントホストを対応するAzureプライベートリンク(つまり .privatelink.core.windows.net)にポイントします。アプリケーションが同じドメインにプライベート DNS リージョンを構成している場合、Microsoft Azureは、プライベート DNS サービスにクエリを実行して、ストレージアカウントホストを解決しようとします。ストレージアカウントのエントリがプライベート DNS サービスで見つからない場合は、接続エラーが発生します。

この問題に対処するには、次の2つのオプションがあります。

  1. プライベート DNS リージョンをアプリケーションから削除または分離します。

  2. プライベート DNS サービスでストレージアカウントのプライベートホスト名(つまり、 <ストレージアカウント名>.privatelink.core.windows.net)の CNAME 記録を作成し、次のコマンドの出力で指定されたホスト名をポイントするようにします。

    dig CNAME <storage_account_name>.privatelink.core.windows.net