Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Sécurisation de vos fonctions par balise
Les étapes suivantes illustrent une façon de configurer des autorisations pour les fonctions à l’aide d’ABAC. Dans cet exemple de scénario, vous allez créer quatre stratégies d’autorisations IAM. Vous allez ensuite associer ces stratégies à un nouveau rôle IAM. Enfin, vous allez créer un utilisateur IAM et lui donner l’autorisation d’assumer le nouveau rôle.
Rubriques
- Prérequis
- Étape 1 : Exiger des balises pour les nouvelles fonctions
- Étape 2 : Autoriser les actions en fonction des balises attachées à une fonction Lambda et à un principal IAM
- Étape 3 : Accorder des permissions de liste
- Étape 4 : accorder des autorisations IAM
- Étape 5 : Création du rôle IAM
- Étape 6 : Création d’un utilisateur IAM
- Étape 7 : Tester les autorisations
- Étape 8 : Nettoyer vos ressources
Prérequis
Assurez-vous que vous disposez d’un rôle d’exécution Lambda. Vous utiliserez ce rôle lorsque vous accorderez des autorisations IAM et lorsque vous créerez une fonction Lambda.
Étape 1 : Exiger des balises pour les nouvelles fonctions
Lorsque vous utilisez ABAC avec Lambda, il est recommandé d’exiger que toutes les fonctions comportent des balises. Cela permet de garantir que vos politiques d’autorisation ABAC fonctionnent comme prévu.
Créez une stratégie IAM similaire à l’exemple suivant : Cette politique utilise les clés de condition aws:RequestTag/tag-key, aws:ResourceTag/tag-key, et aws:TagKeys pour exiger que les nouvelles fonctions et le principal IAM créant les fonctions possèdent tous deux la balise project
. Le ForAllValues
modificateur garantit que project
est la seule balise autorisée. Si vous n’incluez pasForAllValues
, les utilisateurs peuvent ajouter d’autres balises à la fonction tant qu’ils transmettent également project
.
Exemple — Exiger des balises sur les nouvelles fonctions
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:RequestTag/
project
": "${aws:PrincipalTag/project
}", "aws:ResourceTag/project
": "${aws:PrincipalTag/project
}" }, "ForAllValues:StringEquals": { "aws:TagKeys": "project
" } } } }
Étape 2 : Autoriser les actions en fonction des balises attachées à une fonction Lambda et à un principal IAM
Créez une deuxième stratégie IAM à l’aide de aws:ResourceTag/tag-key pour exiger que la balise du mandataire corresponde à la balise attachée à la fonction. L’exemple de stratégie suivant autorise les mandataires avec la balise project
pour appeler des fonctions avec la balise project
. Si une fonction possède d’autres balises, l’action est refusée.
Exemple — Exiger des balises correspondantes sur la fonction et le principal IAM
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:ResourceTag/
project
": "${aws:PrincipalTag/project
}" } } } ] }
Étape 3 : Accorder des permissions de liste
Créez une stratégie qui permet au mandataire de répertorier les fonctions Lambda et les rôles IAM. Cela permet au mandataire de voir toutes les fonctions Lambda et les rôles IAM sur la console et lors de l’appel des actions d’API.
Exemple — Accordez des autorisations de liste Lambda et IAM
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllResourcesLambdaNoTags", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:ListFunctions", "iam:ListRoles" ], "Resource": "*" } ] }
Étape 4 : accorder des autorisations IAM
Créez une stratégie favorable à iam:PassRole. Cette autorisation est requise lorsque vous attribuez un rôle d’exécution à une fonction. Dans l’exemple de stratégie suivant, remplacez l’exemple d’ARN par l’ARN de votre rôle d’exécution Lambda.
Note
N’utilisez pas la clé de condition ResourceTag
dans une politique avec l’action iam:PassRole
. Vous ne pouvez pas utiliser la balise sur un rôle IAM pour contrôler l’accès aux personnes qui peuvent transmettre ce rôle. Pour de plus amples informations sur les autorisations requises pour transmettre un rôle à un service, consultez Octroi d’autorisations à un utilisateur pour transférer un rôle à un serviceAWS.
Exemple — Accordez l’autorisation de transmettre le rôle d’exécution
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "
arn:aws:iam::111122223333:role/lambda-ex
" } ] }
Étape 5 : Création du rôle IAM
C’est une bonne pratique d’utilisation des rôles pour déléguer des autorisations. Créer un rôle IAM appelé abac-project-role
:
-
Sur Étape 1 : Sélection d’une entité de confiance : Choisissez :AWScompte, puis Ce compte.
-
Sur Étape 2 : Ajouter des autorisations : Joignez les quatre stratégies IAM que vous avez créées au cours des étapes précédentes.
-
Sur Étape 3 : Nommer, vérifier et créer : Choisissez :Ajouter une balise. Pour Key (Clé), saisissez
project
. Ne saisissez pas Valeur.
Étape 6 : Création d’un utilisateur IAM
Création d’un utilisateur IAM appeléabac-test-user
. Sur la page Définir des autorisations, choisissez Attacher directement les stratégies existantes, puis choisissez Créer une stratégie. Entrez la définition de politique suivante. Remplacez 111122223333
par votre AWSID de compte. Cette stratégie permet à abac-test-user
d’assumer abac-project-role
.
Exemple — Autoriser l’utilisateur IAM à assumer le rôle ABAC
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
111122223333
:role/abac-project-role
" } }
Étape 7 : Tester les autorisations
-
Connectez-vous à la console AWS comme
abac-test-user
: Pour plus d’informations, connectez-vous en tant qu’utilisateur IAM. -
Basculez vers le rôle
abac-project-role
. Pour plus d’informations, consultez Changement de rôles (console). -
Création d’une fonction Lambda.
-
Sous Autorisations Choisissez Modifier le rôle d’exécution par défaut, puis dans le champ Rôle d’exécution, choisissez Utiliser un rôle existant. Choisissez le même rôle d’exécution que celui que vous avez utilisé dansÉtape 4 : accorder des autorisations IAM.
-
Sous Paramètres avancés, choisissez Activer les balises, puis Ajouter un nouveau tag. Pour Key (Clé), saisissez
project
. Ne saisissez pas Valeur.
-
-
Créez une deuxième fonction Lambda et ajoutez une balise différente, telle que
environment
. Cette opération devrait échouer car la stratégie ABAC que vous avez créée dansÉtape 1 : Exiger des balises pour les nouvelles fonctionsautorise uniquement le mandataire à créer des fonctions avec la baliseproject
. -
Créez une troisième fonction sans balises. Cette opération devrait échouer car la stratégie ABAC que vous avez créée dansÉtape 1 : Exiger des balises pour les nouvelles fonctionsne permet pas au mandant de créer des fonctions sans balises.
Cette stratégie d’autorisation vous permet de contrôler l’accès sans créer de nouvelles politiques pour chaque nouvel utilisateur. Pour accorder l’accès à de nouveaux utilisateurs, il suffit de leur donner l’autorisation d’assumer le rôle qui correspond au projet qui leur a été attribué.
Étape 8 : Nettoyer vos ressources
Suppression du rôle IAM
-
Ouvrez la page Roles
(Rôles) de la console IAM. -
Sélectionnez le rôle que vous avez créé à l’étape 5.
-
Sélectionnez Delete (Supprimer).
-
Pour confirmer la suppression, saisissez le nom du rôle dans la zone de saisie de texte.
-
Sélectionnez Delete (Supprimer).
Pour supprimer l’utilisateur IAM
-
Ouvrez la page Utilisateurs
de la console IAM. -
Sélectionnez l’utilisateur IAM que vous avez créé à l’étape 6.
-
Sélectionnez Delete (Supprimer).
-
Pour confirmer la suppression, saisissez le nom de l’utilisateur dans la zone de saisie de texte.
-
Choisissez Delete user (Supprimer l’utilisateur).
Pour supprimer la fonction Lambda
-
Ouvrez la page Functions (Fonctions)
de la console Lambda. -
Sélectionnez la fonction que vous avez créée.
-
Sélectionnez Actions, Supprimer.
-
Saisissez
delete
dans la zone de saisie de texte et choisissez Delete (Supprimer).