Utiliser les clés d’accès dans Azure Functions
Azure Functions vous permet d’utiliser des clés secrètes pour rendre plus difficile l’accès à vos points de terminaison de fonction. Cet article décrit les différents genres de clés d’accès pris en charge par Functions, et explique comment les utiliser.
Bien que les clés d’accès fournissent une certaine atténuation contre les accès indésirables, vous devez prendre en compte d’autres options pour sécuriser les points de terminaison HTTP en production. Par exemple, il n’est pas recommandé de distribuer des secrets partagés dans une application publique. Si votre fonction est appelée à partir d’un client public, vous devez implémenter les mécanismes de sécurité suivants, ou en appliquer d’autres :
- Activer l’authentification/l’autorisation pour App Service
- Utiliser le service Azure APIM (Gestion des API) pour authentifier les requêtes
- Déployer votre application de fonction sur un réseau virtuel
- Déployer votre application de fonction en mode d’isolation
Les clés d’accès fournissent la base de l’autorisation HTTP dans les fonctions déclenchées par des requêtes HTTP. Pour plus d’informations, consultez Niveau d’autorisation.
Comprendre les clés
L’étendue d’une clé d’accès et les actions qu’elle prend en charge dépendent du type de clé d’accès.
Type de clé | Nom de clé | Niveau d’authentification HTTP | Description |
---|---|---|---|
Fonction | default ou défini par l’utilisateur |
function |
Autorise l’accès uniquement à un point de terminaison de fonction spécifique. |
Hôte | default ou défini par l’utilisateur |
function |
Autorise l’accès à tous les points de terminaison de fonction dans une application de fonction. |
Élément maître | _master |
admin |
Clé d’hôte spéciale qui fournit également un accès administratif aux API REST d’exécution dans une application de fonction. Cette clé ne peut pas être révoquée. Dans la mesure où la clé principale octroie des autorisations élevées dans votre application de fonction, vous ne devez pas partager cette clé avec des tiers, ou la distribuer dans les applications clientes natives. |
Système | Dépend de l’extension | n/a | Certaines extensions peuvent nécessiter une clé gérée par le système pour accéder aux points de terminaison de webhook. Les clés système sont conçues pour les points de terminaison de fonctions spécifiques à l’extension qui sont appelés par les composants internes. Par exemple, le déclencheur Event Grid exige que l’abonnement utilise une clé système lors de l’appel du point de terminaison du déclencheur. Durable Functions utilise également des clés système pour appeler API d’extension de tâche durable. Les clés système peuvent uniquement être créées par des extensions spécifiques, et vous ne pouvez pas définir explicitement leurs valeurs. À l’instar d’autres clés, vous pouvez générer une nouvelle valeur pour la clé à partir du portail ou à l’aide des API clé. |
Chaque clé est nommée à titre de référence. Il existe une clé par défaut (nommée default
) au niveau de la fonction et de l’hôte. Les clés de fonction prennent le pas sur les clés d’hôte. Quand deux clés portent le même nom, la clé de fonction est toujours utilisée.
Le tableau suivant compare les utilisations de différents types de clés d’accès :
Action | Étendue | Type de clé |
---|---|---|
Exécuter une fonction | Fonction spécifique | Fonction |
Exécuter une fonction | Toutes les fonctions | Fonction ou hôte |
Appeler un point de terminaison admin |
Conteneur de fonctions | Principale uniquement |
Appeler des API d’extension de tâche durables | Application de fonction* | System |
Appeler un webhook spécifique à une extension (interne) | Application de fonction* | système |
*Étendue déterminée par l’extension.
Conditions clés
Au sein de Functions, les clés d’accès sont des tableaux de 32 octets générés aléatoirement, et codés sous forme de chaînes au format base 64 utilisables de manière sécurisée dans les URL. Bien que vous puissiez générer vos propres clés d’accès et les utiliser avec Functions, nous vous recommandons vivement de laisser Functions générer toutes vos clés d’accès à votre place.
Les clés d’accès générées par Functions incluent des valeurs de signature et de somme de contrôle spéciales qui indiquent le type de clé d’accès, et le fait qu’elles ont été générées par Azure Functions. La présence de ces composants supplémentaires dans la clé elle-même facilite grandement la détermination de la source de ces genres de secrets durant l’analyse de sécurité et d’autres processus automatisés.
Pour permettre à Functions de générer vos clés à votre place, ne fournissez pas la clé value
aux API qui vous permettent de générer des clés.
Gérer le stockage des clés
Les clés sont stockées dans votre Function App dans Azure, et chiffrées au repos. Par défaut, les clés sont stockées dans un conteneur de stockage Blob dans le compte fourni par le paramètre AzureWebJobsStorage
. Vous pouvez utiliser le paramètre AzureWebJobsSecretStorageType
pour remplacer ce comportement par défaut, et stocker plutôt les clés dans l’un de ces autres emplacements :
Emplacement | Valeur | Description |
---|---|---|
Un deuxième compte de stockage | blob |
Stocke les clés au sein de Stockage Blob, dans un compte de stockage différent de celui utilisé par le runtime Functions. Le compte et le conteneur spécifiques utilisés sont définis par une URL SAP (signature d’accès partagé) définie dans le paramètre AzureWebJobsSecretStorageSas . Vous devez conserver le paramètre AzureWebJobsSecretStorageSas quand l’URL SAP change. |
Azure Key Vault | keyvault |
Le coffre de clés défini dans AzureWebJobsSecretStorageKeyVaultUri est utilisé pour stocker les clés. |
Système de fichiers | files |
Les clés sont conservées dans le système de fichiers local, ce qui est le comportement par défaut dans Functions v1.x. Le stockage dans le système de fichiers n’est pas recommandé. |
Secrets Kubernetes | kubernetes |
L’ensemble de ressources dans AzureWebJobsKubernetesSecretName est utilisé pour stocker des clés. Pris en charge uniquement quand votre application de fonction est déployée sur Kubernetes. Azure Functions Core Tools génère automatiquement les valeurs quand vous l’utilisez pour déployer votre application sur un cluster Kubernetes. |
Quand vous utilisez Key Vault pour le stockage de clés, les paramètres d’application dont vous avez besoin dépendent du type de l’identité managée, affectée par le système ou affectée par l’utilisateur.
Nom du paramètre | Attribué par le système | Affecté par l’utilisateur | Inscription d'application |
---|---|---|---|
AzureWebJobsSecretStorageKeyVaultUri | ✓ | ✓ | ✓ |
AzureWebJobsSecretStorageKeyVaultClientId | X | ✓ | ✓ |
AzureWebJobsSecretStorageKeyVaultClientSecret | X | X | ✓ |
AzureWebJobsSecretStorageKeyVaultTenantId | X | X | ✓ |
Utiliser des clés d’accès
Les fonctions déclenchées par HTTP peuvent généralement être appelées à l’aide d’une URL au format : https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>
. Quand le niveau d’autorisation d’une fonction donnée se voit affecter une valeur autre que anonymous
, vous devez également fournir une clé d’accès dans votre requête. La clé d’accès peut être fournie dans l’URL à l’aide de la chaîne de requête ?code=
, ou dans l’en-tête de requête (x-functions-key
). Pour plus d’informations, consultez les autorisations relatives aux clés d’accès.
Pour accéder aux API REST du runtime (sous /admin/
), vous devez fournir la clé principale (_master
) dans l’en-tête de requête x-functions-key
. Vous pouvez supprimer les points de terminaison admin à l’aide de la propriété de site functionsRuntimeAdminIsolationEnabled
.
Récupérer vos clés d’accès aux fonctions
Vous pouvez obtenir des clés de fonction et d’hôte par programmation à l’aide des API Azure Resource Manager suivantes :
- Lister les clés de fonction
- Lister les clés d’hôte
- Lister les clés de fonction pour un emplacement
- Lister les clés d’hôte pour un emplacement.
Pour découvrir comment appeler les API Azure Resource Manager, consultez les informations de référence sur l’API REST Azure.
Vous pouvez utiliser ces méthodes pour obtenir des clés d’accès sans avoir à utiliser les API REST.
Connectez-vous au portail Azure, puis recherchez et sélectionnez Application de fonction.
Sélectionnez l’application de fonction que vous souhaitez utiliser.
Dans le volet gauche, développez Functions, puis sélectionnez Clés d’application.
La page Clés d’application s’affiche. Dans cette page s’affichent les clés d’hôte qui peuvent être utilisées pour accéder à n’importe quelle fonction de l’application. La clé système est également affichée, ce qui donne à n’importe quel utilisateur un accès de niveau administrateur à toutes les API d’application de fonction.
Vous pouvez également mettre en pratique le principe des privilèges minimum en utilisant la clé pour une fonction spécifique. Vous pouvez obtenir des clés spécifiques à une fonction sous l’onglet Clés de fonction d’une fonction particulière déclenchée par une requête HTTP.
Renouveler ou créer des clés d’accès
Quand vous renouvelez ou créez vos valeurs de clé d’accès, vous devez redistribuer manuellement les valeurs de clé mises à jour à tous les clients qui appellent votre fonction.
Vous pouvez renouveler les clés de fonction et d’hôte par programmation, ou en créer d’autres, à l’aide des API Azure Resource Manager suivantes :
- Créer ou mettre à jour un secret de fonction
- Créer ou mettre à jour un secret de fonction pour un emplacement
- Créer ou mettre à jour un secret d’hôte
- Créer ou mettre à jour un secret d’hôte pour un emplacement
Pour découvrir comment appeler les API Azure Resource Manager, consultez les informations de référence sur l’API REST Azure.
Vous pouvez utiliser ces méthodes pour obtenir des clés d’accès sans avoir à créer manuellement des appels aux API REST.
Connectez-vous au portail Azure, puis recherchez et sélectionnez Application de fonction.
Sélectionnez l’application de fonction que vous souhaitez utiliser.
Dans le volet gauche, développez Functions, puis sélectionnez Clés d’application.
La page Clés d’application s’affiche. Dans cette page s’affichent les clés d’hôte qui peuvent être utilisées pour accéder à n’importe quelle fonction de l’application. La clé système est également affichée, ce qui donne à n’importe quel utilisateur un accès de niveau administrateur à toutes les API d’application de fonction.
Sélectionnez Renouveler la valeur de clé en regard de la clé à renouveler, puis sélectionnez Renouveler et enregistrer.
Vous pouvez également renouveler une clé de fonction sous l’onglet Clés de fonction d’une fonction particulière déclenchée par une requête HTTP.
Supprimer des clés d’accès
Vous pouvez supprimer des clés de fonction et d’hôte par programmation à l’aide des API Azure Resource Manager suivantes :
- Supprimer un secret de fonction
- Supprimer un secret de fonction pour un emplacement
- Supprimer un secret d’hôte
- Supprimer un secret d’hôte pour un emplacement
Pour découvrir comment appeler les API Azure Resource Manager, consultez les informations de référence sur l’API REST Azure.