Le couple S3 && cloudfront est le serverless avant l’heure.C’est facile à setup, performant, éfficace.

Par défaut si un fichier n’éxiste pas dans un dossier alors cloudfront renvoie une erreur 403 au lieu d’une 404. C’est bien dommage surtout quand on se sers de cette feature pour faire des règles de réécriture.

Comment remédier à cela ?

Par défaut lorsqu’on fait la liaison entre S3 et cloudfront il y a création d’une bucket policy du style:

{
	"Version": "2008-10-17",
	"Id": "PolicyForCloudFrontPrivateContent",
	"Statement": [{
		"Sid": "1",
		"Effect": "Allow",
		"Principal": {
			"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <ID>"
		},
		"Action": "s3:GetObject",
		"Resource": [
			"arn:aws:s3:::<bucketName>/*"
		]
	}]
}


Ceci donne l’accès à cloudfront à votre bucket S3. Il y a comme action s3:GetObject, il manque donc juste une action pour lister le contenu ? Oui mais non si AWS était intuitif ça se serais. Il faut faire un OAI.

Récupérer le S3CanonicalUserId via

aws cloudfront list-cloud-front-origin-access-identities

Une fois celui-ci obtenu il faut donc ajouter l’option --grant-read avec le S3CanonicalUserId récupéré à l’instant.

aws s3api put-bucket-acl --bucket <bucketName> --grant-read id=<S3CanonicalUserId>

–grant-read (string) Allows grantee to list the objects in the bucket.