はじめに
皆さんはSnowflakeを利用していますか?
Snowflakeで、権限不足エラーが頻発したことはありませんか?
今回はSnowflakeの運用をしていく中で気を付けたいポイントのうち、グローバル権限について紹介します。
グローバル権限とは
グローバル権限とは、アカウントレベルのオブジェクトを操作する際に必要な権限です。
以下は、Snowflakeの公式ドキュメントにあるオブジェクトの階層構造です。
簡単にいうとグローバル権限は図の赤枠内のオブジェクトに対する管理・利用権限です。

グローバル権限の付与における注意点
グローバル権限は非常に強力な権限になっているため、必要最小限のグローバル権限を必要なユーザ/ロールにのみ付与するようにしましょう。
オブジェクトに対する権限をロールに付与を行う場合は、SECURITYADMINまたは、オブジェクトの管理者(オブジェクトに対するOWNERSHIP権限を持つロール)で行う必要があります。
ただし、グローバル権限をカスタムロール(手動で作成したロール)に付与する際、以下の通り付与できるロールが限られている場合があります。

グローバル権限を付与する際は、こちらのドキュメントを参考にしてどのロールがどの権限を割り当てられるか確認しましょう。
付与できるロールが指定されていない場合は、付与する際に利用するロールはSECURITYADMINで問題ありません。
利用する機会が多いグローバル権限
①CREATE WAREHOUSE
ウェアハウスを作成するときは、CREATE WAREHOUSE権限が必要です。
こちらを付与すると、ウェアハウスの作成が可能になります。
基本的には管理者レベルの作業になるので、基本的にはSYSADMINで実施することを推奨していますが、もしカスタムロールでこの権限が必要な場合は、管理者として利用するロールのみに付与しましょう。
この権限は、ACCOUNTADMINによる付与が必要です。
②CREATE DATABASE
こちらもウェアハウス同様で、データベースを作成する際に必要な権限です。
こちらを付与すると、データベースの作成が可能になります。
この権限は、ACCOUNTADMINによる付与が必要です。
③EXECUTE TASK / EXECUTE MANAGED TASK
タスクを実行する際に必要な権限です。
タスクを実行する場合は、タスクのOWNERSHIP権限を持つロールがEXECUTE TASK、もしくは、EXECUTE MANAGED TASKの権限を持っていることが必要になります。
EXECUTE TASKはウェアハウスを利用したタスク実行で、EXECUTE MANAGED TASKはサーバレスコンピュートを利用したタスク実行です。
なお、タスクの作成権限はスキーマ権限になっています。
タスクの作成ができる=タスクの実行ができる というわけではない点に気を付けたいですね。
④MANAGE ACCOUNT SUPPORT CASES
アカウント内のすべてのサポートケースを表示、コメント、管理ができる権限です。
この権限がないと、自身(もしくは自身が属するロール)で起票したサポートケースしか管理できません。
参考
おわりに
Snowflakeではセキュリティレベルを向上させるために、権限分離をしっかりと行う必要があります。
作りこむことで、高いセキュリティレベルを担保できる反面、初期の構築や保守フェーズで権限不足が頻発するケースがあります。
権限不足が怖いからと言って、強力な権限をたくさんロールに付与したり、ACCOUNTADMINやSYSADMINなどのロールで常に操作するということはせず、しっかりと権限設計をすることが重要であると感じました。