Utilisation des paramètres AWS et de l'extension Lambda Secrets
Dans cet article nous allons voir comment utiliser l'extension « AWS Parameters and Secrets Lambda ». Cette extension permet de demander et de mettre en cache des secrets et des paramètres pendant le cycle de vie de la fonction Lambda sans nécessiter l'utilisation du SDK et de gérer la mise en cache par nous-mêmes.
Nous allons créer un exemple Lambda qui référence et utilise cette extension. Du côté d'IaC, nous utiliserons CloudFormation afin d'utiliser cette extension, ajoutée en tant que couche, pour ce Lambda.
TL;DR
Vous trouverez le repo complet ici https://github.com/ziedbentahar/aws-parameters-and-secrets-lambda-extension-sample
À propos des extensions Lambda
Les extensions Lambda peuvent exécuter des outils de prise en charge avec une fonction Lambda. Généralement, ces extensions couvrent des préoccupations telles que la sécurité et l'observabilité.
Ils s'exécutent en interne dans le cadre du processus lambda ou en externe comme un autre processus dans l'environnement d'exécution et ont accès aux événements du cycle de vie lambda, permettant d'effectuer des actions à des points spécifiques de l'exécution de la fonction (par exemple, récupérer un secret lorsque le runtime lambda est initialisé).
Agissant comme un side-car , les extensions lambda ne nécessitent pas de modifier votre code de fonction lambda. Ils sont fournis sous forme de couches Lambda.
Utilisation de l'extension
L'extension des paramètres et des secrets AWS expose les points de terminaison HTTP internes pour récupérer les secrets ou les valeurs des paramètres.
Par exemple, pour obtenir la valeur d'un secret nommé, some-third-party-api-key nous devrons :
- Interrogez ce point de terminaison
GET: http://localhost:2773/secretsmanager/get?secretId=some-third-party-api-keydirectement dans le code lambda.2773est le port par défaut du serveur HTTP local de l'extension, il peut être modifié en définissant cette variable d'environnementPARAMETERS_SECRETS_EXTENSION_HTTP_PORTutilisée par l'extension. Lors de l'interrogation de ce point de terminaison, nous devons définir cet en-têteX-Aws-Parameters-Secrets-Tokensur la valeur deAWS_SESSION_TOKENla variable d'environnement. - Accordez au rôle d'exécution lambda l'autorisation
secretsManager:GetSecretValuedesome-third-party-api-keysecret
Vous pouvez suivre ce lien pour la liste complète des paramètres et des variables d'environnement pris en charge par cette extension.
Qu'allons-nous construire ?
Pour illustrer l'utilisation de l'extension, nous allons construire une API fournissant les prévisions météo et la qualité de l'air en fonction d'un lieu (un nom de ville et un pays). Nous utiliserons OpenWeather Api comme fournisseur de géocodage et de météo.
Une architecture assez basique : un AWS Lambda, une passerelle API et un secret contenant la clé API pour l'API OpenWeather.
Nous utiliserons l'exécution de nœud et le script dactylographié pour le code Lambda.
Voyons le code
Le lambda "obtenir la météo et la qualité de l'air" est assez simple. Il obtient la ville et le pays à partir du contexte de la requête et appellegetWeatherAndAirQualityForCity
getWeatherAndAirQualityForCityappellera alors l'API OpenWeather. Il a besoin de la clé API stockée dans le secret.
Voici comment nous utilisons l'extension AWS Parameters and Secrets dans le code Lambda
vous trouverez le code lambda complet ici
Création de la ressource Lambda et utilisation de l'extension Layer
Les bits concernés :
nous devrons ajouter l'ARN de l'extension dans la Layersliste afin d'utiliser l'extension dans l'environnement d'exécution Lambda.
Comme nous avons un ARN différent par région , nous déclarons les ARN des extensions sous forme de carte des régions :
Concernant le secret
Nous allons injecter le nom du secret en tant que variable d'environnement. OPEN_WEATHER_API_KEY_SECRET_NAME Et cette fonction lambda a besoin d'une allow secretsManager:GetSecretValuepolitique pour pouvoir lire le secret :
Vous trouverez le modèle CloudFormation complet de cette fonction lambda ici
Emballer
L'extension des paramètres et des secrets AWS est un ajout intéressant à l'écosystème lambda, mais elle peut ne pas être nécessaire pour les cas d'utilisation de base ( par exemple , appeler simplement le SDK au démarrage de Lambda peut suffire dans certains cas d'utilisation)
⚠️ Une remarque importante : au moment de la rédaction, cette extension ne prend pas en charge Lambda avec l'architecture ARM dans certaines régions.
Vous pouvez trouver l'application complète avec un workflow complet d'actions CI/CD Github ici https://github.com/ziedbentahar/aws-parameters-and-secrets-lambda-extension-sample
Mise à jour : si vous recherchez un exemple de dotnet, j'ai également créé un exemple d'application : https://github.com/ziedbentahar/aws-parameters-and-secrets-lambda-extension-dotnet-sample
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































