Network Rulesは、ネットワーク識別子(IPアドレス、ホスト名、Private Endpoint ID等)を 再利用可能なスキーマレベルオブジェクトとして管理するSnowflakeの機能です。 従来のNetwork PolicyではIPアドレスリストをポリシーに直接記述していましたが、 Network Rulesを使うことで識別子を独立したオブジェクトとして定義し、複数のNetwork Policyで共有したり、 IPアドレス以外の識別子でもネットワーク制御が可能になります。
| TYPE | VALUE_LISTの形式 | 制御方向 | 用途 | Edition要件 |
|---|---|---|---|---|
| IPV4 | IPv4アドレス / CIDR | Ingress(受信) | ユーザーからSnowflakeへのアクセス制御 | 全Edition |
| HOST_PORT | ホスト名:ポート | Egress(送信) | Snowflakeから外部APIへのアクセス許可 | 全Edition |
| PRIVATE_HOST_PORT | Private Endpoint ID | Egress(送信) | PrivateLink経由の外向き通信制御 | Business Critical以上 |
-- IPV4タイプ:社内ネットワークからのアクセスを許可
CREATE NETWORK RULE security.office_network_rule
TYPE = IPV4
VALUE_LIST = ('203.0.113.0/24', '198.51.100.0/24')
MODE = INGRESS
COMMENT = 'オフィスネットワークのIPアドレス範囲';
-- IPV4タイプ:VPNゲートウェイからのアクセスを許可
CREATE NETWORK RULE security.vpn_network_rule
TYPE = IPV4
VALUE_LIST = ('10.0.1.100', '10.0.1.101')
MODE = INGRESS
COMMENT = 'VPNゲートウェイのIPアドレス';
-- HOST_PORTタイプ:外部APIへのアクセスを許可
CREATE NETWORK RULE security.external_api_rule
TYPE = HOST_PORT
VALUE_LIST = ('api.example.com:443', 'webhook.example.com:443')
MODE = EGRESS
COMMENT = 'External Function用の外部APIエンドポイント';
-- PRIVATE_HOST_PORTタイプ:PrivateLink経由のEgress
CREATE NETWORK RULE security.private_api_rule
TYPE = PRIVATE_HOST_PORT
VALUE_LIST = ('com.amazonaws.vpce.us-east-1.vpce-svc-xxxxxxxxx')
MODE = EGRESS
COMMENT = 'PrivateLink経由の内部APIアクセス';Network Rulesは単独では機能しません。Network Policyに紐づけることで、実際のアクセス制御が有効になります。 Network PolicyのALLOWED_NETWORK_RULE_LISTとBLOCKED_NETWORK_RULE_LISTにNetwork Ruleを指定します。
-- Network Ruleを使ったNetwork Policyの作成
CREATE NETWORK POLICY corporate_access_policy
ALLOWED_NETWORK_RULE_LIST = (
'security.office_network_rule',
'security.vpn_network_rule'
)
BLOCKED_NETWORK_RULE_LIST = ()
COMMENT = 'オフィスとVPNからのアクセスのみ許可';
-- アカウントレベルに適用
ALTER ACCOUNT SET NETWORK_POLICY = corporate_access_policy;
-- 特定ユーザーに適用(アカウントレベルより優先)
ALTER USER admin_user SET NETWORK_POLICY = corporate_access_policy;
-- Security Integrationに適用(OAuth/SAML接続の制御)
ALTER SECURITY INTEGRATION my_oauth_integration
SET NETWORK_POLICY = corporate_access_policy;-- 従来のNetwork Policy(IPアドレスを直接指定)
CREATE NETWORK POLICY legacy_policy
ALLOWED_IP_LIST = ('203.0.113.0/24', '198.51.100.0/24')
BLOCKED_IP_LIST = ('203.0.113.50');
-- 新しいNetwork Policy(Network Ruleを参照)
CREATE NETWORK RULE security.corp_ips
TYPE = IPV4
VALUE_LIST = ('203.0.113.0/24', '198.51.100.0/24')
MODE = INGRESS;
CREATE NETWORK RULE security.blocked_ips
TYPE = IPV4
VALUE_LIST = ('203.0.113.50')
MODE = INGRESS;
CREATE NETWORK POLICY new_policy
ALLOWED_NETWORK_RULE_LIST = ('security.corp_ips')
BLOCKED_NETWORK_RULE_LIST = ('security.blocked_ips');
-- 従来のALLOWED_IP_LISTとALLOWED_NETWORK_RULE_LISTは
-- 同一Network Policy内で併用可能(OR条件で評価)HOST_PORTタイプのNetwork Ruleは、External Access Integration(外部ネットワークアクセス統合)と組み合わせて、 UDF/ストアドプロシージャ/Snowpark Container Servicesから外部APIへのアクセスを制御します。
-- 外部APIアクセス用のNetwork Rule
CREATE NETWORK RULE security.openai_api_rule
TYPE = HOST_PORT
VALUE_LIST = ('api.openai.com:443')
MODE = EGRESS;
-- External Access Integrationの作成
CREATE EXTERNAL ACCESS INTEGRATION openai_access
ALLOWED_NETWORK_RULES = ('security.openai_api_rule')
ENABLED = TRUE;
-- UDFでExternal Access Integrationを使用
CREATE OR REPLACE FUNCTION call_openai(prompt VARCHAR)
RETURNS VARCHAR
LANGUAGE PYTHON
RUNTIME_VERSION = '3.10'
EXTERNAL_ACCESS_INTEGRATIONS = (openai_access)
PACKAGES = ('requests')
HANDLER = 'handler'
AS $
import requests
def handler(prompt):
# api.openai.com:443 へのアクセスのみ許可される
response = requests.post(
'https://api.openai.com/v1/chat/completions',
headers={'Authorization': 'Bearer <token>'},
json={'model': 'gpt-4', 'messages': [{'role': 'user', 'content': prompt}]}
)
return response.json()['choices'][0]['message']['content']
$;-- Network Ruleの一覧表示
SHOW NETWORK RULES IN SCHEMA security;
-- Network Ruleの詳細確認
DESCRIBE NETWORK RULE security.office_network_rule;
-- VALUE_LISTの更新
ALTER NETWORK RULE security.office_network_rule
SET VALUE_LIST = ('203.0.113.0/24', '198.51.100.0/24', '192.0.2.0/24');
-- コメントの更新
ALTER NETWORK RULE security.office_network_rule
SET COMMENT = '東京・大阪・福岡オフィスのIPアドレス';
-- Network Ruleの削除
DROP NETWORK RULE security.office_network_rule;
-- 注意: Network Policyで参照中のNetwork Ruleは削除できない| 適用レベル | 優先度 | 説明 |
|---|---|---|
| Security Integration | 最優先 | OAuth/SAML接続に対して適用 |
| User | 高 | 特定ユーザーへの適用(アカウントレベルより優先) |
| Account | 低 | アカウント全体に適用(個別設定がない場合に使用) |
BLOCKED_NETWORK_RULE_LIST(またはBLOCKED_IP_LIST)はALLOWED_NETWORK_RULE_LIST(またはALLOWED_IP_LIST)よりも常に優先されます。 あるIPアドレスが許可リストとブロックリストの両方に含まれる場合、ブロックされます。
-- Network Ruleの作成権限
GRANT CREATE NETWORK RULE ON SCHEMA security TO ROLE network_admin;
-- Network Policyの作成権限
GRANT CREATE NETWORK POLICY ON ACCOUNT TO ROLE network_admin;
-- Network Policyのアカウントレベル適用権限
GRANT ATTACH POLICY ON ACCOUNT TO ROLE network_admin;
-- ユーザーレベルでの適用は対象ユーザーへのOWNERSHIPまたは
-- MANAGE GRANTS権限が必要Security & Governance
問題 1
SnowflakeのUDF内から外部REST API(api.example.com:443)を呼び出す必要がある。この外部アクセスを許可するために最初に作成すべきオブジェクトはどれか。
正解: B
Snowflakeからの外向き通信(Egress)を許可するには、TYPE = HOST_PORTのNetwork Ruleを作成してホスト名とポートを指定します。IPV4タイプはIngress(受信)制御用で、ユーザーからSnowflakeへの接続に使用します。Network PolicyのALLOWED_IP_LISTもIngress用です。作成したHOST_PORT Network RuleはExternal Access Integrationに紐づけ、UDFのEXTERNAL_ACCESS_INTEGRATIONSパラメータで参照します。
Network RulesとNetwork Policyの違いは何ですか?
Network Policyは従来からあるIP許可/ブロックリスト機能で、ALLOWED_IP_LISTとBLOCKED_IP_LISTにIPアドレスを直接指定します。Network Rulesはネットワーク識別子(IP、ホスト名、Private Endpoint ID等)を再利用可能なオブジェクトとしてスキーマレベルで管理し、Network Policyに紐づけて使います。Network Rulesの導入により、同じIPリストを複数のNetwork Policyで共有したり、IPアドレス以外の識別子(ホスト名、Private Link ID)でも制御できるようになりました。
Network RulesのTYPE = HOST_PORTはどのような場面で使いますか?
HOST_PORTタイプはSnowflakeからの外向き通信(External Network Access)を制御する際に使います。例えばExternal FunctionやSnowpark Container Servicesから外部API(api.example.com:443等)にアクセスする場合、許可するホスト名とポートをNetwork Ruleで定義します。内向きの接続制御(ユーザーからSnowflakeへのアクセス)にはIPV4タイプを使用します。
Network Rulesは全Editionで利用できますか?
Network Rules自体は全Editionで利用可能です。ただしNetwork RulesをNetwork Policyに紐づけてアカウントレベルまたはユーザーレベルで適用する機能は全Editionで使えますが、PRIVATE_HOST_PORTタイプ(PrivateLink接続のEgress制御)はBusiness Critical Edition以上が必要です。IPV4とHOST_PORTタイプは全Editionで利用できます。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...