Génie civil & structural
Informatique sans serveur et sécurité API : meilleures pratiques pour protéger vos points de fin
Table of Contents
L'informatique sans serveur a fondamentalement changé la façon dont les équipes de développement construisent et déploient des applications, en abstractionnant la couche d'infrastructure pour que les ingénieurs puissent se concentrer sur la logique d'entreprise et la vitesse de mise sur le marché. Cependant, ce changement de paradigme introduit également une nouvelle surface d'attaque, avec des API agissant comme interface principale entre les clients et les fonctions cloud comme AWS Lambda, Azure Functions ou Google Cloud Functions.
Comprendre le modèle de sécurité sans serveur
Dans l'infrastructure traditionnelle, la sécurité dépendait des périmètres réseau : pare-feu, VPN et serveurs durcis. Sans serveur, ce modèle est inversé. Il n'y a pas de serveur persistant pour durcir ; au contraire, chaque invocation de fonction est éphémère, et le fournisseur de cloud gère l'environnement d'exécution. Le modèle de responsabilité partagée signifie que vous sécurisez votre code, vos données et votre identité, tandis que le fournisseur sécurise l'hôte sous-jacent. Les API deviennent le nouveau périmètre. Chaque requête doit être traitée comme potentiellement malveillante, et chaque fonction doit valider son propre contexte.
Menaces fondamentales pour les API sans serveur
Avant de plonger dans les défenses, il est essentiel de reconnaître les vecteurs d'attaque les plus courants ciblant les paramètres sans serveur:
- Injections – SQL, NoSQL, commande OS ou injection LDAP via une entrée non-sanitisée passée aux fonctions.
- Authentification incorrecte – Validation faible ou manquante, mauvaise gestion des clés ou jetons d'accès mal globulés.
- Excessive data exposure[ – APIs renvoyant des charges utiles d'objets complets lorsque seules des données partielles sont nécessaires, en fuite de champs sensibles.
- Dénial de service (DoS) – Crises de rupture qui épuisent la fonction de proximité limite ou déclenchent des démarrages à froid coûteux.
- Mise en configuration – Rôles IAM trop permissifs, seaux publics ou logage désactivé exposant votre infrastructure.
Chacune de ces menaces peut être atténuée par une conception et un outillage délibérés intégrés dans votre pipeline de déploiement.
Meilleures pratiques pour protéger vos points de fin
1. Mettre en oeuvre une authentification et une autorisation solides
Chaque demande d'API à une fonction sans serveur doit être authentifiée et autorisée.Utilisez des protocoles standard comme Oauth 2.0 avec OpenID Connect[ ou un problème JSON Web Tokens (JWT)[. Validez les jetons dans chaque fonction (ou via un autorisant API Gateway) pour s'assurer qu'ils n'ont pas expiré ou ont été altérés.
Au-delà de l'authentification de base avec le contrôle d'accès basé sur les rôles (RBAC) ou même le contrôle d'accès basé sur les attributs (ABAC)[. Par exemple, une fonction de traitement des documents d'utilisateur AWS Lambda devrait vérifier les revendications de JWT pour vérifier le rôle de l'appelant et la propriété des ressources avant de retourner les données.
2. Appliquer une communication sécurisée
Tout le trafic API doit être chiffré en transit. Utilisez HTTPS (TLS 1.2 ou 1.3) exclusivement. Configurez votre API Gateway ou votre balanceur de charge pour rejeter les requêtes HTTP. Pour une sécurité accrue, implémentez le codage de certificat[ sur les applications clientes et assurez que vos fonctions sans serveur ne communiquent qu'avec les services en aval sur TLS.
Si vos fonctions communiquent entre elles (par exemple via des bus événementiels ou des files d'attente), chiffrez le trafic. La plupart des fournisseurs de cloud activent le chiffrement par défaut pour la messagerie interservice, mais vérifient que vos configurations de produits le verrouillent.
3. Mettre en œuvre la limitation des taux et le throttling
Au niveau de API Gateway, définir des limites pour les taux d'éclatement et les demandes en état d'équilibre (par exemple, 100 requêtes par minute par utilisateur). Utilisez un seau de jeton ou des algorithmes de fenêtre coulissante pour permettre des pics de trafic occasionnels tout en étouffeant les attaques soutenues.
Les utilisateurs anonymes peuvent obtenir un 10 requêtes/minute d'accélérateur, tandis que les utilisateurs authentifiés reçoivent une limite plus élevée. Envisagez d'utiliser [[]]]]][F][F][F][F][F][F
Rappelez-vous de log et alerte sur les événements de gaz afin que vous puissiez distinguer entre les pics de trafic légitimes et les tentatives malveillantes.
4. Valider et saniter toutes les entrées
Ne jamais faire confiance aux données provenant du client ou d'un service en amont. Utilisez une bibliothèque de validation de schéma (p. ex. Joi, Pydantic ou JSON Schema) au début de chaque fonction. Rejetez toute entrée qui ne correspond pas à la forme attendue. Pour les requêtes SQL ou NoSQL, utilisez toujours des instructions paramétrées ou un ORM qui échappe automatiquement aux entrées.
En outre, faire appliquer la validation de type de contenu. Si votre paramètre attend JSON, rejeter les requêtes avec ou des types MIME non pris en charge. Pour les téléchargements de fichiers, valider le type MIME, la taille du fichier et scanner des logiciels malveillants en utilisant des services dédiés comme les scanners de virus AWS GuardDuty ou tiers.
Mesures de sécurité supplémentaires
Pare-feu pour applications Web (FAT)
Déployez un WAF devant votre API Gateway pour filtrer automatiquement les modèles d'attaque courants tels que l'injection SQL, le script multisite (XSS) et les menaces de réputation IP. Les fournisseurs de cloud offrent des WAF gérés (AWS WAF, Azure WAF, Cloud Armor) qui s'intègrent à leurs balanceurs de charge et aux services CDN. Configurez des ensembles de règles personnalisées pour les paramètres spécifiques de votre application, tels que le blocage des requêtes avec des JWT mal formés ou des paramètres de requête suspectes.
Surveillance et exploitation forestière globales
La visibilité n'est pas négociable pour la sécurité. Activer les journaux détaillés pour toutes les requêtes d'API et les invocations de fonctions. Utilisez des services comme AWS CloudTrail, Azure Monitor ou Google Cloud Logging pour capturer qui a accédé à quoi, quand et d'où. Centralisez les journaux dans un outil SIEM (par exemple, Spunk, ELK pile, Datadog) et créez des alertes pour :
- Réponses répétées 401/403 (force brute possible)
- Piles soudaines dans le temps d'exécution de la fonction ou les taux d'erreur
- Accès à partir de géographies inhabituelles ou de gammes IP
- Invocations de fonction qui contournent la passerelle de l'API (invocation directe d'URL)
Corréler les journaux entre les couches – passerelle, fonction et stockage de données – pour tracer la chaîne d'attaque complète.
Gestion de la dépendance et des lots
Les fonctions sans serveur dépendent de bibliothèques tierces. Une dépendance vulnérable unique peut compromettre l'ensemble de votre application. Utilisez analyse de composition logicielle (SCA) outils (p. ex., Snyk, Trivy, Dependabot) dans votre pipeline CI/CD pour analyser des vulnérabilités connues. Pinez les dépendances vers des versions spécifiques plutôt que d'utiliser . Envisagez d'utiliser AWS Lambda Layers ou Azure Functions extensions[ pour partager et versionner des bibliothèques communes entre les fonctions.
Revoir et mettre à jour régulièrement les runtimes de fonction et les images de base (pour les serveurs sans conteneur). Mettre en place des mises à jour automatisées de dépendance avec des tests pour éviter de casser les changements.
Sécurité et isolement des réseaux
Pendant que les fonctions sans serveur fonctionnent dans un environnement cloud multi-tenu, vous pouvez ajouter des commandes au niveau du réseau. Placez des fonctions qui traitent des données sensibles (p. ex., informations de paiement, dossiers de santé) à l'intérieur d'un VPC sans accès public à Internet. Joindre une passerelle API qui proxie les demandes à un équilibreur de charge privé ou utiliser AWS PrivateLink ou Azure Private Endpoint pour une communication sécurisée entre services.
Utiliser Liste blanche IP[ pour les paramètres administratifs ou l'outillage interne. Configurer les groupes de sécurité et les ACL réseau pour limiter le trafic entrant aux seuls ports et IP source nécessaires. Pour les fonctions nécessitant un accès Internet (par exemple, appeler une API tierce), faire passer le trafic via une passerelle NAT dans un sous-réseau contrôlé.
Mise en oeuvre de la sûreté dans un pipeline CI/CD
La sécurité doit être automatisée et intégrée au début du développement.Introduire une porte de sécurité [ dans votre pipeline CI/CD qui impose ce qui suit avant le déploiement:
- Test de sécurité statique des applications (SAST) sur le code de fonction pour détecter les modèles non sécurisés.
- Scannage de la dépendance avec défaillance sur les vulnérabilités critiques.
- Scannage de l'infrastructure comme code (IaC) (p. ex. , ) pour les rôles de MEI mal configurés, le manque de chiffrement ou l'exposition publique.
- Tests d'unité et d'intégration qui valident la logique de validation d'authentification, d'autorisation et d'entrée.
Utilisez des environnements éphémères (déploiements de positionnement ou d'aperçu) pour exécuter des tests de sécurité contre des paramètres sans serveur réels avant de fusionner à la production. Envisagez d'utiliser des outils de test de sécurité comme [Postman ou OWASP ZAP pour simuler des attaques.
Conclusion
En traitant les API comme le nouveau périmètre, en mettant en œuvre une authentification et une autorisation robustes, en appliquant le cryptage, en bloquant le trafic malveillant, en validant rigoureusement les entrées et en superposant les WAF, la surveillance et les contrôles réseau, vous pouvez protéger vos paramètres contre la majorité des attaques modernes. Embrassez la sécurité comme un processus continu intégré dans votre cycle de vie de développement, et non comme un élément de liste de contrôle final. Vos utilisateurs et votre entreprise en dépendent.