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, wie mit Benutzername und Kennwort.

Diese Authentifizierungsmethode erfordert mindestens ein 2048-Bit-RSA-Schlüsselpaar. Sie können das Public/Private-PEM-Schlüsselpaar (Privacy Enhanced Mail) 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 (✔) 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

PHP-PDO-Treiber für Snowflake

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.

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
Copy

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

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

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

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

Ö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
Copy

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

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

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.

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...';
Copy

Bemerkung

  • Nur Eigentümer eines Benutzers oder Benutzer mit der Rolle SECURITYADMIN oder höher können einen Benutzer ändern. Weitere Informationen dazu finden Sie unter Übersicht zur Zugriffssteuerung und GRANT OWNERSHIP

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

Fingerabdruck des öffentlichen Schlüssels des Benutzers überprüfen

  1. Führen Sie den folgenden Befehl aus, um den Fingerabdruck des öffentlichen Schlüssels des Benutzers abzurufen:

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

    Ausgabe:

    Azk1Pq...
    
  2. Kopieren Sie die Ausgabe.

  3. Führen Sie den folgenden Befehl in der Befehlszeile aus:

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

    Ausgabe:

    writing RSA key
    Azk1Pq...
    
  4. Vergleichen Sie beide Ausgaben. Wenn beide Ausgaben übereinstimmen, hat der Benutzer seinen öffentlichen Schlüssel korrekt konfiguriert.

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 Verfallszeitplan, 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 unter Konfigurieren der Schlüsselpaar-Authentifizierung mit den folgenden Aktualisierungen durch:

    • Neuen Private/Public-Schlüsselsatz generieren

    • Benutzern einen öffentlichen Schlüssel zuweisen Wert des öffentlichen Schlüssels entweder auf RSA_PUBLIC_KEY oder RSA_PUBLIC_KEY_2 setzen, je nachdem, welcher Schlüsselwert gerade nicht verwendet wird. Beispiel:

      ALTER USER jsmith SET RSA_PUBLIC_KEY_2='JERUEHtcve...';
      
      Copy
  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;
    
    Copy