Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation

Unter diesem Thema wird die Verwendung der Schlüsselpaar-Authentifizierung und der Schlüsselpaar-Rotation in Snowflake beschrieben.

Unter diesem Thema:

Übersicht

Snowflake unterstützt die Verwendung der Schlüsselpaar-Authentifizierung für eine erweiterte Authentifizierungssicherheit als Alternative zur Basisauthentifizierung (d. h. Benutzername und Kennwort).

Diese Authentifizierungsmethode erfordert mindestens ein 2048-Bit-RSA-Schlüsselpaar. Sie können das Privacy Enhanced Mail (PEM)-Private/Public-Schlüsselpaar unter Verwendung von OpenSSL generieren. Einige der unterstützten Snowflake-Clients erlauben die Verwendung verschlüsselter privater Schlüssel zur Verbindung mit Snowflake. Der öffentliche Schlüssel wird dem Snowflake-Benutzer zugewiesen, der den Snowflake-Client zum Verbinden und Authentifizieren bei Snowflake verwendet.

Snowflake unterstützt auch rotierende öffentliche Schlüssel, um die Einhaltung von robusteren Sicherheits- und Governance-Strukturen zu ermöglichen.

Unterstützte Snowflake-Clients

Die folgende Tabelle fasst die Unterstützung der Schlüsselpaar-Authentifizierung zwischen Snowflake-Clients zusammen. Ein Häkchen (d. h. ✔) bedeutet volle Unterstützung. Ein fehlendes Häkchen bedeutet, dass die Schlüsselpaar-Authentifizierung nicht unterstützt wird.

Client

Schlüsselpaar-Authentifizierung

Schlüsselpaar-Rotation

Unverschlüsselte private Schlüssel

SnowSQL (CLI-Client)

Snowflake-Konnektor für Python

Snowflake-Konnektor für Spark

Snowflake-Konnektor für Kafka

Go Driver

JDBC-Treiber

ODBC-Treiber

Node.js-Treiber

.NET-Treiber

Konfigurieren der Schlüsselpaar-Authentifizierung

Führen Sie die folgenden Schritte aus, um die Schlüsselpaar-Authentifizierung für alle unterstützten Snowflake-Clients zu konfigurieren.

Schritt 1: Privaten Schlüssel generieren

Je nachdem, welchen der unterstützten Snowflake-Clients Sie zur Verbindung mit Snowflake verwenden, haben Sie die Möglichkeit, verschlüsselte oder unverschlüsselte private Schlüssel zu generieren. Generell ist es sicherer, verschlüsselte Schlüssel zu generieren. Snowflake empfiehlt, vor diesem Schritt mit Ihren internen Sicherheits- und Governance-Beauftragten zu besprechen, welcher Schlüsseltyp generiert werden soll.

Tipp

Der Befehl zum Generieren eines verschlüsselten Schlüssels fordert zur Eingabe einer Passphrase auf, um den Zugriff auf den Schlüssel zu regeln. Snowflake empfiehlt die Verwendung einer Passphrase, die den PCI-DSS-Standards entspricht, um den lokal generierten privaten Schlüssel zu schützen. Zusätzlich empfiehlt Snowflake, die Passphrase an einem sicheren Ort zu speichern. Wenn Sie für die Verbindung mit Snowflake einen verschlüsselten Schlüssel verwenden, geben Sie die Passphrase während der erstmaligen Verbindung ein. Beachten Sie, dass die Passphrase nur zum Schutz des privaten Schlüssels verwendet wird und niemals an Snowflake gesendet wird.

So Generieren Sie eine lange und komplexe Passphrase basierend auf PCI-DSS-Standards:

  1. Greifen Sie auf die Dokumentbibliothek für PCI-Sicherheitsstandards zu.

  2. Wählen Sie für PCI DSS die neueste Version und die gewünschte Sprache aus.

  3. Füllen Sie das Formular aus, um auf das Dokument zuzugreifen.

  4. Suchen Sie nach Passwords/passphrases must meet the following:, und befolgen Sie die Empfehlungen zu Anforderungen, Tests und Anleitungen für Kennwörter/Passphrasen. Je nach Dokumentversion befindet sich die Phrase wahrscheinlich in einem Abschnitt namens Requirement 8: Identify and authenticate access to system components (oder einem ähnlichen Namen).

Öffnen Sie zunächst ein Terminalfenster, und generieren Sie einen privaten Schlüssel.

Sie können entweder eine verschlüsselte Version des privaten Schlüssels oder eine unverschlüsselte Version des privaten Schlüssels generieren.

Um eine unverschlüsselte Version zu generieren, verwenden Sie den folgenden Befehl:

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

