SnowflakeのNetwork Rulesを使ってNetwork Policyを整理してみた。

# SnowflakeのNetwork Rulesを使ってNetwork Policyを整理してみた。
2023年9月中旬のSnowflakeの[7.33リリース](https://docs.snowflake.com/ja/release-notes/2023/7_33)で[Network Rules](https://docs.snowflake.com/ja/user-guide/network-rules)がパブリックプレビューされました！実は私が密かにずっと待っていた機能です。
今回は、**Network Rulesを使ってNetwork Policyを整理する方法**について紹介したいと思います。

### Network Rulesとは？
複数の拠点やサービスからのSnowflakeへのアクセスがあるため、Snowflakeアカウントのネットワークポリシーが以下のように大量のIPアドレスの羅列になってしまっている人達って結構いませんか？
```
AA.BB.CC.DD/32, EE.FF.GG.HH/30, II.JJ.KK.LL/29, MM.NN.OO.PP/32, QQ.RR.SS.TT/32,
UU.VV.WW.XX/32, YY.ZZ.AA.BB/30, CC.DD.EE.FF/32, GG.HH.II.JJ/32, KK.LL.MM.NN/32,
OO.PP.QQ.RR/29, SS.TT.UU.VV/32, WW.XX.YY.ZZ/32, AA.BB.CC.DD/30, EE.FF.GG.HH/29,
II.JJ.KK.LL/32, MM.NN.OO.PP/32, QQ.RR.SS.TT/30, UU.VV.WW.XX/29, YY.ZZ.AA.BB/32,
CC.DD.EE.FF/32, GG.HH.II.JJ/32, KK.LL.MM.NN/32, OO.PP.QQ.RR/30, SS.TT.UU.VV/29
```
それで別のExcelシートでそれぞれのIPアドレスと拠点やサービスの対応を管理したり、コメント欄に全部羅列したり・・・。
```
社内システム&社内セキュリティ&開発用AWS&オンプレ拠点A&オンプレ拠点B&Databricks&IDMC (2023/4/2更新 井上)
```
そういう場合にNetwork Rulesを使えば、拠点やサービス毎にIPアドレスグループを管理することができるようになります！


# 設定方法
環境作成からネットワークポリシー設定までのクエリを説明していきます。

## 1.環境作成
Network policyはアカウントオブジェクトである一方で、**Network Rulesはスキーマオブジェクト**です。なので、[Network Rulesを作成するデータベースおよびスキーマを作成](https://docs.snowflake.com/ja/user-guide/network-rules#creating-a-network-rule)する必要があります。ついでに、専用ロールも作っておきます。
```SQL:SQL
--Network Rules設定用のロールを作成
USE ROLE securityadmin;
CREATE ROLE network_admin;
--Network Rules設定用のデータベースを作成
USE ROLE syadmin;
CREATE DATABASE securitydb;
--Network Rules設定用のスキーマを作成
USE DATABASE securitydb;
CREATE SCHEMA securitydb.networkrules;
--ロールに権限を付与
USE ROLE securityadmin;
GRANT USAGE ON DATABASE securitydb TO ROLE network_admin;
GRANT USAGE ON SCHEMA securitydb.networkrules TO ROLE network_admin;
GRANT CREATE NETWORK RULE ON SCHEMA securitydb.networkrules TO ROLE network_admin;
GRANT ROLE network_admin TO ROLE securityadmin;
--ロールの切替
USE ROLE network_admin;
```
## 2.Network Rulesの作成
Network Rulesを作成します。今回は特定のIPアドレスからSnowflakeへの接続要件があるものと考え、そのようにオプションを指定します。
実際には外部からSnowflakeへの通信/Snowflakeから外部への通信/内部ステージへの通信を制御したり、IPアドレスではなくVPCエンドポイント名を指定する等の細かな設定を行うことができるので、是非[ドキュメント](https://docs.snowflake.com/ja/sql-reference/sql/create-network-rule#required-parameters)を確認してみてください。
```SQL:SQL
CREATE OR REPLACE NETWORK RULE internal_system
  MODE = INGRESS
  TYPE = IPV4
  VALUE_LIST = ('AA.BB.CC.DD/32, EE.FF.GG.HH/30, II.JJ.KK.LL/29, MM.NN.OO.PP/32');
CREATE OR REPLACE NETWORK RULE internal_security
  MODE = INGRESS
  TYPE = IPV4
  VALUE_LIST = ('QQ.RR.SS.TT/32, UU.VV.WW.XX/32, YY.ZZ.AA.BB/30, CC.DD.EE.FF/32, GG.HH.II.JJ/32');
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/d43cd826-22a8-f35d-2702-333d5996ffdb.png)

## 3.Network Policyの設定
[こちら](https://docs.snowflake.com/ja/user-guide/network-policies#adding-network-rules-to-a-network-policy)を参考に、Network Rulesを利用したNetwork Policyを作成します。現時点では、GUIで設定できないため、クエリを実行する必要があります。
```SQL:SQL
USE ROLE accountadmin;
CREATE OR REPLACE NETWORK POLICY allowlist ALLOWED_NETWORK_RULE_LIST = ( 'internal_system', 'internal_security' );
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/f474cb7d-2f7c-69eb-9011-8cda7972100f.png)

## 4.Network Policyの有効化
Network Policyの有効化はGUIでも実行できるので、GUIから設定していきます。Snowsight上の**管理者-セキュリティ-ネットワークポリシー**を開くと、先ほど作成したNetwork Policyが記載されています。現状だと、実際に設定されているリストは表示されないようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/61ffa16a-20f3-946e-a899-192f787201c4.png)
通常時と同じようにネットワークポリシーをアクティブ化すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/1bd6ae57-83e2-de87-70cc-4461ed6c5481.png)
無事、ネットワークポリシーをアクティブ化できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/e60fa2cc-218f-6637-7a2b-6e8953d9d0e8.png)
外部からアクセスすると、想定通りネットワークが遮断されていることを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/99ed814f-a92a-4e56-5d59-25c16d9c8ee1.png)

