Authentification auprès de Snowflake
Vous pouvez configurer le connecteur Amazon Athena pour Snowflake afin d’utiliser l’authentification par paire de clés ou la méthode d’authentification OAuth dans le cadre de la connexion à votre entrepôt de données Snowflake. Les deux méthodes fournissent un accès sécurisé à Snowflake et éliminent le besoin de stocker les mots de passe dans des chaînes de connexion.
-
Authentification par paire de clés – Cette méthode utilise des paires de clés publiques ou privées RSA à des fins d’authentification auprès de Snowflake. La clé privée signe numériquement les demandes d’authentification tandis que la clé publique correspondante est enregistrée dans Snowflake pour vérification. Cette méthode supprime le stockage des mots de passe.
-
Authentification OAuth – Cette méthode utilise un jeton d’autorisation et un jeton d’actualisation à des fins d’authentification auprès de Snowflake. Elle prend en charge l’actualisation automatique des jetons, ce qui fait d’elle une méthode adaptée aux applications de longue durée.
Pour plus d’informations, consultez Key-pair authentication
Prérequis
Avant de commencer, effectuez les opérations obligatoires suivantes :
-
Vous devez accéder au compte Snowflake avec des privilèges administratifs.
-
Vous devez disposer d’un compte utilisateur Snowflake dédié pour le connecteur Athena.
-
Vous devez disposer d’OpenSSL ou d’outils de génération de clés équivalents pour l’authentification par paire de clés.
-
Vous devez disposer d’un accès à AWS Secrets Manager afin de créer et gérer les secrets.
-
Vous devez disposer d’un navigateur Web pour exécuter le flux OAuth dans le cadre de l’authentification OAuth.
Configuration de l’authentification par paire de clés
Ce processus implique la génération d’une paire de clés RSA, la configuration de votre compte Snowflake avec la clé publique et le stockage sécurisé de la clé privée dans AWS Secrets Manager. Les étapes suivantes vous guideront dans la création des clés de chiffrement, la configuration des autorisations Snowflake nécessaires et la configuration des informations d’identification AWS pour une authentification fluide.
Génération d’une paire de clés RSA
Générez une paire de clés privées et publiques à l’aide d’OpenSSL.
-
Pour générer une version non chiffrée, utilisez la commande suivante dans votre application de ligne de commande locale.
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 -v2 des3 -inform PEM -out rsa_key.p8 -
Pour générer une clé publique à partir d’une clé privée, utilisez ce qui suit.
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub # Set appropriate permissions (Unix/Linux) chmod 600 rsa_key.p8 chmod 644 rsa_key.pub
Note
Ne partagez pas votre clé privée. La clé privée doit uniquement être accessible à l’application qui doit s’authentifier auprès de Snowflake.
-
Extraction du contenu de la clé publique sans délimiteurs pour Snowflake
# Extract public key content (remove BEGIN/END lines and newlines) cat rsa_key.pub | grep -v "BEGIN\|END" | tr -d '\n'Enregistrez cette sortie, dont vous aurez besoin à l’étape suivante.
-
Configuration de l’utilisateur Snowflake
Suivez ces étapes pour configurer un utilisateur Snowflake.
-
Créez un utilisateur dédié pour le connecteur Athena s’il n’existe pas déjà.
-- Create user for Athena connector CREATE USERathena_connector_user; -- Grant necessary privileges GRANT USAGE ON WAREHOUSEyour_warehouseTO ROLEathena_connector_role; GRANT USAGE ON DATABASEyour_databaseTO ROLEathena_connector_role; GRANT SELECT ON ALL TABLES IN DATABASEyour_databaseTO ROLEathena_connector_role; Accordez des privilèges d’authentification. Pour attribuer une clé publique à un utilisateur, l’un des rôles ou privilèges suivants doit être accordé.
-
Le privilège
MODIFY PROGRAMMATIC AUTHENTICATION METHODSouOWNERSHIPdoit être accordé à l’utilisateur. -
Le rôle
SECURITYADMINou un rôle supérieur doit être accordé.
Accordez les privilèges nécessaires pour attribuer des clés publiques à l’aide de la commande suivante.
GRANT MODIFY PROGRAMMATIC AUTHENTICATION METHODS ON USERathena_connector_userTO ROLEyour_admin_role;-
-
Attribuez la clé publique à l’utilisateur Snowflake à l’aide de la commande suivante.
ALTER USERathena_connector_userSET RSA_PUBLIC_KEY='RSAkey';Vérifiez que la clé publique a bien été attribuée à l’utilisateur à l’aide de la commande suivante.
DESC USERathena_connector_user;
-
Stockage de la clé privée dans AWS Secrets Manager
Convertissez votre clé privée au format requis par le connecteur.
# Read private key content cat rsa_key.p8-
Créez un secret dans AWS Secrets Manager à l’aide de la structure suivante.
{ "sfUser": "your_snowflake_user", "pem_private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----", "pem_private_key_passphrase": "passphrase_in_case_of_encrypted_private_key(optional)" }Note
L’en-tête et le pied de page sont facultatifs.
La clé privée doit être séparée par
\n.
Configuration de l’authentification OAuth
Cette méthode d’authentification offre un accès sécurisé à Snowflake basé sur des jetons grâce à des fonctionnalités d’actualisation automatique des informations d’identification. Le processus de configuration implique la création d’une intégration de sécurité dans Snowflake, la récupération des informations d’identification du client OAuth, l’exécution du flux d’autorisation pour obtenir un code d’accès et le stockage des informations d’identification OAuth dans AWS Secrets Manager pour que le connecteur puisse les utiliser.
Création d’une intégration de sécurité dans Snowflake
Exécutez la commande SQL suivante dans Snowflake pour créer une intégration de sécurité Snowflake OAuth.
CREATE SECURITY INTEGRATIONmy_snowflake_oauth_integration_aTYPE = OAUTH ENABLED = TRUE OAUTH_CLIENT = CUSTOM OAUTH_CLIENT_TYPE = 'CONFIDENTIAL' OAUTH_REDIRECT_URI = 'https://localhost:8080/oauth/callback' OAUTH_ISSUE_REFRESH_TOKENS = TRUE OAUTH_REFRESH_TOKEN_VALIDITY = 7776000;Paramètres de configuration
-
TYPE = OAUTH– Spécifie le type d’authentification OAuth. -
ENABLED = TRUE– Active l’intégration de sécurité. -
OAUTH_CLIENT = CUSTOM– Utilise une configuration client OAuth personnalisée. -
OAUTH_CLIENT_TYPE = 'CONFIDENTIAL'– Définit le type de client pour les applications sécurisées. -
OAUTH_REDIRECT_URI– URL de rappel pour le flux OAuth. Il peut s’agir de localhost à des fins de test. -
OAUTH_ISSUE_REFRESH_TOKENS = TRUE– Active la génération de jetons d’actualisation. -
OAUTH_REFRESH_TOKEN_VALIDITY = 7776000– Définit la validité du jeton d’actualisation (90 jours en secondes).
-
Récupération des secrets du client OAuth
-
Pour obtenir les informations d’identification du client, exécutez la commande suivante.
DESC SECURITY INTEGRATION 'MY_SNOWFLAKE_OAUTH_INTEGRATION_A'; Récupérez les secrets du client OAuth.
SELECT SYSTEM$SHOW_OAUTH_CLIENT_SECRETS('MY_SNOWFLAKE_OAUTH_INTEGRATION_A');Exemple de réponse
{ "OAUTH_CLIENT_SECRET_2": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "OAUTH_CLIENT_SECRET": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY, "OAUTH_CLIENT_ID": "AIDACKCEVSQ6C2EXAMPLE" }
Note
Conservez ces informations d’identification en lieu sûr et ne les partagez pas. Elles seront utilisées pour configurer le client OAuth.
-
Autorisation de l’utilisateur et récupération du code d’autorisation
Ouvrez l’URL suivante dans un navigateur.
https://<your_account>.snowflakecomputing.com/oauth/authorize?client_id=<OAUTH_CLIENT_ID>&response_type=code&redirect_uri=https://localhost:8080/oauth/callbackExécutez le flux d’autorisation.
-
Connectez-vous à l’aide de vos informations d’identification Snowflake.
-
Accordez les autorisations demandées. Vous serez redirigé vers l’URI de rappel avec un code d’autorisation.
-
Extrayez le code d’autorisation en copiant le paramètre de code depuis l’URL de redirection.
https://localhost:8080/oauth/callback?code=<authorizationcode>Note
Le code d’autorisation est valide pour une durée limitée et ne peut être utilisé qu’une seule fois.
Stockage des informations d’identification OAuth dans AWS Secrets Manager
Créez un secret dans AWS Secrets Manager à l’aide de la structure suivante.
{ "redirect_uri": "https://localhost:8080/oauth/callback", "client_secret": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY", "token_url": "https://<your_account>.snowflakecomputing.com/oauth/token-request", "client_id": "AIDACKCEVSQ6C2EXAMPLE, "username": "your_snowflake_username", "auth_code": "authorizationcode" }Champs obligatoires
-
redirect_uri– URI de redirection OAuth que vous avez obtenu à l’étape 1. -
client_secret– Secret du client OAuth que vous avez obtenu à l’étape 2. -
token_url– Point de terminaison du jeton OAuth pour Snowflake. -
client_id– ID du client OAuth obtenu à l’étape 2. -
username– Nom d’utilisateur Snowflake pour le connecteur. -
auth_code– Code d’autorisation que vous avez obtenu à l’étape 3.
-
Après avoir créé un secret, vous obtenez un ARN de secret que vous pouvez utiliser dans votre connexion Glue lors de la création d’une connexion à une source de données.