Création d’une fonction externe personnalisable sur Azure

Ce document montre une façon de créer une fonction externe sur Microsoft Azure.

Ces instructions supposent que vous connaissez déjà l’administration de Microsoft Azure. Ces instructions décrivent les étapes générales que vous devez exécuter, mais ne décrivent pas en détail l’interface utilisateur du portail Azure, car les détails pourraient changer.

Dans ce chapitre :

Conditions préalables

Vous avez besoin des éléments suivants :

  • Un client Azure AD (Active Directory).

  • Un compte dans ce client Azure AD. Le compte doit avoir les privilèges pour :

    • Créer une application de fonction Azure.

    • Créer un point de terminaison de service Gestion des API Azure.

    • Inscrire une application AD Azure.

  • Si vous envisagez d’utiliser une fonction Azure sur Linux comme service à distance, vous devez choisir une combinaison valable d’authentification et de plan tarifaire Azure :

    • Si vous utilisez le plan tarifaire Premium ou App Service, vous pouvez créer l’application Azure AD à partir de l’onglet Azure Authentication/Authorization, et utiliser Azure AD pour l’authentification avec le service Azure Function.

    • Si vous utilisez le plan tarifaire de consommation, alors :

Préparation de la création d’une fonction externe sur Azure

Vous devriez déjà disposer des informations suivantes :

Azure AD Tenant ID: _____________________________________

    This is a UUID.

