Modèle de contrôle d’accès au Snowflake Feature Store

Note

L’API Snowflake Feature Store est disponible dans le paquet Snowpark ML Python (snowflake-ml-python) v1.5.0 et ultérieure.

Les privilèges requis par le Snowflake Feature Store dépendent du type d’utilisateur.

  • Les producteurs peuvent créer et exploiter des vues de fonctions.

  • Les consommateurs peuvent lire des informations sur les vues de fonctions et les entités dans le Feature Store.

En règle générale, chaque type d’utilisateur aura son propre rôle dans la base de données Snowflake avec les privilèges nécessaires. Les rôles du magasin de fonctionnalités sont configurés le plus naturellement à l’aide d’une hiérarchie des rôles.

Exemples de configuration des rôles de consommateur et de producteur dans deux Feature Stores

Les producteurs ont besoin des privilèges suivants :

  • CREATE DYNAMIC TABLE, CREATE TAG et CREATE VIEW sur le schéma du Feature Store.

    Note

    Pour les vues de fonctionnalités gérées par Snowflake (soutenues par une table dynamique) avec actualisation incrémentielle, les tables sources doivent avoir le suivi des modifications activé, ou l’utilisateur doit avoir le privilège OWNERSHIP sur ces tables pour activer automatiquement le suivi des modifications lors de la création de la vue des fonctionnalités.

  • CREATE TABLE et CREATE DATASET sur le Feature Store ou le schéma de destination lors de la génération d’ensembles de données pour l’entraînement.

  • OPERATE sur les tables dynamiques et les tâches dans le schéma du Feature Store pour gérer les paramètres d’actualisation de Feature View.

  • USAGE sur l’entrepôt transmis à l’initialisateur du Feature Store.

  • CREATE SCHEMA est facultatif si le schéma du Feature Store existe déjà et que les producteurs disposent de privilèges d’utilisation sur celui-ci.

  • Tous les privilèges des consommateurs énumérés ci-dessous

Les consommateurs ont besoin au minimum des privilèges suivants :

  • USAGE sur la base de données et le schéma du Feature Store.

  • SELECT et MONITOR sur les DYNAMIC TABLES dans le schéma du Feature Store.

  • SELECT et REFERENCE sur les vues du schéma du Feature Store.

  • USAGE sur l’entrepôt transmis à l’initialisateur du Feature Store.

Les consommateurs peuvent également disposer des privilèges suivants pour leur permettre d’utiliser les données du Feature Store :

  • CREATE TABLE et CREATE DATASET sur le schéma du Feature Store et/ou le schéma de destination pour générer des ensembles de données pour l’entraînement.

  • SELECT et REFERENCE sur les tables du Feature Store ou sur tout schéma contenant des ensembles de données générés.

  • USAGE sur les DATASETs dans le schéma du Feature Store ou dans tout schéma contenant des ensembles de données générés.

Si vous disposez de plusieurs Feature Stores, vous aurez probablement ces deux types de rôles pour chaque boutique de fonctionnalités ou pour des groupes logiques de Feature Stores.

Note

Un rôle doté des privilèges MANAGE GRANTS, CREATE ROLE, et CREATE SCHEMA ON DATABASE <DB> est nécessaire pour configurer les rôles et privilèges nécessaires sur le Feature Store. Vous pouvez utiliser le rôle intégré ACCOUNTADMIN ou un rôle personnalisé avec ces privilèges.

Configurer le contrôle d’accès dans Python

La version 1.6.3 et les versions ultérieures du paquet snowflake-ml-python comprennent une API utilitaire setup_feature_store pour configurer un nouveau Feature Store avec des rôles et des privilèges de producteur et de consommateur. Dans l’exemple suivant, renseignez les noms de la base de données, du schéma, de l’entrepôt et des rôles de producteur et de consommateur là où indiqué.

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

Configurer le contrôle d’accès en SQL

Vous pouvez configurer manuellement les rôles et privilèges du Feature Store à l’aide des commandes SQL suivantes. Notez que dans le premier bloc, il y a plusieurs commandes SET qui indiquent au script les noms que vous voulez utiliser pour vos rôles de producteur et de consommateur ainsi que la base de données et le schéma où les vues de fonctionnalités seront stockées. Tous ces objets sont créés s’ils n’existent pas.

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