🦝
Snowflakeにおけるセッション管理の基礎
Snowflakeセッション
- セッションはユーザーがSnowflakeに接続し、正常に認証されたときに開始される。
- また、このセッションはIdPセッションから独立している
- IdP(Identity Provider)とは、ユーザーの認証情報を持ち、ユーザーの身元を確認するためのサービスやシステム
- つまり、IdPセッションと独立することで、Snowflakeセッションの有効期限が切れても、 IdP セッションがアクティブなままの場合、ユーザーは認証情報を再度入力せずにSnowflakeにログインすることができるということ
アイドルセッションタイムアウト
-
ユーザーのセッションが一定時間アクティビティなし(アイドル状態)である場合に、そのセッションを自動的に終了する機能
-
Snowflakeでは、デフォルトで4時間に設定されている
-
既存のセッションを再利用し、セッションが不要になったときにSnowflakeへの接続を閉じることで、パフォーマンスの向上が期待できる。
セッションポリシー
- セッションポリシーは、 アイドルセッションタイムアウト期間を分単位で定義し、デフォルトのアイドルタイムアウト値である4時間を上書きするオプションを提供する
- 大きく分けて以下の2つのパラメータがある
-
SESSION_IDLE_TIMEOUT_MINS
- 非UIクライアント(Pythonなど)を使用してのセッションのアイドルタイムアウトを定義する
- デフォルトで4時間
-
SESSION_UI_IDLE_TIMEOUT_MINS
- Snowflake Web UIを使用してのセッションのアイドルタイムアウトを定義する
- デフォルトで1時間
-
SESSION_IDLE_TIMEOUT_MINS
セッションポリシーの実装
ステップ1: POLICY_ADMINカスタムロールを作成する
- カスタムロールを作成する
USE ROLE USERADMIN;
CREATE ROLE policy_admin;
- ちなみにSnowflakeにおけるroleの全体像は以下のようになっています。
ステップ2: POLICY_ADMIN カスタムロールに権限を付与する
-
POLICY_ADMINロールに以下の権限を付与。
- USAGE セッションポリシーを含むデータベースとスキーマ。
- セッションポリシーを含むスキーマの CREATE SESSION POLICY。
- アカウントの APPLY SESSION POLICY。
- ユーザーレベルでセッションポリシーを設定する場合は、各ユーザーの APPLY SESSION POLICY。
USE ROLE SECURITYADMIN; GRANT USAGE ON DATABASE mydb TO ROLE policy_admin; GRANT USAGE, CREATE SESSION POLICY ON SCHEMA mydb.policies TO ROLE policy_admin; GRANT APPLY SESSION POLICY ON ACCOUNT TO ROLE policy_admin; GRANT APPLY SESSION POLICY ON USER jsmith TO ROLE policy_admin;
- ちなみに、権限付与する時は、以下のように記述する
GRANT (付与したい操作) ON (操作対象: db,schema,table) TO (付与対象: どのロールに付与したいか)
ステップ3: 新しいセッションポリシーを作成する
- プログラムクライアント、Snowflakeクライアント、およびウェブインターフェイスのアイドルタイムアウト値がそれぞれ 60 分である新しいセッションポリシーを作成
USE ROLE POLICY_ADMIN;
CREATE SESSION POLICY mydb.policies.session_policy_prod_1
SESSION_IDLE_TIMEOUT_MINS = 60
SESSION_UI_IDLE_TIMEOUT_MINS = 60
COMMENT = 'Session policy for the prod_1 environment'
;
ステップ4: アカウントまたはユーザーにセッションポリシーを設定する
USE ROLE policy_admin;
ALTER ACCOUNT SET SESSION POLICY mydb.policies.session_policy_prod_1;
ALTER USER jsmith SET SESSION POLICY my_database.my_schema.session_policy_prod_1_jsmith;
参照
Discussion