Snowflake Feature Storeのアクセス制御モデル

注釈

Snowflake Feature Store API は、Snowpark ML Pythonパッケージ(snowflake-ml-python)v1.5.0以降で利用可能です。

Snowflake Feature Storeで必要な権限は、ユーザーのタイプによって異なります。

  • プロデューサー は、機能ビューを作成し、操作することができます。

  • コンシューマー は、フィーチャーストアの機能ビューやエンティティの情報を読み取ることができます。

通常、各タイプのユーザーは、必要な権限を持つ独自の Snowflakeデータベースロール を持ちます。フィーチャーストアのロールは、 ロール階層 を使用して構成するのが最も自然です。

2つのフィーチャーストアにコンシューマーとプロデューサーのロールを設定する例

プロデューサーは以下の権限を必要とします。

  • フィーチャーストア スキーマ上の CREATE DYNAMIC TABLE、 CREATE TAG、 CREATE VIEW。

    注釈

    インクリメンタルリフレッシュを行う Snowflake 管理機能ビュー(ダイナミックテーブルでバックされる)の場合、ソーステーブルで 変更追跡が有効になっている必要があります。または、機能ビューの作成時に自動的に変更追跡が有効になるように、これらのテーブルの OWNERSHIP をユーザーが設定する必要があります。

  • トレーニング用のデータセットを生成する際、フィーチャーストア スキーマおよび/またはデスティネーション スキーマの CREATE TABLE および CREATE DATASET。

  • Feature View更新設定を管理するためのフィーチャーストア スキーマの動的テーブルとタスクの OPERATE。

  • フィーチャーストアのイニシャライザに渡されたウェアハウスの USAGE。

  • CREATE SCHEMA は、フィーチャーストア・スキーマがすでに存在し、プロデューサーがそのスキーマの使用権限を持っている場合は省略可能です。

  • 以下に一覧表示されるすべてのコンシューマー権限。

コンシューマーは最低でも以下の権限を必要とします。

  • フィーチャーストアデータベースとスキーマの USAGE。

  • フィーチャーストア スキーマの DYNAMIC TABLES の SELECT および MONITOR。

  • フィーチャーストアスキーマのビューの SELECT および REFERENCE。

  • フィーチャーストアのイニシャライザに渡されたウェアハウスの USAGE。

コンシューマーは、フィーチャーストアのデータを使用するために、以下の権限を持つこともできます。

  • トレーニング用のデータセットを生成するためのフィーチャーストア スキーマおよび/またはデスティネーション スキーマの CREATE TABLE および CREATE DATASET。

  • フィーチャーストアのテーブルの SELECT と REFERENCE、または生成されたデータセットを含むスキーマ。

  • フィーチャーストアの USAGE と DATASETs、または生成されたデータセットを含むスキーマ。

複数のフィーチャストアを使用する場合、個々のフィーチャーストア、またはフィーチャーストアの論理的なグループに対して、この2種類のロールを使用することになります。

注釈

必要なフィーチャーストアのロールと権限を設定するには、 MANAGE GRANTSCREATE ROLECREATE SCHEMA ON DATABASE <DB> の権限を持つロールが必要です。 ACCOUNTADMIN 組み込みロールを使用するか、これらの権限を持つカスタムロールを使用することができます。

Pythonでのアクセス制御設定

snowflake-ml-python パッケージのバージョン1.6.3以降には、 setup_feature_store ユーティリティ API が含まれており、プロデューサーとコンシューマーのロールを権限を持つ新しいフィーチャーストアを設定することができます。以下の例では、データベース名、スキーマ名、ウェアハウス名、プロデューサー・ロール名、コンシューマー・ロール名を記入します。

from snowflake.ml.feature_store import setup_feature_store

setup_feature_store(
    session=session,
    database="<FS_DATABASE_NAME>",
    schema="<FS_SCHEMA_NAME>",
    warehouse="<FS_WAREHOUSE>",
    producer_role="<FS_PRODUCER_ROLE>",
    consumer_role="<FS_CONSUMER_ROLE>",
)
Copy

SQL でのアクセス制御設定

以下の SQL コマンドを使用して、Feature Storeのロールと権限を手動で設定できます。最初のブロックには、 SET コマンドがいくつかあり、プロデューサーロールとコンシューマーロールに使用する名前と、機能ビューを格納するデータベースとスキーマをスクリプトに指定します。これらのオブジェクトがない場合は、すべて作成されます。

-- Initialize variables for usage in SQL scripts below
SET FS_ROLE_PRODUCER = '<FS_PRODUCER_ROLE>';
SET FS_ROLE_CONSUMER = '<FS_CONSUMER_ROLE>';
SET FS_DATABASE = '<FS_DATABASE_NAME>';
SET FS_SCHEMA = '<FS_SCHEMA_NAME>';
SET FS_WAREHOUSE = '<FS_WAREHOUSE>';

-- Create schema
SET SCHEMA_FQN = CONCAT($FS_DATABASE, '.', $FS_SCHEMA);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($SCHEMA_FQN);

-- Create roles
CREATE ROLE IF NOT EXISTS IDENTIFIER($FS_ROLE_PRODUCER);
CREATE ROLE IF NOT EXISTS IDENTIFIER($FS_ROLE_CONSUMER);

-- Build role hierarchy
GRANT ROLE IDENTIFIER($FS_ROLE_PRODUCER) TO ROLE SYSADMIN;
GRANT ROLE IDENTIFIER($FS_ROLE_CONSUMER) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);

-- Grant PRODUCER role privileges
GRANT CREATE DYNAMIC TABLE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT CREATE VIEW ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT CREATE TAG ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT CREATE DATASET ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT CREATE TABLE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);

-- Grant CONSUMER role privileges
GRANT USAGE ON DATABASE IDENTIFIER($FS_DATABASE) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT USAGE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

GRANT SELECT, MONITOR ON FUTURE DYNAMIC TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT SELECT, MONITOR ON ALL DYNAMIC TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

GRANT SELECT, REFERENCES ON FUTURE VIEWS IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT SELECT, REFERENCES ON ALL VIEWS IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

GRANT USAGE ON FUTURE DATASETS IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT USAGE ON ALL DATASETS IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

-- Grant USAGE ON WAREHOUSE to CONSUMER
GRANT USAGE ON WAREHOUSE IDENTIFIER($FS_WAREHOUSE) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
Copy