Authentifizieren von Verbindungen¶
Für die Authentifizierung bei Snowflake können Sie eine der folgenden Optionen verwenden:
Kennwortbasierte Authentifizierung.
Um diese Methode zu verwenden, stellen Sie beim Aufbau der Verbindung die
password-Option ein.Single Sign-On (SSO) über einen Webbrowser
Natives SSO über Okta
Außerdem unterstützt der Snowflake Node.js-Treiber die Möglichkeit, SSO- und MFA-Token zu cachen. Weitere Informationen dazu finden Sie unter Cache für Authentifizierung mit Token.
Verwenden Sie Single Sign-On (SSO) über einen Webbrowser¶
Wenn Sie Snowflake für die Verwendung von Single Sign-On (SSO) konfiguriert haben, können Sie Ihre Clientanwendung so konfigurieren, dass browserbasiertes SSO für die Authentifizierung verwendet wird.
In Ihrem Anwendungscode:
Setzen Sie die Option
authenticatoraufEXTERNALBROWSER.Rufen Sie zum Herstellen einer Verbindung die Methode
connectAsyncund nicht die Methodeconnectauf.
Beispiel:
// Use a browser to authenticate via SSO.
var connection = snowflake.createConnection({
...,
authenticator: "EXTERNALBROWSER"
});
// Establish a connection. Use connectAsync, rather than connect.
connection.connectAsync(
function (err, conn)
{
... // Handle any errors.
}
).then(() =>
{
// Execute SQL statements.
var statement = connection.execute({...});
});
Weitere Informationen zur Verwendung von browserbasiertem SSO für die Authentifizierung finden Sie unter Browser-basiertes SSO.
Verwenden Sie native SSO über Okta.¶
Wenn Sie Snowflake für die Verwendung von Single Sign-On (SSO) konfiguriert haben, und zwar über Okta, können Sie Ihre Clientanwendung so konfigurieren, dass sie die native SSO-Authentifizierung über Okta verwendet.
In Ihrem Anwendungscode:
Legen Sie die folgenden Optionen fest:
Setzen Sie die Option
authenticatorauf den Okta-URL-Endpunkt für Ihr Okta-Konto (z. B.https://<Name_des_Okta-Kontos>.okta.com).Setzen Sie die Optionen
usernameundpasswordauf den Benutzernamen und das Kennwort für Ihren Identitätsanbieter (IdP).
Rufen Sie zum Herstellen einer Verbindung die Methode
connectAsyncund nicht die Methodeconnectauf.
Beispiel:
// Use native SSO authentication through Okta.
var connection = snowflake.createConnection({
...,
username: '<user_name_for_okta>',
password: '<password_for_okta>',
authenticator: "https://myaccount.okta.com"
});
// Establish a connection.
connection.connectAsync(
function (err, conn)
{
... // Handle any errors.
}
);
// Execute SQL statements.
var statement = connection.execute({...});
Weitere Informationen zur Verwendung der nativen SSO-Authentifizierung über Okta finden Sie unter Natives SSO – Nur Okta.
Verwenden Sie Authentifizierung von Schlüsselpaaren und Schlüsselpaar-Rotation¶
Der Treiber unterstützt Schlüsselpaar-Authentifizierung und Schlüsselrotation. Führen Sie die folgenden Schritte aus, um die Schlüsselpaar-Authentifizierung und die Schlüsselrotation zu verwenden:
Konfigurieren Sie die Schlüsselpaar-Authentifizierung, wie unter Schlüsselpaar-Authentifizierung und Schlüsselpaar-Rotation erläutert.
In Ihrem Anwendungscode:
Setzen Sie die Option
authenticatoraufSNOWFLAKE_JWT.Verwenden Sie den privaten Schlüssel zur Authentifizierung auf eine der folgenden Arten:
Setzen Sie die Option
privateKeyauf den privaten Schlüssel.Setzen Sie die Option
privateKeyPathauf den Pfad zur Datei des privaten Schlüssels.Wenn die Datei verschlüsselt ist, müssen Sie auch die Option
privateKeyPassauf die Passphrase setzen, um den privaten Schlüssel zu entschlüsseln.
Im folgenden Beispiel wird der private Schlüssel aus einer Datei geladen und die Option
privateKeyauf den privaten Schlüssel gesetzt:// Read the private key file from the filesystem. var crypto = require('crypto'); var fs = require('fs'); var privateKeyFile = fs.readFileSync('<path_to_private_key_file>/rsa_key.p8'); // Get the private key from the file as an object. const privateKeyObject = crypto.createPrivateKey({ key: privateKeyFile, format: 'pem', passphrase: 'passphrase' }); // Extract the private key from the object as a PEM-encoded string. var privateKey = privateKeyObject.export({ format: 'pem', type: 'pkcs8' }); // Use the private key for authentication. var connection = snowflake.createConnection({ ... authenticator: "SNOWFLAKE_JWT", privateKey: privateKey }); // Establish a connection. connection.connect( function (err, conn) { ... // Handle any errors. } ); // Execute SQL statements. var statement = connection.execute({...});Im folgenden Beispiel wird die Option
privateKeyPathauf eine verschlüsselte Datei mit privatem Schlüssel gesetzt und die OptionprivateKeyPassauf die Passphrase gesetzt, die zum Entschlüsseln des privaten Schlüssels verwendet wird:// Use an encrypted private key file for authentication. // Specify the passphrase for decrypting the key. var connection = snowflake.createConnection({ ... authenticator: "SNOWFLAKE_JWT", privateKeyPath: "<path-to-privatekey>/privatekey.p8", privateKeyPass: '<passphrase_to_decrypt_the_private_key>' }); // Establish a connection. connection.connect( function (err, conn) { ... // Handle any errors. } ); // Execute SQL statements. var statement = connection.execute({...});
Verwenden von OAuth¶
Um eine Verbindung mit OAuth herzustellen, setzen Sie die Option authenticator auf OAUTH und die Option token auf das OAuth-Zugriffstoken. Beispiel:
// Use OAuth for authentication.
var connection = snowflake.createConnection({
...
authenticator: "OAUTH",
token: "<your_oauth_token>"
});
// Establish a connection.
connection.connect(
function (err, conn)
{
... // Handle any errors.
}
);
// Execute SQL statements.
var statement = connection.execute({...});
Weitere Informationen dazu finden Sie unter Clients, Treiber und Konnektoren.
Verwenden Sie den OAuth 2.0-Client-Anmeldeinformationsablauf¶
Der OAuth 2.0-Client-Anmeldeinformationsablauf bietet einen sicheren Weg für die Machine-to-Machine (M2M)-Authentifizierung, wie z. B. den Snowflake Connector für Python, der sich mit einem Backend-Service verbindet. Im Gegensatz zum OAuth 2.0-Autorisierungscodeablauf ist diese Methode nicht auf benutzerspezifische Daten angewiesen.
So aktivieren Sie den OAuth 2.0-Client-Anmeldeinformationsablauf:
Setzen Sie den Verbindungsparameter
authenticatoraufoauth_client_credentials.Stellen Sie die folgenden OAuth-Verbindungsparameter ein:
oauthClientId: Wert derclient id, die vom Identitätsanbieter für die Snowflake-Integration bereitgestellt wird (Snowflake-Metadaten für die Sicherheitsintegration).oauthClientSecret: Wert desclient secret, das vom Identitätsanbieter für die Snowflake-Integration bereitgestellt wird (Snowflake-Metadaten für die Sicherheitsintegration).oauthTokenRequestUrl: Endpunkt des Identitätsanbieters, der die Zugriffstoken an den Treiber liefert.oauthScope: In der Autorisierungsanfrage des Identitätsanbieters angeforderter Bereich. Standardmäßig wird dies von der Rolle abgeleitet. Wenn mehrere Bereiche erforderlich sind, sollte der Wert eine durch Leerzeichen getrennte Liste mit mehreren Bereichen sein.
Authentifizieren mit Workload Identity Federation (WIF)¶
Workload Identity Federation bietet eine Service-zu-Service-Authentifizierungsmethode für Snowflake. Diese Methode ermöglicht es Anwendungen, Services oder Containern, sich bei Snowflake zu authentifizieren, indem sie das native Identitätssystem ihres Cloudanbieters nutzen, wie z. B. Service-Konten bei AWS IAM, Microsoft Entra ID oder Google Cloud. Bei dieser Herangehensweise entfällt die Notwendigkeit der Verwaltung von langlebigen Anmeldeinformationen. Außerdem wird die Erfassung von Anmeldeinformationen im Vergleich zu anderen Methoden wie External OAuth vereinfacht. Snowflake-Konnektoren sind so konzipiert, dass sie automatisch kurzlebige Anmeldeinformationen vom Identitätsanbieter der Plattform erhalten.
Um den Authentifikator der Workload Identity Federation zu aktivieren, gehen Sie wie folgt vor:
Legen Sie den
authenticator-Verbindungsparameter aufWORKLOAD_IDENTITYfest.Legen Sie den
workloadIdentityProvider-Verbindungsparameter je nach Plattform aufAWS,AZURE,GCPoderOIDCfest.Geben Sie für OpenID Connect (OIDC) den Verbindungsparameter
tokenan.
Verwenden Sie eine MFA Kennung¶
Bemerkung
Dieses Feature erfordert Snowflake Node.js-Treiber Version 1.13.1 oder höher.
Sie können eine Verbindung zu Snowflake herstellen, indem Sie eine mehrstufige Authentifizierung (MFA) als Kennung angeben, anstatt auf eine externe Bestätigung zu warten, z. B. eine Push-Benachrichtigung von Duo. Der Treiber bietet die folgenden Möglichkeiten, eine Kennung für MFA anzugeben:
Setzen Sie die Option
passcodeInPasswordauftrueund fügen Sie das Kennwort als Teil der Zeichenfolge ein, ähnlich wie im Folgenden:const connection = snowflake.createConnection({ account: process.env.SNOWFLAKE_TEST_ACCOUNT, username: process.env.SNOWFLAKE_TEST_USER, ... authenticator: 'USERNAME_PASSWORD_MFA', password: "abc123987654", // passcode 987654 is part of the password passcodeInPassword: true // because passcodeInPassword is true });
Setzen Sie die Option
passcodeauf den Wert des Kennworts, um das Kennwort und die Kennung getrennt anzugeben, ähnlich wie im Folgenden:const connection = snowflake.createConnection({ account: process.env.SNOWFLAKE_TEST_ACCOUNT, username: process.env.SNOWFLAKE_TEST_USER, ... authenticator: 'USERNAME_PASSWORD_MFA', password: "abc123", // password and MFA passcode are input separately passcode: "987654" });
Um diesen Ansatz zu verwenden, stellen Sie sicher, dass die Option
passcodeInPasswordauffalse(der Standardwert) eingestellt ist.
Bemerkung
Wenn Sie die Option passcodeInPassword aktivieren und die Option Kennung einstellen, hat die Option passcodeInPassword Vorrang.
Weitere Informationen zu diesen Optionen finden Sie unter passcode.
Cache für Authentifizierung mit Token¶
Der Snowflake Node.js-Treiber bietet die Möglichkeit, die Token SSO und MFA zu cachen.
Wichtig
Der Cache für Token ist standardmäßig deaktiviert. Das lokale Cachen von Token erhöht das Sicherheitsrisiko. Da Token erst nach vier Stunden ablaufen, kann sich jemand, der auf ein Token auf einem lokalen System zugreift, als der Eigentümer des Tokens ausgeben, bis der Token natürlich abläuft. Bevor Sie sich für das Cachen von Token entscheiden, sollten Sie daher Folgendes bedenken:
Seien Sie sich der potenziellen Risiken bewusst und achtsam.
Wenden Sie sich an Ihr internes Sicherheits- und Compliance-Personal, um zu prüfen, ob die Richtlinien Ihrer Organisation das Cachen von Token erlauben.
Mit den Standardeinstellungen wird die Datei, in der die zwischengespeicherten Token gespeichert werden, in Ihr
$HOME-Verzeichnis oder in einen von Ihnen konfigurierten Pfad geschrieben. Sie sind für die Sicherheit der Daten in dem angegebenen Verzeichnis verantwortlich.Sie sind dafür verantwortlich, dass die Datei über die richtigen Berechtigungen verfügt, damit nur der Eigentümer der Datei darauf zugreifen kann.
Cache-SSO (ID)-Token¶
Ein SSO (ID)-Token wird aus der Anfrage generiert, wenn Sie eine Verbindung zu Snowflake mit externer Authentifizierung im Browser herstellen. Das Zwischenspeichern von SSO (ID)-Token auf der Seite des Client-Treibers funktioniert nur, wenn der Server das Zwischenspeichern erlaubt. Das Caching von SSO-Token kann serverseitig durch Ausführung der folgenden SQL-Anweisung aktiviert werden, wie in Verwenden von SSO bei Clientanwendungen, die sich mit Snowflake verbinden beschrieben:
ALTER ACCOUNT SET ALLOW_ID_TOKEN = TRUE;
Um einen SSO-Token-Cache im Node.js-Treiber zu verwenden, stellen Sie die folgenden Optionen im snowflake.createConnection()-Aufruf ein:
Setzen Sie
authenticatoraufEXTERNALBROWSER. Weitere Details dazu finden Sie unter Authentifizierungsoptionen.Setzen Sie
clientStoreTemporaryCredentialauftrue.
const connection = snowflake.createConnection({
account: process.env.SNOWFLAKE_TEST_ACCOUNT,
username: process.env.SNOWFLAKE_TEST_USER,
database: process.env.SNOWFLAKE_TEST_DATABASE,
schema: process.env.SNOWFLAKE_TEST_SCHEMA,
warehouse: process.env.SNOWFLAKE_TEST_WAREHOUSE,
authenticator: 'EXTERNALBROWSER',
clientStoreTemporaryCredential: true,
});
Wenn diese Option aktiviert ist, verwendet der Treiber das gecachte Token für nachfolgende Verbindungen, bis das Token abläuft. Wenn der Treiber einen Browser öffnet, um die Verbindung erneut zu authentifizieren, kann der Treiber entweder die Anmeldeinformationen im lokalen Speicher nicht finden oder das Token ist abgelaufen.
Cache-MFA-Token¶
Ein MFA-Token wird aus der Anfrage generiert, wenn Sie eine Verbindung zu Snowflake mit USERNAME_PASSWORD_MFA-Authentifizierung herstellen. Das Zwischenspeichern von MFA-Token auf der Seite des Client-Treibers funktioniert nur, wenn der Server das Zwischenspeichern erlaubt. Das Caching von MFA-Token kann serverseitig durch Ausführung der folgenden SQL-Anweisung aktiviert werden, wie in Verwenden von MFA-Tokencaching zur Minimierung der Anzahl von Eingabeaufforderungen bei der Authentifizierung – Optional beschrieben:
ALTER ACCOUNT SET ALLOW_CLIENT_MFA_CACHING = TRUE;
Um einen MFA-Token-Cache im Node.js-Treiber zu verwenden, stellen Sie die folgenden Optionen im snowflake.createConnection()-Aufruf ein:
Setzen Sie
authenticatoraufUSERNAME_PASSWORD_MFA. Weitere Details dazu finden Sie unter Authentifizierungsoptionen.Setzen Sie
clientRequestMFATokenauftrue.
const connection = snowflake.createConnection({
account: process.env.SNOWFLAKE_TEST_ACCOUNT,
username: process.env.SNOWFLAKE_TEST_USER,
database: process.env.SNOWFLAKE_TEST_DATABASE,
schema: process.env.SNOWFLAKE_TEST_SCHEMA,
warehouse: process.env.SNOWFLAKE_TEST_WAREHOUSE,
authenticator: 'USERNAME_PASSWORD_MFA',
clientRequestMFAToken: true,
});
Wenn diese Option aktiviert ist, verwendet der Treiber das gecachte Token für nachfolgende Verbindungen, bis das Token abläuft. Wenn sich der Treiber erneut an den MFA-Anbieter wendet, kann er entweder die Token-Informationen nicht im lokalen Speicher für Anmeldeinformationen finden oder das Token ist abgelaufen.
Verwenden Sie den standardmäßigen Anmeldeinformationen-Manager¶
Der Snowflake Node.js-Treiber bietet einen Manager für Anmeldeinformationen und einen Speicher für Anmeldeinformationen. Standardmäßig speichert der Treiber gecachte Token in Ihrem $HOME-Verzeichnis. Derzeit unterstützt der Treiber das Cachen von Token nur mit der connectAsync()-Funktion.
Wenn Sie die gecachten Token an einem anderen Speicherort speichern möchten, können Sie den gewünschten Speicherort im credentialCacheDir-Parameter der snowflake.createConnection() Funktion angeben. Sie können entweder einen relativen oder einen absoluten Pfad angeben, wie unten gezeigt:
Relativer Pfad
const connection = snowflake.createConnection({ credentialCacheDir: "../../<folder name>", });
Absoluter Pfad
const connection = snowflake.createConnection({ credentialCacheDir: "C:\\<folder name>\\<subfolder name>", });
Wenn Sie credentialCacheDir nicht konfigurieren, verwendet der Snowflake Node.js-Treiber $HOME/temporary_credential.json, um die Anmeldeinformationen zu speichern.
Verwenden Sie einen benutzerdefinierten Manager für Anmeldeinformationen¶
Der Snowflake node.js-Treiber bietet einen standardmäßigen Anmeldeinformationen-Manager, der eine lokale JSON-Datei zum Speichern der Anmeldeinformationen verwendet. Wenn explizit kein Anmeldeinformationen-Manager konfiguriert ist, verwendet der Treiber diesen standardmäßigen Anmeldeinformationen-Manager.
Wenn Sie nicht den Standard-Manager für Anmeldeinformationen verwenden möchten, können Sie einen eigenen Manager für Anmeldeinformationen erstellen. Ein benutzerdefinierter Manager für Anmeldeinformationen muss die folgenden Anforderungen erfüllen:
Er muss mindestens die Funktionen
read,write, undremoveenthalten. Sie können auch andere Funktionen hinzufügen.Es muss ein
object-Datentyp sein.
Das folgende Beispiel zeigt eine Vorlage für einen minimalen benutzerdefinierten Manager für Anmeldeinformationen.
const sampleCustomManager = {
read: function (key) {
//(do something with the key)
return token;
},
write: function (key, token) {
//(do something with the key and token)
},
remove: function (key) {
//(do something with the key)
}
};
Nachdem Sie Ihren benutzerdefinierten Anmeldeinformationen-Manager fertiggestellt haben, können Sie ihn für den Treiber in der Methode snowflake.configure() konfigurieren, wie gezeigt. Dieses Beispiel bezieht sich auf die MFA-Token. Sie können jedoch auch benutzerdefinierte Anmeldeinformationen für die SSO-Token erstellen.
const myCredentialManager = require('<your custom credential manager module>')
const snowflake = require('snowflake-sdk');
snowflake.configure({
customCredentialManager: myCredentialManager
})
const connection = snowflake.createConnection({
account: process.env.SNOWFLAKE_TEST_ACCOUNT,
database: process.env.SNOWFLAKE_TEST_DATABASE,
schema: process.env.SNOWFLAKE_TEST_SCHEMA,
warehouse: process.env.SNOWFLAKE_TEST_WAREHOUSE,
authenticator: 'USERNAME_PASSWORD_MFA',
clientRequestMFAToken: true,
});
Obwohl der Snowflake Node.js-Treiber eine Plugin-ähnliche Weboberfläche für die Implementierung und Verwendung benutzerdefinierter Anmeldeinformationen bereitstellt, ist Snowflake nicht für die Erstellung, Implementierung oder Unterstützung benutzerdefinierter Anmeldeinformationen für die Kunden verantwortlich.