Configuration de Snowflake pour l’utilisation de l’authentification fédérée

Cette rubrique décrit comment configurer Snowflake pour l’authentification fédérée en utilisant une intégration de sécurité SAML2. Cette rubrique suppose que vous avez déjà configuré votre IdP pour l’utiliser avec Snowflake.

Note

Une intégration de sécurité SAML2 remplace le paramètre de compte SAML_IDENTITY_PROVIDER obsolète.

Si vous avez une implémentation SSO existante qui utilise ce paramètre de compte obsolète, migrez vers une intégration de sécurité SAML avant de continuer à configurer Snowflake pour l’authentification fédérée.

Snowflake continuera à prendre en charge le paramètre de compte obsolète aussi longtemps que des implémentations l’utiliseront.

Dans ce chapitre :

Créer une intégration de sécurité SAML2

Snowflake utilise une intégration de sécurité SAML2 pour s’intégrer avec les IdP que vous utilisez pour mettre en œuvre l’authentification fédérée. Utilisez la commande CREATE SECURITY INTEGRATION pour commencer à configurer Snowflake pour SSO.

Important

Lorsque vous configurez un IdP pour SSO, il vous faut fournir une URL pour le compte Snowflake. Le format de cette URL doit correspondre aux URLs des propriétés SAML2_SNOWFLAKE_ISSUER_URL et SAML2_SNOWFLAKE_ACS_URL de l’intégration de sécurité.

Si vous ne définissez pas ces propriétés lors de la création de l’intégration de sécurité, elles auront par défaut l’URL héritée du compte.

Par exemple, pour créer une intégration de sécurité qui utilise un nom de compte URL avec une connectivité privée, exécutez la commande SQL suivante :

CREATE SECURITY INTEGRATION my_idp
  TYPE = saml2
  ENABLED = true
  SAML2_ISSUER = 'https://example.com'
  SAML2_SSO_URL = 'http://myssoprovider.com'
  SAML2_PROVIDER = 'ADFS'
  SAML2_X509_CERT = 'MIICr...'
  SAML2_SNOWFLAKE_ISSUER_URL = 'https://<orgname>-<account_name>.privatelink.snowflakecomputing.com'
  SAML2_SNOWFLAKE_ACS_URL = 'https://<orgname>-<account_name>.privatelink.snowflakecomputing.com/fed/login';
Copy

Notez que /fed/login est ajouté à l’URL pour la propriété SAML2_SNOWFLAKE_ACS_URL. Pour plus de détails sur les formats d’URL des comptes Snowflake, voir Connexion avec une URL.

Après avoir configuré une intégration de sécurité SAML2, vous pouvez utiliser l’intégration de sécurité pour effectuer ce qui suit :

  • Chiffrer des assertions SAML.

  • Envoyer des requêtes SAML signées

  • Spécifier le format SAMLNameID.

  • Exporter des métadonnées d’intégration de sécurité SAML2.

  • Forcer la ré-authentification dans la procédure de Snowflake

Configurer la connexion SSO pour les utilisateurs

Après avoir créé une intégration de sécurité SAML2, vous pouvez configurer si l’utilisateur démarre sa connexion SSO à partir du IdP ou de Snowflake.

Un SSO initié par IdP ne nécessite pas de configuration dans Snowflake. Il vous suffit d’informer vos utilisateurs sur la manière d’accéder à Snowflake (par exemple, en utilisant un portail interne).

La propriété SAML2_ENABLE_SP_INITIATED active le SSO initié par Snowflake. La propriété SAML2_SP_INITIATED_LOGIN_PAGE_LABEL définit une chaîne qui identifie l’IdP. Cette chaîne apparaît sur la page de connexion de Snowflake afin que les utilisateurs puissent accéder à l’IdP.

Utilisez la commande ALTER SECURITY INTEGRATION pour définir ces propriétés :

ALTER SECURITY INTEGRATION my_idp SET SAML2_ENABLE_SP_INITIATED = true;
ALTER SECURITY INTEGRATION my_idp SET SAML2_SP_INITIATED_LOGIN_PAGE_LABEL = 'My IdP';
Copy

Pour plus d’informations sur la manière dont les clients se connectent à Snowflake après avoir configuré la connexion SSO pour les utilisateurs, voir Utilisation de SSO avec des applications clientes qui se connectent à Snowflake

Chiffrer des assertions SAML

