PythonでSnowflakeネットワークポリシーを管理する

Pythonを使用してSnowflakeネットワークポリシーを管理し、Snowflakeサービスや内部ステージへのインバウンドアクセスを制御することができます。詳細については、 ネットワークポリシーを使用したネットワークトラフィックの制御 をご参照ください。

注釈

ALTER NETWORK POLICY は現在サポートされていません。

Snowflake Python APIs は、ネットワーク・ポリシーを2つのタイプに分けて表しています。

  • NetworkPolicy: ネットワークポリシーの名前、ネットワーク・ルール、許可およびブロックされた IP リストなどのプロパティを公開します。

  • NetworkPolicyResource: 対応する NetworkPolicy オブジェクトを取得し、ネットワークポリシーを削除するために使用できるメソッドを公開します。

前提条件

このトピックの例では、Snowflakeと接続するコードを追加して Root オブジェクトを作成し、そこからSnowflake Python Snowflake Python APIs を使用することを想定しています。

たとえば、以下のコードでは、構成ファイルで定義された接続パラメーターを使用してSnowflakeへの接続を作成します。

from snowflake.core import Root
from snowflake.snowpark import Session

session = Session.builder.config("connection_name", "myconnection").create()
root = Root(session)
Copy

出来上がった Session オブジェクトを使って、コードは API のタイプとメソッドを使う Root オブジェクトを作成します。詳細については、 Snowflake Python APIs によるSnowflakeへの接続 をご参照ください。

ネットワークポリシーの作成

ネットワークポリシーを作成するには、まず NetworkPolicy オブジェクトを作成して、 API Root オブジェクトから NetworkPolicyCollection オブジェクトを作成します。 NetworkPolicyCollection.create を使用して、新しいネットワークポリシーをSnowflakeに追加します。

次の例のコードは、指定された許可およびブロックされたネットワーク・ルールと IP アドレスを持つ my_network_policy という名前のネットワークポリシーを表す NetworkPolicy オブジェクトを作成します。

from snowflake.core.network_policy import NetworkPolicy

my_network_policy = NetworkPolicy(
  name = 'my_network_policy',
  allowed_network_rule_list = ['allowed_network_rule1','allowed_network_rule2'],
  blocked_network_rule_list = ['blocked_network_rule1','blocked_network_rule2'],
  allowed_ip_list=['8.8.8.8'],
  blocked_ip_list=['192.100.123.0'],
)

root.network_policies.create(my_network_policy)
Copy

ネットワークポリシーの詳細を取得する

NetworkPolicy オブジェクトを返す NetworkPolicyResource.fetch メソッドを呼び出すことで、ネットワークポリシーに関する情報を取得できます。

次の例のコードは、 my_network_policy という名前のネットワークポリシーの情報を取得します。

my_network_policy = root.network_policies["my_network_policy"].fetch()
print(my_network_policy.to_dict())
Copy

ネットワーク・ポリシーを一覧表示する

NetworkPolicy オブジェクトの PagedIter 反復子を返す NetworkPolicyCollection.iter メソッドを使用して、ネットワークポリシーを一覧表示することができます。

次の例のコードは、名前が my で始まるネットワーク・ポリシーを一覧表示し、それぞれの名前を表示します。

network_policy_iter = root.network_policies.iter(like="my%")  # returns a PagedIter[NetworkPolicy]
for network_policy_obj in network_policy_iter:
  print(network_policy_obj.name)
Copy

ネットワークポリシーのドロップ

NetworkPolicyResource オブジェクトでネットワークポリシーをドロップできます。

次の例のコードは、 my_network_policy ネットワークポリシー・リソース・オブジェクトを取得し、ネットワークポリシーをドロップします。

my_network_policy_res = root.network_policies["my_network_policy"]
my_network_policy_res.drop()
Copy