Snowflakeのロールを用いたアクセス制御・権限設定の方法とは?~設定方法を実際の画面で解説~(vol.3)
- 公開日:
- 最終更新日:
Snowflakeでは、テーブルやスキーマといったデータへのアクセスに関するセキュリティ保護の方法として、オブジェクトごとにアクセス制御を行う方法と、ロールでアクセス制御を行う方法があります。
また、Snowflakeには、標準で用意されているロールの他に、テーブル以外のデータベースやスキーマなどのオブジェクトに対して権限設定を行うカスタムロールの作成を行うことができます。
本ブログでは、Snowflakeのロールを用いたアクセス制御方法やロールへの権限設定について、実際の画面を用いて解説します。
目次
■Snowflakeのアクセス制御方法とは?
Snowflakeのアクセス制御方法には、任意アクセス制御(DAC)とロールベースのアクセス制御(RBAC)の2つがあります。
- 任意アクセス制御(DAC):各オブジェクトに所有者がおり、所有者はそのオブジェクトへのアクセスを許可できます。
- ロールベースのアクセス制御(RBAC):アクセス権限がロールに割り当てられ、ロールはユーザーに割り当てられます。
*参照元:アクセス制御フレームワーク
■Snowflakeのロール・権限とは?
本章では、Snowflakeのアクセス制御を理解するために重要な4つのポイントを解説します。
- ユーザー:Snowflakeによって認識される(個人またはプログラムに関連付けられている)ユーザーID。
- ロール:ロールとは、セキュリティ保護可能なオブジェクトに対する権限の付与や取り消しができるエンティティを指します。Snowflakeのロールには、次の特徴があります。
- セキュリティ保護可能なオブジェクトに対する権限の付与や取り消しができるエンティティです。
- ロールはユーザーに割り当てられ、ユーザーが必要なアクション(SELECTやINSERTなど)を実行できるようにします。
- ユーザーには複数のロールを割り当てることができます。
Snowflakeでは、①Snowflakeへ接続→②AdminタブにあるUser&Role画面に遷移→③Rolesタブから追加などによって、ユーザーにロールを割り当てることができます。
- システム定義用ロール:ロールのうち、次の6つのロールのみを指してシステム定義用ロールと言います。
- ORGADMIN(組織管理者):組織レベルで運用を管理するロール
– 組織内にアカウントを作成できます。
– 組織内のすべてのアカウント(SHOW ORGANIZATION ACCOUNTS を使用)と、組織で有効になっているすべてのリージョン(SHOW REGIONS を使用)を表示できます。
– 組織全体の使用情報を表示できます。
- ACCOUNTADMIN(アカウント管理者):SYSADMIN および SECURITYADMIN システム定義のロールをカプセル化するロール
– システムの最上位のロールであり、アカウント内の限られた/制御された数のユーザーにのみ付与する必要があります。
– Snowflakeの公式サイトにもACCOUNTADMINロールを使ってオブジェクトを作成しないと記載があります。
https://docs.snowflake.com/ja/user-guide/security-access-control-considerations#avoid-using-the-accountadmin-role-to-create-objects
- SECURITYADMIN(セキュリティ管理者):オブジェクトの付与をグローバルに管理し、ユーザーとロールを作成、モニター、管理できるロール
– MANAGE GRANTS セキュリティ権限が付与されており、付与の取り消しを含め、あらゆる付与を変更できます。
– システムロール階層を介して USERADMIN ロールの権限を継承します(USERADMIN ロールを SECURITYADMIN に付与)。
- USERADMIN(ユーザーおよびロール管理者):ユーザーとロールの管理のみに専用のロール
– CREATE USERおよびCREATE ROLEのセキュリティ権限が付与されています。
– アカウントにユーザーとロールを作成できます。
– 所有するユーザーとロールを管理することもできます。
– オブジェクトのプロパティを変更できるのは、オブジェクト(つまり、ユーザーまたはロール)に対する OWNERSHIP 権限を持つロールまたはそれ以上のロールのみです。
- SYSADMIN(システム管理者):アカウントでウェアハウスとデータベース(およびその他のオブジェクト)を作成する権限を持つロール
– Snowflakeで推奨されているように、最終的にすべてのカスタムロールを SYSADMIN ロールに割り当てるロール階層を作成する場合、このロールには、ウェアハウス、データベース、およびその他のオブジェクトに対する権限を他のロールに付与する機能もあります。
- PUBLIC:アカウント内のすべてのユーザーおよびすべてのロールに自動的に付与される疑似ロール
– PUBLIC ロールは、他のロールと同様にセキュリティ保護可能なオブジェクトを所有できます。ただし、ロールが所有するオブジェクトは、定義上、アカウント内の他のすべてのユーザーとロールが使用できます。
– 通常、このロールは、明示的なアクセス制御が不要で、すべてのユーザーがアクセスに関して平等であると見なされる場合に使用されます。
システム定義用ロールは削除することができないこと、さらに、Snowflakeによってこれらのロールに付与された権限は、取り消すことができないことにご注意ください。
- 権限:(セキュリティ保護可能な)オブジェクトへの定義されたレベルのアクセス。
複数の個別の権限を使用して、付与されるアクセスの粒度を制御できます。 - (セキュリティ保護可能な)オブジェクト:アクセスを付与できるエンティティ。
付与によって許可されない限り、アクセスは拒否されます。
Snowflakeでは、セキュリティ保護可能なオブジェクト(Table/View/Schemaなど)へのアクセスは、ロールに割り当てられた権限を介して許可され、その権限は他のロールまたはユーザーに割り当てられます。さらに、各セキュリティ保護可能なオブジェクトには、他のロールへのアクセスを付与できる所有者がいます。
ロールにアクセス制御の権限を割り当て、Snowflakeの各ユーザーにロールを割り当てる仕組みによって、アクセス制御を柔軟に設定することがSnowflakeでは可能になります。
■Snowflakeで設定可能な権限とは?
Snowflakeでは、ウェアハウス/データベース/スキーマ/テーブルなどの各オブジェクトごとに細かく権限を設定することが可能です。
本章では、ウェアハウス/データベース/スキーマ/テーブルに対する権限の一例をご紹介します。
- ウェアハウス
- CREATE WAREHOUSE:ウェアハウスの作成権限
- OWNERSHIP:ウェアハウスの所有権移譲
- USAGE:ウェアハウスの使用権
- OPERATE:ウェアハウスの起動・一時停止ができる権限
- MODIFY:ウェアハウスの変更権限
- ALL:ウェアハウスの所有権以外の全権限
- データベース
- CREATE DATABASE:データベースの作成権限
- OWNERSHIP:データベースの所有権移譲
- USAGE: データベースの使用権
- CREATE SCHEAMA:スキーマ作成権限
- ALL:データベースの所有権以外の全権限
- スキーマ
- CREATE SCHEAMA:スキーマ作成権限
- OWNERSHIP:スキーマの所有権移譲
- USAGE: スキーマの使用権
- ALL:スキーマの所有権以外の全権限
- テーブル
- SELECT:テーブルのSELECT権限
- INSERT:テーブルのINSERT権限
- DELETE:テーブルのDELETE権限
- TRUNCATE:テーブルのTRUNCATE権限
- ALL:テーブルの所有権以外の全権限
注意点として、各オブジェクトに対する権限は複数付与することが可能です。
(例)データベースにあるスキーマ(SCMの全テーブル)に、SELECT権限とINSERT権限を、ロール(ANALYSIS_ROLE)に付与する。
GRANT SELECT,INSERT ON ALL TABLES IN SCHEMA DB.SCM TO ROLE ANALYSIS_ROLE;
■Snowflakeの権限設定を実際の画面で解説
本章では、Snowflakeの権限設定の方法について、分析用ロールと参照用ロールの作成 及び 権限設定の手順を実際の画面を用いながら解説します。
分析用ロール(ANALYSIS _ROLE)は、スキーマの作成やテーブルやViewの作成/削除/参照/データ削除ができる権限を持つロールで、テーブル参照以外にもテーブル作成やデータ加工を行うユーザー用のロールです。
各オブジェクトには、以下の操作を行う権限を付与します。
データベース:CREATE SCHEMA,USAGE
スキーマ:CREATE TABLE 、USAGE
テーブル:CREATE、DROP、SELECT、DELETE
参照用ロール(READ_ROLE)は、テーブルやViewのSELECTのみできる権限で、データを参照のみ行うユーザー用のロールです。
各オブジェクトには、以下の操作を行う権限を付与します。
データベース:USAGE
スキーマ:USAGE
テーブル:SELECT
- ロールの作成:ロールはSECURITYADMINロールで実行します。
CREATE (OR REPLACE) ROLE ロール名;
を実行することでロールの作成が行えます。
- ウェアハウスの作成:ロールはSYSADMINロールで実行します。
CREATE (OR REPLACE) WAREHOUSE ウェアハウス名 WITH WAREHOUSE_SIZE = ウェアハウスサイズ MAX_CLUSTER_COUNT= 最大値クラスター数 MIN_CLUSTER_COUNT= 最小クラスター数 SCALING_POLICY = スケーリングポリシー AUTO_SUSPEND = 自動停止秒数
を実行することでウェアハウスの作成が行えます。
- ウェアハウス権限の作成:ロールはSYSADMINロールで実行します。
GRANT 付与する権限 ON WAREHOUSE ウェアハウス名 TO ROLE ロール名;
を実行することでウェアハウス権限の作成が行えます。
- データベースの作成:ロールはSYSADMINロールで実行します。
CREATE (OR REPLACE) DATABASE データベース名 DATA_RETENTION_TIME_IN_DAYS = Time Travel日数;
を実行することでデータベースの作成の作成が行えます。
- データベース権限の作成:ロールはSYSADMINロールで実行します。
GRANT 付与する権限 ON DATABASE データベース名 TO ROLE ロール名;
を実行することでデータベース権限の作成の作成が行えます。
- スキーマの作成:ロールはSYSADMINロールで実行します。
CREATE OR REPLACE SCHEMA データベース名.スキーマ名;
を実行することでスキーマの作成の作成が行えます。
- スキーマ権限の作成:ロールはSYSADMINロールで実行します。
GRANT 付与する権限 ON SCHEMA スキーマ名 TO ROLEロール名;
を実行することでスキーマ権限の作成の作成が行えます。
- テーブル権限の作成:ロールはSECURITYADMINロールで実行します。
GRANT 権限名 ON ALL TABLES IN SCHEMA データベース名.スキーマ名 TO ROLEロール名;
を実行することでテーブル権限の作成の作成が行えます。
GRANT 権限名 ON FUTURE TABLES IN SCHEMA データベース名.スキーマ名 TO ROLEロール名;
を実行することで将来作成されるスキーマ内のテーブルに対してテーブル権限の作成の作成が行えます。
■Snowflakeで設定した権限の確認方法
続いて、Snowflakeで設定した権限が正しく反映されているかを確認する方法について解説します。
- 分析用ロールの権限確認
分析用ロール(ANALYSIS _ROLE)は、スキーマの作成やテーブルやViewの作成、削除、参照、データ削除ができる権限を持っています。
分析用ロール(ANALYSIS _ROLE)はスキーマの作成が可能です。
スキーマ作成実行時にsuccessfully createdと表示されている場合、スキーマ作成が成功しています。
分析用ロール(ANALYSIS _ROLE)はテーブルの作成が可能です。
テーブル作成実行時にsuccessfully createdと表示されている場合、テーブル作成が成功しています。
分析用ロール(ANALYSIS _ROLE)はデータの作成が可能です。
INSER文実行時にデータ作成したレコード数が表示されている場合、INSERTが成功しています。
分析用ロール(ANALYSIS _ROLE)はデータの参照が可能です。
SELECT文の結果が表示されている場合、SELECTが成功しています。
分析用ロール(ANALYSIS _ROLE)はデータの削除が可能です。
DELETE文実行時に削除したレコード数が表示されている場合、DELETEが成功しています。
- 参照用ロールの権限確認
参照用ロール(READ_ROLE) は、テーブルやViewのSELECTのみできる権限となっており、スキーマ作成、テーブル作成、データ作成、データ削除はできません。
参照用ロール(READ_ROLE) は、スキーマの作成ができません。
下記のようなエラーメッセージが表示され、スキーマの作成は行われていません。
参照用ロール(READ_ROLE) は、テーブルの作成ができません。
下記のようなエラーメッセージが表示され、テーブルの作成は行われていません。
参照用ロール(READ_ROLE) は、データの作成ができません。
下記のようなエラーメッセージが表示され、データの作成は行われておりません。
参照用ロール(READ_ROLE) はデータの参照をすることは可能です。
SELECT文の結果が表示されている場合、SELECTが成功しています。
参照用ロール(READ_ROLE) は、データの削除はできません。下記のようなエラーメッセージが表示され、データの削除は行われていません。
以上のように、設定した権限で動作が問題ないことを確認できました。
■まとめ
ここまで、Snowflakeのアクセス制御についての仕組みやアクセス制御が可能なオブジェクト対象、ロールの割り当て方や権限の種類や付与/削除の方法、カスタムロール設定やカスタムロールの権限設定で何ができるのかを、実際にロールなどの作成や権限設定を行いながら解説してまいりました。
是非、Snowflakeのロールを用いたアクセス制御をご活用いただくことで、現場の見たいと内部統制(データマネジメント)を両立していただければと思います。
弊社では、図のようにエクセルに権限の設定内容などを入力し、Snowflakeへ反映させるSQLを出力するツールをご用意しております。
過去の事例として、お客様の設定したい権限をヒアリング・設計を実施した後、権限設定作成ツールを使用して、お客様が構築したSnowflakeに対してロールなどの権限設定を行っております。また、設定後にお客様で権限の追加や修正を行えるような、権限設定方法やツールの使用方法のレクチャーなども実施しております。
Snowflakeの権限設定でデータ活用でお悩みの際は、是非、弊社までお声掛けください。
本記事は、2024年3月4日時点の情報を基に作成しています。製品・サービスに関する詳しいお問い合わせは、弊社Webサイトからお問い合わせください。