Fonctions SSO SAML avancées

Cette rubrique décrit comment configurer et utiliser les fonctionnalités avancées SSO SAML dans Snowflake.

Dans ce chapitre :

Vue d’ensemble

L’intégration de sécurité SAML2 est le fondement des fonctionnalités avancées SSO SAML de Snowflake.

Après avoir configuré une intégration de sécurité SAML2, vous pouvez utiliser l’intégration de sécurité pour gérer votre configuration SAML SSO et chiffrer les assertions SAML.

Migration d’une intégration de sécurité SAML2

L’intégration de sécurité SAML2 spécifie les informations IdP dans Snowflake et est destinée à remplacer les informations contenues dans le paramètre SAML_IDENTITY_PROVIDER.

Il existe deux options pour spécifier l’IdP dans Snowflake :

  1. Utilisez une fonction système pour migrer les informations IdP existantes vers une intégration de sécurité.

  2. Créez ou remplacez une intégration de sécurité pour contenir les informations IdP.

L’option 1 est la voie recommandée si vous avez déjà un IdP configuré pour utiliser l’authentification fédérée à Snowflake en fonction du paramètre SAML_IDENTITY_PROVIDER.

L’option 2 est la voie recommandée si votre compte n’a pas le paramètre SAML_IDENTITY_PROVIDER.

Option 1 : utiliser une fonction système

Vous pouvez migrer votre configuration IdP existante du paramètre SAML_IDENTITY_PROVIDER vers une intégration de sécurité à l’aide de la fonction système SYSTEM$MIGRATE_SAML_IDP_REGISTRATION.

Après avoir exécuté cette fonction système, vous ne devez plus utiliser le paramètre SAML_IDENTITY_PROVIDER pour la configuration et la gestion de SSO SAML. A la place, gérez votre intégration de sécurité SAML2 comme indiqué dans Gestion de votre intégration de sécurité SAML2.

Note

Si vous le souhaitez, avant d’exécuter la fonction système, vous pouvez vérifier la configuration SAML_IDENTITY_PROVIDER en exécutant l’instruction suivante :

show parameters like 'SAML_IDENTITY_PROVIDER' in account;

Option 2 : créer ou remplacer une intégration de sécurité

Si vous n’avez pas d’IdP existant configuré dans Snowflake pour utiliser l’authentification fédérée et que vous souhaitez configurer votre IdP dans Snowflake pour l’authentification fédérée, créez une intégration de sécurité où TYPE = SAML2 en utilisant CREATE SECURITY INTEGRATION.

Si vous disposez d’une intégration de sécurité existante où TYPE = SAML2 et que vous devez mettre à jour un ou plusieurs paramètres, exécutez une instruction ALTER SECURITY INTEGRATION ou remplacez l’intégralité de l’intégration de sécurité par une instruction CREATE OR REPLACE SECURITY INTEGRATION.

Chiffrement des assertions SAML

Snowflake permet à l’IdP de votre organisation d’envoyer des assertions SAML2 chiffrées à Snowflake une fois que l’utilisateur s’est authentifié auprès d’IdP.

Les assertions SAML2 chiffrées facilitent le transfert sécurisé des informations pendant que les utilisateurs accèdent à Snowflake via SSO fédéré. Les clients peuvent chiffrer leurs assertions SAML avec le certificat public de Snowflake. Lors de la réception des assertions chiffrées de l’IdP du client, Snowflake déchiffre les assertions chiffrées avec sa clé privée. Snowflake n’exporte jamais sa clé privée et ne la rend jamais disponible.

Les assertions SAML chiffrées sont intégrées à l’intégration de sécurité SAML2. Vous pouvez utiliser une intégration de sécurité SAML2 existante ou créer une nouvelle intégration de sécurité SAML2.

La procédure générale pour configurer et utiliser des assertions SAML chiffrées est la suivante :

  1. Créez une intégration de sécurité SAML2.

  2. Exportez le certificat public de Snowflake au format PEM.

  3. Importez le certificat public dans votre IdP SAML.

  4. Connectez-vous à Snowflake.

Procédure d’assertions SAML chiffrée

Suivez ces étapes pour configurer les assertions SAML chiffrées et vous connecter à Snowflake.

Etape 1 : créer une intégration de sécurité SAML2 ou migrer vers celle-ci

Si vous avez une configuration SAML existante dans Snowflake et que vous souhaitez utiliser cette fonctionnalité, vous pouvez migrer vers une intégration de sécurité SAML2 en exécutant cette instruction SQL. Pour plus d’informations sur cette fonction système, voir SYSTEM$MIGRATE_SAML_IDP_REGISTRATION.

select system$migrate_saml_idp_registration('<integration_name>', '<issuer>');

Sinon, créez une intégration de sécurité SAML2 en exécutant l’instruction SQL suivante. Pour plus d’informations, voir CREATE SECURITY INTEGRATION.

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='my_x509_cert'
    saml2_sp_initiated_login_page_label = 'my_idp'
    saml2_enable_sp_initiated = false;

