Tôt ou tard, un outil externe vous demande « une clé AWS » : un panneau de contrôle, un système de sauvegarde, un outil de supervision. La tentation est de copier la clé de votre utilisateur administrateur. Ne le faites jamais. Quiconque possède cette clé peut faire tout ce que vous pouvez faire, y compris effacer le compte entier. La bonne méthode est de créer un utilisateur IAM à part avec une politique qui n'autorise que les actions précises dont cet outil a besoin, et de lui donner sa clé.
Nous le ferons depuis AWS CloudShell, le terminal intégré à la console web, parce que ce sont quatre commandes à copier-coller et que le résultat est exact. Rien à installer sur votre ordinateur.
Avant de commencer : ce que signifie chaque chose
- IAM
- Le service AWS qui gère qui peut faire quoi dans votre compte : utilisateurs, clés et permissions.
- Utilisateur IAM
- Une identité à l'intérieur de votre compte AWS, distincte de la vôtre, à laquelle vous ne donnez que les permissions nécessaires. Elle peut servir à une personne ou à un programme.
- Politique
- La liste des permissions, écrite dans un format texte appelé JSON : quelles actions sont autorisées et sur quoi. Le guide vous la donne toute faite.
- Clé d'accès
- Le « nom d'utilisateur et mot de passe » des programmes : deux chaînes de texte (identifiant et secret) qu'un outil utilise pour parler à AWS au nom de cet utilisateur.
- CloudShell
- Un terminal (écran noir où l'on tape des commandes) intégré à la console web d'AWS. Rien à installer : il s'ouvre déjà connecté à votre compte.
- Permissions minimales
- L'idée de ne donner à chaque outil que l'indispensable. Si la clé fuite, le dommage se limite à cela.
- ARN
- Le nom complet et unique de n'importe quel élément d'AWS, de la forme arn:aws:... Il sert à le désigner sans ambiguïté.
- Rôle
- Une alternative à l'utilisateur avec clé : l'outil « emprunte » une permission temporaire sans qu'il existe de mot de passe permanent. Plus sûr, si l'outil le prend en charge.
Pas à pas
Décidez des actions dont l'outil a besoin
Avant d'écrire quoi que ce soit, faites la liste. Un panneau qui gère des machines Lightsail aura besoin, par exemple : de voir les machines et leur état, de démarrer, arrêter et redémarrer, et peut-être de créer et de voir des instantanés. Il n'a pas besoin de créer ni de supprimer des machines, ni de voir la facturation, ni de toucher aux utilisateurs. Chaque action absente de la liste est une action que vous ne donnerez pas. Si l'outil est sérieux, il vous dira exactement quelles permissions il demande ; s'il vous demande « AdministratorAccess », méfiez-vous.
Ouvrez CloudShell
Dans la console AWS, cliquez sur l'icône de terminal de la barre supérieure (CloudShell) ou cherchez-le par son nom. Il met quelques secondes à démarrer. Vous disposez alors d'un terminal Linux avec l'outil
awsconfiguré avec vos identifiants actuels : tout ce que vous y faites, vous le faites en tant que l'utilisateur avec lequel vous êtes connecté à la console (qui doit avoir la permission de gérer IAM).Écrivez la politique
Créez un fichier avec la politique au format JSON. Cet exemple permet de voir, démarrer, arrêter et redémarrer des machines Lightsail et de gérer leurs instantanés, rien de plus. Collez le bloc entier dans CloudShell :
cat > politica.json <<'FIN' { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "lightsail:GetInstances", "lightsail:GetInstance", "lightsail:GetInstanceState", "lightsail:GetInstanceMetricData", "lightsail:GetRegions", "lightsail:StartInstance", "lightsail:StopInstance", "lightsail:RebootInstance", "lightsail:GetInstanceSnapshots", "lightsail:GetInstanceSnapshot", "lightsail:CreateInstanceSnapshot", "lightsail:DeleteInstanceSnapshot" ], "Resource": "*" }] } FINChaque action s'appelle
servicio:Operación. Si vous voulez seulement que l'outil voie, retirez les lignes Start, Stop, Reboot, Create et Delete. Pour EC2, S3 ou RDS, les actions portent d'autres noms, mais la mécanique est identique. Dans Lightsail, la plupart des actions ne peuvent pas être limitées à une machine précise, c'est pourquoi leResourceest*; dans EC2 ou S3, vous pouvez indiquer l'identifiant exact de la ressource.Créez la politique, l'utilisateur et associez-les
Trois commandes. Changez le nom si vous voulez, mais qu'il dise à quoi il sert :
aws iam create-policy --policy-name PanelMaquinas --policy-document file://politica.json aws iam create-user --user-name panel-maquinas CUENTA=$(aws sts get-caller-identity --query Account --output text) aws iam attach-user-policy --user-name panel-maquinas \ --policy-arn arn:aws:iam::$CUENTA:policy/PanelMaquinasLa première commande renvoie l'ARN de la politique ; la troisième le reconstruit avec le numéro de votre compte pour que vous n'ayez pas à le copier. Remarquez que nous ne donnons pas de mot de passe de console à l'utilisateur : il n'existera que pour la clé d'accès.
Générez la clé d'accès
aws iam create-access-key --user-name panel-maquinasLa réponse contient deux valeurs :
AccessKeyId(commence par AKIA) etSecretAccessKey. Le secret n'est affiché que cette fois-ci. Copiez-le directement dans l'outil qui va l'utiliser. Ne le collez pas dans un e-mail, un chat ni un document partagé. Si vous le perdez, ce n'est pas grave : vous supprimez cette clé et vous en créez une autre.Supprimez le fichier et vérifiez
rm politica.json aws iam list-attached-user-policies --user-name panel-maquinasSeul
PanelMaquinasdoit apparaître. Configurez l'outil avec la clé et testez une action autorisée (voir les machines) et une action non autorisée (en créer une) : la seconde doit échouer avec « not authorized ». Cette erreur est la preuve que vous avez bien fait le travail.
Ce qui peut mal tourner
L'outil dit qu'il n'a pas la permission pour quelque chose que vous voulez pourtant autoriser
Il manque une action dans la politique. Le message d'erreur d'AWS dit exactement laquelle (User ... is not authorized to perform: lightsail:GetBundles). Ajoutez-la au JSON et mettez à jour la politique avec aws iam create-policy-version --set-as-default, ou modifiez-la depuis la console IAM. N'ajoutez que cette action, ne rouvrez pas les vannes.
J'ai collé le secret là où il ne fallait pas
Considérez-le comme compromis. Dans CloudShell : aws iam delete-access-key --user-name panel-maquinas --access-key-id AKIA... et créez-en une autre. Comme l'utilisateur a des permissions minimales, le dommage possible était faible ; c'est tout l'intérêt de la démarche.
La troisième commande échoue sur l'ARN
Il se peut que votre utilisateur de console n'ait pas la permission sts:GetCallerIdentity (rare) ou que le nom de la politique contienne une faute de frappe. Copiez l'ARN renvoyé par la première commande et collez-le à la main dans --policy-arn.
Un rôle ne vaudrait-il pas mieux qu'un utilisateur ?
Oui, quand l'outil le prend en charge : un rôle IAM que l'outil assume depuis son propre compte AWS n'a pas de clé qui puisse fuiter et ses identifiants expirent d'eux-mêmes. Demandez à votre fournisseur s'il accepte l'« accès par rôle » ou le « cross-account role ». Sinon, l'utilisateur avec permissions minimales est la deuxième meilleure option, et bien meilleure que la clé d'administrateur.
Dans Simplio
Dans Simplio, vous n'avez pas à écrire la politique : dans l'aide, vous cochez ce que vous voulez autoriser (lecture seule, sans pare-feu, sans terminal, une région...) et Simplio génère le JSON et le script complet à coller dans CloudShell, qui renvoie la clé toute prête. Et si vous préférez éviter les clés, Simplio accepte la connexion par rôle, avec des identifiants temporaires qui expirent au bout d'une heure. La clé est stockée chiffrée et n'est jamais réaffichée.
La même chose, dans AWS et dans Simplio
| Dans la console AWS | Dans Simplio | |
|---|---|---|
| Écrire la politique | Connaître le nom exact de chaque action AWS et le format JSON | Cocher des cases (lecture seule, sans pare-feu, sans terminal, une région) : le JSON se génère tout seul |
| Créer l'utilisateur, la politique et la clé | CloudShell, 4 commandes, 15 minutes la première fois | Coller dans CloudShell le script généré par l'aide : 2 minutes |
| Si vous ne voulez pas de clés | Concevoir un rôle entre comptes à la main | Connexion par rôle avec un ARN que Simplio génère pour vous |