Authentification par paire de clés et rotation de paires de clés

Ce chapitre décrit l’utilisation de l’authentification par paire de clés et la rotation des paires de clés dans Snowflake.

Dans ce chapitre :

Vue d’ensemble

Snowflake prend en charge l’utilisation de l’authentification par paire de clés pour une sécurité d’authentification renforcée comme alternative à l’authentification de base telle que via le nom d’utilisateur et le mot de passe.

Cette méthode d’authentification requiert, au minimum, une paire de clés de 2048 bits RSA. Vous pouvez générer la paire de clés publiques-privées PEM (Privacy Enhanced Mail) via OpenSSL. Certains des clients Snowflake pris en charge permettent d’utiliser des clés privées cryptées pour se connecter à Snowflake. La clé publique est attribuée à l’utilisateur Snowflake qui utilise le client Snowflake pour se connecter et s’authentifier à Snowflake.

Snowflake prend également en charge la rotation des clés publiques dans un effort pour permettre la conformité avec des postures de sécurité et de gouvernance plus robustes.

Clients Snowflake pris en charge

Le tableau suivant résume la prise en charge de l’authentification par paire de clés parmi les clients Snowflake. Une coche (✔) indique une prise en charge complète. Une coche manquante indique que l’authentification par paire de clés n’est pas prise en charge.

Client

Authentification par paire de clés

Rotation de paire de clés

Clés privées non chiffrées

SnowSQL (CLI client)

Connecteur Snowflake pour Python

Connecteur Snowflake pour Spark

Connecteur Snowflake pour Kafka

Pilote Go

Pilote JDBC

Pilote ODBC

Pilote Node.js

Pilote .NET

Pilote PHP PDO de Snowflake

Configuration de l’authentification par paire de clés

Effectuez les étapes suivantes pour configurer l’authentification par paire de clés pour tous les clients Snowflake pris en charge.

Générer la clé privée

Selon le client Snowflake pris en charge que vous utilisez pour vous connecter à Snowflake, vous avez la possibilité de générer des clés privées chiffrées ou non. En général, il est plus sûr de générer des clés chiffrées. Snowflake recommande de communiquer avec vos responsables de la sécurité interne et de la gouvernance pour déterminer le type de clé à générer avant d’effectuer cette étape.

Astuce

La commande de génération d’une clé chiffrée demande une phrase secrète pour réguler l’accès à la clé. Snowflake recommande d’utiliser une phrase secrète conforme aux normes PCI DSS pour protéger la clé privée générée localement. En outre, Snowflake recommande de conserver la phrase secrète dans un endroit sûr. Si vous utilisez une clé chiffrée pour vous connecter à Snowflake, saisissez la phrase secrète lors de la connexion initiale. La phrase secrète n’est utilisée que pour protéger la clé privée et ne sera jamais envoyée à Snowflake.

Pour générer une phrase secrète longue et complexe basée sur les normes PCI DSS, procédez ainsi :

  1. Accédez à la bibliothèque de documents des normes de sécurité PCI.

  2. Pour PCI DSS, sélectionnez la version la plus récente et la langue de votre choix.

  3. Remplissez le formulaire pour accéder au document.

  4. Recherchez Passwords/passphrases must meet the following: et suivez les recommandations relatives aux exigences, tests et conseils relatifs au mot de passe/phrase secrète. Selon la version du document, la phrase se trouve probablement dans une section appelée Requirement 8: Identify and authenticate access to system components ou portant un nom similaire.

Pour commencer, ouvrez une fenêtre de terminal et générez une clé privée.

Vous pouvez générer une version chiffrée de la clé privée ou une version non chiffrée de la clé privée.

Pour générer une version non chiffrée, utilisez la commande suivante :

openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
Copy

Pour générer une version chiffrée, utilisez la commande suivante, qui omet -nocrypt :

openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 des3 -inform PEM -out rsa_key.p8
Copy

Les commandes génèrent une clé privée au format PEM.

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6T...
-----END ENCRYPTED PRIVATE KEY-----
Copy

Générer une clé publique

