Authentification par paires de clés et rotation des 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 (c’est-à-dire nom d’utilisateur et 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 Privacy Enhanced Mail (PEM) 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 (comme ✔) indique une prise en charge totale. 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 (client CLI)

Connecteur Snowflake pour Python

Connecteur Snowflake pour Spark

Connecteur Snowflake pour Kafka

Pilote Go

Pilote JDBC

Pilote ODBC

Pilote Node.js

Pilote .NET

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.

Étape 1 : 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, vous devrez entrer 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 secrète se trouve probablement dans une section appelée Requirement 8: Identify and authenticate access to system components (ou 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

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

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

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

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6TAbBgkqhkiG9w0BBQMwDgQILYPyCppzOwECAggABIIEyLiGSpeeGSe3xHP1
wHLjfCYycUPennlX2bd8yX8xOxGSGfvB+99+PmSlex0FmY9ov1J8H1H9Y3lMWXbL
...
-----END ENCRYPTED PRIVATE KEY-----

Étape 2 : 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

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

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy+Fw2qv4Roud3l6tjPH4
zxybHjmZ5rhtCz9jppCV8UTWvEXxa88IGRIHbJ/PwKW/mR8LXdfI7l/9vCMXX4mk
...
-----END PUBLIC KEY-----

Étape 3 : 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é.

Étape 4 : 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...';

Note

  • Seuls les administrateurs de sécurité (c’est-à-dire les utilisateurs ayant le rôle SECURITYADMIN) ou ayant un rôle supérieur peuvent modifier un utilisateur.

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

Étape 5 : Vérifier l’empreinte de la clé publique de l’utilisateur

Exécutez une commande DESCRIBE USER pour vérifier l’empreinte de la clé publique de l’utilisateur.

DESC USER jsmith;
+---------------------+-----------------------------------------------------+---------+----------------------------------------------+
| property            | value                                               | default | description                                  |
+---------------------+-----------------------------------------------------+---------+----------------------------------------------+
| NAME                | JSMITH                                              | null    | Name                                         |
...
...
| RSA_PUBLIC_KEY_FP   | SHA256:nvnONUsfiuycCLMXIEWG4eTp4FjhVUZQUQbNpbSHXiA= | null    | Fingerprint of user's RSA public key.        |
| RSA_PUBLIC_KEY_2_FP | null                                                | null    | Fingerprint of user's second RSA public key. |
+---------------------+-----------------------------------------------------+---------+----------------------------------------------+

Note

La propriété RSA_PUBLIC_KEY_2_FP est décrite dans Configuration de la rotation par paire de clés.

Étape 6 : Configurer le client Snowflake pour utiliser 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 par paire 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 de la 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 RSA_PUBLIC_KEY_2 (la valeur de la clé qui n’est pas actuellement utilisée). Par exemple :

      alter user jsmith set rsa_public_key_2='JERUEHtcve...';
      
  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;