Snowflakeのロールに関する諸々の情報を一撃でレポート出力してくれるOSSツール『sfgrantreport』
先日、Snowflakeのロール設定管理、とりわけRBAC(ロールベースのアクセス設定管理)に関する便利ツールとして(個人的には)とても有用だなと思ったツールとしてSnowflake Labsが公開しているOSSツール『Roleout』を触ってみました。
設定・実行はこのRoleoutで出来る、じゃあ実行した内容、運用しているSnowflake環境のロールに関する設定諸々を分かりやすく表示・出力するようなツールって無いのかな...?と思ったらありました!Roleoutと同じくSnowflake Labsが公開している『sfgrantreport』というツールがまさにそれです。
本記事では、先日公開した記事で実践・紹介した(Roleoutを使って生成されたSQLで実行した)環境に対してこのsfgrantreportを実行してみた内容を紹介致します。
sfgrantreportのインストール
sfgrantreportを導入するにはsfgrantreportを含めていくつかの環境設定・導入が必要です。今回はmacOS(Apple M4)に導入する前提で手順を進めていきます。
% sw_vers
ProductName: macOS
ProductVersion: 15.6.1
BuildVersion: 24G90
% uname -m
arm64
SnowSQLのインストール
まずはSnowSQL。ツールがデータベースの情報を取得する際に間接的に利用します。そして今回はキーペア認証を利用してこのツールを導入・利用します。
下記ドキュメントに倣い、秘密鍵と公開鍵をそれぞれ作成。
% ll rsa*
-rw-r--r--@ 1 xxxxxxxxx staff 451 Sep xx xx:xx rsa_key.pub
-rw-------@ 1 xxxxxxxxx staff 1862 Sep xx xx:xx rsa_key.p8
Snowflakeにおける対象ログインユーザーに対し、上記設定ファイルの「公開鍵」の内容を設定しておいてください。
ALTER USER example_user SET RSA_PUBLIC_KEY='XXxxxXXxxXxx...';
コマンドのインストールと各種設定を以下の流れで行います。
## brewコマンドによるインストール
% brew install --cask snowflake-snowsql
## パス指定などを追加
% vi ~/.zshrc
alias snowsql=/Applications/SnowSQL.app/Contents/MacOS/snowsql
export PATH="/Applications/SnowSQL.app/Contents/MacOS:$PATH"
## 設定反映
% source ~/.zshrc
## 導入バージョン確認.
% snowsql -v
Version: 1.4.5
## 関連設定ファイルに設定追記.
% vi ~/.snowsql/config
----
[connections.shinyaa31-keypair]
accountname = [接続対象のSnowflakeアカウント名]
username = [接続対象のSnowflake環境に対する接続ユーザー名]
private_key_path = [上記手順で作成した秘密鍵ファイルのフルパスを指定]
----
## コマンド経由でログイン実施。秘密鍵作成時のパスワードを入力してSnowflake環境にログインできていれば成功
% snowsql -c shinyaa31-keypair
Private Key Passphrase:****************
* SnowSQL * v1.4.5
Type SQL statements or !help
>SELECT CURRENT_REGION();
+--------------------+
| CURRENT_REGION() |
|--------------------|
| AWS_AP_NORTHEAST_1 |
+--------------------+
1 Row(s) produced. Time Elapsed: 0.158s
GraphVizのインストール
ツールにおける可視化部分などを受け持つライブラリとして「GraphViz」というツールも合わせて導入します。
## インストール.
% brew install graphviz
## 導入後のバージョン確認.
% brew info graphviz
==> graphviz: stable 14.0.0 (bottled), HEAD
Graph visualization software from AT&T and Bell Labs
% dot -V
% dot - graphviz version 14.0.0 (20250921.2048)
ツール本体(SFGrantReport)のインストール
公式ページの案内に従い関連ファイルをダウンロード。今回はMac環境ということでSFGrantReport.osx.2022.4.22.0.zip
を入手。(若干古い日付となっていますが2025年10月時点ではこれが最新版のようです)
アプリケーションの実行を停止する隔離属性を削除するためにシェルで次のコマンドを実行します。
% xattr -d com.apple.quarantine SFGrantReport.*.zip
そして解凍。展開されたファイルの構成は以下のようになっています。
% ll SFGrantReport.osx.2022.4.22.0
total 133200
drwx------+ 92 XXXXXXXXX staff 2944 Sep 30 19:36 ..
drwx------@ 12 XXXXXXXXX staff 384 Sep 30 19:36 .
-rwxrwxr-x 1 XXXXXXXXX staff 57403547 Apr 23 2022 SFGrantReport
-rw-rw-r-- 1 XXXXXXXXX staff 6868376 Mar 18 2022 libcoreclr.dylib
-rw-rw-r-- 1 XXXXXXXXX staff 2569376 Mar 18 2022 libclrjit.dylib
-rw-rw-r-- 1 XXXXXXXXX staff 962280 Mar 18 2022 libSystem.IO.Compression.Native.dylib
-rw-rw-r-- 1 XXXXXXXXX staff 86752 Mar 18 2022 libSystem.Native.dylib
-rw-rw-r-- 1 XXXXXXXXX staff 36184 Mar 18 2022 libSystem.Net.Security.Native.dylib
-rw-rw-r-- 1 XXXXXXXXX staff 68176 Mar 18 2022 libSystem.Security.Cryptography.Native.Apple.dylib
-rw-rw-r-- 1 XXXXXXXXX staff 171744 Mar 18 2022 libSystem.Security.Cryptography.Native.OpenSsl.dylib
-rw-rw-r-- 1 XXXXXXXXX staff 14176 Sep 2 2021 Readme.md
-rw-rw-r-- 1 XXXXXXXXX staff 3624 Jan 24 2021 NLog.config
実行ファイルはSFGrantReport
です。--help
オプションで実行させてみてヘルプが表示されていればOKです。
% ./SFGrantReport --help
Snowflake Grant Report Version 2022.4.22.0
SFGrantReport 2022.4.22.0
Copyright © 2020-2021
-c, --connection Required. Name of the SnowSQL connection entry that will be used to connect to Snowflake.
-i, --input-folder Required. Folder where the files from ACCOUNT_USAGE share in SNOWFLAKE database are stored.
-o, --output-folder Output folder where to create report.
-l, --left-folder-compare Required. Left folder containing report files to compare against.
-r, --right-folder-compare Required. Right folder containing report files to compare with.
-d, --delete-previous-report-output If true, delete any results of previous processing.
-s, --sequential-processing If true, process certain items during extraction and conversion sequentially.
--help Display this help screen.
--version Display version information.
Application execution took 00:00:00.9272982 (927 ms)
sfgrantreportでレポート出力実行
SnowSQLの接続設定、及びレポートの出力先指定のオプションを添えて実行。実行がうまく行けば適宜データベースへの接続認証を求められる形で処理が進行していきます。
% ./SFGrantReport -c shinyaa31-keypair -o ./Documents/MyAwesomeReport
処理終了後の対象フォルダ一覧。以下の様に大量のxlsxファイル等が生成されています。ファイル名にALL
と命名されているもの(下記キャプチャだと上の方にある)xlsxファイルが各個別出力内容をまとめたもの、(下記キャプチャだと下の方にある)HTMLファイルが、情報を可視化したものを横断的に見ることの出来るレポートとなっています。
HTMLファイルを見てみます。対象データベース配下に存在するロール全てに関する情報(の関係性を可視化した)の一覧リンクが表示されました。今回の(上述紹介したエントリで実践した)手順で作成されたロールのリンクをクリック。
今回利用したアカウントではACCOUNTADMINでざっくりやってしまっていた内容が多く、ACCOUNTADMINロールから線が大量に伸びている状況となってしまっており若干見苦しい内容となってしまっていますが、今回設定・作成した部分については良い感じに可視化出来ていそうです。
全部入り(ALL)のEXCELファイルにおける、今回の作業で作成されたデータベースに関するシートを見てみます。スキーマ及びテーブルに対して、ツール(Roleout)で設定・作成した内容が反映されているのは勿論のこと、それらを分かりやすい表形式の情報として収集、生成出来ていることが確認出来ました。
今回は必要最低限の内容確認に留めましたが、その他色々な情報やオプションも数多く存在します。詳細は下記公式リポジトリをご覧ください。
まとめ
という事で、Snowflakeのロールに関する情報を出力してくれる便利系OSSツール『sfgrantreport』の紹介でした。同じタイミングで公開した『Roleout』と合わせて、Snowflakeの環境構築・運用に役立つであろうこのツール、今後も是非最大限活用していきたいと思います。