Depuis la ligne de commande, générez la clé publique en faisant référence à la clé privée. La commande suivante estime que la clé privée est chiffrée et contenue dans le fichier nommé rsa_key.p8.

openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
Copy

La commande génère la clé publique au format PEM.

-----BEGIN PUBLIC KEY-----
MIIBIj...
-----END PUBLIC KEY-----
Copy

Stocker les clés privées et publiques en toute sécurité

Copiez les fichiers de clés publiques et privées dans un répertoire local en vue de leur stockage. Enregistrez le chemin d’accès aux fichiers. Notez que la clé privée est stockée au format PKCS#8 (Public Key Cryptography Standards) et est chiffrée à l’aide de la phrase secrète que vous avez spécifiée à l’étape précédente.

Toutefois, le fichier doit toujours être protégé contre tout accès non autorisé au moyen du mécanisme d’autorisation de fichier fourni par votre système d’exploitation. Il est de votre responsabilité de sécuriser le fichier lorsqu’il n’est pas utilisé.

Attribuer la clé publique à un utilisateur Snowflake

Exécutez une commande ALTER USER pour attribuer la clé publique à un utilisateur Snowflake.

ALTER USER jsmith SET RSA_PUBLIC_KEY='MIIBIjANBgkqh...';
Copy

Note

  • Seuls les propriétaires d’un utilisateur ou les utilisateurs ayant le rôle SECURITYADMIN ou un rôle supérieur peuvent modifier un utilisateur. Pour plus d’informations, voir Aperçu du contrôle d’accès et GRANT OWNERSHIP

  • Exclure les délimiteurs de la clé publique dans l’instruction SQL.

Vérifier l’empreinte digitale de la clé publique de l’utilisateur

  1. Exécutez la commande suivante pour récupérer l’empreinte digitale de la clé publique de l’utilisateur :

    DESC USER jsmith;
    SELECT TRIM((SELECT "value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
      WHERE "property" = 'RSA_PUBLIC_KEY_FP'), 'SHA256:');
    
    Copy

    Sortie :

    Azk1Pq...
    
  2. Copiez la sortie.

  3. Exécutez la commande suivante sur la ligne de commande :

    openssl rsa -pubin -in rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl enc -base64
    
    Copy

    Sortie :

    writing RSA key
    Azk1Pq...
    
  4. Comparez les deux sorties. Si les deux sorties correspondent, cela signifie que l’utilisateur a correctement configuré sa clé publique.

Configurer le client Snowflake pour qu’il utilise l’authentification par paire de clés

Mettez à jour le client pour qu’il utilise l’authentification par paire de clés pour se connecter à Snowflake.

Configuration de la rotation de paires de clés

Snowflake accepte plusieurs clés actives pour permettre une rotation ininterrompue. Faites pivoter et remplacez vos clés publiques et privées en fonction du calendrier d’expiration que vous suivez en interne.

Actuellement, vous pouvez utiliser les paramètres RSA_PUBLIC_KEY et RSA_PUBLIC_KEY_2 pour ALTER USER afin d’associer jusqu’à 2 clés publiques à un seul utilisateur.

Suivez ces étapes pour configurer la rotation des paires de clés et faire tourner vos clés.

  1. Effectuez toutes les étapes à la section Configuration de l’authentification par paire de clés avec les mises à jour suivantes :

    • Générer un nouvel ensemble de clés privées et publiques.

    • Attribuer la clé publique à l’utilisateur. Définir la valeur de la clé publique sur RSA_PUBLIC_KEY ou sur RSA_PUBLIC_KEY_2, suivant la valeur de la clé qui n’est actuellement pas utilisée. Par exemple :

      ALTER USER jsmith SET RSA_PUBLIC_KEY_2='JERUEHtcve...';
      
      Copy
  2. Mettez à jour le code pour vous connecter à Snowflake. Spécifiez la nouvelle clé privée.

    Snowflake vérifie la bonne clé publique active pour l’authentification sur la base de la clé privée soumise avec vos informations de connexion.

  3. Retirez l’ancienne clé publique du profil utilisateur à l’aide de la commande ALTER USER.

    ALTER USER jsmith UNSET RSA_PUBLIC_KEY;
    
    Copy