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)
出来上がった 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)
ネットワークポリシーの詳細を取得する¶
NetworkPolicy
オブジェクトを返す NetworkPolicyResource.fetch
メソッドを呼び出すことで、ネットワークポリシーに関する情報を取得できます。
次の例のコードは、 my_network_policy
という名前のネットワークポリシーの情報を取得します。
my_network_policy = root.network_policies["my_network_policy"].fetch()
print(my_network_policy.to_dict())
ネットワーク・ポリシーを一覧表示する¶
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)
ネットワークポリシーのドロップ¶
NetworkPolicyResource
オブジェクトでネットワークポリシーをドロップできます。
次の例のコードは、 my_network_policy
ネットワークポリシー・リソース・オブジェクトを取得し、ネットワークポリシーをドロップします。
my_network_policy_res = root.network_policies["my_network_policy"]
my_network_policy_res.drop()