Quelqu'un de nouveau entre dans l'entreprise et a besoin d'un « accès à AWS ». Le plus rapide est de créer un utilisateur, de lui donner AdministratorAccess et de passer à autre chose. C'est aussi ce qui transforme l'erreur d'un stagiaire, ou un mot de passe volé, en un compte vidé ou en une facture de plusieurs milliers d'euros. Presque toutes les mauvaises surprises avec AWS dans les petites entreprises commencent avec quelqu'un qui avait bien plus de permissions que nécessaire.
La règle est simple : chaque personne ne peut faire que ce dont elle a besoin pour son travail, et rien de plus. Cela s'appelle le moindre privilège et n'exige pas de s'y connaître en sécurité. Cela exige de réfléchir une minute à ce que va faire cette personne : regarder ? allumer et éteindre des machines ? créer et supprimer des choses ? Avec cette réponse, AWS a déjà les permissions prêtes et il n'y a qu'à les choisir.
Ce guide utilise des groupes au lieu de donner des permissions à chaque utilisateur un par un. C'est la différence entre décider une fois par fonction et décider à chaque fois que quelqu'un arrive.
Avant de commencer : ce que signifie chaque chose
- IAM
- Le service AWS où l'on crée les utilisateurs, où on les regroupe et où on leur donne des permissions. Il est gratuit et présent dans tous les comptes.
- Utilisateur IAM
- Une identité dans votre compte AWS, avec un nom, un mot de passe et, si vous voulez, des clés pour les programmes. Une par personne, jamais partagée.
- Groupe IAM
- Un dossier d'utilisateurs qui partagent des permissions. Les permissions sont données au groupe ; qui entre dans le groupe en hérite. Une personne peut être dans plusieurs groupes.
- Politique
- Un document qui dit quelles actions sont permises ou interdites et sur quoi. AWS en fournit des centaines déjà écrites (politiques « gérées par AWS ») et vous pouvez aussi écrire les vôtres.
- Moindre privilège
- Donner à chaque personne ou programme seulement les permissions nécessaires à sa tâche. S'il doit regarder, qu'il regarde ; s'il doit éteindre, qu'il éteigne ; mais pas qu'il supprime.
- AdministratorAccess
- La politique gérée qui permet tout sauf ce qui est réservé au compte racine. C'est celle qu'il ne faut pas distribuer.
- ReadOnlyAccess
- La politique gérée qui permet de tout voir mais de ne rien changer. C'est le point de départ pour presque tout le monde.
- Double authentification (MFA)
- Une deuxième étape à la connexion : un code du téléphone en plus du mot de passe. Sans elle, un mot de passe qui fuite, c'est le compte entier.
- Clé d'accès
- Identifiant et mot de passe pour les programmes, pas pour les personnes. Il ne faut en créer que si un programme en a besoin, et ne jamais les partager par e-mail ou messagerie.
Pas à pas
Décidez quelle fonction a la personne
Avant de toucher à la console, répondez à une question : que doit faire cette personne dans AWS ? Pour une petite entreprise, presque tout rentre dans trois fonctions :
- Voir : regarder l'état des machines, consulter la facture, lire les journaux. C'est ce dont a besoin la personne qui fait le support, celle qui tient les comptes ou un responsable qui veut « voir où ça en est ».
- Opérer : en plus de voir, allumer, éteindre et redémarrer des machines, faire des instantanés, restaurer. C'est ce dont a besoin la personne qui gère le serveur au quotidien.
- Administrer : créer et supprimer des machines, changer les réseaux, gérer les utilisateurs. Seules une ou deux personnes en ont besoin, et ce devraient être celles qui s'y connaissent le plus.
Si vous hésitez entre deux, commencez par celle qui a le moins de permissions. Monter est un clic ; découvrir que quelqu'un a supprimé ce qu'il ne fallait pas, non.
Créez les trois groupes dans IAM
Ouvrez IAM, menu de gauche Groupes d'utilisateurs, bouton Créer un groupe. Faites-en trois, avec des noms que n'importe qui comprend :
ver,operaretadministrar. En créant chaque groupe, dans le bloc Attacher des politiques d'autorisation, cherchez et cochez la politique qui lui revient :- Groupe
ver: ReadOnlyAccess. Permet de consulter n'importe quel service sans rien changer. Si vous voulez seulement qu'ils voient la facture, il existe AWSBillingReadOnlyAccess, plus limitée. - Groupe
operar: ReadOnlyAccess et en plus une politique à vous avec les actions de démarrer, arrêter et redémarrer (étape suivante). Pour Lightsail, il n'y a pas de politique gérée intermédiaire, donc c'est vous qui l'écrirez ; pour EC2, il n'y en a pas non plus qui se limite à allumer et éteindre. - Groupe
administrar: PowerUserAccess, qui permet presque tout sauf gérer les utilisateurs et les permissions. Réservez AdministratorAccess à une seule personne, celle qui garde aussi le compte racine.
Les groupes se créent une fois. Ensuite, donner accès à quelqu'un, c'est le mettre dans le bon groupe.
- Groupe
Écrivez la politique du groupe « operar »
Dans IAM, Politiques, Créer une politique. Cliquez sur l'onglet JSON et collez ceci, qui permet d'allumer, d'éteindre et de redémarrer des machines Lightsail et EC2, et de faire des instantanés, mais pas de créer ni de supprimer des machines :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lightsail:StartInstance", "lightsail:StopInstance", "lightsail:RebootInstance", "lightsail:CreateInstanceSnapshot", "ec2:StartInstances", "ec2:StopInstances", "ec2:RebootInstances", "ec2:CreateSnapshot" ], "Resource": "*" } ] }Cliquez sur Suivant, nommez-la
operar-maquinaset créez-la. Ensuite, dans Groupes d'utilisateurs, entrez dansoperar, onglet Autorisations, Ajouter des autorisations, Attacher des politiques, et cochezoperar-maquinas.Remarquez qu'aucune action avec « Delete » ni « Terminate » n'apparaît. C'est la différence entre pouvoir éteindre une machine et pouvoir la faire disparaître. Si vous voulez en plus limiter à certaines machines, dans
Resourcevous pouvez mettre l'identifiant de chacune à la place de l'astérisque ; pour EC2 c'est simple, pour Lightsail il faut utiliser l'ARN de chaque instance.Créez l'utilisateur et mettez-le dans un groupe
IAM, Utilisateurs, Créer un utilisateur. Nom : celui de la personne (
maria.lopez), jamais quelque chose de partagé commesoporte. Cochez Fournir aux utilisateurs l'accès à la console de gestion AWS, choisissez Je veux créer un utilisateur IAM et laissez coché que l'utilisateur doit changer son mot de passe à la prochaine connexion.Sur l'écran des permissions, choisissez Ajouter l'utilisateur au groupe et cochez seulement le groupe décidé à l'étape 1. N'attachez pas de politiques directement à l'utilisateur : dans six mois, personne ne se souviendra pourquoi il a cette permission isolée. Créez l'utilisateur et notez l'adresse de connexion (elle contient le numéro de votre compte) pour la lui envoyer avec le mot de passe temporaire par des canaux différents : l'adresse par e-mail, le mot de passe en personne ou par un message qui expire.
Si la personne ne va pas utiliser de programmes qui parlent à AWS, ne créez pas de clés d'accès. On pourra les ajouter le jour où elles seront nécessaires.
Rendez la double authentification obligatoire
Demandez à la personne, lors de sa première connexion, d'aller dans le menu de son nom, Informations d'identification de sécurité, et d'assigner un dispositif MFA avec l'application du téléphone. Mais ne le laissez pas à la bonne volonté : dans IAM, Politiques, créez une politique qui refuse tout sauf la configuration du MFA quand l'utilisateur n'est pas entré avec la double authentification, et attachez-la aux trois groupes. AWS la fournit en exemple dans sa documentation sous le nom « permettre aux utilisateurs de gérer leur propre MFA » ; copiez le JSON tel quel.
L'effet : qui entre sans MFA ne voit que l'écran pour l'activer. Tout le reste apparaît bloqué jusqu'à ce qu'il le fasse. C'est la seule façon que tout le monde l'ait vraiment.
Vérifiez ce que personne ne doit avoir
Avant de considérer l'arrivée comme terminée, repassez dans IAM, Utilisateurs, colonne des politiques attachées :
- AdministratorAccess sur plus d'une ou deux personnes : c'est de trop. Personne qui ne fait qu'opérer des machines n'en a besoin.
- IAMFullAccess chez quelqu'un qui ne gère pas les utilisateurs : avec cette permission, il peut s'en donner n'importe quelle autre.
- Des permissions attachées directement à l'utilisateur au lieu de passer par les groupes : déplacez-les vers le groupe ou supprimez-les.
- Des clés d'accès sur des utilisateurs de personnes qui ne programment rien.
Si vous trouvez l'un de ces cas chez des utilisateurs anciens, profitez-en pour le corriger. C'est le moment où c'est le plus facile.
Préparez le départ dès le premier jour
Le jour où quelqu'un part, son accès à AWS doit disparaître le jour même, avant qu'il ne rende l'ordinateur. Dans IAM, Utilisateurs, sélectionnez l'utilisateur : d'abord désactivez l'accès à la console et les clés d'accès (onglet Informations d'identification de sécurité), attendez une ou deux semaines pour vérifier que rien ne dépendait de cette personne, puis supprimez l'utilisateur.
Notez-le dans la liste des tâches de départ avec l'e-mail et les clés du bureau. Et une fois par trimestre, téléchargez le Rapport d'informations d'identification d'IAM : il vous dit pour chaque utilisateur quand il s'est connecté pour la dernière fois, s'il a le MFA et si ses clés sont utilisées. Un utilisateur qui ne s'est pas connecté depuis trois mois est un utilisateur qui ne devrait probablement plus exister.
Ce qui peut mal tourner
La personne dit qu'elle ne peut pas faire quelque chose dont elle a besoin
C'est normal en démarrant avec le moindre privilège, et c'est bon signe : cela veut dire que les limites fonctionnent. Demandez ce qu'elle essayait de faire exactement ; sur l'écran d'erreur d'AWS apparaît l'action refusée (par exemple lightsail:CreateInstance). Décidez si cela fait vraiment partie de son travail. Si oui, ajoutez cette action à la politique du groupe ; sinon, expliquez pourquoi non. Ne réglez pas le problème en lui donnant AdministratorAccess « pour qu'elle arrête d'embêter ».
Quelqu'un avec ReadOnlyAccess voit des données qu'il ne devrait pas
ReadOnlyAccess permet de lire presque tout, y compris les noms des machines, des bases de données et le contenu de certains buckets S3. S'il y a des informations sensibles dans votre compte, remplacez ReadOnlyAccess par des politiques en lecture seule des services concernés (AmazonEC2ReadOnlyAccess, par exemple) ou ajoutez une politique qui refuse l'accès à ce qu'ils ne doivent pas voir. Un refus l'emporte toujours sur une permission.
Un employé est parti et personne n'a retiré son utilisateur
Faites-le maintenant : désactivez la console et les clés. Ensuite, dans CloudTrail, Historique des événements, filtrez sur ce nom d'utilisateur et regardez ce qu'il a fait dans ses dernières semaines. S'il avait des clés d'accès, partez du principe qu'elles peuvent être sur son ordinateur personnel et supprimez-les ; si quelque chose cesse de fonctionner, c'était un programme qui les utilisait et il lui faut une identité propre.
Un programme utilise l'utilisateur d'une personne
Une sauvegarde, un script, un site qui téléverse des fichiers vers S3... avec les clés de Marta. Le jour où Marta part, ou les fait tourner, tout casse. Créez un utilisateur IAM rien que pour ce programme (app-copias), avec une politique des actions strictement nécessaires, et donnez-lui ses propres clés. Encore mieux si le programme tourne sur une machine AWS : utilisez un rôle d'instance et il n'y aura aucune clé à garder.
Dans Simplio
Dans Simplio, le moindre privilège n'exige pas d'écrire des politiques : chaque utilisateur a une case par action (voir, démarrer, arrêter, redémarrer, faire un instantané, restaurer, ouvrir des ports...) et par machine, donc « Marta peut éteindre le site de la boutique mais pas celui de la facturation » se configure en cochant des cases. La double authentification est obligatoire pour tous, et éteindre, supprimer ou restaurer la redemande sur le moment.
Les clés AWS sont enregistrées une seule fois par l'administrateur et conservées chiffrées ; le reste de l'équipe ne les voit jamais, donc il n'y a rien à emporter en partant. Quand on désactive un utilisateur, son accès disparaît à l'instant et le journal d'activité conserve qui a fait quoi, quand et d'où.
La même chose, dans AWS et dans Simplio
| Dans la console AWS | Dans Simplio | |
|---|---|---|
| Donner accès à une nouvelle personne | Créer utilisateur, groupe, politique JSON, forcer le MFA avec une autre politique : 7 étapes, 25 minutes | Créer l'utilisateur et cocher des cases par action et par machine : 2 minutes |
| Limiter à certaines machines | Écrire l'ARN de chaque instance dans la politique | Choisir les machines dans une liste |
| Imposer la double authentification | Politique de refus attachée à chaque groupe | Obligatoire pour tous dès la première connexion |
| Retirer l'accès à quelqu'un | Désactiver la console, supprimer les clés, supprimer l'utilisateur, vérifier CloudTrail | Désactiver l'utilisateur ; le journal d'activité est conservé |