Étape 2 : exporter le certificat public de Snowflake

Pour exporter le certificat public de Snowflake, procédez comme suit.

  1. Exécutez l’instruction SQL suivante sur l’intégration SAML2 pour obtenir la valeur SAML2_SNOWFLAKE_X509_CERT (dans la ligne 7).

    desc security integration my_idp;
    
  2. Enregistrez la valeur au format PEM. Veillez à inclure les délimiteurs BEGIN CERTIFICATE et END CERTIFICATE. Voici un exemple représentatif d’un certificat tronqué au format PEM :

    -----BEGIN CERTIFICATE-----
    MIICrTCCAZWgAwIBAgIJAOF6EPk93wjlMA0GCSqGSIb3DQEBCwUAMBYxFDASBgNV
    BAMMC1RFU1RBQ0NPVU5UMB4XDTIwMDE....
    -----END CERTIFICATE-----
    

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

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.

Étape 3 : configurer votre IdP SAML

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

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

Etape 4 : se connecter à Snowflake

Après avoir configuré votre IdP, effectuez les tâches suivantes.

  • Vérifiez votre configuration IdP.

  • Créez des utilisateurs et attribuez des rôles dans Snowflake.

  • Déterminez si les utilisateurs se connecteront à Snowflake via SSO initié par l’IdP ou le SP.

    • Pour le SSO initié par l’IdP, informez vos utilisateurs sur la façon d’accéder à Snowflake (par exemple, accès au portail interne).

    • Pour le SSO initié par le SP (c’est-à-dire que les utilisateurs accèdent à Snowflake et sont ensuite redirigés vers le client IdP), activez le SSO initié par Snowflake en définissant le paramètre de compte SSO_LOGIN_PAGE sur true. En tant qu’utilisateur avec le rôle ACCOUNTADMIN, exécutez les instructions suivantes.

      use role accountadmin;
      
      alter account set SSO_LOGIN_PAGE = true;
      
  • Accédez à Snowflake comme indiqué dans Gestion/utilisation de l’authentification fédérée.

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

Les demandes SAML signées sont intégrées à l’intégration de sécurité SAML2. Vous pouvez utiliser une intégration de sécurité existante de type = saml2 ou créer une nouvelle intégration de sécurité pour utiliser des demandes SAML signées.

Si votre IdP prend en charge l’acceptation des demandes SAML signées, la procédure générale pour configurer et utiliser les demandes SAML signées est la suivante :

  1. Créez ou mettez à jour l’intégration de sécurité.

  2. Mettez à jour votre intégration de sécurité SAML2.

  3. Configurez votre IdP pour accepter les demandes SAML signées.

  4. Connectez-vous à Snowflake.

Procédure de demandes SAML signées

Suivez ces étapes pour configurer les demandes SAML signées et vous connecter à Snowflake.

Etape 1 : créer une intégration de sécurité SAML2 ou migrer vers celle-ci

Si vous avez une configuration SAML existante dans Snowflake et que vous souhaitez utiliser cette fonctionnalité, vous pouvez migrer vers une intégration de sécurité SAML2 en exécutant cette instruction SQL. Pour plus d’informations sur cette fonction système, voir SYSTEM$MIGRATE_SAML_IDP_REGISTRATION.

select system$migrate_saml_idp_registration('<integration_name>', '<issuer>');

Sinon, créez une intégration de sécurité SAML2 en exécutant l’instruction SQL suivante. Pour plus d’informations, voir CREATE SECURITY INTEGRATION.

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='my_x509_cert'
    saml2_sp_initiated_login_page_label = 'my_idp'
    saml2_enable_sp_initiated = false;

Etape 2 : mise à jour de l’intégration de la sécurité SAML2

Pour utiliser des demandes signées dans Snowflake, vous devez procéder comme suit dans Snowflake :

  • Activez l’intégration de la sécurité pour signer les demandes.

  • Enregistrez la valeur de saml2_snowflake_x509_cert pour l’utiliser à l’étape suivante.

En tant qu’administrateur de compte (c’est-à-dire un utilisateur avec le rôle ACCOUNTADMIN), exécutez les instructions suivantes :

-- update the security integration

alter security integration my_idp set SAML2_SIGN_REQUEST = true;

-- view the updated security integration, save the certificate value in row 7.

desc security integration my_idp;

Etape 3 : configurez votre IdP pour accepter les demandes signées

Configurez votre IdP pour accepter les demandes signées de Snowflake. Pendant la configuration, votre IdP doit avoir le certificat stocké dans le paramètre 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.

Etape 4 : se connecter à Snowflake

