【Snowflake】ロール設計の際にはグローバル権限も考慮しよう

背景

業務でSnowflakeのロール設計をしたのだが、後になってグルーバル権限についても考慮する必要がでてきたので、その時に学んだことを記す。

グローバル権限とは?

アカウント全体に適用される権限であり、通常はACCOUNTADMINのみによって他のロールに付与することができる権限のこと。

グローバル権限一覧を見ると、CREATE WAREHOUSEやMANAGE GRANTSなどSnowflakeで重要な権限が含まれており、慎重な権限設定が必要になる。

以下の図でいうところのACCOUNTレイヤーが該当する。

Snowflakeのオブジェクトとコンテナの階層

出典:Snowflake-アクセス制御

ロール設計時に注意すること

Snowflakeのオブジェクトへのアクセス制御モデルとしてRBACDACが採用されているため、基本的に一般ユーザーがグローバル権限が必要となるケースは少ない。

自分もそう思っていたので、あまりグローバル権限に対して考慮ができておらず整理にするのに苦労した。

グローバル権限の何に注意すべきかというと以下の点になる。

1. EXECUTE TASKEXECUTE ALERTなどは一般ユーザーでも必要

一般ユーザーがタスクやアラートを作成するケースにおいてはこれらの実行権限がないとそもそも実行できない。

2. グローバル権限のほとんどはACCOUNTADMINのみが付与できること

特にSnowflake基盤をIaCで管理している、かつACCOUNTADMINロール以外のロールで管理している場合には注意したい。

IaCで管理している場合はIaC用のロールであったり、ACCOUNTADMIN以外のシステムロールで管理することが多いと思うが、グローバル権限を付与する際にいちいちACCOUNTADMINロールを持つユーザーが設定しなくてはならない。

こうなるとIaCで管理するものとそうではないものの境界が曖昧になってしまう。

整理できていない場合は、グローバル権限を誰が管理するのか(誰が権限を付与できるようにするかか含め)、さらにIaCでも管理するのかを明確にするといいかもしれない。

まとめ

グローバル権限は一般ユーザーにも必要なケースがあったり、ACCOUNTADMINのみが付与可能だったりして、他の権限よりも特殊であるので扱いには少し考慮が必要。

グローバル権限の管理やユースケースの整理しておくと、ロール設計もよりよいものができるのではないかと思う。

Snowflakeのロール設計する人や基盤管理者の誰かの参考になればうれしいな。

番外編

ACCOUNTADMINのみが付与可能なロールはグローバル権限以外にもあるみたい。

Snowflakeサポートケースに関する権限(ex. MANAGE USER SUPPORT CASES)もACCOUNTADMINやORGADMINのみ付与可能。(サポートシステムへのアクセス)