Deploying this Hugo blog to AWS S3 | Part 2
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)
- Blocca l’accesso pubblico al bucket S3
- Selezionare uno dei bucket S3 e andare sul tab
Permission
. - Attiva l’opzione
block all public access
- 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
, selezionaOrigin 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. SelezionaCopy 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.
- 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
.
- 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 comeViewer request
.
- Salva le modifiche.