🙌

Snowflakeでロール設計してみた(Functional + Access)

2022/09/26に公開

たしろ@ちゅらデータエンジニア です。
※ずっと下書きになってたやつをみつけて、ちゃんと書かねば・・・って思ったですよ

ずっとSYSADMINとかで作っていたのでこれはあかーーーんということで、真面目にカスタムロールを設計してみました

https://medium.com/snowflake/a-functional-approach-for-snowflakes-role-based-access-controls-5f0e84e80146
の Functional + Access Role Model をつかってみました。

USER(Functional)ロールとしては

  • user_admin
  • user_general
    • user_ds
    • user_analyst
    • user_vierwer
      というロールを設定しています。

Access Role としては

  • DB_OWNER
  • DB_RW : Database全体のRead/Write
  • DB_R : Database全体のRead
  • DB_LAKE_SPOT_W : LAKE_SPOTスキーマに書き込める
  • DB_MART_W : MARKスキーマに書き込める
  • DB_PUBLIC_RW

あと、WHを使うアクセスロールがあってもいいかな・・ってので、こちらも
※ここは、FunctionalロールにUSAGEをつけてしまうでもいいのだけど・・・

  • USE_USER_WH
  • USE_DS_WH
  • USE_BI_WH

CDPでは、基本的には三層構造を採用するようにしています(ゆずたそさんの構成を参考に)
Schemaとしては

  • LAKE層 : Amazon S3や GCS、BigQueryから取り込んだそのまま、最近でいうとレイクハウス的?な層。どこからとってきてるかを明確にしたかったので、更に元データソースごとにスキーマを切ってます
    • CORE_DB : 基幹DBとか
    • APP : Firebaseとか
    • SPOT : その他分析で必要なファイルとか
  • WAREHOUSE層 : 集約していろいろMASTERの情報とかくっつけたテーブルorView
  • MART層 : WAREHOUSE層からBIとかで見せるためのデータマートを作成する。AnalystやDSのアウトプットを置く場所

という三層です。

で、こんな感じ

  • USER_ADMIN
    • ACCOUNTADMINを持ってるロール。これっているだろうか・・・・ちょっと悩む
    • ACCOUNTADMINをそもそも渡せばいいんじゃまいか・・・orz
  • USER_GENERAL
    • DB(データ)に対する一番上位ロール、SAMPLE_DBに対してすべての操作ができる。OWNERSHIPもたせてる
  • USER_DS
    • データサイエンティストなロール
    • 基本的に、READ権限
    • LAKE_SPOTへのアップロード権限あり(一時的に必要な分析用ファイルとか)
    • MARTへの書き込み権限あり。LAKE層、WAREHOUSE層からマートを作成できる
    • サイズの大きい DS_WH を使用できるのが、USER_ANALYSTとの違い
  • USER_ANALYST
    • アナリストなロール
    • 基本的に、SAMPLE_DBにたいしてはREAD
    • LAKE_SPOTへのアップロード権限あり(一時的に必要な分析用ファイルとか)
    • MARTへの書き込み権限あり。LAKE層、WAREHOUSE層からマートを作成できる
  • USER_VIEW
    • 閲覧者の権限
    • データを見るだけ
    • 書き込み権限なし

あと、BIロール、PREPロール(閲覧のみ)とか、ETLロールなども作り、WHをわけるといいかも

Discussion