Mbadi
oum
Demande
de solution
Une
entreprise rencontre des difficultés pour s'assurer que l'intégration et la
communication sont sécurisées entre divers services AWS au sein de son
architecture sans serveur. L'entreprise souhaite mettre en œuvre des mesures de
sécurité appropriées pour protéger la base de données, les systèmes de stockage
et l'exécution des fonctions tout en maintenant la conformité.
- Construire
une application sans serveur en utilisant Lambda, DynamoDB et S3.
- Utiliser
un rôle IAM et une politique de bucket S3 pour les permissions.
Objectifs
-
Créer
un compartiment dans Amazon S3 qui inclut une politique de compartiment
-
Créer
une table Amazon DynamoDB
-
Créer
une fonction AWS Lambda en utilisant un rôle d’exécution approprié
-
Configurer
la fonction Lambda pour tester la table DynamoDB et le compartiment S3
Étape 1 : Consultation du
fichier de l’atelier
-
Sauvegarder
le contenu suivant dans un fichier le fichier lab_resources.txt.
################ S3 BUCKET POLICY
################
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "<BUCKET_ARN>/*",
"Condition": {
"StringNotEquals": {
"aws:PrincipalArn":
"arn:aws:iam::<ACCOUNT_ID>:role/LabLambdaRole"
}
}
}
]
}
################ LAMBDA FUNCTION
################
import os
import boto3
import uuid
s3 = boto3.resource('s3')
dynamodb = boto3.resource('dynamodb')
def lambda_handler(event, context):
message = "Hello from AWS Lambda!"
encoded_string = message.encode("utf-8")
file_name = "hello.txt"
s3_path = "test/" + file_name
dynamodb.Table(os.environ['DYNAMODB_TABLE_NAME']).put_item(Item={'ID':
'12345','content':message})
s3.Bucket(os.environ['S3_BUCKET_NAME']).put_object(Key=s3_path,
Body=encoded_string)
response = {
'statusCode': 200,
'body': 'success!',
'headers': {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
},
}
return response
Étape 2 : Configuration de
l’accès aux ressources
AWS Identity
and Access Management (IAM) est un service web qui vous aide à contrôler de
manière sécurisée l'accès aux ressources AWS. Avec IAM, vous pouvez gérer les
autorisations qui contrôlent les ressources AWS auxquelles les utilisateurs
peuvent accéder.
-
Dans
la barre de navigation supérieure, vérifiez que le sélecteur de région est
défini sur N. Virginia (us-east-1).
-
Dans
la zone de recherche Services, tapez : iam Dans les résultats de recherche,
sous Services, cliquez sur IAM.
-
Dans
le volet de navigation de gauche, sous Gestion des accès, cliquez sur Rôles.
-
Dans
la zone de recherche de la section Rôles, saisissez : LabLambda
Vous
utilisez IAM pour contrôler qui est authentifié (connecté) et autorisé (dispose
des autorisations) à utiliser des ressources
-
Sous
Nom du rôle, cliquez sur LabLambdaRole.
-
Dans
la section Summary, sous ARN, cliquez sur l'icône de copie pour copier l'ARN
fourni. Vous utiliserez cet ARN dans les étapes suivantes.
arn:aws:iam::133733946321:role/LabLambdaRole
-
Sous la section, cliquez sur
l'onglet Permissions.
Un
rôle IAM est une identité IAM que vous pouvez créer dans votre compte et qui
possède des autorisations spécifiques. Il possède des stratégies d'autorisation
qui déterminent ce que l'identité peut et ne peut pas faire dans AWS.
Vous
gérez l'accès dans AWS en créant des stratégies et en les attachant aux
identités IAM (utilisateurs, groupes d'utilisateurs ou rôles) ou aux ressources
AWS. Une stratégie est un objet dans AWS qui, lorsqu'elle est associée à une
identité ou une ressource, définit leurs autorisations.
-
Dans
l'onglet Permissions, sous Policy name, cliquez le signe + pour développer la
stratégie DynamoDBPutItem. Examinez la stratégie. Cette stratégie autorise
l'action PutItem sur tout nom de table Amazon DynamoDB commençant par
lab-table.
-
Cliquez
pour développer la stratégie S3PutObject. Examinez la stratégie. Cette
stratégie autorise l'action PutObject sur tout nom de compartiment S3
commençant par lab-bucket-.
Étape 3 : Configuration du
service de stockage
Amazon
Simple Storage Service (Amazon S3) est un service de stockage d'objets qui
stocke les données sous forme d'objets dans des buckets. Un objet est un
fichier et toutes les métadonnées qui décrivent le fichier.
- Dans la zone de recherche Services, tapez : S3 puis cliquez sur S3
-
Dans
l'onglet General purpose buckets, cliquez sur Create bucket.
Pour stocker vos données dans Amazon S3, vous devez d'abord créer un bucket et
spécifier un nom de bucket et une région AWS. Un bucket est un conteneur pour
les objets stockés dans Amazon S3. Vous pouvez stocker un nombre quelconque
d'objets dans un bucket et avoir jusqu'à 100 buckets dans votre compte.
-
Pour
Bucket name, tapez le nom de votre choix commençant par lab-bucket. Les noms de
bucket doivent être uniques. Si vous rencontrez une erreur « bucket already
exists », essayez un autre nom de lab-bucket.
Amazon
S3 applique le chiffrement côté serveur avec les clés gérées par Amazon S3
(SSE-S3) comme niveau de chiffrement de base pour chaque bucket dans Amazon S3.
-
Faites
défiler vers le bas jusqu'à Default encryption. Review la section Default
encryption.
-
En
bas de la page, cliquez sur Create bucket.
-
Dans
l'alerte de réussite, examinez le message.
-
Dans
l'onglet General purpose buckets, sélectionnez (surligné) et copiez le nom du
bucket que vous venez de créer. Vous utilisez ce nom de bucket dans une étape
ultérieure.
-
Cliquez
sur le même nom de bucket.
-
Cliquez
sur l'onglet Permissions.
-
Faites
défiler vers le bas jusqu'à la politique de Bucket.
Une stratégie de bucket est une stratégie basée sur les ressources que vous
pouvez utiliser pour accorder des autorisations d'accès à votre bucket Amazon
S3 et aux objets qu'il contient.
-
Sur Bucket policy, Cliquez sur Edit
-
Sur
votre appareil, dans le fichier lab_resources.txt, copiez le code S3 BUCKET
POLICY, puis collez-le dans la fenêtre de code de la console.
-
Au-dessus
de la fenêtre de code, sous Bucket ARN, cliquez sur l'icône de copie pour
copier l'ARN fourni.
-
Pour
Resource, afin de remplacer le placeholder <BUCKET_ARN>, collez l'ARN que
vous venez de copier.
-
Examinez
la politique. Cette politique de compartiment refuse l'action PutObject sur le
compartiment, sauf si l'action est effectuée par le rôle IAM, LabLambdaRole. La
clé de condition aws:PrincipalArn est utilisée pour comparer l'ARN du principal
qui a effectué la demande avec l'ARN que vous spécifiez dans la politique. Dans
la section DIY, vous devrez mettre à jour cette clé de condition.
-
Faites
défiler jusqu'en bas de la page, puis cliquez sur Save changes (non illustré).
Étape 4 : Créer une table dans
DynamoDB
-
Naviguez
jusqu'à la console Amazon DynamoDB.
-
Cliquez
sur Create table.
-
Pour
le nom de la table, saisissez : lab-table.
-
Pour
la clé de partition, saisissez : ID.
-
Cliquez
sur Create table.
-
Dans
la section Tables, sous Status, vérifiez que le statut est Active. Attendez que
le statut soit Active avant de continuer.
Étape 5 : Créer la fonction
Lamba
-
Naviguez
jusqu'à la console AWS Lambda.
-
Dans
la section Fonction, examinez la diy_function. Vous devez utiliser cette
fonction dans la section DIY suivante de cette solution.
-
Cliquez
sur Créer une fonction
-
Pour Create function, choisissez Author from scratch.
-
Pour
Function name, tapez : lab-function
-
Pour
Runtime, dans la liste déroulante, choisissez Python 3.14.
-
Faites
défiler jusqu'à Permissions.
-
Cliquez
pour développer Change default execution role.
-
Pour
Execution role, choisissez Use an existing role.
-
Pour
Existing role, choisissez LabLambdaRole.
-
Cliquez
sur Create function.
-
Faites
défiler jusqu'à l'onglet Code.
-
Sur
votre appareil, dans le fichier lab_resources.txt, copiez le code LAMBDA
FUNCTION, puis collez-le dans la fenêtre lambda_function.py sur la console.
-
Examinez
le code Python. Dans ce code, la fonction Lambda écrit une chaîne dans un
fichier temporaire sous le dossier /tmp. La chaîne est également écrite dans
une table DynamoDB. Le fichier temporaire est téléchargé vers un bucket S3.
-
Dans
le volet de navigation gauche, sous DEPLOY [UNDEPLOYED CHANGES], cliquez sur
Deploy.
-
Cliquez
sur l'onglet Configuration.
-
Cliquez
sur Environment variables.
-
Cliquez
sur Edit.
-
Cliquez
sur Add environment variable
-
Pour
la nouvelle clé, tapez : DYNAMODB_TABLE_NAME, Pour Value, tapez : lab-table.
-
Cliquez
sur Add environment variable.
Pour
la nouvelle clé, tapez : S3_BUCKET_NAME, Pour la nouvelle valeur, collez le nom
complet du bucket S3 que vous avez copié dans une étape précédente, lab-bucket-29022026
-
Vous avez créé et nommé ce bucket.
6.
Cliquez sur Save
-
Cliquez
sur l'onglet Test. 2. Pour l'action Test event, choisissez Create new event. 3.
Pour Event name, saisissez : TestEvent.
-
Cliquez
sur Test.
-
Naviguez
vers la console Amazon DynamoDB.
-
Dans
le volet de navigation de gauche, cliquez sur Explore items.
-
Dans
le volet Tables, choisissez lab-table.
-
Dans
le volet Items returned, examinez le nouvel élément. Cet élément a été écrit
dans la table par la fonction Lambda, lab-function.
-
Naviguez
jusqu'au nom du bucket S3 commençant par lab-bucket- dans la console Amazon S3.
-
Dans
l'onglet Objects, cliquez sur le dossier test/.
-
Dans
l'onglet Objects, examinez le fichier qui a été téléchargé par la fonction
Lambda, lab-function.
Félicitations ! Vous avez terminé la section Pratique.