Lutril a besoin de votre identifiant de compte et d’un jeton d’accès programmatique pour lister, créer, désactiver des utilisateurs Snowflake et leur attribuer des rôles via l’API REST. Chaque instruction ci-dessous s’exécute dans une feuille de calcul Snowsight, en cinq minutes environ de bout en bout. Snowflake cloisonne les rôles et les utilisateurs par compte : un jeton n’atteint jamais que le compte dans lequel il a été créé. Répétez donc l’opération pour chaque environnement à gouverner.
SECURITYADMIN, attribué à l’utilisateur de service et défini comme ROLE_RESTRICTION du jeton
Une politique réseau couvrant l’utilisateur de service (Snowflake en exige une pour qu’un jeton de service fonctionne)
API REST v2 : GET /users, GET /roles, POST /users, PUT /users/{name}, POST /users/{name}/grants
Étapes de configuration
1
Ouvrez une feuille de calcul Snowsight sur le compte que Lutril doit gouverner. Le rôle ACCOUNTADMIN est nécessaire pour l’attribution de l’étape 3 ; tout le reste demande USERADMIN ou plus.
Créez l’utilisateur de service. TYPE = SERVICE est l’élément déterminant : c’est un utilisateur qui ne peut pas se connecter de façon interactive, sans mot de passe ni MFA, si bien que le jeton de l’étape 4 est son unique identifiant.
SQL
USE ROLE USERADMIN;
CREATE USER IF NOT EXISTS LUTRIL_SVC
TYPE = SERVICE
DEFAULT_ROLE = SECURITYADMIN
COMMENT = 'Lutril access governance service account';
LUTRIL_SVC n’est qu’un nom. Utilisez votre convention de nommage, et gardez-la cohérente entre environnements pour que la piste d’audit se lise de la même façon partout.
3
Attribuez-lui SECURITYADMIN. Lutril doit pouvoir attribuer et révoquer des rôles sur des utilisateurs qu’il n’a pas créés, ce qui exige le privilège MANAGE GRANTS que porte SECURITYADMIN. USERADMIN seul peut créer des utilisateurs mais ne peut pas attribuer des rôles qu’il ne possède pas.
SQL
USE ROLE ACCOUNTADMIN;
GRANT ROLE SECURITYADMIN TO USER LUTRIL_SVC;
4
Rattachez une politique réseau. Snowflake refuse de créer ou d’utiliser un jeton sur un utilisateur de service qu’aucune politique réseau ne couvre : ce n’est donc pas optionnel. Passez le CREATE si vous avez déjà une politique au niveau du compte.
SQL
USE ROLE SECURITYADMIN;
CREATE NETWORK POLICY IF NOT EXISTS LUTRIL_ACCESS
ALLOWED_IP_LIST = ('203.0.113.10/32')
COMMENT = 'Egress addresses Lutril calls Snowflake from';
ALTER USER LUTRIL_SVC SET NETWORK_POLICY = LUTRIL_ACCESS;
203.0.113.10 est un exemple, tiré de la plage réservée à la documentation. Remplacez-la par les adresses de sortie de Lutril avant d’exécuter l’instruction, sinon le jeton s’authentifiera depuis nulle part. Demandez-nous la liste à jour.Guide des politiques réseau
5
Générez le jeton. ROLE_RESTRICTION est obligatoire pour un utilisateur de service et plafonne ce que le jeton pourra jamais faire, même si l’utilisateur reçoit davantage de droits par la suite. L’expiration est de 15 jours par défaut ; 365 est le maximum autorisé par Snowflake.
SQL
USE ROLE ACCOUNTADMIN;
ALTER USER IF EXISTS LUTRIL_SVC
ADD PROGRAMMATIC ACCESS TOKEN LUTRIL_PAT
ROLE_RESTRICTION = 'SECURITYADMIN'
DAYS_TO_EXPIRY = 365
COMMENT = 'Lutril REST API access';
L’instruction renvoie le secret une seule fois, dans son résultat. Copiez-le avant de fermer la feuille de calcul : Snowflake ne le réaffichera pas, et la seule solution de secours est d’ajouter un second jeton.
6
Relevez votre identifiant de compte. Lutril en déduit l’hôte de l’API, il doit donc être au format orgname-account_name et non l’ancien localisateur.
SQL
SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME() AS account_identifier;
Facultatif, et ces trente secondes valent la peine : vérifiez que le jeton peut effectuer exactement le premier appel de Lutril. Un 200 avec un tableau JSON signifie que c’est bon ; un 401 signifie que le jeton ou sa restriction de rôle est incorrect, et un délai d’attente dépassé signifie que la politique réseau ne couvre pas l’appelant.
Si le nom de votre compte contient un tiret bas, vous pouvez le remplacer par un tiret dans le nom d’hôte ; Snowflake accepte les deux formes.
8
Dans Lutril, connectez Snowflake et collez l’identifiant de compte et le jeton. Programmez un rappel pour renouveler le jeton avant l’expiration choisie : quand un jeton expire, l’inventaire et le provisionnement s’arrêtent, et toute revue d’accès portant sur ce compte devient obsolète.