La propriété SAML2_SNOWFLAKE_X509_CERT garantit que les assertions SAML2 sont cryptées à l’aide du certificat public de Snowflake, sécurisant ainsi le trafic lorsque les utilisateurs accèdent à Snowflake par le biais de l’authentification fédérée.

Lors de la réception des assertions chiffrées de l’IdP du client, Snowflake déchiffre les assertions chiffrées à l’aide de sa clé privée. Snowflake n’exporte jamais sa clé privée et ne la rend jamais disponible.

Pour chiffrer les assertions SAML, consultez les sections ci-dessous.

Exporter le certificat public de Snowflake

Après avoir créé une intégration de sécurité SAML2, suivez les étapes ci-dessous :

  1. Exécutez l’instruction SQL suivante sur l’intégration SAML2.

    DESC SECURITY INTEGRATION my_idp;
    
    Copy
  2. Trouvez la valeur SAML2_SNOWFLAKE_X509_CERT dans la ligne 7, qui est le certificat public au format PEM.

  3. Enregistrez la valeur en veillant à inclure les délimiteurs BEGIN CERTIFICATE et END CERTIFICATE. Par exemple, le bloc de code ci-dessous contient un certificat tronqué au format PEM :

    -----BEGIN CERTIFICATE-----
    MIICr...
    -----END CERTIFICATE-----
    
    Copy

Créer une demande de signature de certificat (CSR) — Facultatif

Par défaut, une intégration de sécurité SAML2 dans Snowflake utilise un certificat auto-signé pour l’IdP SAML pour chiffrer les assertions SAML. Si votre organisation requiert l’utilisation d’un certificat émis par une autorité de certification (CA), procédez comme suit :

  1. Générez une demande de signature de certificat (CSR) à partir de Snowflake à l’aide de la fonction système SYSTEM$GENERATE_SAML_CSR.

  2. Fournissez le CSR au CA de votre choix afin que le certificat puisse être émis.

  3. Téléchargez le certificat encodé en base64 dans l’intégration SAML à l’aide de l’instruction ALTER suivante, sans les délimiteurs BEGIN CERTIFICATE et END CERTIFICATE.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SNOWFLAKE_X509_CERT = 'AX2bv...';
    
    Copy
  4. Exécutez la commande DESCRIBE INTEGRATION pour voir l’intégration de sécurité mise à jour :

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

Vous pouvez ensuite télécharger le certificat pour cette clé privée à l’aide du CSR généré par la fonction dans Snowflake.

Configurer votre IdP SAML

  1. Téléchargez le certificat enregistré au format PEM dans l’IdP de votre organisation en tant que certificat de chiffrement SAML.

  2. Configurez votre IdP pour chiffrer des assertions SAML pour le fournisseur de services Snowflake (SP).

Envoyer des requêtes SAML signées

Vous pouvez envoyer une demande SAML signée de Snowflake au IdP pour vérifier que Snowflake est bien un fournisseur de services authentique. Pour effectuer cette vérification, vous pouvez configurer votre IdP afin d’utiliser le certificat stocké dans l’intégration de sécurité SAML2 pour vous assurer que la demande SAML provient bien de Snowflake, et non d’un tiers qui usurpe l’identité de Snowflake.

Définir la propriété SAML2_SIGN_REQUEST

Si vous créez une intégration de sécurité SAML2 pour la première fois, assurez-vous de définir la propriété SAML2_SIGN_REQUEST.

Si vous avez créé une intégration de sécurité SAML2 sans définir la propriété SAML2_SIGN_REQUEST _, suivez les étapes ci-dessous :

  1. Exécutez la commande ALTER SECURITY INTEGRATION en tant qu’utilisateur avec un rôle ACCOUNTADMIN pour mettre à jour l’intégration de la sécurité :

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SIGN_REQUEST = true;
    
    Copy
  2. Exécutez la commande DESCRIBE INTEGRATION pour voir l’intégration de sécurité mise à jour :

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

Configurer votre IdP pour accepter les requêtes signées

Configurez votre IdP pour accepter les demandes signées de Snowflake. Pendant la configuration, votre IdP doit avoir le certificat stocké dans la propriété SAML2_SNOWFLAKE_X509_CERT. Votre IdP utilise ce certificat pour vérifier que la demande SAML provient de Snowflake.

Note

Snowflake n’est pas responsable de la configuration de votre IdP. Pour obtenir de l’aide sur la configuration de votre IdP, veuillez consulter votre administrateur de sécurité interne.

  1. Exécutez la commande DESCRIBE INTEGRATION :

    DESC SECURITY INTEGRATION my_idp;
    
    Copy
  2. Enregistrez la valeur de la propriété SAML2_SNOWFLAKE_X509_CERT dans la ligne 7 pour l’utiliser dans vos paramètres IdP.

