【Snowflake】ロール設計の際にはグローバル権限も考慮しよう
背景
業務でSnowflakeのロール設計をしたのだが、後になってグルーバル権限についても考慮する必要がでてきたので、その時に学んだことを記す。
グローバル権限とは?
アカウント全体に適用される権限であり、通常はACCOUNTADMIN
のみによって他のロールに付与することができる権限のこと。
グローバル権限一覧を見ると、CREATE WAREHOUS
EやMANAGE GRANTS
などSnowflakeで重要な権限が含まれており、慎重な権限設定が必要になる。
以下の図でいうところのACCOUNT
レイヤーが該当する。
ロール設計時に注意すること
Snowflakeのオブジェクトへのアクセス制御モデルとしてRBAC
やDAC
が採用されているため、基本的に一般ユーザーがグローバル権限が必要となるケースは少ない。
自分もそう思っていたので、あまりグローバル権限に対して考慮ができておらず整理にするのに苦労した。
グローバル権限の何に注意すべきかというと以下の点になる。
1. EXECUTE TASK
やEXECUTE ALERT
などは一般ユーザーでも必要
一般ユーザーがタスクやアラートを作成するケースにおいてはこれらの実行権限がないとそもそも実行できない。
2. グローバル権限のほとんどはACCOUNTADMINのみが付与できること
特にSnowflake基盤をIaCで管理している、かつACCOUNTADMIN
ロール以外のロールで管理している場合には注意したい。
IaCで管理している場合はIaC用のロールであったり、ACCOUNTADMIN
以外のシステムロールで管理することが多いと思うが、グローバル権限を付与する際にいちいちACCOUNTADMIN
ロールを持つユーザーが設定しなくてはならない。
こうなるとIaCで管理するものとそうではないものの境界が曖昧になってしまう。
整理できていない場合は、グローバル権限を誰が管理するのか(誰が権限を付与できるようにするかか含め)、さらにIaCでも管理するのかを明確にするといいかもしれない。
まとめ
グローバル権限は一般ユーザーにも必要なケースがあったり、ACCOUNTADMINのみが付与可能だったりして、他の権限よりも特殊であるので扱いには少し考慮が必要。
グローバル権限の管理やユースケースの整理しておくと、ロール設計もよりよいものができるのではないかと思う。
Snowflakeのロール設計する人や基盤管理者の誰かの参考になればうれしいな。
番外編
ACCOUNTADMINのみが付与可能なロールはグローバル権限以外にもあるみたい。
Snowflakeサポートケースに関する権限(ex. MANAGE USER SUPPORT CASES
)もACCOUNTADMINやORGADMINのみ付与可能。(サポートシステムへのアクセス)