Snowflake へのアクセス元 IP アドレスをネットワークポリシーで制限する

記事タイトルとURLをコピーする

クラウドインテグレーション部の宮本です。

今回は Snowflake へのアクセス元 IP アドレス制限を試してみます。Snowflake のアカウント作成後はデフォルトでインターネット経由でどこからでもアクセス出来る(パスワード認証のみ)状態ですが、アクセス元 IP アドレスを制限することで、手軽にセキュリティ向上をすることが出来ます。

概要

今回の概要は以下図の通りです。社内VPNサーバー経由のアクセスを許可、クライアントからの直接アクセスを拒否するよう設定します。

f:id:swx-miyamoto:20200831172106p:plain
イメージ図

  1. Snowflake のネットワークポリシー を作成し、ホワイトリストでアクセスを許可する IP アドレスのリストを設定します。
  2. ネットワークポリシーをユーザーに設定します。ネットワークポリシーには、アカウントレベルのネットワークポリシーユーザーレベルのネットワークポリシー がありますが、アカウントレベルにしてしまうと、他のユーザーにも影響が出てしまうので、今回は後者を使用します。
  3. ホワイトリストの IP アドレスからアクセスが可能なこと、ホワイトリストの IP アドレスからアクセスが出来ないことを確認します。

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

今回は Snowsql コマンドで作業を実施します。事前にこちら を参考にインストールしてください。(Webコンソールからでも作業は可能です。)

ログイン後、CREATE NETWORK POLICY コマンドを実行します。ネットワークポリシーの作成を行うことができるロールを使用してください。ここではデフォルトで作成されている ACCOUNTADMIN を使用します。

TMIYAMOTO#(no warehouse)@(no database).(no schema)>use ROLE ACCOUNTADMIN;
+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
1 Row(s) produced. Time Elapsed: 0.510s
TMIYAMOTO#(no warehouse)@(no database).(no schema)>CREATE NETWORK POLICY NP_ACCESS_FROM_VPN_ONLY
                                                   ALLOWED_IP_LIST = ('203.0.113.10/32');

+----------------------------------------------------+
| status                                             |
|----------------------------------------------------|
| Network policy NP_ACCESS_FROM_VPN_ONLY is created. |
+----------------------------------------------------+
1 Row(s) produced. Time Elapsed: 0.148s

許可する IP アドレスのリストは CIDR 形式で指定出来ます。複数指定する場合はカンマ区切りで指定します。

ネットワークポリシーをユーザーに設定

ALTER USER で、ネットワークポリシーをユーザーに設定します。先ほど作成した NP_ACCESS_FROM_VPN_ONLY をユーザー TMIYAMOTO (現在作業に使っているユーザー) に設定します。

TMIYAMOTO#(no warehouse)@(no database).(no schema)>ALTER USER TMIYAMOTO SET NETWORK_POLICY = NP_ACCESS_FROM_VPN_ONLY;

090302 (22023): Network policy NP_ACCESS_FROM_VPN_ONLY cannot be activated. Requestor IP address, 198.51.100.10, must be included in the allowed_ip_list. To add the specific IP, execute command "ALTER NETWORK POLICY NP_ACCESS_FROM_VPN_ONLY SET ALLOWED_IP_LIST=('203.0.113.10/32','198.51.100.10');". Similarly, a CIDR block of IP addresses can be added instead of the specific IP address.

おや、エラーが発生しましたね。どうやら現在のアクセス元 IP アドレスがホワイトリストに入っていない為、変更が失敗したようです。親切設計ですね〜。VPNに接続(アクセス元がホワイトリスト内のIP アドレスになる)してから再実行します。

TMIYAMOTO#(no warehouse)@(no database).(no schema)>ALTER USER TMIYAMOTO SET NETWORK_POLICY = NP_ACCESS_FROM_VPN_ONLY;

+----------------------------------+
| status                           |
|----------------------------------|
| Statement executed successfully. |
+----------------------------------+
1 Row(s) produced. Time Elapsed: 21.495s

うまく行きました!

動作確認

一旦ログアウトし、ホワイトリスト内外の IP アドレスからログイン可否を確認します。

ホワイトリストの IP アドレスからのログイン (ログインできる想定)

t3yamoto@t3mba>snowsql -c swx
* SnowSQL * v1.2.9
Type SQL statements or !help
TMIYAMOTO#(no warehouse)@(no database).(no schema)>

ホワイトリスト内の IP アドレスからはログイン出来ることが確認できました。

ホワイトリストの IP アドレスからのログイン (ログインできない想定)

t3yamoto@t3mba>snowsql -c swx
250001 (08001): Failed to connect to DB: xxxxxxxxx.ap-northeast-1.aws.snowflakecomputing.com:443. IP 198.51.100.10 is not allowed to access Snowflake.  Contact your local security administrator.
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!

ホワイトリスト外の IP アドレスからはログイン出来ないことが確認できました。

まとめ

簡単な作業でアクセス元 IP アドレスを制限することが出来ました!よりセキュアな接続をしたい場合は AWS PrivateLink を介した、Snowflakeと他の VPCs 間におけるプライベート通信 (Buisiness Critical(またはそれ以上) のプランでのみ利用可能) もご確認ください。