La sécurité est l’une des questions les plus importantes en matière d’infrastructure cloud.
Surtout lorsqu’il s’agit de grandes infrastructures créées avec IaC telles que terraform où de nombreux développeurs sont impliqués.
Dans ces grands projets, traiter avec plusieurs comptes AWS, MFA, Rôles, rôles enchaînés peut rendre le code complexe, difficile à maintenir et ralentir le développement.
1 – Profils AWS
Un profil AWS est essentiellement un fichier d’informations d’identification qui se trouve ici : ~/.aws/credentials
sur linux et mac, et dans ce chemin pour Windows : %USERPROFILE%\.aws\credentials
le fichier contiendra vos informations d’identification AWS :
[pisquare]
aws_access_key_id = DVRZNJSZLDEKQAZ
aws_secret_access_key = Y7vdvdYRYR9ckomzc8WHcndndcn6vfzpa
Ici nous avons créé un profil appelé pisquare, ce profil peut être utilisé dans terraform pour configurer fournisseur de ressources:
provider "aws" {
profile = "pisquare"
}
En fournissant le nom du profil AWS à utiliser, AWS obtiendra les informations nécessaires à l’authentification.
2 – Assumer des rôles et des multi-environnements :
Comme décrit par AWS :
« Un IAM rôle est une identité IAM que vous pouvez créer dans votre compte et qui dispose d’autorisations spécifiques. Un rôle IAM est similaire à un utilisateur IAM, en ce sens qu’il s’agit d’une identité AWS avec des stratégies d’autorisation qui déterminent ce que l’identité peut et ne peut pas faire dans AWS.
Ainsi, lorsque nous donnons à un profil un rôle assumé, nous donnons à ce profil le droit d’effectuer des opérations sur des composants spécifiques dans un compte AWS.
Lors de la création d’infrastructure AWS sur de grands projets, nous avons souvent des environnements séparés (staging et production par exemple).
Afin de pouvoir effectuer des opérations sur les environnements de staging et de production, vous devez disposer d’un processus d’authentification distinct, par exemple dans l’environnement de production, vous aurez besoin de MFA, qui n’est pas obligatoire pour l’environnement de staging.
Afin de rendre l’authentification plus facile, moins pénible et plus maintenable. Nous allons créer d’autres profils dans notre fichier d’identifiants.
Ces nouveaux profils auront des rôles différents dans différents comptes AWS.
[pisquare]
aws_access_key_id = DVRZNJSZLDEKQAZ
aws_secret_access_key = Y7vdvdYRYR9ckomzc8WHcndndcn6vfzpa
[pisquare_staging]
source_profile = pisquare
role_arn = arn:aws:iam::2233554466:role/my-role
[pisquare_production]
source_profile = pisquare
role_arn = arn:aws:iam::1122334455:role/my-role
dans les nouveaux profils : [pisquare_staging] et [pisquare_production] nous spécifions le source_profile qui nous permet de nous authentifier, puis nous spécifions le role_arn, qui nous donne fondamentalement certaines autorisations et nous permet d’opérer sur des ressources spécifiques dans un compte spécifique.
Le [pisquare_staging] aura un rôle dans l’identifiant de compte AWS 2233554466.
Le [pisquare_production] aura un rôle dans l’identifiant de compte AWS 1122334455.
Cela a créé plusieurs profils avec plusieurs objectifs et rôles, que nous pouvons facilement utiliser n’importe où afin de changer facilement chaque fois que j’ai besoin d’accéder et d’effectuer des tâches dans un environnement spécifique.
Je peux utiliser ces profils dans le script bash :
export AWS_PROFILE=pisquare_staging
ou dans Terraform :
provider "aws" {
profile = "pisquare_production"
}
3 – Profils et MFA
Lorsqu’il s’agit d’environnements de production, nous avons généralement mis en place MFA.
Cela peut être un peu pénible à utiliser, surtout lorsque notre infrastructure est automatisée avec terraform.
Lorsque MFA est requis, nous devons ajouter la série MFA et la graine dans notre profil pisquare.
[pisquare]
aws_access_key_id = DVRZNJSZLDEKQAZ
aws_secret_access_key = Y7vdvdYRYR9ckomzc8WHcndndcn6vfzpa
mfa_serial = arn:aws:iam::1213141516:mfa/user-test
mfa_seed = FNZFOZEKFOZKEFOEZKFPZLZJFIZJFIZEJFIZEJFZJEFIJZEFZJEF
que nous ajoutons notre profil MFA, qui contiendra les informations requises pour l’authentification:
[pisquare_mfa]
aws_access_key_id = DZDKLQKDKQDKQ
aws_secret_access_key = DDJEJDAECNDNCND
aws_session_token = a/very/long/token/string
NB : afin de remplir le profil pisquare MFA, soit vous allez créer un script qui va calculer, récupérer les identifiants auprès d’AWS puis remplir les champs obligatoires. Ou vous exécuterez manuellement la commande get token à l’aide du profil pisquare, obtiendrez l’id et access_key et remplissez manuellement les informations.
Afin d’utiliser le profil MFA par le profil de production, vous utilisez la propriété assume rôle :
[pisquare_production]
source_profile = pisquare_mfa
role_arn = arn:aws:iam::1122334455:role/my-role