Um eine verschlüsselte Version zu generieren, verwenden Sie den folgenden Befehl (ohne „-nocrypt“):

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

Die Befehle generieren einen privaten Schlüssel im PEM-Format.

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

Schritt 2: Öffentlichen Schlüssel generieren

Generieren Sie über die Befehlszeile den öffentlichen Schlüssel, indem Sie auf den privaten Schlüssel verweisen: Angenommen, der private Schlüssel befindet sich in der Datei rsa_key.p8, dann verwenden Sie den folgenden Befehl:

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

Der Befehl generiert den öffentlichen Schlüssel im PEM-Format.

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

Schritt 3: Private und öffentliche Schlüssel sicher speichern

Kopieren Sie die Dateien der öffentlichen und privaten Schlüssel zur Speicherung in einem lokalen Verzeichnis. Zeichnen Sie den Pfad zu den Dateien auf. Beachten Sie, dass der private Schlüssel im Format PKCS#8 (Public Key Cryptography Standards) gespeichert und mit der im vorherigen Schritt angegebenen Passphrase verschlüsselt wird. Die Datei sollte jedoch weiterhin mit dem von Ihrem Betriebssystem bereitgestellten Dateiberechtigungsmechanismus vor unbefugtem Zugriff geschützt sein.

Dennoch sollte die Datei mit dem vom Betriebssystem bereitgestellten Dateiberechtigungsmechanismus vor unberechtigtem Zugriff geschützt werden. Es liegt in Ihrer Verantwortung, die Datei zu sichern, wenn sie nicht verwendet wird.

Schritt 4: Snowflake-Benutzern einen öffentlichen Schlüssel zuweisen

Führen Sie einen Befehl ALTER USER aus, um dem Snowflake-Benutzer den öffentlichen Schlüssel zuzuweisen.

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

Bemerkung

  • Nur Sicherheitsadministratoren (d. h. Benutzer mit der Rolle SECURITYADMIN oder höher) können andere Benutzer ändern.

  • Schließen Sie die Trennzeichen für den öffentlichen Schlüssel aus der SQL-Anweisung aus.

Schritt 5: Fingerabdruck des öffentlichen Schlüssels des Benutzers verifizieren

Führen Sie einen DESCRIBE USER-Befehl aus, um den Fingerabdruck des öffentlichen Schlüssels des Benutzers zu verifizieren.

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

Bemerkung

Die Eigenschaft RSA_PUBLIC_KEY_2_FP wird unter Konfigurieren der Schlüsselpaar-Rotation beschrieben.

Schritt 6: Snowflake-Client für Verwendung der Schlüsselpaar-Authentifizierung konfigurieren

Aktualisieren Sie den Client, um die Schlüsselpaar-Authentifizierung für die Verbindung mit Snowflake zu verwenden.

Konfigurieren der Schlüsselpaar-Rotation

Snowflake unterstützt mehrere aktive Schlüssel, um eine ununterbrochene Rotation zu ermöglichen. Rotieren und ersetzen Sie Ihre öffentlichen und privaten Schlüssel basierend auf dem Ablaufzeitplan, den Sie intern einhalten.

Derzeit können Sie die Parameter RSA_PUBLIC_KEY und RSA_PUBLIC_KEY_2 für ALTER USER verwenden, um einem einzelnen Benutzer bis zu zwei öffentliche Schlüssel zuzuordnen.

Führen Sie die folgenden Schritte aus, um die Schlüsselpaar-Rotation zu konfigurieren und die Rotation Ihrer Schlüssel auszuführen.

  1. Führen Sie alle Schritte in Konfigurieren der Schlüsselpaar-Authentifizierung mit den folgenden Aktualisierungen aus:

    • Neuen Private/Public-Schlüsselsatz generieren

    • Zuweisen des öffentlichen Schlüssels an einen Benutzer Setzen Sie den Wert des öffentlichen Schlüssels entweder auf RSA_PUBLIC_KEY oder RSA_PUBLIC_KEY_2 (je nachdem, welcher Schlüsselwert gerade nicht verwendet wird). Beispiel:

      alter user jsmith set rsa_public_key_2='JERUEHtcve...';
      
  2. Aktualisieren Sie den Code, um eine Verbindung zu Snowflake herzustellen. Geben Sie den neuen privaten Schlüssel an.

    Snowflake überprüft den korrekten aktiven öffentlichen Schlüssel für die Authentifizierung basierend auf dem privaten Schlüssel, der mit Ihren Verbindungsinformationen übermittelt wurde.

  3. Entfernen Sie mit dem Befehl ALTER USER den alten öffentlichen Schlüssel aus dem Benutzerprofil.

    alter user jsmith unset rsa_public_key;