Étape 6 : Créez la politique de sécurité Azure pour le service proxy dans le portail

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.

If you want to allow only Snowflake to call the Azure Function, you must implement token validation. With token validation, when Snowflake tries to access the API Management service, Snowflake presents a JWT (JSON Web Token) access token obtained from Azure AD. The API Management service can either validate the JWT or pass it through without validation.

Cette rubrique fournit des instructions pour créer une politique de sécurité pour le service de gestion des API en ajoutant une politique validate-JWT qui définit les règles de validation du jeton.

Important

Snowflake recommande fortement de créer une politique de sécurité pour le service de gestion des API. Après avoir terminé cette étape, seul Snowflake est autorisé à appeler votre Azure Function par le biais du service de gestion des API.

Si vous préférez utiliser la validation basée sur les rôles dans votre politique validate-JWT, consultez la documentation Microsoft Service Principal pour l’attribution d’un rôle à un principal de service : Nouveau-AzureADServiceAppRoleAssignment.

Dans ce chapitre :

Créer une politique validate-JWT qui permet à Snowflake d’appeler Azure Function

Cette section montre comment spécifier une stratégie de validation d’un JSON Web Token (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 (l”« ID d’audience » ou simplement « aud ») de la fonction Azure.

Pour plus d’informations sur les revendications dans les jetons Web JSON (JWTs) émis par Azure Active Directory, voir la documentation de Microsoft : jetons d’accès.

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

  1. Si vous ne l’avez pas encore fait, connectez-vous au portail Azure.

  2. Allez à l’écran API Management service.

  3. Sélectionnez votre service Gestion des API.

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

  5. Dans la colonne qui contient All APIs, cliquez sur le nom de l’API pour laquelle vous souhaitez ajouter une politique de sécurité.

  6. Cherchez In-bound Processing :

    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 Azure Function App AD » de la feuille de calcul de suivi.

    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’ID de l’application Snowflake dans le champ Values.

        Si vous n’avez pas encore l’ID de l’application Snowflake, vous pouvez l’obtenir en suivant les étapes suivantes (l’ID de l’application Snowflake est dans le champ Application ID) :

        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 zone de recherche des applications d’entreprise n’a pas d’étiquette. Recherchez un champ large juste au-dessus de la liste des applications d’entreprise. La zone pourrait indiquer quelque chose de similaire à First 50 shown, to search all of your applications, enter a display name or the application ID.

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

        4. Trouvez la valeur Application ID pour AZURE_MULTI_TENANT_APP_NAME.

  7. Collez ce qui suit dans Open ID URLs :

    https://login.microsoftonline.com/<id_client>/.well-known/openid-configuration

    Remplacez <tenant_id> par votre ID de client Azure AD (comme décrit dans la section Conditions préalables pour la planification d’une fonction externe).

  8. Cliquez sur Save.

Testez votre fonction externe

Pour vous assurer que votre fonction externe fonctionne correctement avec la nouvelle politique de sécurité, appelez à nouveau votre fonction externe.

Pour plus de détails, voir Appel d’une fonction externe pour Azure.

Restreindre les adresses IP qui acceptent les appels Azure Function (facultatif)

In addition to specifying a validate-JWT policy (or using role-based validation), you can implement additional security by restricting IP addresses. This ensures that only the API Management service’s IP address is allowed to access the Azure Function app containing your Azure Function.

Pour plus d’informations sur la restriction des adresses IP, voir la documentation Microsoft : Restrictions sur les adresses IP entrantes.

Étape suivante

Aucun. Vous avez réussi à créer une fonction externe pour Azure.