Spécifier le format NameID SAML

Snowflake prend en charge la possibilité pour l’administrateur (c’est-à-dire l’utilisateur ayant le rôle ACCOUNTADMIN) de spécifier le format SAML NameID qui sera demandé dans la requête d’authentification SAML sortante envoyée depuis Snowflake vers l” IdP.

La spécification du format SAML NameID permet à Snowflake de définir une attente de l’attribut identifiant de l’utilisateur (c’est-à-dire le sujet SAML) dans l’assertion SAML de l” IdP pour assurer une authentification valide dans Snowflake.

Le format SAML NameID peut être intégré à l’intégration de sécurité SAML2. Vous pouvez spécifier SAML NameID dans l’intégration de sécurité à l’aide de l’une des valeurs suivantes :

  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

  • urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName

  • urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName

  • urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient

Si le format SAML NameID n’est pas spécifié, Snowflake utilise la valeur suivante :

urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

Définir la propriété SAML2_REQUESTED_NAMEID_FORMAT

Si vous créez une intégration de sécurité SAML2 pour la première fois, assurez-vous de définir la propriété SAML2_REQUESTED_NAMEID_FORMAT.

Si vous avez créé une intégration de sécurité SAML2 sans définir la propriété SAML2_REQUESTED_NAMEID_FORMAT _, suivez les étapes ci-dessous :

  1. Exécutez la commande ALTER SECURITY INTEGRATION en tant qu’utilisateur avec un rôle ACCOUNTADMIN pour spécifier le format SAML NameId :

    ALTER SECURITY INTEGRATION my_idp SET SAML2_REQUESTED_NAMEID_FORMAT = '<string_literal>';
    
    Copy
  2. Exécutez la commande DESCRIBE INTEGRATION pour voir l’intégration de sécurité mise à jour :

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

Configurer votre IdP pour spécifier NameID

Configurez votre IdP pour spécifier le format SAML NameID dans les assertions SAML.

Note

Snowflake n’est pas responsable de la configuration de votre IdP. Pour obtenir de l’aide sur la configuration de votre IdP, veuillez consulter votre administrateur de sécurité interne.

Exporter les métadonnées d’intégration de sécurité SAML2

Snowflake fournit des métadonnées SAML 2.0 pour l’intégration de sécurité SAML2 afin de faciliter la configuration du fournisseur de services Snowflake dans votre IdP.

Les métadonnées SAML 2.0 sont contenues dans la propriété SAML2_SNOWFLAKE_METADATA et peuvent être obtenues en exécutant une commande DESCRIBE INTEGRATION sur l’intégration de sécurité SAML2. Par exemple :

DESC SECURITY INTEGRATION my_idp;
Copy
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
              property              | property_type |                               property_value                                | property_default |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
SAML2_X509_CERT                     | String        | MIICr...                                                                    |                  |
SAML2_PROVIDER                      | String        | OKTA                                                                        |                  |
SAML2_ENABLE_SP_INITIATED           | Boolean       | false                                                                       | false            |
SAML2_SP_INITIATED_LOGIN_PAGE_LABEL | String        | my_idp                                                                      |                  |
SAML2_SSO_URL                       | String        | https://okta.com/sso                                                        |                  |
SAML2_ISSUER                        | String        | https://okta.com                                                            |                  |
SAML2_SNOWFLAKE_X509_CERT           | String        | MIICr...                                                                    |                  |
SAML2_REQUESTED_NAMEID_FORMAT       | String        | urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress                      |                  |
SAML2_SNOWFLAKE_ACS_URL             | String        | https://example.snowflakecomputing.com/fed/login                            |                  |
SAML2_SNOWFLAKE_ISSUER_URL          | String        | https://example.snowflakecomputing.com                                      |                  |
SAML2_SNOWFLAKE_METADATA            | String        | <md:EntityDescriptor entityID="https://example.snowflakecomputing.com"> ... |                  |
SAML2_DIGEST_METHODS_USED           | String        | http://www.w3.org/2001/04/xmlenc#sha256                                     |                  |
SAML2_SIGNATURE_METHODS_USED        | String        | http://www.w3.org/2001/04/xmldsig-more#rsa-sha256                           |                  |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+

