❄️

Snowflakeのロールに関する諸々の情報を一撃でレポート出力してくれるOSSツール『sfgrantreport』

に公開

先日、Snowflakeのロール設定管理、とりわけRBAC(ロールベースのアクセス設定管理)に関する便利ツールとして(個人的には)とても有用だなと思ったツールとしてSnowflake Labsが公開しているOSSツール『Roleout』を触ってみました。

https://zenn.dev/truestar/articles/1a5a8caf36bb8c

設定・実行はこのRoleoutで出来る、じゃあ実行した内容、運用しているSnowflake環境のロールに関する設定諸々を分かりやすく表示・出力するようなツールって無いのかな...?と思ったらありました!Roleoutと同じくSnowflake Labsが公開している『sfgrantreport』というツールがまさにそれです。
https://github.com/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)で設定・作成した内容が反映されているのは勿論のこと、それらを分かりやすい表形式の情報として収集、生成出来ていることが確認出来ました。

今回は必要最低限の内容確認に留めましたが、その他色々な情報やオプションも数多く存在します。詳細は下記公式リポジトリをご覧ください。

https://github.com/Snowflake-Labs/sfgrantreport

まとめ

という事で、Snowflakeのロールに関する情報を出力してくれる便利系OSSツール『sfgrantreport』の紹介でした。同じタイミングで公開した『Roleout』と合わせて、Snowflakeの環境構築・運用に役立つであろうこのツール、今後も是非最大限活用していきたいと思います。

truestarテックブログ
設定によりコメント欄が無効化されています