こんにちは!日比です!
SnowflakeのNETWORK POLICYって知っていますか?
私も知識としては知っていましたが、今まで触ったことがなく、
案件で必要になったので検証してみました。
本記事でわかること
- NETWORK POLICYの概要
NETWORK POLICYとは
まずはじめに、NETWORK POLICYとは?から説明していきます。
NETWORK POLICYとは、ユーザのIPアドレスに基づいて、アクセスを制御できる機能になります。
Snowflakeでは、デフォルト全ユーザのアクセスが許可されています。
そのため、アクセスできる範囲を限定したい場合に、本機能を利用することになります。
どのEditionでも利用できる点がすごいですよね。
設定概要
設定概要は下記の通りです。
検証
今回の検証概要は下記のとおりになります。
接続元のIPアドレスを設定したポリシーと、
接続元とは異なるIPアドレスを設定したポリシーを用意して確認を行いました。
設定するIPの確認
AWSのPrivate Linkのように、プライベートにアクセスする場合をのぞいて、
グローバルIPを指定する必要があります。
調べ方は以下の2つがあります。
①CURRENT_IP_ADDRESS関数を利用する方法
②LOGIN_HISTORY ビューの CLIENT_IPを確認する方法
それぞれの確認例を以下に示します。
①CURRENT_IP_ADDRESS関数を利用する方法
>select current_ip_address();
+----------------------+
| CURRENT_IP_ADDRESS() |
|----------------------|
| w.x.y.z |
+----------------------+
1 Row(s) produced. Time Elapsed: 0.113s
②LOGIN_HISTORY ビューの CLIENT_IPを確認する方法
>select user_name,client_ip from snowflake.account_usage.login_history
where user_name='XXXXXX' and event_timestamp >= '2024-05-30 00:00:00';
+-----------+----------------+
| USER_NAME | CLIENT_IP |
|-----------+----------------|
| XXXXXX | w.x.y.z |
+-----------+----------------+
1 Row(s) produced. Time Elapsed: 3.389s
動作確認
今回は影響を考慮して、テストユーザに対して、NETWORK POLICYの設定をしてみました。
※実際の案件でも、まずはユーザ単位に設定を行い挙動が正しいかを確認し、
問題がなければアカウントレベルの設定へ変更することをおすすめします。
■NETWORK POLICYの設定
>use role securityadmin;
※作成にはSECURITYADMINが必要
+----------------------------------------+
| status |
|----------------------------------------|
| ステートメントは正常に実行されました。 |
+----------------------------------------+
1 Row(s) produced. Time Elapsed: 0.963s
>create network policy nwpl_test allowed_ip_list=('w.x.y.0/24');
+-------------------------------------------------+
| status |
|-------------------------------------------------|
| ネットワークポリシー NWPL_TEST が作成されます。 |
+-------------------------------------------------+
1 Row(s) produced. Time Elapsed: 0.171s
>describe NETWORK POLICY NWPL_TEST;
+-----------------+-----------------+
| name | value |
|-----------------+-----------------|
| ALLOWED_IP_LIST | w.x.y.0/24 |
+-----------------+-----------------+
1 Row(s) produced. Time Elapsed: 0.125s
>create network policy nwpl_test2 allowed_ip_list=('a.b.c.0/24');
+--------------------------------------------------+
| status |
|--------------------------------------------------|
| ネットワークポリシー NWPL_TEST2 が作成されます。 |
+--------------------------------------------------+
1 Row(s) produced. Time Elapsed: 0.189s
>describe NETWORK POLICY NWPL_TEST2;
+-----------------+----------------+
| name | value |
|-----------------+----------------|
| ALLOWED_IP_LIST | a.b.c.0/24 |
+-----------------+----------------+
1 Row(s) produced. Time Elapsed: 0.129s
■ユーザに設定
>alter user testuser_nwpl_allow set network_policy=nwpl_test;
+----------------------------------------+
| status |
|----------------------------------------|
| ステートメントは正常に実行されました。 |
+----------------------------------------+
1 Row(s) produced. Time Elapsed: 0.165s
>alter user testuser_nwpl_deny set network_policy=nwpl_test2;
+----------------------------------------+
| status |
|----------------------------------------|
| ステートメントは正常に実行されました。 |
+----------------------------------------+
1 Row(s) produced. Time Elapsed: 0.172s
では、接続してみましょう。
testuser_nwpl_allowユーザ、testuser_nwpl_denyユーザのいずれも、
w.x.y.0/24のネットワークから接続しています。
■接続元のIPが設定されている場合
testuser_nwpl_allowユーザで接続
>snowsql -u testuser_nwpl_allow ...以下略(-uはユーザ名を指定)
* SnowSQL * v1.2.32
Type SQL statements or !help
>
→ポリシーで定義された範囲のIPであるため接続が可能
■接続元と異なるIPが定義されている場合
testuser_nwpl_denyユーザで接続
>snowsql -u testuser_nwpl_deny ...以下略(-uはユーザ名を指定)
250001 (08001): Failed to connect to DB: x.yyy.aws.snowflakecomputing.com:443. Incoming request with IP/Token w.x.y.z is not allowed to access Snowflake. Contact your account administrator. For more information about this error, go to https://community.snowflake.com/s/ip-xxxxxxxxxxxx-is-not-allowed-to-access.
If the error message is unclear, enable logging using -o log_level=DEBUG and see the log to find out the cause. Contact support for further help.
Goodbye!
→nwpl_test2はa.b.c.0/24のみを許可しているため接続ができない
まとめ
いかがでしたでしょうか?
アクセス元が分かるようなシステムで、セキュリティを高めるために、
ネットワークポリシーは使えそうですね。
本検証がみなさまのお役に立てれば幸いです。
コメント