Si vous ne connaissez pas encore votre ID de client AD Azure, vous pouvez le trouver en procédant comme suit :

  1. Connectez-vous au portail Azure (http://portal.azure.com).

  2. Dans les icônes « Services Azure » en haut de la page, cliquez sur Azure Active Directory.

  3. Dans le menu de gauche, cherchez la section intitulée Manage, puis cliquez sur Properties sous celle-ci.

    L’ID de client Azure AD s’affiche dans le champ ID du client.

Lorsque vous créez votre fonction externe, vous devez enregistrer des informations spécifiques (par exemple, le nom de l’application de fonction Azure) que vous saisissez afin de pouvoir utiliser ces informations dans les étapes suivantes. La fiche de travail ci-dessous vous aide à suivre ces informations.

==============================================================================================
=========================================== Worksheet ========================================
==============================================================================================

----------------- Information about the Azure Function (remote service) ----------------------

Azure Function app name................: _________________________________________

HTTP-Triggered Function name...........: _________________________________________

Azure Function AD app registration name: _________________________________________

Azure Function AD Application ID.......: _________________________________________

    (This is the "Application (client) ID" of the Azure AD app registration for the Azure function, and
    is used to fill in the "azure_ad_application_id" field in the CREATE API INTEGRATION command.
    This is in the form of a UUID. See https://en.wikipedia.org/wiki/Universally_unique_identifier .)


------------ Information about the Azure API Management Service (proxy service) --------------

API Management service name......: __________________________________________

API Management API URL suffix....: __________________________________________


---------------- Snowflake API Integration and External Function Information -----------------

API Integration Name.............: _______________________________________________

AZURE_MULTI_TENANT_APP_NAME......: _______________________________________________

AZURE_CONSENT_URL................: _______________________________________________

External Function Name...........: _______________________________________________

External Function Name.....: _______________________________________________

Etape 1 : Créer le service distant (fonction Azure)

Dans ce tutoriel, un service distant est mis en œuvre en tant que fonction Azure.

Créer l’application de la fonction Azure

La première étape consiste à créer une application de fonction Azure qui servira de conteneur pour la ou les fonctions que vous créerez plus tard.

Vous pouvez créer l’application de fonction en suivant les instructions de Microsoft (un lien vers ces instructions se trouve ci-dessous). Lorsque vous suivez ces instructions, n’oubliez pas ce qui suit :

  • Lorsque vous entrez dans le champ « Nom de l’application de fonction », enregistrez ce nom dans le champ « Azure function app name » de la feuille de calcul ci-dessus.

  • Certaines restrictions s’appliquent lors de la création de plusieurs applications dans un même groupe de ressources. Pour plus de détails, voir :

    https://docs.microsoft.com/fr-fr/azure/app-service/containers/app-service-linux-intro#limitations

  • Snowflake fournit un exemple de fonction « echo » dans Node.js. Si vous voulez utiliser cette fonction d’exemple pour commencer, alors :

    • Lorsqu’on vous demande le Runtime stack, sélectionnez Node.js.

    • Lorsqu’on vous demande la version de Node.js, sélectionnez la version 12.

    • Lorsqu’il vous est demandé sur quel OS exécuter la fonction, choisissez « Windows » ou « Linux ».

Les instructions de Microsoft pour créer une application de fonction Azure sont disponibles ici :

Créer une fonction déclenchée par HTTP

Après avoir créé votre application de fonction Azure (conteneur), vous devez créer une fonction Azure dans ce conteneur. Cette fonction fait office de service distant.

Microsoft permet d’appeler (« déclencher ») des fonctions Azure de différentes manières. Une fonction externe Snowflake invoque un service distant via une commande HTTP POST, donc la fonction Azure que vous créez doit être une « fonction déclenchée par HTTP ».

Microsoft documente ici la manière de créer une fonction déclenchée par HTTP :

Les instructions de Snowflake ci-dessous sont similaires, mais comprennent des détails supplémentaires et un exemple de code, et suggèrent un niveau d’autorisation différent de celui suggéré par Microsoft.

Avant d’exécuter les instructions ci-dessous, vous devez vous trouver sur l’écran « Application de fonction ». Le nom de votre application de fonction Azure doit être affiché, généralement dans le coin supérieur gauche de l’écran.

  1. Dans l’arborescence du menu de gauche, cherchez la section intitulée Functions. Dans cette section, cliquez sur l’élément étiqueté Functions pour ajouter une fonction.

  2. Cliquez sur le bouton + Add.

  3. Sélectionnez HTTP trigger dans la liste des déclencheurs potentiels sur la droite.

  4. Entrez le nom à utiliser pour votre fonction déclenchée par HTTP.

    Enregistrez ce nom dans le champ de la feuille de calcul intitulé « Nom de la fonction déclenchée par HTTP ».

  5. Entrez le Authorization level.

    Snowflake recommande de choisir Function comme niveau d’autorisation.

    Pour plus d’informations sur les niveaux d’autorisation possibles, voir : https://docs.microsoft.com/fr-fr/azure/azure-functions/functions-bindings-http-webhook-trigger?tabs=csharp#configuration

  6. Cliquez sur le bouton intitulé Add.

    Vous accédez alors à un écran qui affiche le nom de la fonction et, en dessous, le mot « Fonction ».

  7. Dans l’arborescence du menu de gauche, cliquez sur « Code + test ».

  8. Remplacez le code par défaut par votre propre code.

    Voici un exemple de fonction « echo » JavaScript, qui renvoie simplement les lignes qu’elle a validées.

    La fonction lit chaque ligne, puis copie cette ligne dans la sortie (résultats). Le numéro de ligne est également inclus dans la sortie. La sortie est renvoyée dans le cadre d’un dictionnaire à plusieurs niveaux.

    Normalement, la fonction renvoie le code HTTP 200. Si aucune ligne n’est transmise à la fonction (c’est-à-dire si le corps de la requête est vide), la fonction renvoie le code d’erreur 400.

    module.exports = async function(context, request) {
        context.log('JavaScript HTTP trigger function processed a request.');
    
        if (request.body) {
            var rows = request.body.data;
            var results = [];
            rows.forEach(row => {
                results.push([row[0], row]);
            });
    
            results = {data: results}
            context.res = {
                status: 200,
                body: JSON.stringify(results)
            };
       }
       else {
           context.res = {
               status: 400,
               body: "Please pass data in the request body."
           };
       }
    };
    
  9. Cliquez sur le bouton intitulé Save au-dessus du code.

  10. Vous pouvez tester le code en cliquant sur le bouton « Test/Exécuter » pour tester votre fonction Azure.

    Vous avez besoin d’une charge utile (données) pour le test. Voici un exemple de charge utile :

    {
         "data": [ [ 0, 43, "page" ], [ 1, 42, "life, the universe, and everything" ] ]
    }
    

    Le contenu de la sortie doit être similaire à ce qui suit :

    { "data":
        [
            [ 0, [ 0, 43, "page" ] ],
            [ 1, [ 1, 42, "life, the universe, and everything" ]  ]
        ]
    }
    

Notez que le formatage peut être différent de ce qui est indiqué ci-dessus.

Définir les exigences d’autorisation pour l’application de fonction Azure

Lorsqu’une fonction externe est appelée, Snowflake envoie une commande HTTP POST au service proxy (par exemple, le service Gestion des API Azure), qui relaie POST au service distant (par exemple la fonction Azure).

Chacune de ces deux étapes doit être soumise à des exigences d’autorisation, ce que vous précisez généralement :

  • L’autorisation nécessaire pour appeler le service Gestion des API.

  • L’autorisation nécessaire pour appeler des fonctions dans l’application de fonction Azure qui contient votre fonction Azure.

Cette section décrit comment demander une autorisation pour votre application de fonction Azure. (Le service Gestion des API est créé ultérieurement, de sorte que ses exigences en matière d’autorisation soient également précisées ultérieurement).

Lorsque Snowflake s’authentifie avec votre application de fonction Azure, Snowflake utilise le flux d’octroi d’informations d’identification du client OAuth avec Azure AD.

(Pour plus de détails sur le flux d’octroi d’informations d’identification du client, voir : https://docs.microsoft.com/en-us/azure/active-directory/azuread-dev/v1-oauth2-client-creds-grant-flow .)

Ce flux d’informations d’identification du client nécessite l’inscription d’une application Azure AD qui représente l’application de fonction Azure.

Cette section contient les instructions pour créer l’inscription de l’application Azure AD pour l’application de fonction Azure. Par exemple, vous pouvez paramétrer votre application de fonction Azure pour exiger l’authentification Azure AD. Pour configurer l’autorisation via Azure AD, vous devez :

  • Créer une inscription d’application Azure AD, qui est une entité basée sur Azure AD représentant un identificateur d’identité ou de ressource (c’est-à-dire ce que vous voulez protéger).

  • Associez l’inscription de l’application Azure AD à l’application de fonction Azure pour laquelle vous voulez exiger une authentification.

Note

Pour les fonctions Azure, le moyen le plus rapide de créer une inscription d’application Azure AD est d’activer l’authentification Azure AD pour le service, comme documenté ci-dessous. Si vous utilisez un service distant autre qu’une fonction Azure, utilisez la page Enregistrements d’applications pour créer une nouvelle inscription d’application Azure AD pour votre service distant. Pour plus de détails sur l’inscription d’une application, voir la documentation Microsoft ici :

Avant d’exécuter les étapes ci-dessous, vous devez vous trouver sur l’écran « Application de fonction » de votre application de fonction Azure.

  1. Dans le volet de gauche du menu, cherchez la section nommée Settings et cliquez sur Authentication / Authorization sous celle-ci.

    Si la marge de gauche affiche le menu « Développer » (avec « Code + Test », « Integration », etc.), alors si vous avez une barre de défilement en bas de votre écran, essayez de faire glisser la barre de défilement vers la gauche pour revenir à la section Function App ou « Service d’application », puis cherchez Settings.

  2. Trouvez le bouton intitulé App Service Authentication et faites-le passer de Off à On.

    Si vous ne pouvez pas modifier les paramètres sur cette page Authentication / Authorization , voir le conseil de dépannage : Impossible de modifier les paramètres de la fonction azur sous le menu Authentication/Authorization .

  3. Trouvez le menu déroulant intitulé « Action à exécuter quand une demande n’est pas authentifiée » et sélectionnez la valeur « Se connecter avec Azure Active Directory ».

  4. Sous « Fournisseurs d’authentification », sélectionnez « Azure Active Directory ».

Passez à la section suivante pour configurer l’authentification via Azure Active Directory (AD).

Authentification via Azure Active Directory

À présent, vous devriez être sur l’écran « Paramètres Azure Active Directory ».

  1. Faites passer le bouton Management mode de Off à Express ou Advanced. (Les instructions suivantes supposent que vous avez choisi Express.)

  2. Pour créer l’inscription de l’application Azure AD pour votre application de fonction Azure, suivez les étapes ci-dessous :

    1. Trouvez Management mode et sélectionnez Create New AD App ou Select Existing AD App.

      Pour cette démonstration, sélectionnez Create New AD App à moins que vous n’ayez déjà une inscription de l’application Azure AD que vous souhaitez utiliser.

    2. Par défaut, le nom d’inscription de l’application Azure AD est le même que le nom de l’application de fonction Azure. Ce nom doit apparaître dans le champ « Créer une application ». Vous pouvez changer ce nom si vous le souhaitez.

      Inscrivez le nom d’enregistrement d’application Azure AD dans le champ « Nom de l’inscription d’application AD de fonction Azure » de la feuille de calcul.

    3. Cliquez sur le bouton OK en bas à gauche de votre fenêtre. Cela crée une inscription d’application Azure AD et vous renvoie à l’écran d’authentification/d’autorisation du service d’application.

    4. Vérifiez que le bouton nommé App Service Authentication est bien sur On.

    5. Cliquez sur le bouton Save qui se trouve près du coin supérieur gauche du panneau principal (à droite du panneau de menu).

    La plupart des étapes précédentes sont également documentées dans la documentation Azure, que vous pouvez lire pour plus de détails :

Maintenant que votre application Azure AD est inscrite, l’étape suivante consiste à vérifier que l’application est bien répertoriée sous « Inscriptions d’applications ».

  1. Ouvrez un nouvel onglet du navigateur et allez sur http://portal.azure.com, puis cliquez sur App Registrations.

    Si ce n’est pas visible, cherchez « Inscription d’application » dans la fenêtre de recherche Microsoft Azure en haut de l’écran.

    Vous devriez maintenant être sur l’écran « Inscriptions ».

    Vous devriez voir deux onglets, un intitulé « Toutes les applications » et l’autre « Applications détenues ».

  2. Sélectionnez l’onglet « Toutes les applications » s’il n’est pas déjà sélectionné.

  3. Cliquez sur le nom de l’inscription d’application Azure AD que vous venez de créer pour votre application de fonction Azure.

    Note

    Vous pouvez utiliser la barre de recherche pour rechercher votre application Azure AD par son nom. Pour ce faire, entrez les premiers caractères du nom. La barre de recherche suppose que vous tapez la première partie du nom. Elle ne recherche pas la sous-chaîne spécifiée partout dans les noms de fonctions.

    Cela devrait vous amener à l’écran « Inscriptions des applications ».

  4. Sur l’écran des inscriptions des applications qui décrit l’application Azure AD pour votre application de fonction Azure, vous devez voir le nom de votre application Azure AD.

  5. Trouvez le champ nommé « ID d’application (client) ».

    Enregistrez ceci dans la feuille de calcul dans le champ nommé « ID d’application AD d’application de fonction Azure ». (Veillez à copier l’ID et non le nom de l’application Azure AD. L’ID doit contenir un UUID .)

Étape 2 : Créer et configurer le service proxy (service Gestion des API Azure)

Snowflake n’envoie pas de données (requêtes HTTP POST) directement au service distant (par exemple, la fonction Azure). Au lieu de cela, Snowflake envoie les données à un service proxy qui relaie les données de Snowflake au service distant, et du service distant à Snowflake.

Sur Azure, les fonctions externes Snowflake prennent en charge la Gestion des API Azure en tant que service proxy.

Créer le service Gestion des API

Pour créer le service Gestion des API, suivez les instructions de Microsoft (un lien vers les instructions est inclus ci-dessous).

Lorsque vous exécutez ces instructions, n’oubliez pas de faire ce qui suit :

  • Enregistrez le nom du service Gestion des API (qui peut être intitulé Resource name) en tant que « Nom du service Gestion des API » dans la feuille de calcul ci-dessus.

Les instructions de Microsoft pour la création d’un service Gestion des API sont disponibles ici :

Le déploiement du service Gestion des API peut prendre 30 minutes ou plus. Lorsque le déploiement est terminé, vous devriez voir un message similaire à « Votre déploiement est terminé ».

Une fois le déploiement terminé, cliquez sur le bouton Go to resource .

Importer l’API qui contient la fonction Azure

Après avoir créé le service Gestion des API (service proxy), l’étape suivante consiste à importer et à publier l’application de fonction Azure qui contient les APIs (fonctions) à appeler par ce service Gestion des API.

  1. Suivez les instructions de Microsoft pour importer et publier une fonction Azure (un lien vers les instructions se trouve ci-dessous).

    Lorsque vous exécutez ces instructions, n’oubliez pas ce qui suit :

    • L’une de ces étapes exige que vous spécifiiez une option pour Product. Pour cette démonstration, choisissez Starter plutôt que Unlimited. (Pour un système de production, votre choix pourrait être différent).

    • Inscrivez la ou les valeurs suivantes dans la fiche de travail :

      • Enregistrez le API URL suffix de la feuille de calcul ci-dessus dans la section « Suffixe URL API GestionAPI ».

    Vous trouverez ci-dessous un lien vers les instructions de Microsoft. Cette page comprend des instructions pour d’autres tâches, ainsi que pour l’importation d’APIs. Pour cette démonstration, vous n’avez généralement besoin que des instructions pour importer une application de fonction Azure en tant que nouvelle API.

    Après avoir suivi les étapes énumérées dans la documentation Azure pour importer une application de fonction Azure, vous devriez être de retour sur la page API Management service .

  2. Dans l’onglet Settings , si la case à cocher Subscription Required est cochée, décochez-la à moins que vous ne vouliez exiger un abonnement.

    (Si vous ne voyez pas la section Subscription , faites défiler le contenu vers le bas).

  3. Cliquez sur le bouton Save.

Note

Vous devriez définir des politiques de sécurité sur le service Gestion des API. Azure. Vous pouvez définir la politique de sécurité maintenant ou vous pouvez finir de créer la fonction externe d’abord et tester l’intégrité de la fonction externe avant de définir la politique de sécurité sur le service Gestion des API Azure. Pour simplifier le débogage, ces instructions terminent d’abord la création et la vérification de l’intégrité de la fonction externe.

Étape 3 : Créer un objet d’intégration API dans Snowflake

Conditions préalables

Vous avez besoin des éléments suivants :

Composer l’instruction CREATE API INTEGRATION

  1. Ouvrez (si vous ne l’avez pas déjà fait) une session d’interface Web Snowflake.

  2. Utilisez un rôle Snowflake avec des privilèges ACCOUNTADMIN ou un rôle avec le privilège CREATE INTEGRATION, par exemple :

    use role accountadmin;
    
  3. Tapez la commande CREATE API INTEGRATION pour créer une intégration API. La commande doit ressembler à ce qui suit :

    create or replace api integration <integration_name>
        api_provider = azure_api_management
        azure_tenant_id = '<tenant_id>'
        azure_ad_application_id = '<azure_application_id>'
        api_allowed_prefixes = ('<url>')
        enabled = true;
    

    nom_intégration

    Les noms doivent suivre les règles de Identificateurs d’objet.

    id_client

    Votre ID de client Azure AD.

    Vous pouvez également utiliser votre domaine (par exemple my_company.onmicrosoft.com).

    id_application_azure

    Régler sur l’ID d’application AD d’application de fonction Azure dans la feuille de calcul.

    prefixes_autorisés_api

    Ce champ vous permet de restreindre les URLs auxquelles cette intégration d’API peut être appliquée.

    Habituellement, ce champ contient l’URL du service proxy (par exemple l’URL du service Gestion des API Azure). Pour réduire encore ce nombre, vous pouvez ajouter le suffixe URL API Gestion API. Si vous incluez l’URL API Gestion API, alors l’URL dans le champ api_allowed_prefixes doit ressembler à ceci :

    https://<nom-service-gestion-api>.azure-api.net/<suffix_url_api>

    Par exemple :

    Elle doit correspondre à l’URL de base et au suffixe de l’onglet Settings du service Gestion des API dans votre API importée. Vous pouvez effectuer une copie à partir de là si cela vous convient.

    Pour plus de détails, voir CREATE API INTEGRATION.

  4. Dans la case de la feuille de travail intitulée « Nom de l’intégration API », enregistrez le nom de l’intégration API que vous avez créée. Vous aurez besoin du nom de l’intégration API lorsque vous exécuterez la commande CREATE EXTERNAL FUNCTION plus tard.

  5. Exécutez la commande CREATE API INTEGRATION que vous avez tapée ci-dessus.

Étape 5 : Créer la fonction externe dans Snowflake

Dans Snowflake, exécutez la commande CREATE EXTERNAL FUNCTION. La commande doit être similaire à ce qui suit :

create or replace external function <function_name>(<parameters>)
    returns variant
    api_integration = <api_integration_name>
    as '<invocation_URL>'
    ;

nom_fonction

Nom de la fonction. Les noms doivent suivre les règles de Identificateurs d’objet.

paramètres

Paramètres de la fonction, le cas échéant. Les paramètres doivent correspondre aux paramètres du service distant (par exemple, la fonction Azure). Les noms des paramètres ne doivent pas nécessairement correspondre, mais les types de données doivent être compatibles.

Si votre fonction Azure utilise l’exemple de code JavaScript fourni ci-dessus, alors les paramètres sont un INTEGER et un VARCHAR.

nom_intégration_api

Nom d’intégration API que vous avez enregistré précédemment dans le champ « Nom de l’intégration API » dans la feuille de travail.

invocation_URL

Il s’agit de l’URL à laquelle Snowflake envoie la commande HTTP POST pour appeler le service à distance. Si le service proxy est le service de gestion des API Azure et si le service à distance est une fonction Azure, alors l’URL ressemble à ce qui suit :

https://<API_Mnom_du_service_de_gestion>.azure-api.net/<suffixe_url_api>/<http_triggered_function_name>

où :

suffixe_url_api

Suffixe d’URL de l’API Gestion des API de la fiche de travail.

nom_fonction_déclenchée_http

Nom de la fonction déclenchée par HTTP de la feuille de calcul.

Dans la feuille de calcul, enregistrez le nom de la fonction externe que vous avez créée dans la case intitulée « Nom de la fonction externe ».

Étape 6 : Tester la fonction externe

Tester la fonction externe en l’appelant. Par exemple, exécutez une commande SQL semblable à la suivante :

select my_external_function(42);

La valeur renvoyée doit être similaire à :

[0, 42]

42 est la valeur renvoyée et 0 est le numéro de ligne de la valeur renvoyée.

Étape 7 : Définir la politique de sécurité sur le service Gestion des API Azure (service proxy)

Les étapes précédentes permettent d’importer vos APIs (et donc votre fonction Azure) pour qu’elles puissent être appelées non seulement par Snowflake, mais aussi par d’autres clients authentifiés, tels que les applications qui se trouvent dans votre client Azure AD ou qui ont un principal de service dans votre client Azure AD. Si vous voulez que seul Snowflake puisse appeler la fonction Azure, vous devez forcer une étape d’autorisation supplémentaire : la validation de jeton.

Lorsque Snowflake tente d’accéder au service Gestion des API, Snowflake présente un jeton d’accès JWT obtenu auprès d’Azure AD. Le service Gestion des API peut soit valider le JWT, soit le faire passer sans validation. Pour exiger que le service Gestion des API valide le jeton, vous pouvez ajouter une statégie validate-JWT qui spécifie les règles de validation du jeton.

Note

Si vous préférez utiliser la validation basée sur les rôles dans votre stratégie validate-JWT, suivez le lien ci-dessous pour attribuer un rôle au principal de service de Snowflake :

Créer une stratégie validate-JWT qui précise que Snowflake peut appeler la fonction Azure

Cette section montre comment spécifier une stratégie de validation d’un JSON Token Web (JWT) qui autorise Snowflake à appeler votre fonction Azure. La stratégie de validation (« stratégie validate-JWT ») valide les deux revendications suivantes dans le JWT :

  • L’ID d’application du principal de service de Snowflake (le « AppID demandeur » ou simplement « appid »).

  • L’ID d’application de l’application cible (le « ID d’audience » ou simplement « aud ») de la fonction Azure.

Pour plus d’informations sur les revendications en JSON Web Tokens (JWTs) émis par Azure Active Directory, voir :

Les étapes suivantes permettent de configurer l’API importée pour utiliser un JSON Web Token.

  1. Allez à la page « Service Gestion des API ».

  2. Sélectionnez votre service Gestion des API.

  3. Trouvez la section « APIs » dans la colonne de gauche, puis cliquez sur l’option « APIs » sous celle-ci.

  4. Dans la colonne qui contient « Toutes les APIs », cliquez sur le nom du service Gestion des API pour lequel vous souhaitez ajouter une politique de sécurité.

  5. Recherchez « Service de traitement entrant ».

    1. Cliquez sur + Add policy.

    2. Cliquez sur validate-jwt.

    3. Remplissez le Header name avec la valeur Authorization.

    4. Ajouter validation du JWT (JSON Web Token) fourni par Snowflake pour l’accès à la fonction Azure :

      1. Cherchez Required claims et cliquez sur + Add claim.

      2. Remplissez le champ Name avec « aud » (abréviation de « audience »).

      3. Dans la revendication requise, cherchez Values et cliquez sur +Add value.

        Ajoutez le UUID que vous avez copié dans le champ id_application_azure_ad de la commande CREATE API INTEGRATION. Ceci est enregistré dans le champ « ID d’application AD d’application de fonction Azure » de la feuille de calcul.

    5. Ajouter une « revendication » distincte pour Snowflake :

      1. Cliquez à nouveau sur + Add claim :

      2. Remplissez le champ Name avec la chaîne littérale « appid ».

      3. Dans la revendication, cliquez sur + Add value et ajoutez l’identifiant de l’application Snowflake.

        Si vous n’avez pas encore l’identifiant de l’application Snowflake, vous pouvez l’obtenir en suivant les étapes suivantes :

        1. Dans la feuille de calcul, trouvez le AZURE_MULTI_TENANT_APP_NAME que vous avez rempli précédemment.

        2. Dans la zone de recherche du portail Azure, cherchez Enterprise Applications.

          Cela vous amène à l’écran Enterprise applications | All applications .

        3. Dans cet écran, recherchez le AZURE_MULTI_TENANT_APP_NAME.

          La boîte de recherche n’est pas clairement nommée ; cherchez un grand champ qui n’a PAS de nom.

          Si vous ne trouvez pas de correspondance exacte pour le AZURE_MULTI_TENANT_APP_NAME, effectuez une nouvelle recherche en utilisant uniquement les premiers caractères de ce nom (si le nom contient un trait de soulignement, n’incluez pas le trait de soulignement ni aucun caractère après le trait de soulignement).

        1. Copier l’ID d’application (qui a le format d’un UUID) dans le champ Values .

  6. Collez ce qui suit dans Open ID URLs :

    https://login.microsoftonline.com/<ID client>/.connu/configuration-openid

    Remplacez l” ID du client par votre ID de client AD, que vous avez enregistré dans la section intitulée Préparation de la création d’une fonction externe sur Azure, juste au-dessus de la feuille de calcul.

  7. Cliquez sur Save.

  8. Testez la modification en appelant à nouveau la fonction externe.

Restreindre les adresses IP à partir desquelles les appels de fonctions Azure (service distant) sont acceptés (facultatif)

En plus de spécifier une stratégie validate-JWT (ou d’utiliser une autorisation basée sur le rôle), vous pouvez renforcer encore plus la sécurité en ajoutant une restriction d’adresse IP de sorte que seule l’IP du service Gestion des API soit autorisée à accéder à l’application de fonction Azure qui contient votre fonction Azure. Pour plus d’informations sur la restriction des adresses IP, voir :

Dépannage

Cette section contient des informations de dépannage spécifiques à Azure.

Pour des informations générales sur le dépannage, voir le document général de dépannage des fonctions externes.

Délais d’expiration

Il existe de nombreuses causes possibles de dépassement de délais d’expiration. Sur Azure, une des causes possibles est que l’écriture de l’application de fonction Azure n’a pas été faite en tenant compte de la mise à l’échelle. Assurez-vous que vous suivez les directives Azure pour l’écriture de fonctions gérant la mise à l’échelle .

Pour plus d’informations sur le dépannage des problèmes de mise à l’échelle et de performance, voir le document général de dépannage des fonctions externes.

Échec de la demande pour la fonction externe <nom_fonction>. Erreur : 401 “{ « statusCode » : 401, « message » : « Accès refusé en raison d’une clé d’abonnement manquante. Veillez à inclure la clé d’abonnement lors de la demande à une API ». }”

Vous devrez peut-être désactiver l’obligation d’abonnement du service Gestion des API.

Échec de la demande pour la fonction externe <nom_fonction>. Erreur : 401 “{ « statusCode » : 401, « message » : « JWT non valide. » }”

  • Vous n’avez peut-être pas terminé de définir la politique de sécurité sur le service Gestion des API. Par exemple, vous pourriez avoir :

    • Créé le JWT, mais ne pas l’avoir modifié.

    • Oublié une ou plusieurs revendications/valeurs requises. Par exemple, vous avez peut-être spécifié la revendication pour Snowflake, mais pas le service distant (fonction Azure), ou vice versa.

  • Vous avez peut-être utilisé une URL d’ID ouverte non valide.

Erreur d’exécution SQL : échec de l’obtention du jeton d’accès Azure Active Directory.

Essayez les étapes suivantes :

  • Vérifiez que le principal de service Snowflake a accès à votre client Azure AD.

  • Vérifiez que l’ID de client et l’ID d’application Azure AD sont corrects.

    Notez que l’espace, y compris l’espace de début et de fin (par exemple les blancs), est significatif dans le(s) champ(s) ID. Vérifiez s’il y a des espaces de début et de fin incorrects.

Impossible de modifier les paramètres de la fonction azur sous le menu Authentication/Authorization

Lors de la création de votre fonction Azure, il se peut que vous ne puissiez pas modifier les paramètres de cette fonction sous le menu Authentication/Authorization . Cela se produit si tous les éléments suivants se produisent :

  • Votre fonction Azure fonctionne sous Linux plutôt que sous Microsoft Windows.

  • Vous prévoyez d’utiliser l’authentification/autorisation Azure AD pour votre fonction Azure.

  • Vous utilisez le tarif « consommation » d’Azure (plutôt que le tarif « premium »).

L’authentification Azure AD n’est pas disponible sur le plan Consommation Linux pour les fonctions Azure. Vous devez utiliser un plan App Service ou un plan Premium afin de vous authentifier avec Azure AD.

Les solutions possibles sont les suivantes :