À titre d’exemple représentatif, les métadonnées SAML 2.0 XML formatées de la propriété SAML2_SNOWFLAKE_METADATA sont présentées ci-dessous. Notez que les valeurs X509certificate pour signing et encryption sont tronquées.

<md:EntityDescriptor xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" entityID="https://example.snowflakecomputing.com">
 <md:SPSSODescriptor AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  <md:KeyDescriptor use="signing">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICr...</dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:KeyDescriptor use="encryption">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICr...</dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:AssertionConsumerService index="0" isDefault="true" Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://example.snowflakecomputing.com/fed/login" />
 </md:SPSSODescriptor>
</md:EntityDescriptor>
Copy

Pour référence, la table suivante mappe les balises de métadonnées XML aux propriétés d’intégration de sécurité SAML2 Snowflake.

Sortie XML

Propriété d’intégration de sécurité SAML2

entityID

SAML2_SNOWFLAKE_ISSUER_URL

AuthnRequestsSigned

SAML2_SIGN_REQUEST

Certificat de signature

SAML2_SNOWFLAKE_X509_CERT

Certificat de chiffrement

SAML2_SNOWFLAKE_X509_CERT

Service consommateur d’assertion URL

SAML2_SNOWFLAKE_ACS_URL

Forcer la réauthentification dans Snowflake

Snowflake prend en charge la configuration de votre intégration de sécurité SAML2 pour exiger que l’utilisateur qui s’authentifie se ré-authentifie pour accéder à Snowflake pendant le flux d’authentification initial SSO ou lorsqu’une session Snowflake en cours expire.

Lorsque cette fonction est activée dans l’intégration de sécurité Snowflake SAML2, Snowflake règle la spécification SAML de la propriété ForceAuthn sur True dans la requête SAML sortante de Snowflake vers l’IdP. Une fois que l’IdP reçoit la requête avec la propriété ForceAuthn réglée sur True, l’IdP envoie une demande à Snowflake, qui invite les utilisateurs à saisir à nouveau leurs identifiants de connexion d’authentification (par exemple, nom d’utilisateur, mot de passe) pour accéder à Snowflake.

Cette fonction offre une sécurité accrue grâce à une deuxième authentification. En outre, l’invite de ré-authentification permet aux utilisateurs de saisir un ensemble d’identifiants de connexion différent de ceux utilisés pour lancer SSO afin d’accéder à Snowflake.

Important

Avant de mettre en œuvre cette fonctionnalité, vérifiez que votre IdP accepte le changement d’identités pendant un flux d’authentification SSO.

Si cette fonctionnalité est mise en œuvre dans Snowflake et que votre IdP ne prend pas en charge le changement d’identités pendant le flux d’authentification SSO initial, les utilisateurs peuvent ne pas être en mesure d’accéder à Snowflake en utilisant les différents ensembles d’identifiants de connexion fournis dans l’invite de ré-authentification.

Si vous créez une intégration de sécurité SAML2 pour la première fois, assurez-vous de définir la propriété SAML2_FORCE_AUTHN.

Pour mettre à jour une intégration de sécurité SAML2 existante afin de prendre en charge la ré-authentification forcée pour accéder à Snowflake, effectuez les étapes suivantes :

  1. Exécutez la commande ALTER SECURITY INTEGRATION pour mettre à jour l’intégration de la sécurité :

    ALTER SECURITY INTEGRATION my_idp SET SAML2_FORCE_AUTHN = true;
    
    Copy
  2. Exécutez la commande DESCRIBE INTEGRATION pour voir l’intégration de sécurité mise à jour :

    DESC SECURITY INTEGRATION my_idp;
    
    Copy

Où :

SAML2_FORCE_AUTHN = TRUE | FALSE

Le booléen indiquant si les utilisateurs, lors du flux d’authentification initial, sont obligés de s’authentifier à nouveau pour accéder à Snowflake. Lorsqu’elle est définie sur TRUE, Snowflake définit la propriété ForceAuthn SAML sur TRUE dans la requête sortante de Snowflake vers le fournisseur d’identité.

  • TRUE oblige les utilisateurs à s’authentifier à nouveau pour accéder à Snowflake, même si une session valide avec le fournisseur d’identité existe.

  • FALSE n’oblige pas les utilisateurs à s’authentifier à nouveau pour accéder à Snowflake.

Par défaut : FALSE.

Point de terminaison de déconnexion personnalisé

