クラウドインテグレーション部の宮本です。
今回は Snowflake へのアクセス元 IP アドレス制限を試してみます。Snowflake のアカウント作成後はデフォルトでインターネット経由でどこからでもアクセス出来る(パスワード認証のみ)状態ですが、アクセス元 IP アドレスを制限することで、手軽にセキュリティ向上をすることが出来ます。
概要
今回の概要は以下図の通りです。社内VPNサーバー経由のアクセスを許可、クライアントからの直接アクセスを拒否するよう設定します。
- Snowflake のネットワークポリシー を作成し、ホワイトリストでアクセスを許可する IP アドレスのリストを設定します。
- ネットワークポリシーをユーザーに設定します。ネットワークポリシーには、アカウントレベルのネットワークポリシー と ユーザーレベルのネットワークポリシー がありますが、アカウントレベルにしてしまうと、他のユーザーにも影響が出てしまうので、今回は後者を使用します。
- ホワイトリスト内の 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(またはそれ以上) のプランでのみ利用可能) もご確認ください。