Snowflake ネットワーク事情

2024年12月時点で、Snowflakeのネットワーク事情を整理しました。

- [Network PolicyとNetwork Ruleによる接続制限](#network-policyとnetwork-ruleによる接続制限)
- [インバウンドプライベート接続](#インバウンドプライベート接続)
- [アウトバウンドプライベート接続](#アウトバウンドプライベート接続)
- [トラブルシュート方法](#トラブルシュート方法)

説明は簡易的で機能紹介が主になります。

## Network PolicyとNetwork Ruleによる接続制限

Network PolicyとNetwork Ruleを使うことで、インバウンド/アウトバウンドの接続制限ができます。

Network RuleでCIDRやエンドポイントのリストを作成後、Network RuleをNetwork Policyに紐づけ、Network Policyをアカウントまたはユーザーに紐づけることで、接続制限ができます。

許可したい接続元IPにNetwork Ruleで名前とコメントが付けられるようになるので、Network Ruleは積極的に使っていきましょう。

https://docs.snowflake.com/en/user-guide/network-policies

### インバウンド接続制限

Snowflakeへ以下の接続制限ができます。アップデートで接続元VPCエンドポイントの制限ができるようになったのは嬉しいですね。

- Snowflake自体
    - 接続元IP (CIDR)
    - 接続元VPCエンドポイント
- Snowflake内部ステージ
    - 接続元VPCエンドポイント

https://docs.snowflake.com/en/user-guide/network-rules#supported-network-identifiers

### アウトバウンド接続制限

EGRESS Network Rule にホスト名を指定することで、Snowflakeから外部へ接続できるようになります。IP指定はできません。

https://docs.snowflake.com/en/user-guide/network-rules#outgoing-requests

プライベート接続ができるようになっています。

https://docs.snowflake.com/en/release-notes/2024/8_44#outbound-private-connectivity-for-snowflake-features

## インバウンドプライベート接続

クラウドプラットフォームからSnowflakeへAWS PrivateLinkなどを利用し閉域接続ができるようになります。

https://docs.snowflake.com/en/user-guide/private-connectivity-inbound

### Snowflake自体へのプライベート接続

顧客側クラウドプラットフォームのNWリソース(VPCなど)上にSnowflakeへ接続するためのエンドポイントを作成することで、クラウドプラットフォームからSnowflakeへインターネットを通らない閉域接続ができます。

Snowflakeへ接続するためのhost名は固定で変えられないため、Snowflakeへ接続するためのhost名からエンドポイントのhost名へAWS Private Hosted Zoneなどで名前解決が必要です。

### Snowflake内部ステージへのプライベート接続

クエリ結果が 100KB を超える場合、内部ステージからクエリが返ってくるため、Snowflake内部ステージ(オブジェクトストレージ)へのプライベート接続もほぼ必須です。

https://docs.snowflake.com/en/user-guide/client-connectivity-troubleshooting/common-issues#fetching-large-query-result-sets-failures

AWSの場合の構成パターンを紹介します。

#### 構成パターン1 : S3 Gateway EndpointとS3 Interface Endpoint を併用

S3 Interface Endpoint 作成時に「プライベートDNSを有効化」することで、S3ドメインのPrivate Hosted Zoneが自動作成されます。追加で「Enable private DNS only for inbound endpoint」を有効化することで、VPC内接続の料金が安いS3 Gateway Endpointへ振り分けてくれるようになります。

https://dev.classmethod.jp/articles/amazon-s3-private-connectivity-on-premises-networks/

#### パターン2 : Snowflakeアカウントごとに S3 Interface Endpoint を指定

Snowflakeの S3_STAGE_VPCE_DNS_NAME アカウントパラメータにS3 Interface Endpointのhost名を入力すると、Snowflakeの内部ステージとの通信はS3 Interface EndpointのDNS名経由で行ってくれます。この機能を利用すると同一のDNSサーバーを使っていても別々のS3 Interface Endpoint経由でSnowflake内部ステージと通信してくれるようになります。

https://docs.snowflake.com/en/user-guide/private-internal-stages-aws#accessing-internal-stages-with-dedicated-interface-endpoints

### Streamlit in Snowflake へのプライベート接続

Streamlit in Snowflake へのプライベート接続ができるようになりました。

AWS PrivateLinkはGA

https://docs.snowflake.com/en/release-notes/streamlit-in-snowflake#october-31-2024-aws-privatelink-in-sis-general-availability

Azure Private Linkはパブリックプレビュー

https://docs.snowflake.com/en/release-notes/streamlit-in-snowflake#december-4-2024-azure-private-link-in-sis-preview

## アウトバウンドプライベート接続

SnowflakeからクラウドプラットフォームへAWS PrivateLinkなどを利用し閉域接続ができるようになります。

https://docs.snowflake.com/en/user-guide/private-connectivity-outbound

ドキュメントからは読み取れなかったのですが、クラスメソッドさんの記事を読むと、顧客側で作成したVPC Endpoint Serviceへ接続できるようですね。

https://dev.classmethod.jp/articles/aws-privatelink-snowpark-external-network-access-try-snowflakedb/

## トラブルシュート方法

英語版のドキュメントには通信のトラブルシュートに関して以下のページが追加されています。

https://docs.snowflake.com/en/user-guide/client-connectivity-troubleshooting/overview

クエリ結果が 100KB を超える場合、内部ステージからクエリが返ってくることが明言されていますね。

> At times, your client can fetch small query results but struggles with large ones because retrieving large results (over 100KB) requires clients to have full network access with certificate passthrough to all STAGE endpoints. You can frequently resolve these issues by allowing the URLs in the Snowflake allowlist in your proxy or firewall.

https://docs.snowflake.com/en/user-guide/client-connectivity-troubleshooting/common-issues#fetching-large-query-result-sets-failures

CURLコマンドで `HTTP/1.1 302 Found` が返ってくれば、通信できていることが書いてあります。接続確認ツールのSnowSQLをインストールすることが面倒な場合も、CURLコマンドなどで確認できます。

https://docs.snowflake.com/en/user-guide/client-connectivity-troubleshooting/mac-linux#if-you-don-t-have-a-proxy


## おわりに

Snowflakeのネットワークまわりについても、度重なるアップデートで痒い所に手が届いてきましたね。

ぜひ参考にしてください！


## 仲間募集

NTTデータ テクノロジーコンサルティング事業本部 では、以下の職種を募集しています。

<details><summary>1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)</summary>

クラウド／プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

</details>

<details><summary>2. データサイエンス領域（データサイエンティスト／データアナリスト）</summary>

データ活用／情報処理／AI／BI／統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX／デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

</details>

<details><summary>3.お客様のAI活用の成功を推進するAIサクセスマネージャー</summary>

DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata.jposting.net/u/job.phtml?job_code=804

</details>

<details><summary>4.DX／デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》</summary>
データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata.jposting.net/u/job.phtml?job_code=898

</details>


## ソリューション紹介

<details><summary> Trusted Data Foundationについて</summary><div>

～データ資産を分析活用するための環境をオールインワンで提供するソリューション～
https://www.nttdata.com/jp/ja/lineup/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ（Datalake+DWH+AI/BI）を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

</div></details>

<details><summary> TDFⓇ-AM（Trusted Data Foundation - Analytics Managed Service）について</summary><div>

～データ活用基盤の段階的な拡張支援（Quick Start) と保守運用のマネジメント（Analytics Managed）をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス～
https://www.nttdata.com/jp/ja/lineup/tdf_am/
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</div></details>


<details><summary> NTTデータとDatabricksについて </summary>
NTTデータは、お客様企業のデジタル変革・DXの成功に向けて、「databricks」のソリューションの提供に加え、情報活用戦略の立案から、AI技術の活用も含めたアナリティクス、分析基盤構築・運用、分析業務のアウトソースまで、ワンストップの支援を提供いたします。

https://www.nttdata.com/jp/ja/lineup/databricks/

</details>


<details><summary>NTTデータとTableauについて </summary><div>

ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://www.nttdata.com/jp/ja/lineup/tableau/

</div></details>


<details><summary>NTTデータとAlteryxについて </summary><div>
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。

Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://www.nttdata.com/jp/ja/lineup/alteryx/

</div></details>

<details><summary>NTTデータとDataRobotについて </summary><div>
DataRobotは、包括的なAIライフサイクルプラットフォームです。

NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://www.nttdata.com/jp/ja/lineup/datarobot/

</div></details>

<details><summary> NTTデータとInformaticaについて</summary><div>

データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://www.nttdata.com/jp/ja/lineup/informatica/

</div></details>

<details><summary>NTTデータとSnowflakeについて </summary><div>
NTTデータでは、Snowflake Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Snowflake」の導入・構築、および活用支援を開始しています。

NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Snowflakeは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://www.nttdata.com/jp/ja/lineup/snowflake/

</div></details>