DialogFlow, votre chatbot facile
Il existe aujourd'hui de nombreuses aides à la mise en place des ChatBots conversationnels dits intelligents. On parlera aujourd'hui spécifiquement de DialogFlow, anciennement Api.ai de Google.
L'une des étapes incontournables 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 services qui peuvent avoir accès à votre compte AWS. Nous allons l'étudier ensemble.
IAM permet de donner des droits très fins à un utilisateur, un utilisateur pouvant d'ailleurs être une machine. L'idée est de donner par exemple accès aux services S3 seulement en lecture pour un utilisateur défini uniquement pendant 1h le 2 janvier.
C'est le point central de votre sécurité, il permet de gérer l'ensemble des accès sécurisés de votre business.
AWS nous donne aussi la définition de ce qu'IAM n'est pas :
Lors de la création de votre compte AWS, vous avez créé un compte racine (Root User). C'est le compte avec le plus de permissions possible, il est le propriétaire du compte, il peut s'il le souhaite supprimer le compte.
Attention, ce compte étant le compte principal, il faut absolument qu'il soit fortement sécurisé avec un Multi-Factor Application (double authentification).
Il est déconseillé d'utiliser ce user tous les jours, car il a énormément d'accès. C'est un peu comme être en ROOT sur votre machine UNIX toute la journée. Le mieux est de créer un utilisateur IAM, comme vous allez pouvoir le voir dans le chapitre suivant.
Un utilisateur IAM représente une personne physique ou une application. Vous devez créer un utilisateur différent pour tous les membres de votre équipe qui doivent utiliser des services AWS. Il est important de correctement séparer leurs droits, afin de permettre de sécuriser chaque service de votre compte AWS.
Un utilisateur peut se créer via la console AWS ou directement en CLI. Mais ça, nous le verrons plus tard.
Comme évoqué précédemment, il est donc possible de définir des droits très précis pour un utilisateur identifié. Si vous souhaitez qu'un utilisateur ait les mêmes droits qu'un autre, la notion de groupe est importante.
Un groupe est un object qui permet de définir des droits pour un ensemble d'utilisateurs. L'idée est d'avoir un groupe d'utilisateurs ayant exactement les mêmes droits, cela permet de centraliser vos configurations. L'un des groupes est par exemple 'developpeur'. Vous pouvez alors donner des droits spécifiques à tous vos développeurs.
Les rôles permettent de donner acccès à des services spécifiques pendant un temps donné. Ils ont quatre usages différents :
Le Cross-account permet de donner des accès à un utilisateur venant d'un autre compte AWS. On le met souvent en place pour qu'une société externe puisse avoir accès à un bucket par exemple.
Comme pour le cross-account, cela permet de donner des accès à une personne via son identité :
Il est souvent nécessaire de donner un accès a des services AWS pour une application installée sur un autre service AWS. Par exemple si une machine EC2 doit avoir accès à un bucket en lecture. Il serait possible de le faire via l'API, mais cela est plus compliqué pour les développeurs et demanderait d'envoyer la clé sur l'ensemble des machines. Avec ce système il suffit de donner le rôle lors de l'installation des machines pour que l'accès soit ouvert.
La fédération permet de donner l'accès aux utilisateurs de votre provider d'identité via l'utilisation d'une configuration SAML 2.0 que vous transmettez à AWS. Cela permet d'utiliser vos utilisateurs Active Directory ou LDAP par exemple.
Il existe 3 types d'authentification sur IAM.
La première, Username/Password, est la plus simple elle permet de se connecter via un login/password. IAM conseille de mettre en place une politique de mot de passe personnalisé. Elle est principalement utilisé pour la console AWS. Vous pouvez alors choisir plusieurs options :
La seconde est 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 AWS cli ainsi que l'api REST disponible par AWS.
La dernière est un mélange de access key et de session key. Elle est utilisée dans le cas des rôles et permet à l'utilisateur de se servir des services AWS via l'api REST.
Une fois l'authentification effectuée sur IAM, il faut donner des accès à vos utilisateurs. C'est dans ce cadre que l'autorisation est appliquée. Il s'agit alors de donner des accès spécifiques à chaque utilisateur. Pour ce faire nous utilisons les "policies" qui permettent de donner des droits très précis sur les services.
Il existe déjà beaucoup de "policies" crées par AWS. Vous pouvez choisir très rapidement des "policies" du type :
Mais il est possible de créer sa propre "policies". Pour cela il faut créer un objet JSON. Cet objet doit contenir les infos suivantes :
Effect
qui contient la valeur Allow
ou Deny
Resource
qui contient l'ARN de la ressource utilisée sur la "policy"Action
qui est une liste d'actions possibles representée par Service:Action
Condition
qui permet de mettre une condition à notre "policy", exemple "l'IP est..."Cela pourrait donner un objet tel que :
{ "Version": "2012-10-17", "Statement": [{ "Sid": "Stmt2649856320145", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Condition": { "IpAddress": { "aws:SourceIp": "192.168.0.1" } }, "Resource": [ "arn:aws:s3::my_public_bucket/*" ] }] }
Une fois votre "policy" créé, vous pouvez la mettre soit sur un utilisateur IAM, soit sur un groupe.
Bien sûr, IAM propose d'autres fonctionnalités très importantes. La première est la gestion du MFA (Multi-factor authentification), qui permet d'utiliser une autre source d'authentification pour un utilisateur IAM. Vous pouvez très facilement ajouter la double authentification via Authenticator Google.
La seconde fonctionnalité est la rotation des clés d'accès. Le vieillissement d'une clé d'accès augmente l'insécurité, elle peut ne plus être utilisée ou alors être utilisée sur des machines anciennes. Via AWS il est possible de générer une nouvelle clé pour un utilisateur IAM. Cela permet de désactiver l'ancienne et d'en créer une nouvelle avec les mêmes droits.
La troisième est l'intégration des SAML type authentification Facebook, Google... Vous trouverez la documentation ici La dernière est de résoudre les multi-permissions. C'est AWS qui s'occupe de calculer la bonne permission en utilisant l'ensemble des policies configurées pour l'utilisateur.
Voilà, on a fait le tour. J'espère que cet article vous aura été utile et vous aura permis de mieux cerner IAM !
Auteur(s)
Jonathan Jalouzot
Lead développeur au @lemondefr, mes technologies sont le symfony depuis 2009, le nodejs, l'angularjs, rabbitMq etc ... J'adore les médias et aimerai continuer dans ce secteur plein de surprise. Vous pouvez me retrouver sur les réseaux sociaux: Twitter: @captainjojo42 Instagram: @captainjojo42 Linkedin: https://fr.linkedin.com/in/jonathanjalouzot Github: https://github.com/captainjojo
Vous souhaitez en savoir plus sur le sujet ?
Organisons un échange !
Notre équipe d'experts répond à toutes vos questions.
Nous contacterDécouvrez nos autres contenus dans le même thème
Il existe aujourd'hui de nombreuses aides à la mise en place des ChatBots conversationnels dits intelligents. On parlera aujourd'hui spécifiquement de DialogFlow, anciennement Api.ai de Google.
Depuis un an je travaille en tant qu'expert webperformance chez France Medias Monde dans le cadre de la refonte de l'ensemble des fronts des différents sites web du groupe. Nous allons revenir sur cette expérience, pour nous permettre de comprendre comment réaliser ce genre de mission.
Dans cet article nous partageons les bonnes pratiques que nous avons mis en place au sein de nos projets GraphQL. Pour faire simple nous allons mettre en place une API GraphQL devant une API Rest existante, l'ensemble des développements se fera en Node.js avec Apollo GraphQL.