Après avoir configuré votre IdP, effectuez les tâches suivantes.

  • Vérifiez votre configuration IdP.

  • Créez des utilisateurs et attribuez des rôles dans Snowflake.

  • Déterminez si les utilisateurs se connecteront à Snowflake via SSO initié par l’IdP ou le SP.

    • Pour le SSO initié par l’IdP, informez vos utilisateurs sur la façon d’accéder à Snowflake (par exemple, accès au portail interne).

    • Pour le SSO initié par le SP (c’est-à-dire que les utilisateurs accèdent à Snowflake et sont ensuite redirigés vers le client IdP), activez le SSO initié par Snowflake en définissant le paramètre de compte SSO_LOGIN_PAGE sur true. En tant qu’utilisateur avec le rôle ACCOUNTADMIN, exécutez les instructions suivantes.

      use role accountadmin;
      
      alter account set SSO_LOGIN_PAGE = true;
      
  • Accédez à Snowflake comme indiqué dans Gestion/utilisation de l’authentification fédérée.

Format SAML NameID

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

Si votre IdP prend en charge la spécification de SAML NameID dans une assertion SAML, la procédure générale pour configurer et spécifier le NameID est la suivante :

  1. Créez ou migrez une intégration de sécurité SAML2 dans Snowflake.

  2. Mettez à jour votre intégration de sécurité pour prendre en charge NameId.

  3. Configurez votre IdP pour spécifier le format SAML NameID.

  4. Connectez-vous à Snowflake.

Procédure de configuration SAML NameID

Suivez ces étapes pour configurer le format SAML NameID et vous connecter à Snowflake.

Etape 1 : créer une intégration de sécurité SAML2 ou migrer vers celle-ci

Si vous avez une configuration SAML existante dans Snowflake et que vous souhaitez utiliser cette fonctionnalité, vous pouvez migrer vers une intégration de sécurité SAML2 en exécutant cette instruction SQL. Pour plus d’informations sur cette fonction système, voir SYSTEM$MIGRATE_SAML_IDP_REGISTRATION.

select system$migrate_saml_idp_registration('<integration_name>', '<issuer>');

Sinon, créez une intégration de sécurité SAML2 en exécutant l’instruction SQL suivante. Pour plus d’informations, voir CREATE SECURITY INTEGRATION.

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='my_x509_cert'
    saml2_sp_initiated_login_page_label = 'my_idp'
    saml2_enable_sp_initiated = false;

Étape 2 : mise à jour de l’intégration de la sécurité SAML2 pour NameID

Pour spécifier le format SAML NameID , exécutez les instructions suivantes en tant qu’administrateur de compte (c’est-à-dire un utilisateur doté du rôle ACCOUNTADMIN) :

-- update the security integration

alter security integration my_idp set SAML2_REQUESTED_NAMEID_FORMAT = '<string_literal>';

-- view the updated security integration

desc security integration my_idp;

Étape 3 : configuration de 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.

Etape 4 : se connecter à Snowflake

Après avoir configuré votre IdP, effectuez les tâches suivantes.

  • Vérifiez votre configuration IdP.

  • Créez des utilisateurs et attribuez des rôles dans Snowflake.

  • Déterminez si les utilisateurs se connecteront à Snowflake via SSO initié par l’IdP ou le SP.

    • Pour le SSO initié par l’IdP, informez vos utilisateurs sur la façon d’accéder à Snowflake (par exemple, accès au portail interne).

    • Pour le SSO initié par le SP (c’est-à-dire que les utilisateurs accèdent à Snowflake et sont ensuite redirigés vers le client IdP), activez le SSO initié par Snowflake en définissant le paramètre de compte SSO_LOGIN_PAGE sur true. En tant qu’utilisateur avec le rôle ACCOUNTADMIN, exécutez les instructions suivantes.

      use role accountadmin;
      
      alter account set SSO_LOGIN_PAGE = true;
      
  • Accédez à Snowflake comme indiqué dans Gestion/utilisation de l’authentification fédérée.

Exportation des 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 fournisseur d’identité.

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;

------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
              property              | property_type |                               property_value                                | property_default |
------------------------------------+---------------+-----------------------------------------------------------------------------+------------------+
SAML2_X509_CERT                     | String        | MIICrTCCAZWgAwIBAgIJAOF6EPk93wj...                                          |                  |
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        | MIICrTCCAZWgAwIBAgIJAOF6EPk93wj...                                          |                  |
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>MIICrTCCAZWgAwIBAgIJAOF6EPk93wj... </dsig:X509Certificate>
      </dsig:X509Data>
    </dsig:KeyInfo>
  </md:KeyDescriptor>
  <md:KeyDescriptor use="encryption">
    <dsig:KeyInfo>
      <dsig:X509Data>
        <dsig:X509Certificate>MIICrTCCAZWgAwIBAgIJAOF6EPk93wj... </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>

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

Gestion de votre intégration de sécurité SAML2

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

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

    alter security integration my_idp set SAML2_SNOWFLAKE_X509_CERT = 'AX2bv...';
    
  • Remplacez la clé privée et le certificat auto-signé existants et générez une nouvelle clé privée et un certificat auto-signé.

    alter security integration my_idp refresh SAML2_SNOWFLAKE_PRIVATE_KEY;
    
  • Activez les requêtes signées.

    alter security integration my_idp set SAML2_SIGN_REQUEST = true;
    
  • 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';
    

Pour plus d’informations, voir ALTER SECURITY INTEGRATION.