内部ステージ用のAzureプライベートエンドポイント¶
このトピックでは、Microsoft Azureプライベートエンドポイントを介してSnowflake内部ステージに接続するための概念と、詳細な手順について説明します。
このトピックの内容:
概要¶
`Azureプライベートエンドポイント<https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-overview>`_と`Azure Private Link <https://docs.microsoft.com/en-us/azure/private-link/private-link-overview>`_を組み合わせて、Snowflake内部ステージへの安全な接続を提供できます。この設定により、Snowflake内部ステージへのデータのロードとアンロードの操作にはAzure内部ネットワークを使用し、パブリックインターネットを介さないようになります。
Microsoftが内部ステージアクセス用のプライベートエンドポイントをサポートする前は、Snowflake内部ステージへの安全なアクセスを容易にするために、Azure VNet内にプロキシファームを作成する必要がありました。Snowflake内部ステージ用のプライベートエンドポイントのサポートが追加されたことで、ユーザーとクライアントアプリケーションは、プライベートAzureネットワークを介してSnowflake内部ステージにアクセスできるようになりました。次の図は、この新しいサポートをまとめたものです。
BEFORE 図の番号に関して次の点に注意してください。
ユーザーには、Snowflake内部ステージに接続するための2つのオプションがあります。
オプションAは、番号1で示されているように、内部ステージへの直接のオンプレミス接続を許可します。
オプションBは、番号2および3で示されているように、プロキシファームを介した内部ステージへの接続を許可します。
プロキシファームを使用している場合、ユーザーは番号4で示されているようにSnowflakeに直接接続することもできます。
AFTER 図の番号に関して次の点に注意してください。
わかりやすくするために、この図では、単一のSnowflake内部ステージ(6と7)を指す、Azure VNet 1つからの単一のプライベートエンドポイントを示しています。
同じSnowflake内部ステージを指す、それぞれが異なるVNet内の複数のプライベートエンドポイントを構成できることに注意してください。
この機能の更新により、プロキシファームを介してSnowflakeまたはSnowflake内部ステージに接続する必要がなくなります。
オンプレミスユーザーは、番号5に示すようにSnowflakeに直接接続できます。
Snowflake内部ステージに接続するには、オンプレミスユーザーは、番号6のプライベートエンドポイントに接続し、次に番号7に示すようにAzure Private Linkを使用して、Snowflake内部ステージに接続します。
Azureには、各Snowflakeアカウントに、内部ステージとして使用するための専用のストレージアカウントがあります。ストレージアカウントURIsは、ストレージアカウントへの接続がプライベート接続(つまり、Azure Private Link)を使用するかどうかによって異なります。プライベート接続 URL には、 privatelink に URL セグメントが含まれています。
- パブリックストレージアカウント URI:
 <ストレージアカウント名>.blob.core.windows.net- プライベート接続ストレージアカウント URI:
 <ストレージアカウント名>.privatelink.blob.core.windows.net
