【Snowflake】権限の可視化・レポート作成ツールsfgrantreportを試してみた

概要

Snowflakeにおけるオブジェクトの権限管理はロールベースで行うため、ロールの数が多くなってくるとsnowsight上でRoleグラフが複雑になって見にくくなる。

全体をみたいときには少し不便だが、ロール階層を可視化やレポートを自動作成してくれる「sfgrantreport」なるツールがあったので試してみた。

sfgrantとは?

Snowflakeの「ロールやそれに紐づいている権限、ロール階層」をHTML形式や表形式(.xlsx)で出力してくれるツール

定期的な監視や監査など、開発よりも運用面で役に立つものかなと思う

使い方

1. 事前準備

  • snowsqlのインストール
  • graphvizのインストール

2. sfgrantのインストール

各OSに応じたzipファイルをダウンロードする

自分の環境がUbuntuなのでLinux版をダウンロードする

$ cd /tmp
$ curl -o https://github.com/Snowflake-Labs/sfgrantreport/releases/latest
$ ./SFGrantReport --help

正常に実行できればコマンドオプションが表示される

3. グラフレポートを作成

-oオプションで出力先のフォルダを指定できる

$ mkdir -p ~/myreport
$ /tmp/SFGrantReport -c mysnowflakeconnection -o ~/myreport

少々時間がかかるが、完了すると出力先フォルダにレポートが出力される。

かなりの数のファイルが出力されるが、HTMLファイルとSFGrantReport.ALLという名前の.xslxファイルを見とけばひとまず問題ない。

4. レポートの中身

HTMLのレポート

ロールごとにどのオブジェクトに権限が紐づいているかを一目でわかる。

特にどのロールにも紐づいてないロールがわかるので、権限設定漏れやベストプラクティスやルールに沿っていないロールが直感的にわかる。

ACCOUNTADMINロールのページを選択するとACCOUNTADMINロールにフォーカスしたロール権限を見ることができる。

さらに凡例では

  • システムロール
  • Functional Role
  • Access Role
  • SYSADMINにGRANTされてないロール
  • どのロールにもGRANTされてない独立したロール

ロールごとに色付けされているのも見やすくていい。

注意点としては、Snowflakeのリソースが多い場合は、ロールや権限を可視化してもやはり見にくくなるのは避けられない。

EXECELのレポート

UserやRole, Grantなど各オブジェクトごとにシートが分かれている。

少し見づらさはあるが、ユースケースとしては

  • 退職したユーザーが削除されているか
  • ACCOUTADMINなど権限の強いロールに特定のユーザーのみGRANTされているかの確認

特定の項目だけをみたい場合は、他の出力されたファイルをみるのがおすすめ。

まとめ

sfgrantreportを試してみたが、思ってたより多くの情報をレポートにまとめてくれるのはありがたい。

snowsqlとgraphvizを利用してSnowflakeのロールに関するレポートを出力してくれるので、定期的なジョブを作成することで、セキュリティや監査目的で利用するのもありかな。