Restrictions des accès aux buckets S3 avec l'IAM
Tags: security, aws, iam, s3
Published: 2023-07-03 02:41:25

Si vous voulez connaître comment limiter l’accès à un bucket (compartiment) Amazon S3 alors vous êtes au bon endroit.

## Prérequis:

- Avoir un compte AWS
- Installer AWS CLI de préférence aws cli v2 [Voir ce lien](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
- Avoir deux bucket s3 crée

Le but de cet article est de pouvoir attribuer des permissions minimales et en fonction d'un besoin bien précis à un utilisateur (IAM) pour pouvoir effectuer ses tâches sur un compartiment S3 spécifiques.

Pour faire simple, vous créez deux compartiments dans le service Amazon S3 tels que montrer dans l'image ci-dessous.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/djj7ln0899myvkswczyj.png)

Une fois les compartiments créés alors vous vous rendrez dans le service IAM là où vous allez procéder à la création d'une politique d'accès qui sera reliée à votre utilisateur chargé de la gestion du compartiment en question.
Il est bien de noter qu'une **politique** dans AWS est un objet qui définit les autorisations. Il en existe plusieurs types de politique dans AWS 👉 [voir le lien vers la documentation d'AWS](https://docs.aws.amazon.com/fr_fr/IAM/latest/UserGuide/access_policies.html).
Sur l'image ci-dessous vous verrez le menu **Politiques** ainsi que le bouton **créer une politique** entouré en rouge pour créer notre politique qui sera rattaché à notre futur utilisateur.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pzh5xdu2nmz72b057aru.png)

Après avoir cliqué sur le bouton, il vous redirige sur l'interface qui est décrite dans l'image ci-dessous, qui vous permet d'ajouter vos autorisations en fonction de vos besoins respectifs. Pour cet article, vous cliquez sur l'option **json** qui vous permet d'ajouter vos autorisations en format json.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q0dh9doza7bpnjemy55u.png)

Le format json par défaut quand vous cliquez sur le bouton est comme celle de l'image ci-dessous.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/phkiq30zyr5hhu7nfwsu.png)

D'où, il vous revient de droit de faire votre propre manipulation en respectant le format de fichier json en fonction des restrictions que vous voulez apporter à votre compartiment S3.
Pour cela ci-dessous un exemple de restrictions pour notre compartiment S3.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8daaestd5cm5866zhdl3.png)
Vous y autoriserez trois actions (GetObject, PutObject et DeleteObject) à effectuer sur notre compartiment appelé **compacti-test**.
Vous pouvez voir en clair les actions autorisées par le bouton **Visuel** comme illustrer dans les images ci-dessous.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m1ta6f2z8p1n5gergi84.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wijiajynx7nrc4np5eib.png)

Si les actions d'autorisation apportées au compartiment vous convient alors vous passez à l'étape suivant, là où vous allez renseigner certaines informations à attribuer à vôtre politique qui sera créé et le soumettre.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7x3do6tp43bvnqtz2op.png)

Après la soumission de votre politique, vous verrez celle de la votre qui a été personnalisé et géré par vous parmi la liste des politiques existantes.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7o6q5s8896jo7vw3yevb.png)

Vu qu'il existe maintenant une politique créé, vous allez devoir créer votre utilisateur dans la section **Utilisateurs** et l'attacher au politique créé dans la section précédente.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ez8y624wulh629y2e327.png)

![](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m5m4estz9yfm29b28tw9.png)

Ces images ci-dessus, vous montre le bouton **ajouter des utilisateurs** pour inscrire un ou plusieurs utilisateurs et le nom a attribué à votre utilisateur.
Sur la fenêtre suivante, vous avez les autres étapes de la création de l'utilisateur tel que l'attachement de la politique, la vérification des choix et celle la confirmation de l'utilisateur. Voir image ci-dessous.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mdxswlk2rfb5e31pk0f5.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ahvay08nn3700zpkad9d.png)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cbcwxgd8b9848j40ujsb.png)

Si tout semble être bon jusque là 👍, alors vous avez besoin de générer l'access et le secret key pour effectuer La dernière étape de ce tutoriel. Cet accès doit être télécharger et être bien conserver pour plus de sécurité.

Cette étape consiste à faire le test pour s'assurer que votre politique définie plus haut fonctionne comme vous l'avez voulu. Pour cela vous utiliserez l'access et le secret key générer par l'utilisateur **test-bucket-s3-user** grâce à la commande **aws cli**.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2s7ek1um1vkdq8p0j2xc.png)
Vous allez enregistrer l'access et le secret key avec la commande qui est dans l'image ci-dessous. Vous n'êtes pas obligé d'utiliser la commande avec **--profile** mais plutôt **aws configure**. Mais par préférence et clarté vous pouvez créer un profil tel qu'il a été fait et après le test vous le supprimez. 

Alors vous pouvez passer au test à proprement dire.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6e9se7jv6ro7i9cd8uz9.png)
Dans ce test, les deux commandes saisies dans le terminal retournent une erreur d'**accès refusé**(access denied) et ces commandes ont but de lister vos compartiments ou le contenu d'un compartiment spécifique tel que **compact-test** . Ceci s'explique par le manque de permissions nécessaires attribuées à votre utilisateur.

Par contre si vous copiez une image ou autre types d'objet vers votre compartiment S3 cela fonctionne. Voir image ci-dessous  

> 
👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 👇 
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8xfzz58lte4uwpxbie5t.png)

> ![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/68djqphy14zh960p9pxl.png)

Tandis que si vous effectuez les mêmes tests vers le deuxième compartiment crée vous aurez des erreurs puisque cet utilisateur n'est pas autoriser à effectuer des actions sur ce compartiment (**compacti-test-1**).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gz5ndam3jqr4vx5atd25.png)

> 
**Bonus**

Pour pousser un peu plus vos actions d'autorisation sur le compartiment car si vous vous rappelez lors du saisie de la commande pour lister le contenu du compartiment, vous avez eu une erreur d'**accès refusé**(access denied).
Pour éviter d'avoir cette erreur lorsque vous listez le contenu du compartiment, il faut ajouter une permission à votre politique créée plus haut.
Revenez dans la partie **Politiques**, cliquez sur le compartiment a modifié et ensuite sur le bouton **modifier** entouré en rouge pour effectuer une modification de votre politique.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y7t7iacwknf2vnf83wj4.png)

Juste après cette partie, ajouter les actions d'autorisation qui vont permettre de pouvoir lister le contenu du compartiment concerné.
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/slrh905ehzyr6q47h2w5.png)
L'action **s3:ListBucket** va autoriser uniquement l'accès au compartiment ou dossier auquel vous souhaitez que l'utilisateur accède.
Si la modification a été effectuée, revérifier à niveau la commande **_aws s3 ls compacti-test --profile test-s3_** comme celle dans l'image ci-dessous.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kddj1ro2uxfm1npwfx9b.png)

Si vous êtes arrivé jusque là je vous dis un gros
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ylc55xwyp7wi280ko0kg.jpg)