Snowflake Feature Storeのアクセス制御モデル¶
注釈
Snowflake Feature Store API は、Snowpark ML Pythonパッケージ(snowflake-ml-python
)v1.5.0以降で利用可能です。
Snowflake Feature Storeで必要な権限は、ユーザーのタイプによって異なります。
プロデューサー は、機能ビューを作成し、操作することができます。
コンシューマー は、フィーチャーストアの機能ビューやエンティティの情報を読み取ることができます。
通常、各タイプのユーザーは、必要な権限を持つ独自の Snowflakeデータベースロール を持ちます。フィーチャーストアのロールは、 ロール階層 を使用して構成するのが最も自然です。

プロデューサーは以下の権限を必要とします。
フィーチャーストア スキーマ上の 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 GRANTS
、 CREATE ROLE
、 CREATE 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>",
)
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);