Snowflakeカスタムロール作成とGRANT/REVOKE入門

Snowflakeカスタムロール作成とGRANT/REVOKE入門 Snowflake

はじめに:なぜカスタムロールが必要なの?

Snowflakeを使い始めると、最初はACCOUNTADMINSYSADMINといったシステム定義ロールで何でもできてしまうので便利です。でも、実務でチーム運用するときに「分析者にはSELECTだけ許したい」「ETL担当にはこのDBへのINSERTだけ任せたい」といった役割ごとのきめ細かい権限が必要になります。そこで登場するのがカスタムロールです。

RBAC(ロールベースアクセス制御)の基本については Snowflake RBAC入門|ロールで権限管理を始めよう でも触れていますが、本記事ではその一歩先、「自分でロールを作って、GRANT/REVOKEで権限を出し入れする」具体的な手順をフレンドリーに解説します。

Snowflakeのカスタムロールが分析者やETL担当者に役割別の権限を付与する仕組みを示す概念図

基本概念のおさらい

ロールと権限の関係

Snowflakeでは、ユーザーに直接権限を付与しないのが基本です。代わりに「ロール」というハコに権限を集めて、ユーザーにそのロールを付与します。これにより、人事異動があってもロールの付け替えだけで済みます。

GRANTとREVOKEとは?

GRANTは「権限を与える」、REVOKEは「権限を剥がす」コマンドです。シンプルですが、対象オブジェクト(データベース、スキーマ、テーブル、ウェアハウスなど)ごとに必要な権限の種類が異なる点に注意しましょう。

カスタムロールを作って権限を付与してみよう

ステップ1: ロールを作成する

ロールの作成・管理は通常 USERADMIN または SECURITYADMIN ロールで行います。

USE ROLE USERADMIN;

-- 分析者向けカスタムロールを作成
CREATE ROLE ANALYST_ROLE
  COMMENT = '読み取り専用の分析者用ロール';

ステップ2: 権限をGRANTする

クエリを動かすには「ウェアハウスのUSAGE」「DBとスキーマのUSAGE」「テーブルのSELECT」が最低限必要です。階層的にGRANTしていくのがコツ!

USE ROLE SECURITYADMIN;

-- ウェアハウスを使う権限
GRANT USAGE ON WAREHOUSE ANALYTICS_WH TO ROLE ANALYST_ROLE;

-- データベースとスキーマを参照する権限
GRANT USAGE ON DATABASE SALES_DB         TO ROLE ANALYST_ROLE;
GRANT USAGE ON SCHEMA   SALES_DB.PUBLIC  TO ROLE ANALYST_ROLE;

-- 既存テーブルすべてにSELECT、今後作られるものにも適用
GRANT SELECT ON ALL    TABLES IN SCHEMA SALES_DB.PUBLIC TO ROLE ANALYST_ROLE;
GRANT SELECT ON FUTURE TABLES IN SCHEMA SALES_DB.PUBLIC TO ROLE ANALYST_ROLE;

FUTURE を使うと、将来作成されるオブジェクトにも自動で権限が付与されるので、付与漏れを防げます。

ステップ3: ユーザーにロールを割り当てる

GRANT ROLE ANALYST_ROLE TO USER TARO_YAMADA;
-- 親ロール(SYSADMIN)にもぶら下げて階層管理
GRANT ROLE ANALYST_ROLE TO ROLE SYSADMIN;
GRANT文でANALYST_ROLEにSELECT権限を付与しユーザーTARO_YAMADAへロールを割り当てるSnowflakeカスタムロール構築フロー図

権限を剥がす(REVOKE)とロール削除

権限が不要になったらREVOKEでサクッと取り上げます。構文はGRANTとほぼ対称です。

-- テーブルのSELECT権限だけ剥奪
REVOKE SELECT ON ALL TABLES IN SCHEMA SALES_DB.PUBLIC FROM ROLE ANALYST_ROLE;

-- ユーザーからロールを外す
REVOKE ROLE ANALYST_ROLE FROM USER TARO_YAMADA;

-- ロール自体を削除(付与済み権限も一緒に外れる)
DROP ROLE ANALYST_ROLE;

付与状況の確認には SHOW GRANTS TO ROLE ANALYST_ROLE;SHOW GRANTS ON TABLE ...; が便利です。

実務で意識したいポイント

  • 最小権限の原則:必要な権限だけを与える。READ専用とWRITE可能は分ける。
  • カスタムロールはSYSADMINにGRANT:親ロール経由で管理を一元化できます。
  • USAGEを忘れない:テーブルにSELECTだけ与えても、上位のDB/スキーマにUSAGEがないとアクセスできません。
  • ウェアハウス権限も別物:計算リソースの利用はUSAGE/OPERATEで制御します。ウェアハウスの基本も合わせて確認しましょう。

まとめ

カスタムロールは、Snowflakeを安全に・スケーラブルに運用するうえで欠かせない仕組みです。CREATE ROLEGRANT でロールに権限を集め、GRANT ROLE ... TO USER でユーザーに割り当てる、という流れさえ押さえれば怖くありません。まずは「読み取り専用ロール」から作って、チームの権限設計をスッキリさせてみてください!

参考リンク

関連記事