🦝

Snowflakeにおけるセッション管理の基礎

2023/09/23に公開

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時間

セッションポリシーの実装

ステップ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;

参照

https://docs.snowflake.com/ja/user-guide/session-policies
https://docs.snowflake.com/ja/user-guide/security-access-control-overview

Discussion