L’un des aspects essentiels d’Amazon Web Service est de bien comprendre le service IAM (Identity and Access Management). C’est l’un des services les plus importants car il permet de gérer les utilisateurs ou les services qui peuvent accéder à votre compte AWS. Nous allons l’explorer ensemble.
Introduction
IAM permet de donner des autorisations très précises à un utilisateur, qui peut également être une machine. L’idée est de donner, par exemple, un accès en lecture uniquement aux services S3 pour un utilisateur spécifique, mais seulement pendant une heure le 2 janvier.
Il s’agit là de l’élément central de votre sécurité, permettant de gérer tous les accès sécurisés de votre activité.
AWS fournit également la définition de ce qu’IAM n’est pas :
- Il ne permet pas de gérer les autorisations de vos applications. IAM ne sert qu’à gérer les autorisations de vos services AWS.
- IAM n’est pas un système de gestion des identités de type LDAP ou Active Directory.
Les principes
Utilisateur racine (Root User)
Lors de la création de votre compte AWS, vous avez créé un compte racine (Root User). C’est le compte disposant du plus grand nombre d’autorisations possible. Il est le propriétaire du compte et peut supprimer le compte s’il le souhaite.
Cependant, veillez à sécuriser de manière rigoureuse ce compte principal en utilisant une authentification à double facteur.
Il est déconseillé d’utiliser ce compte au quotidien, car il dispose de nombreux accès. C’est un peu comme être en mode ROOT sur votre machine UNIX toute la journée. Il est préférable de créer un utilisateur IAM, comme nous le verrons dans le chapitre suivant.
Utilisateur IAM
Un utilisateur IAM représente une personne physique ou une application. Vous devez créer un utilisateur distinct pour chaque membre de votre équipe qui doit utiliser les services AWS. Il est important de séparer correctement leurs autorisations afin de sécuriser chaque service de votre compte AWS.
Un utilisateur peut être créé via la console AWS ou directement en utilisant l’interface de ligne de commande (CLI). Mais cela sera abordé plus tard.
Comme mentionné précédemment, il est possible de définir des autorisations très précises pour un utilisateur spécifique. Si vous souhaitez qu’un utilisateur ait les mêmes autorisations qu’un autre, la notion de groupe devient importante.
Groupes
Un groupe est un objet permettant de définir les autorisations pour un ensemble d’utilisateurs. L’idée est d’avoir un groupe d’utilisateurs disposant exactement des mêmes autorisations, ce qui permet de centraliser vos configurations. Par exemple, l’un des groupes peut être “développeur”. Vous pouvez alors accorder des autorisations spécifiques à tous vos développeurs.
Rôles
Les rôles permettent de donner un accès à des services spécifiques pour une durée déterminée. Ils ont quatre utilisations différentes :
- Donner un accès à un autre compte AWS
- Donner un accès à un compte externe
- Donner un accès à vos services à une application EC2 ou autre
- Donner un accès à un système de fédération
Accès entre comptes (Cross-account)
Le Cross-account permet de donner un accès à un utilisateur provenant d’un autre compte AWS. Il est souvent mis en place pour qu’une société externe puisse accéder à un bucket, par exemple.
Compte externe
Tout comme le Cross-account, cela permet de donner un accès à une personne via son identité :
- Amazon
Accès à un service
Il est souvent nécessaire de donner un accès à des services AWS pour une application installée sur un autre service AWS. Par exemple, si une machine EC2 doit avoir un accès en lecture à un bucket. Il serait possible de le faire via l’API, mais cela serait plus compliqué pour les développeurs et nécessiterait de diffuser la clé sur toutes les machines. Avec ce système, il suffit de donner le rôle lors de l’installation des machines pour ouvrir l’accès.
Fédération
La fédération permet de donner l’accès aux utilisateurs de votre fournisseur d’identité en utilisant une configuration SAML 2.0 que vous transmettez à AWS. Cela permet d’utiliser vos utilisateurs Active Directory ou LDAP, par exemple.
Authentification
Il existe trois types d’authentification sur IAM.
La première est l’authentification par nom d’utilisateur et mot de passe, la plus simple. Elle permet de se connecter en utilisant un identifiant et un mot de passe. IAM recommande de mettre en place une politique de mots de passe personnalisée. Elle est principalement utilisée pour la console AWS. Vous pouvez alors choisir plusieurs options :
- Nombre de caractères
- Nombre de caractères numériques
- Changement de mot de passe tous les X jours
- etc.
La deuxième est l’utilisation de clé d’accès et de clé secrète (access key/secret key). Il s’agit d’une paire clé/secret qui permet de se connecter au SDK AWS. Cela vous permet d’utiliser l’interface de ligne de commande AWS ainsi que l’API REST disponible.
La dernière est un mélange de clé d’accès et de clé de session. Elle est utilisée dans le cas des rôles et permet à l’utilisateur d’utiliser les services AWS via l’API REST.
Autorisation
Une fois l’authentification effectuée sur IAM, il est nécessaire de donner des accès à vos utilisateurs. C’est là que l’autorisation entre en jeu. Il s’agit de donner des accès spécifiques à chaque utilisateur. Pour ce faire, nous utilisons les “policies” qui permettent de donner des autorisations très précises sur les services.
Policies
AWS propose déjà de nombreuses “policies” préexistantes. Vous pouvez rapidement choisir des “policies” telles que :
- Lecture sur un bucket
- Écriture Lambda
Mais il est possible de créer votre propre “policy”. Pour cela, vous devez créer un objet JSON. Cet objet doit contenir les informations suivantes :
- L’effet qui peut être Allow ou Deny
- La ressource utilisée dans la “policy” (ARN)
- L’action, qui est une liste d’actions possibles représentées par Service:Action
- La condition, qui permet de définir une condition pour notre “policy”, par exemple “si l’adresse IP est…”
Cela pourrait donner un objet JSON tel que :
{
"Effect": "Allow",
"Resource": "arn:aws:s3:::mon_bucket/*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.168.1.1",
"192.168.1.2"
]
}
}
}
Une fois votre “policy” créée, vous pouvez l’associer à un utilisateur IAM ou à un groupe.
Autres fonctionnalités
Bien sûr, IAM propose d’autres fonctionnalités très importantes. La première est la gestion de l’authentification multi-facteurs (MFA), qui permet d’utiliser une autre source d’authentification pour un utilisateur IAM. Vous pouvez facilement ajouter l’authentification à double facteur via Google Authenticator.
La deuxième fonctionnalité est la rotation des clés d’accès. Les clés d’accès vieillissantes augmentent l’insécurité, elles peuvent ne plus être utilisées ou être utilisées sur des machines obsolètes. Avec AWS, il est possible de générer une nouvelle clé pour un utilisateur IAM. Cela permet de désactiver l’ancienne clé et d’en créer une nouvelle avec les mêmes autorisations.
La troisième est l’intégration de l’authentification de type SAML avec Facebook, Google, etc. Vous trouverez la documentation ici.
La dernière fonctionnalité est la résolution des autorisations multiples. AWS se charge de calculer la bonne autorisation en utilisant l’ensemble des “policies” configurées pour l’utilisateur.
Voilà, nous avons fait le tour. J’espère que cet article vous a été utile et vous a permis de mieux comprendre IAM !