Loupe

Azure Functions Http et sécurité : les access keys pendant vos développements

Il existe plusieurs manières de sécuriser une Azure Function. Dans ce premier article, nous verrons comment utiliser les access keys (clefs d'accès) pendant vos développements.

Différents types d'accès possibles

La sécurisation d'une Azure Function Http se configure au niveau de l'attribut HttpTrigger via la propriété AuthorizationLevel.

[FunctionName("MaFonction")]
        public async Task<IActionResult> Run(
            [HttpTrigger(
                AuthorizationLevel.Function,
                nameof(HttpMethod.Get),
                Route = null)]
            HttpRequest request,
            ILogger logger)
        {
          // ...
        }

Il existe plusieurs niveaux différents possibles:

  • Anonymous : n'importe qui ayant l'URL de votre AF peut l'appeler.
  • User : demande qu'un utilisateur soit connecté.
  • Function, System, Admin : authentification basé sur des clefs spécifiques (respectivement, la clef function, system et master).

La sécurisation via des clefs

C'est justement le sujet de cet article. Il s'agit d'avoir une clef (une sorte de mot de passe) qui permet d'appeler la fonction. Si cette clef n'est pas présente, vous ne pouvez tout simplement pas appeler la fonction et vous obtiendrez un code HTTP 401.

Il existe 3 niveaux de clefs : 

  • System : une clef non supprimable gérée par le système.
  • Host : valable pour toutes vos fonctions. Il faut aller dans la section "keys" de votre App service  sur le portail Azure pour les créer / supprimer.
  • Functions : la clef sera spécifique à une fonction en particulier. Il faut aller dans la section "keys" de votre fonction sur le portail Azure pour les créer / supprimer.

Capture d’écran 2020-06-11 à 14.04.53.png

Utiliser une clef lors d'un appel

Pour cela, il suffit de passer la valeur de la clef dans l'URL dans un paramètre nommé (injustement..) code. Votre Url aura donc cette forme :

https://l.azurewebsites.net/api/MaFunction?code=QbcI8j4tSnC3w==;

Il est aussi possible (et je préfère cela pour éviter de laisser traîner vos identifiants dans les logs de proxy) de passer cette clef dans le header nommé x-functions-key.

Pas en production

Bien que cela soit très pratique et simple à mettre en place, il est recommandé explicitement dans la documentation de ne pas utiliser ce système pour des Azure Functions en production. 

 

Dans un prochain article nous verrons une première manière de sécuriser une Azure Function en attendant vous pouvez retrouver comment détecter les erreurs dans vos Azure functions dans cet article :)

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus