Depuis une fonction Azure, nous avons besoin d’aller déposer des fichiers sur un SFTP. Celui-ci est configuré de telle sorte que toutes les adresse IP entrantes sont bloquées par défaut. Pour avoir les droits d’accès et d’écriture, les adresses IP des processus doivent être white-listées au préalable. Il est donc nécessaire que notre fonction Azure se présente auprès du serveur SFTP avec une adresse IP fixe.
Dans la configuration réseau de notre Function App, nous avons la liste d’adresses IP que notre fonction utilise pour le traffic sortant :
Il nous suffirait donc théoriquement de white-lister ces adresses IP. Mais le problème est que cette liste d’adresses peut changer, elle n’est pas garantie dans le temps. Cela implique qu’il nous faudrait en fait white-lister toutes les adresses potentiellement utilisables par les data centers Azure, en fonction de leur région. Cette liste globale est téléchargeable sur le site de Microsoft (https://www.microsoft.com/en-us/download/details.aspx?id=56519). Mais cette approche reste contraignante, puisqu’il faut ajouter non pas une mais potentiellement plusieurs centaines d’adresses IP à la configuration du SFTP.
Pour éviter cela, nous avons une alternative : utiliser un Virtual Network.
Nous devons créer trois ressources : une adresse IP publique, un Virtual Network et une NAT Gateway.
Une fois l’adresse IP créée, nous pouvons créer la NAT Gateway en ajoutant dans la section Outbound IP la nouvelle adresse :
Ensuite, nous pouvons créer le Virtual Network, lui ajouter un Subnet et configurer le lien vers la NAT Gateway fraîchement instanciée :
Et enfin nous pouvons lier notre Function App à notre Virtual Network et à notre Subnet, dans la section Networking :
Toutes les fonctions qui seront hébergées dans le Function App disposeront désormais d’une seule adresse IP fixe de sortie. Il ne reste plus qu’à white-lister cette adresse IP du côté SFTP. Attention, seuls certains plans des Azure Functions prennent en charge les Virtual Networks (https://docs.microsoft.com/en-us/azure/azure-functions/functions-networking-options#matrix-of-networking-features).