Dopo alcuni mesi, vorrei apportare alcune piccole modifiche all’infrastruttura del sito. In questo capitolo vedremo come utilizzare la distribuzione CloudFront per limitare l’accesso al bucket Amazon S3.

Best Practise: Create a Cloud Front origin access control (OAC)

  1. Blocca l’accesso pubblico al bucket S3
  • Selezionare uno dei bucket S3 e andare sul tab Permission.
  • Attiva l’opzione block all public access
  1. Apri la console CloudFront
  • Dalla lista delle distribuzioni, scegli la distribuzione che pubblica il contenuto del bucket S3 a cui si vuole limitare l’accesso.
  • Naviga sul tab Origin.
  • Seleziona il Bucket S3 di origine e seleziona Edit.
  • Seleziona l’endpoint del Bucket come Origin Domain –> L’endpoint S3 deve essere nel formato $S3-Bucket-name.s3.eu-central-1.amazonaws.com.
  • Per Origin Access, seleziona Origin access control settings (recommended).
  • Nella finestra di dialogo, assegnare un nome. È buona norma mantenere l’impostazione predefinita di Sign requests (recommended). Poi, scegli Create.
  • Per S3 bucket Access, applica la policy al bucket S3. Seleziona Copy policy, e poi salva.
  • Seleziona Go to S3 bucket permissions per accedere alla console del bucket S3.
  • Seleziona Save Changes.
  • Nella Amazon S3 console, dall’elenco dei buckets, scegli il bucket che è l’origine della distribuzione CloudFront.
  • Naviga sul tab Permissions.
  • Sotto la policy Bucket, conferma di vedere una dichiarazione simile alla seguente:
{
	"Version": "2008-10-17",
	"Id": "PolicyForCloudFrontPrivateContent",
	"Statement": [
		{
			"Sid": "AllowCloudFrontServicePrincipal",
			"Effect": "Allow",
			"Principal": {
				"Service": "cloudfront.amazonaws.com"
			},
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::$BucketName/*",
			"Condition": {
				"StringEquals": {
					"AWS:SourceArn": "arn:aws:cloudfront::$accountID:distribution/$distributionID"
				}
			}
		}
	]
}

È necessario aggiungere la dichiarazione precedente per consentire a CloudFront OAC di leggere gli oggetti dal bucket.

  1. Aggiungi l’oggetto default root
  • Dalla lista delle distribuzioni, scegli la distribuzione che pubblica il contenuto del bucket S3 a cui si vuole limitare l’accesso.
  • Edita le configurazioni General.
  • Aggiungi l’oggetto di default root sotto l’opzione Deafult root object. CloudFront restituirà un oggetto specifico quando un utente richiede l’URL principale della distribuzione.

Utilizzeremo CloudFront Function per impostare un oggetto root predefinito per le sottodirectory del nostro sito web ospitato staticamente. Nello specifico, www.example.com/subdir/index.html sarà pubblicato ogni volta che l’utente chiamerà www.example.com/subdir.

  1. Crea una funzione CloudFront
  • Apri la CloudFront console
  • Vai nella sezione relativa alle Functions e crea un nuovo record.
  • Nella sezione Function Code crea una semplice funzione JavaScript:
'use strict';
function handler(event) {
 var request = event.request;
 var uri = request.uri;

 // Check whether the URI is missing a file name.
 if (uri.endsWith('/')) {
     request.uri += 'index.html';
 } 
 // Check whether the URI is missing a file extension.
 else if (!uri.includes('.')) {
     request.uri += '/index.html';
 }
  return request;
}
  • Dalla lista delle distribuzioni, scegli la distribuzione che pubblica il contenuto del bucket S3 a cui si vuole limitare l’accesso.
  • Seleziona il tab Behaviors.
  • Sotto Additional settings aggiungi la funzione CloudFront come Viewer request.
  • Salva le modifiche.