+++
author = "Yann Verry"
categories = ["cloud"]
date = 2018-06-04T06:42:00Z
description = ""
draft = false
image = "__GHOST_URL__/content/images/2018/06/498544386_01f64e68dd_o.jpg"
slug = "s3-origin-de-cloudfront"
tags = ["cloud"]
title = "Les erreurs avec S3 + Cloudfront → Origin Access Identity"

+++


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](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html).

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.**