アカウントの内部ステージ用に:ref:プライベートエンドポイント接続を構成<label-private_internal_stages_azure_configure_endpoints>`すると、Microsoft Azureは、ストレージアカウントホストをAzure Private Linkの対応するホストにポイントするCNAME記録をパブリックDNSサービスに自動的に作成します。この対応するホストは`.privatelink.blob.core.windows.net``です。
利点¶
Snowflake内部ステージにアクセスするためにプライベートエンドポイントを実装すると、次の利点があります。
内部ステージのデータは、パブリックインターネットを通過しません。
Azure VNet の外部で実行されるクライアントおよび SaaS アプリケーション(Microsoft PowerBI など)は、Snowflakeに安全に接続できます。
管理者は、内部ステージデータにアクセスするためにファイアウォール設定を変更する必要がありません。
管理者は、ユーザーがストレージアカウントに接続する方法に関して、一貫したセキュリティと監視を実装できます。
制限事項¶
Microsoft AzureはプライベートエンドポイントがSnowflakeとどのように相互作用できるかを定義します。
単一のプライベートエンドポイントは、単一のSnowflakeサービスエンドポイントと通信できます。同じSnowflake内部ステージに接続する複数の1対1の構成を持つことができます。
Snowflake内部ステージに接続できるストレージアカウントのプライベートエンドポイントの最大数は固定です。詳細については、 標準ストレージアカウント制限 をご参照ください。
Snowflake内部ステージにアクセスするためのプライベートエンドポイントの構成¶
Snowflake内部ステージにアクセスするようにプライベートエンドポイントを構成するには、組織内にある次の3つのロールから、サポートが必要です。
Snowflakeアカウント管理者(つまり、Snowflake ACCOUNTADMIN システムロールを持つユーザー)。
Microsoft Azure管理者。
ネットワーク管理者。
組織によっては、次の構成ステップを実装するために、構成作業で複数の人またはチームとの調整が必要になる場合があります。
次のステップを実行して、Azureプライベートエンドポイントを介したSnowflake内部ステージへの安全なアクセスを構成および実装します。
AzureサブスクリプションがAzure Storageリソースマネージャーに登録されていることを確認します。この手順により、プライベートエンドポイントから内部ステージに接続できるようになります。
Snowflakeアカウント管理者として、Snowflakeアカウントで次のコマンドを実行し、``ResourceID``キーで定義された内部ステージストレージアカウントの``privatelink_internal_stage``を記録します。詳細については、 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())));
Azure管理者として、Azureポータルからプライベートエンドポイントを作成します。
プライベートエンドポイントのプロパティを表示し、リソースID値を記録します。次のステップで、この値を``privateEndpointResourceID``関数の引数として提供します。
Target sub-resource 値が
blobに設定されていることを確認します。詳細については、Microsoft Azure Private Link ドキュメント をご参照ください。
Snowflake管理者として、 SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS 値を使用して、関数の引数として
privateEndpointResourceID関数を呼び出します。このステップは、プライベートエンドポイントを介したSnowflake内部ステージへのアクセスを許可します。USE ROLE ACCOUNTADMIN; SELECT SYSTEM$AUTHORIZE_STAGE_PRIVATELINK_ACCESS('<privateEndpointResourceID>');
必要に応じて、これらのステップを実行して、内部ステージへのアクセスを 取り消し ます。
ネットワーク管理者を関与させ、プライベートDNSゾーンのDNS設定を更新します。設定では、プライベートリンクBLOB URL``<storage_account_name>.privatelink.blob.core.windows.net``をストレージアカウント内部ステージに接続するAzureプライベートエンドポイントのプライベートIPアドレスに解決する必要があります。
詳細については、 Azureプライベートエンドポイント DNS 構成 をご参照ください。
Tip
テストには別のSnowflakeアカウントを使用し、テスト VNet でプライベート DNS ゾーンを構成して機能をテストすることにより、テストが分離されて他のワークロードに影響を与えないようにします。
別のSnowflakeアカウントを使用できない場合は、テストユーザーを使用して、 DNS の変更を実行したテスト VPC からSnowflakeにアクセスします。
オンプレミスアプリケーションからテストするには、 DNS 転送を使用して、 DNS 設定を実行する VNet 内のAzureプライベート DNS にリクエストを転送します。クライアントマシンから次のコマンドを実行して、返されたIPアドレスがストレージアカウントのプライベートIPアドレスであることを確認します。
dig <storage_account_name>.blob.core.windows.net
パブリックアクセスのブロック --- 推奨¶
Azure Private Linkを使用して内部ステージにアクセスするようにプライベートエンドポイントを構成すると、オプションでパブリックIPアドレスから内部ステージへのリクエストをブロックできます。パブリックアクセスがブロックした後、すべてのトラフィックはプライベートエンドポイントを経由する必要があります。
Azure内部ステージへのパブリックアクセスの制御は、Snowflakeサービスへのパブリックアクセスの制御とは異なります。内部ステージへのリクエストをブロックするには、ネットワークポリシーではなく、 SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS 関数を使用します。ネットワークポリシーとは異なり、この関数は一部のパブリックIPアドレスをブロックしながら他のアドレスを許可することはできません。SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS 関数を呼び出すと、:emph:`すべての`パブリックIPアドレスがブロックされます。
重要
公開アクセスをブロックする 前に、プライベート接続を使用したトラフィックが内部ステージに正常に到達していることを確認します。プライベート接続を設定せずにパブリックアクセスをブロックすると、Azure Data Factoryのようなマネージドサービスに支障をきたすなど、予期せぬ障害が発生する可能性があります。
SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS 関数は、内部ステージがあるAzureストレージアカウントの Networking 設定を変更することで制限を適用します。これらのAzureの設定は、一般的に「ストレージアカウントのファイアウォール設定」と呼ばれています。このSnowflakeシステム関数を呼び出すと、Azureで次のアクションが実行されます。
Public network access フィールドを Enabled from selected virtual networks and IP addresses に設定します。
Snowflake VNet のサブネットIDを Virtual Networks セクションに追加します。
Firewall セクションからすべての IP アドレスをクリアします。
パブリックIPアドレスから内部ステージへのすべてのトラフィックをブロックするには、次の関数を呼び出します。
SELECT SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS();
この関数は完了するまでに数分かかる場合があります。
パブリックアクセスの確実なブロック¶
パブリックIPアドレスが内部ステージにアクセスできるかどうかを判断するには、:doc:`/sql-reference/functions/system_internal_stages_public_access_status`関数を呼びだします。
Azureの設定が現在すべてのパブリックトラフィックをブロックしている場合、この関数は Public Access to internal stages is blocked を返します。これは、SYSTEM$BLOCK_INTERNAL_STAGES_PUBLIC_ACCESS関数の呼びだし後に設定が変更されていないことを確認するものです。
少なくともいくつかのパブリック IP アドレスが内部ステージにアクセスできる場合、関数は Public Access to internal stages is unblocked を返します。
パブリックアクセスのブロック解除¶
これまでブロックされていた内部ステージへのパブリックアクセスを許可するには、:doc:`/sql-reference/functions/system_unblock_internal_stages_public_access`関数を実行します。
この関数を呼びだすと、内部ステージがあるAzureストレージアカウントの:ui:Networking`設定が変更されます。Azure :ui:`Public network access フィールドを Enabled from all networks に設定します。
Snowflake内部ステージにアクセスするためのプライベートエンドポイントの取り消し¶
Microsoft Azureプライベートエンドポイントを介してSnowflake内部ステージへのアクセスを取り消すには、次のステップを実行します。
Snowflake管理者は、 ENABLE_INTERNAL_STAGES_PRIVATELINK パラメーターが
TRUEに設定されていることを確認します。例:USE ROLE ACCOUNTADMIN; SHOW PARAMETERS LIKE 'enable_internal_stages_privatelink' IN ACCOUNT;
Snowflake管理者は、 SYSTEM$REVOKE_STAGE_PRIVATELINK_ACCESS 関数を呼び出し、プライベートエンドポイントへのアクセスを最初に承認するために使用されたのと同じ
privateEndpointResourceID値を使用して、プライベートエンドポイントへのアクセスを取り消します。USE ROLE ACCOUNTADMIN; SELECT SYSTEM$REVOKE_STAGE_PRIVATELINK_ACCESS('<privateEndpointResourceID>');
Azure管理者は、Azure Portalからプライベートエンドポイントを削除します。
ネットワーク管理者として、ストレージアカウント URLs の解決に使用された DNS およびエイリアスの記録を削除します。
この時点で、プライベートエンドポイントへのアクセスは取り消されました。SYSTEM$GET_PRIVATELINK_CONFIG 関数を呼び出したクエリ結果は、 privatelink_internal_stage キーとその値を返さないはずです。
トラブルシューティング¶
パブリックインターネット経由でSnowflakeステージにアクセスし、かつプライベートDNSサービスを使用してサービスのホスト名を解決するAzureアプリケーションは、このトピックで説明されているように、ステージへのプライベートエンドポイント接続が確立されている場合、Snowflakeステージにアクセスできません。
アプリケーションが同じドメインにプライベート DNS リージョンを構成している場合、Microsoft Azureは、プライベート DNS サービスにクエリを実行して、ストレージアカウントホストを解決しようとします。ストレージアカウントのエントリがプライベート DNS サービスで見つからない場合は、接続エラーが発生します。
この問題に対応するには、次に挙げる2つのオプションのいずれかを使用します。
プライベート DNS リージョンをアプリケーションから削除または分離します。
プライベートDNSサービスでストレージアカウントのプライベートホスト名(
<storage_account_name>.privatelink.blob.core.windows.net)のCNAME記録を作成し、次のコマンドの出力で指定されたホスト名をポイントするようにします。dig CNAME <storage_account_name>.privatelink.blob.core.windows.net