
SnowflakeのStreamlitアプリをほかのロールからも表示・実行できるようにする際の権限制御を試した
データ事業本部の鈴木です。
SnowflakeではStreamlitアプリを作成し、ネイティブのダッシュボード機能では実現できないさまざまな分析を担うことができます。
StreamlitアプリもSnowflake上のオブジェクトの一つとして管理されます。Streamlitアプリを使うユーザーがアプリの作成ユーザーと異なる場合もあります。アプリは所有者のロールを実行時に使うため、誰に見せる/見せないの権限設計が必要です。
この点について、以下のガイドに「Streamlitアプリの作成に必要な権限」および「Streamlitアプリの表示に必要な権限」の案内があるので試してみました。
Streamlitアプリがサポートされ始めた当初はSnowsightのカタログからアプリがあるステージが見えたりもしたのですが、現在は若干見え方が変わったので、整理も兼ねて改めて確認しました。
なお、この記事で扱うのはStreamlitを表示・実行できる権限のみになります。
Streamlitアプリ自体が使う権限は所有者の権限になります。
0. 準備・前提
まずは検証のためのリソースを作成しました。
以下の2つの名前のユーザーおよびロールをSnowsightで作成しました。
各ユーザーは同名のロールを使用できるようにしました。
- Streamlitアプリ作成者:
STREAMLIT_APP_CREATOR - Streamlitアプリユーザー:
STREAMLIT_APP_USER
以下のSQL文でデータベース・スキーマ・ウェアハウスを作成しました。
STREAMLIT_APP_CREATORがStreamlitアプリを作成できるようにしました。
-- データベース・スキーマの作成
CREATE DATABASE STREAMLIT_APP_DB;
CREATE SCHEMA STREAMLIT_APP_DB.STREAMLIT_APP_SCHEMA;
-- ウェアハウス作成
CREATE WAREHOUSE IF NOT EXISTS STREAMLIT_WH
WAREHOUSE_SIZE = 'X-SMALL'
AUTO_SUSPEND = 60
AUTO_RESUME = TRUE
INITIALLY_SUSPENDED = TRUE;
-- Streamlitアプリ作成者への権限付与
GRANT USAGE ON DATABASE STREAMLIT_APP_DB TO ROLE STREAMLIT_APP_CREATOR;
GRANT USAGE ON SCHEMA STREAMLIT_APP_DB.STREAMLIT_APP_SCHEMA TO ROLE STREAMLIT_APP_CREATOR;
GRANT CREATE STREAMLIT ON SCHEMA STREAMLIT_APP_DB.STREAMLIT_APP_SCHEMA TO ROLE STREAMLIT_APP_CREATOR;
GRANT USAGE ON WAREHOUSE STREAMLIT_WH TO ROLE STREAMLIT_APP_CREATOR;
GRANT CREATE STAGE ON SCHEMA STREAMLIT_APP_DB.STREAMLIT_APP_SCHEMA TO ROLE STREAMLIT_APP_CREATOR;
Streamlitアプリ作成者でSnowsightにログインし、Streamlitアプリを作成しました。

アプリは指定したデータベース・スキーマに作成されます。
1. 表示設定
Streamlitアプリユーザーでアプリを表示するためには、「Streamlitアプリの表示に必要な権限」によると最低限以下が必要です。以下のコマンドでSTREAMLIT_APP_USERに必要な権限を付与しました。アプリ名は自身の作成したアプリのものをイメージしてください。
GRANT USAGE ON DATABASE STREAMLIT_APP_DB TO ROLE STREAMLIT_APP_USER;
GRANT USAGE ON SCHEMA STREAMLIT_APP_DB.STREAMLIT_APP_SCHEMA TO ROLE STREAMLIT_APP_USER;
-- アプリ名はtitleではなく、name
-- アプリのURLやSHOW STREAMLITSなどで確認できる
GRANT USAGE ON STREAMLIT STREAMLIT_APP_DB.STREAMLIT_APP_SCHEMA.アプリ名 TO ROLE STREAMLIT_APP_USER;
実行前はStreamlitアプリユーザーからは以下のようになにも表示されていませんでした。

権限を付与すると、以下のように見えるようになりました。アプリの実行もできました。

なお、3つの権限のうち一つを外すと表示されなくなりました。
GRANT USAGE ON STREAMLITで指定するアプリ名はStreamlitアプリのタイトルではないことに注意です。アプリを開いた際のURLやSHOW STREAMLITS;で確認できました。
アプリが作成されたデータベースのINFORMATION_SCHEMA.STREAMLITSでも確認できました。

また、GRANT USAGE ON FUTURE STREAMLITS IN SCHEMAでもスキーマ内のStreamlitアプリへのアクセス権をロールに対して付与することができました。
GRANT USAGE ON FUTURE STREAMLITS IN SCHEMA STREAMLIT_APP_DB.STREAMLIT_APP_SCHEMA TO ROLE STREAMLIT_APP_USER;
付与されるのはアプリへのUSAGE権限のみでした。データベースとスキーマへのUSAGEがないとアプリが表示されないので、忘れないようにしましょう。

2. 共有設定による権限付与
ほかのロールへの共有はStreamlitアプリの画面からも可能です。Shareボタンがあります。

以下のように権限付与が可能です。
View onlyおよびView and shareがあり、操作実行のロールに必要な権限があればStreamlitアプリ・アプリのあるデータベースおよびスキーマへのUSAGEが付与されました。

「and share」はStreamlitアプリへの「WITH GRANT OPTION」の有無が差異でした。
なお、今回はMANAGED ACCESS権限を持つスキーマではない場合を想定しています。MANAGED ACCESS権限を持つスキーマでは手動でUSAGE権限を付与する必要があります。
最後に
SnowflakeのStreamlitアプリをほかのロールから表示できるようにしたい場合の、権限付与の細かい操作を確認しました。
Streamlitアプリに共有ボタンがあるので、アプリを作成したユーザーはこのボタンでほかのロールにも使えるようにすることが多いかなと思いました。
データベースおよびスキーマへのUSAGE権限が付与されるため、データベースの管理者はそのような権限変更が行われると考えておくとよさそうです。







