S3 est assez merveilleux, mais aussi assez compliqué pour gérer les droits d’administration. Jusqu’à présent, sur mon S3, je m’embêtais à gérer les droits fichier par fichier pour lui donner un accès en lecture public.
Je me suis penché sur la question, et en fait ce n’est pas si compliqué à comprendre, encore faut-il avoir la bonne syntaxe. Voilà la politique que j’ai mise en place :
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*" },
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket/*"
}
] }
- Version : c’est le numéro de version de la policy. Ne mettez pas la date du jour, copiez la même date que moi (ça revient en gros à dire « j’utilise la version 3 du système de policy »).
- Statement : ce sont les règles de la policy. Ici, il y en a une seule. Voyons ce que ça dit à l’intérieur :
- Effect : Allow (autoriser) ou Deny (refuser). Par défaut, tout est refusé par sécurité. Il faut donc explicitement autoriser des choses.
- Principal : le nom de l’utilisateur à qui on donne le droit. Ici, l’étoile * signifie « tout le monde, y compris le grand public sur internet sans compte AWS ».
- Action : c’est l’action qu’on veut autoriser (il peut y en avoir plusieurs). Ici,
s3:GetObject
permet de télécharger un objet (un fichier). La liste des actions peut être retrouvée dans la doc. Oui, il y en a beaucoup ! Parmi les plus importantes, citons :s3:DeleteObject
: autorise la suppression des fichierss3:GetObject
: autorise la lecture des fichiers et leur téléchargements3:PutObject
: autorise l’ajout de fichierss3:ListBucket
: autorise la récupération du nom de tous les fichiers dans le buckets3:ListAllMyBuckets
: autorise l’affichage de la liste de tous les buckets.
- Resource : le nom de la ressource qui est autorisée. Il y a un format un peu spécial. Ici,
arn:aws:s3:::examplebucket/*
indique qu’on effectue l’autorisation sur tous les fichiers (*
) du bucket nomméexamplebucket
.
Ainsi, tout fichier sera accessible en lecture, mais pas en écriture.