Snowflake permet de définir une URL de point de terminaison personnalisé vers laquelle les utilisateurs sont redirigés après s’être déconnectés de Snowflake. Le point de terminaison est défini par la propriété SAML2_POST_LOGOUT_REDIRECT_URL dans l’intégration de sécurité SAML2.

Une fois activé pour les utilisateurs qui accèdent à Snowflake par SSO SAML, le fait de cliquer sur le bouton Log Out dans l”Classic Console a pour effet de mettre fin à la session Snowflake et de rediriger les utilisateurs vers le point de terminaison spécifié.

Important

Ce comportement ne s’applique pas à Snowsight.

La définition d’un point de terminaison de déconnexion permet aux administrateurs de contrôler où les utilisateurs sont redirigés après s’être déconnectés de Snowflake. Par exemple, un point de terminaison personnalisé pourrait déclencher un script pour mettre fin simultanément à la session IdP. L’avantage de cette mise en œuvre est que les sessions Snowflake et IdP sont toutes deux terminées, ce qui oblige les utilisateurs à se ré-authentifier par rapport à l’IdP pour accéder à Snowflake.

Si vous créez une intégration de sécurité SAML2 pour la première fois, assurez-vous de définir la propriété SAML2_POST_LOGOUT_REDIRECT_URL.

Si vous avez créé une intégration de sécurité SAML2 sans définir la propriété SAML2_POST_LOGOUT_REDIRECT_URL, exécutez la commande ALTER SECURITY INTEGRATION pour configurer le point de terminaison de déconnexion personnalisé :

ALTER SECURITY INTEGRATION my_idp SET SAML2_POST_LOGOUT_REDIRECT_URL = 'https://logout.example.com';
Copy

Gérer votre intégration de sécurité SAML2

Vous pouvez utiliser une commande ALTER SECURITY INTEGRATION pour gérer l’intégration de sécurité SAML2. Par exemple :

  • Téléchargez le certificat X.509 sous forme de chaîne dans une intégration de sécurité SAML2 existante.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_X509_CERT = 'AX2bv...';
    
    Copy
  • Si vous êtes un client qui configure votre IdP pour vérifier les signatures des requêtes SAML ou chiffrer les réponses SAML, vous pouvez écraser votre clé privée et votre certificat auto-signé existants et générer une nouvelle clé privée et un nouveau certificat auto-signé :

    1. Générer une nouvelle clé privée :

      Prudence

      Après avoir exécuté la commande ci-dessous, l’authentification SAML ne fonctionne plus, car votre IdP utilise toujours votre ancien certificat SAML2_SNOWFLAKE_X509_CERT. Pour réduire les perturbations, il est préférable d’exécuter la commande ci-dessous lorsque les utilisateurs ne sont pas aussi actifs.

      ALTER SECURITY INTEGRATION my_idp REFRESH SAML2_SNOWFLAKE_PRIVATE_KEY;
      
      Copy
    2. Récupérer la valeur de la propriété SAML2_SNOWFLAKE_X509_CERT dans votre intégration de sécurité :

      DESCRIBE SECURITY INTEGRATION my_idp;
      SELECT "property_value" FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
        WHERE "property" = 'SAML2_SNOWFLAKE_X509_CERT';
      
      Copy
    3. Téléchargez la valeur récupérée dans votre IdP pour remplacer votre ancien certificat par votre nouveau certificat dans votre IdP.

  • Activez les requêtes signées.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_SIGN_REQUEST = true;
    
    Copy
  • Spécifiez le format NameID.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_REQUESTED_NAMEID_FORMAT = 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified';
    
    Copy
  • Mettez à jour une intégration de sécurité existante pour permettre une réauthentification forcée.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_FORCE_AUTHN = true;
    
    Copy
  • Mettez à jour une intégration de sécurité existante pour désactiver la réauthentification forcée.

    ALTER SECURITY INTEGRATION my_idp UNSET SAML2_FORCE_AUTHN;
    
    Copy
  • Mettez à jour le point de terminaison de déconnexion personnalisé.

    ALTER SECURITY INTEGRATION my_idp SET SAML2_POST_LOGOUT_REDIRECT_URL = 'https://logout.example.com';
    
    Copy

Pour plus d’informations, voir ALTER SECURITY INTEGRATION.

Réplication de la configuration SSO

Snowflake prend en charge la réplication et le basculement/la restauration de l’intégration de sécurité SAML2 d’un compte source à un compte cible.

Pour plus de détails, voir Réplication des intégrations de sécurité et des politiques réseau sur plusieurs comptes.