Rôles Snowflake Postgres¶
Postgres dispose de son propre système d’authentification basé sur les rôles pour gérer les connexions aux bases de données et utiliser les bases de données sur un serveur Postgres. Ces rôles sont distincts des rôles Snowflake. Les rôles Postgres sont utilisés pour accéder et gérer les bases de données, les tables et d’autres objets au sein des instances Snowflake Postgres.
Lorsque vous créez une instance, Snowflake crée automatiquement deux rôles gérés spéciaux que vous pouvez utiliser, décrits ci-dessous.
Pour plus d’informations sur la gestion des rôles Postgres, consultez la documentation Postgres.
Note
Ici et dans de nombreux autres endroits, vous verrez les termes « rôle » et « utilisateur » utilisés de manière interchangeable dans le contexte de la gestion des utilisateurs Postgres. En effet, un utilisateur Postgres est simplement un rôle qui possède l’attribut LOGIN associé au rôle Postgres.
Rôles gérés Snowflake Postgres¶
Snowflake Postgres fournit deux rôles gérés qui sont automatiquement créés au moment de la création de l’instance.
Le rôle snowflake_admin¶
Le rôle snowflake_admin est un rôle Postgres à haut privilège utilisé pour administrer votre instance Snowflake Postgres. Il ne s’agit pas d’un super-utilisateur Postgres complet ; certaines opérations restent restreintes et sont gérées par Snowflake. Cependant, il dispose de privilèges élevés qui incluent :
Création et gestion de rôles Postgres.
Création et gestion de bases de données.
Gestion de la réplication pour votre instance Snowflake Postgres.
Contournement des politiques de sécurité au niveau des lignes (RLS) le cas échéant.
En outre, snowflake_admin est un membre de plusieurs rôles Postgres intégrés qui offrent des capacités de surveillance et opérationnelles, notamment :
pg_signal_backendpg_use_reserved_connectionspg_create_subscriptionpg_read_all_settingspg_read_all_statspg_stat_scan_tablespg_monitorsnowflake_admin_group
Le rôle application¶
Le rôle application est un rôle non super-utilisateur qui dispose par défaut des autorisations nécessaires pour créer des objets dans la base de données postgres. Les nouvelles autorisations ou la propriété pour ce rôle doivent être accordées par le rôle snowflake_admin.
Sécurité des mots de passe Postgres¶
Régénération des identifiants de connexion pour les rôles gérés Snowflake Postgres¶
Les identifiants de connexion pour les rôles snowflake_admin et application sont générés lorsque vous créez l’instance et ne sont affichés qu’une seule fois. Ces identifiants de connexion peuvent être régénérés à tout moment, invalidant les identifiants de connexion existants.
À partir du tableau de bord, vous pouvez régénérer les identifiants de connexion pour le rôle snowflake_admin de votre instance.
Dans le menu de navigation, sélectionnez Postgres.
Sélectionnez votre instance.
Dans le menu Manage en haut à droite, sélectionnez Regenerate credentials.
Cliquez sur le bouton Acknowledge & continue pour confirmer l’action.
Pour régénérer les identifiants de connexion pour le rôle
snowflake_adminouapplication, vous pouvez utiliser une commande ALTER POSTGRES SERVICE avec le paramètre RESET ACCESS.ALTER POSTGRES SERVICE [IF EXISTS] <name> RESET ACCESS FOR { 'snowflake_admin' | 'application' }
Nécessite le privilège OWNERSHIP ou OPERATE
Une ligne avec la colonne suivante sera renvoyée :
password
Exemple de rotation des identifiants de connexion
Réinitialisez l’accès pour le rôle
snowflake_adminpour une instance Snowflake Postgres nomméemy_instance:ALTER POSTGRES SERVICE my_instance RESET ACCESS FOR 'snowflake_admin';
Définition de mots de passe pour d’autres rôles Postgres¶
Les instances Snowflake Postgres sont configurées pour l’authentification par mot de passe scram-sha-256. Lorsque de nouveaux mots de passe sont définis, un hachage scram-sha-258 est généré et stocké par le serveur, mais lorsque le paramètre Postgres log_statement est défini sur une valeur autre que none, alors les commandes CREATE ROLE et ALTER ROLE DDL sont entièrement consignées dans le journal du serveur Postgres. Par conséquent, vous devez vous assurer que les mots de passe en texte clair ne sont pas enregistrés dans le cadre de ces instructions.
Désactivation de la journalisation des instructions pour les commandes DDL Postgres CREATE ROLE et ALTER ROLE¶
La méthode la plus simple pour empêcher les mots de passe en texte clair utilisés dans les instructions CREATE ROLE et ALTER ROLE DDL d’apparaître dans le journal du serveur Postgres consiste à désactiver le paramètre log_statement pour la transaction dans laquelle vous les exécutez en utilisant SET LOCAL :
BEGIN;
SET LOCAL log_statement = 'none';
CREATE USER mynewrole PASSWORD 'mynewpassword';
COMMIT;
Utilisation de la commande psql \password du client Postgres¶
La psql de Postgres dispose d’une méta-commande password <https://www.postgresql.org/docs/current/app-psql.html>_ qui peut être utilisée pour modifier le mot de passe des utilisateurs existants. Elle précalcule le hachage scram-sha-256 du mot de passe saisi et utilise ce dernier dans la commande ALTER ROLE envoyée au serveur. Pour utiliser cette méthode, vous devez d’abord créer de nouveaux utilisateurs sans mot de passe, puis définir le mot de passe de chaque utilisateur avec la méta-commande psql \password.
postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE
postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:
Si log_statement est défini sur une valeur autre que « none », alors l’entrée de journal pour la commande ALTER ROLE envoyée par psql pour la commande \password ci-dessus affichera le hachage scram-sha-256 calculé plutôt que le mot de passe réel en texte clair. Cette méthode peut être combinée avec la désactivation complète de log_statement comme décrit ci-dessus, afin d’empêcher même ce hachage d’apparaître dans le journal Postgres :
postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE
postgres=# BEGIN;
BEGIN
postgres=# SET LOCAL log_statement = 'none';
SET
postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:
postgres=# COMMIT;
COMMIT
Limitations des rôles¶
Dans Snowflake Postgres, certaines opérations sont réservées au service lui-même et ne peuvent être effectuées par aucun rôle géré par le client, notamment snowflake_admin. Les exemples incluent :
Modification des paramètres de configuration au niveau du serveur protégé gérés par Snowflake
Modification ou désactivation des composants ou des extensions de base gérés par Snowflake
Accès ou modification des bases de données du système gérées par Snowflake ou des schémas utilisés par le service
Accès ou modification du système de fichiers de l’instance Snowflake Postgres
Modification directe des tables du catalogue système
Création d’autres super-utilisateurs
Création de plus de 64 rôles dans l’instance
Création de plus de 32 bases de données dans l’instance
Exécution de la commande ALTER SYSTEM
Accès aux fonctions génériques d’accès aux fichiers Postgres qui autorisent l’accès au système de fichiers.
L’extension Snowflake Postgres peut introduire des restrictions supplémentaires sur ce que snowflake_admin et application peuvent faire dans une instance. Ces limitations spécifiques aux extensions peuvent évoluer avec le temps et seront documentées avec le comportement correspondant de l’extension. Si une opération est bloquée, vous recevrez une erreur indiquant qu’elle n’est pas autorisée dans Snowflake Postgres.