## 5.Network Policyの設定内容を確認
#### 1. Network Policyに設定されているNetwork Rulesを確認する
以下のクエリで確認できます。
```SQL
desc network policy allowlist;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/0af75fc7-85d2-4519-0670-25561e144701.png)
#### 2. Network Rulesに設定されているIPアドレスを確認する。
以下のクエリで確認できます。
```SQL
desc network rule internal_security;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/82674b66-b8ef-a4c9-af21-3adf77801a12.png)

## 6.Network Policyの設定内容を変更
Network Policyに紐付けられているNetwork RulesをCREATE OR REPLACEしようとすると、
```SQL
CREATE OR REPLACE NETWORK RULE internal_system
  MODE = INGRESS
  TYPE = IPV4
  VALUE_LIST = ('AA.BB.CC.DD/32, EE.FF.GG.HH/30, II.JJ.KK.LL/29, MM.NN.OO.PP/32');
```
エラーが発生して、設定内容を変更できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/40ae5fb6-bb33-2345-0cea-aa942fc6a6e3.png)
そんなときは、ALTERして値を変更しましょう。
```SQL
ALTER NETWORK RULE internal_system SET VALUES_LIST = ('AA.BB.CC.DD/32, EE.FF.GG.HH/30, II.JJ.KK.LL/29, MM.NN.OO.QQ/32');
```
これで設定を変更できますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3342101/be11b681-948c-d5c7-a06d-dd6c9eaac253.png)


# まとめ
今回は、Network Rulesを使ってNetwork Policyを整理してみました。
これまで複数の拠点やサービスからの通信要件をひとまとめにしていましたが、今後は管理しやすくなりますね。
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://enterprise-aiiot.nttdata.com/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://enterprise-aiiot.nttdata.com/service/tdf/tdf_am
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

</div></details>


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

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

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

</div></details>


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

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

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

https://enterprise-aiiot.nttdata.com/service/alteryx

</div></details>

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

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

https://enterprise-aiiot.nttdata.com/service/datarobot

</div></details>

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

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

</div></details>

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

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

https://enterprise-aiiot.nttdata.com/service/snowflake

</div></details>