Limitazione dell'accesso a un’origine Amazon S3
Quando si utilizza CloudFront con un bucket Amazon S3 come origine, è possibile configurare CloudFront e Amazon S3 in modo da fornire i seguenti vantaggi:
-
Limita l'accesso al bucket Amazon S3 in modo che non sia accessibile al pubblico
-
Assicura che gli spettatori (utenti) possano accedere ai contenuti nel bucket solo tramite la distribuzione CloudFront specificata, ovvero impedisce loro di accedere ai contenuti direttamente dal bucket o tramite una distribuzione CloudFront non intenzionale
Per fare ciò, configura CloudFront per inviare richieste autenticate ad Amazon S3 e configura Amazon S3 per consentire l'accesso solo alle richieste autenticate da CloudFront. CloudFront offre due modi per inviare richieste autenticate a un'origine Amazon S3: Controllo accessi all'origine(OAC) e identità di accesso all'origine (OAI). Si consiglia di utilizzare OAC perché supporta:
-
Tutti i bucket Amazon S3 in tutto Regioni AWS, comprese le regioni opt-in lanciate dopo dicembre 2022
-
Crittografia lato server con chiavi AWS KMS (SSE-KMS) Amazon S3
-
Richieste dinamiche (
PUT
eDELETE
) su Amazon S3
L'OAI non funziona per gli scenari dell'elenco precedente o richiede soluzioni alternative aggiuntive in tali scenari. I seguenti argomenti descrivono come utilizzare OAC con origine Amazon S3. Per informazioni su come eseguire la migrazione da OAI a OAC, consulta Migrazione dell'identità di accesso origine (OAI) al controllo degli accessi origine (OAC).
Se l’origine è un bucket Amazon S3 configurato come endpoint del sito Web, è necessario configurarlo con CloudFront come origine personalizzata. Ciò significa che non è possibile utilizzare OAC (o OAI). Tuttavia, puoi limitare l'accesso all’origine personalizzata impostando le intestazioni personalizzate e configurando il server di origine per richiederle. Per ulteriori informazioni, consulta Limitazione dell'accesso ai file su origini personalizzate.
Argomenti
Creazione di un nuovo controllo degli accessi origine
Completa i passaggi descritti nei seguenti argomenti per configurare un nuovo controllo degli accessi origine in CloudFront.
Argomenti
Prerequisiti
Prima di creare e configurare il controllo accesso origine (OAC), devi disporre di una distribuzione CloudFront con un'origine bucket Amazon S3. Questa origine deve essere un normale bucket S3, non un bucket configurato come endpoint del sito Web. Per ulteriori informazioni sulla configurazione di una distribuzione CloudFront con origine di bucket S3, consulta Nozioni di base su una distribuzione CloudFront semplice.
Fornitura dell'autorizzazione di controllo accesso origine per accedere al bucket S3
Prima di creare un controllo accesso origine (OAC) o configurarlo in una distribuzione CloudFront, assicurati che l'OAC sia autorizzato ad accedere all'origine del bucket S3. Esegui questa operazione dopo aver creato una distribuzione CloudFront, ma prima di aggiungere l'OAC all'origine S3 nella configurazione della distribuzione.
Per concedere all'OAC il permesso di accedere al bucket S3, usa una policy del bucket S3 per consentire il principale del servizio CloudFront (cloudfront.amazonaws.com
) per accedere al bucket. Utilizzo di un elemento Condition
della policy per consentire a CloudFront di accedere al bucket solo quando la richiesta è per conto della distribuzione CloudFront che contiene l'origine S3.
Per informazioni sull'aggiunta o la modifica di una politica del bucket, consulta Aggiunta di una policy di bucket utilizzando la console Amazon S3 nella Guida per l'utente di Amazon S3.
Di seguito sono riportati alcuni esempi di policy dei bucket S3 che consentono a un OAC CloudFront di accedere a un'origine S3. Nei seguenti esempi:
-
Sostituire
DOC-EXAMPLE-BUCKET
con il nome dell’origine S3 -
Sostituzione di
111122223333
con ID Account AWS che contiene la distribuzione CloudFront e l'origine del bucket S3 -
Sostituzione di
EDFDVBD6EXAMPLE
con l'ID della distribuzione CloudFront
Esempio Policy del bucket S3 che consente l'accesso in sola lettura a un OAC CloudFront
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333
:distribution/EDFDVBD6EXAMPLE
" } } } }
Esempio Policy del bucket S3 che consente l'accesso in lettura e scrittura a un OAC CloudFront
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowCloudFrontServicePrincipalReadWrite", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333
:distribution/EDFDVBD6EXAMPLE
" } } } }
SSE-KMS
Se gli oggetti nell'origine del bucket S3 sono crittografati con Crittografia lato server conAWS Key Management Service (SSE-KM), è necessario assicurarsi che l'OAC abbia il permesso di utilizzare la chiave AWS KMS. Per concedere all'OAC l'autorizzazione per utilizzare la chiave KMS, aggiungi una dichiarazione alla Policy della chiave KMS. Per informazioni su come modificare un criterio delle chiavi, consulta Modifica di una policy delle chiavinella Guida per gli sviluppatori AWS Key Management Service.
L'esempio seguente mostra una dichiarazione di policy della chiave KMS che consente all'OAC di utilizzare la chiave KMS. Nel seguente esempio:
-
Sostituzione di
111122223333
con l’ID Account AWS che contiene la distribuzione CloudFront, l'origine del bucket S3 e la chiave KMS -
Sostituzione di
EDFDVBD6EXAMPLE
con l'ID della distribuzione CloudFront
Esempio Dichiarazione della policy della chiave KMS che consente a un OAC di CloudFront di accedere a una chiave KMS per SSE-KMS
{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
111122223333
:root", "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333
:distribution/EDFDVBD6EXAMPLE
" } } }
Creazione del controllo accesso origine
Per creare un Origin Access Control (OAC), puoi usare AWS Management Console, AWS CloudFormation, AWS CLI o l'API CloudFront.
Migrazione dell'identità di accesso origine (OAI) al controllo degli accessi origine (OAC)
Per migrare da un'identità di accesso all'origine (OAI) legacy a un controllo dell'accesso all'origine (OAC), aggiorna innanzitutto l'origine del bucket S3 per consentire sia all'OAI che all'OAC di accedere al contenuto del bucket. Questo assicura che CloudFront non perda mai l'accesso al bucket durante la transizione. Per consentire sia a OAI che a OAC di accedere a un bucket S3, aggiorna la Policy del bucket per includere due dichiarazioni, una per ogni tipo di principale.
Il seguente esempio di policy del bucket S3 consente sia a un OAI che a un OAC di accedere a un'origine S3. Nel seguente esempio:
-
Sostituisci
DOC-EXAMPLE-BUCKET
con il nome dell’origine S3 -
Sostituzione di
111122223333
con ID Account AWS che contiene la distribuzione CloudFront e l'origine del bucket S3 -
Sostituzione di
EDFDVBD6EXAMPLE
con l'ID della distribuzione CloudFront -
Sostituzione di
EH1HDMB1FH2TC
con l'ID dell'identità di accesso all'origine
Esempio Policy del bucket S3 che consente l'accesso in sola lettura a un OAI e a un OAC
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontServicePrincipalReadOnly", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::
DOC-EXAMPLE-BUCKET
/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::111122223333
:distribution/EDFDVBD6EXAMPLE
" } } }, { "Sid": "AllowLegacyOAIReadOnly", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access IdentityEH1HDMB1FH2TC
" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" } ] }
Dopo aver aggiornato la politica dei bucket di S3 Origin per consentire l'accesso sia all'OAI che all'OAC, puoi aggiornare la configurazione di distribuzione per utilizzare OAC anziché OAI. Per ulteriori informazioni, consulta Creazione di un nuovo controllo degli accessi origine.
Dopo che la distribuzione è stata completamente distribuita, puoi rimuovere l'istruzione nella politica del bucket che consente l'accesso all'OAI. Per ulteriori informazioni, consulta Fornitura dell'autorizzazione di controllo accesso origine per accedere al bucket S3.
Impostazioni avanzate per il controllo dell'accesso all'origine
La funzionalità di controllo degli accessi di origine di CloudFront include impostazioni avanzate destinate solo a casi d'uso specifici. Usa le impostazioni consigliate a meno che tu non abbia una necessità specifica per le impostazioni avanzate.
Origin Access Control contiene un'impostazione denominata Comportamento di firma(nella console), oppure SigningBehavior
(nell'API, nella CLI e AWS CloudFormation). Questa impostazione offre le seguenti opzioni:
- Firma sempre le richieste di origine (impostazione consigliata)
-
Si consiglia di utilizzare questa impostazione, denominata Richieste di firma (consigliata) nella console, oppure
always
nell'API, nell'interfaccia a riga di comando e AWS CloudFormation. Con questa impostazione, CloudFront firma sempre tutte le richieste che invia all'origine del bucket S3. - Non firmare le richieste di origine
-
Questa impostazione è denominata Non firmare le richieste nella console, oppure
never
nell'API, nell'interfaccia a riga di comando e AWS CloudFormation. Usa questa impostazione per disattivare il controllo dell'accesso all'origine per tutte le origini in tutte le distribuzioni che utilizzano questo controllo di accesso all'origine. Ciò consente di risparmiare tempo e fatica rispetto alla rimozione di un controllo di accesso all'origine da tutte le origini e le distribuzioni che lo utilizzano, uno per uno. Con questa impostazione, CloudFront non firma alcuna richiesta inviata all'origine del bucket S3.avvertimento Per utilizzare questa impostazione, l'origine del bucket S3 deve essere accessibile al pubblico. Se utilizzi questa impostazione con un'origine del bucket S3 non accessibile al pubblico, CloudFront non può accedere all'origine. L'origine del bucket S3 restituisce gli errori a CloudFront e CloudFront li trasmette ai visualizzatori.
- Non ignorare l’intestazione del visualizzatore (client)
Authorization
-
Questa impostazione è denominata Non sovrascrivere l'intestazione di autorizzazionenella console, oppure
no-override
nell'API, nell'interfaccia a riga di comando e AWS CloudFormation. Utilizza questa impostazione quando desideri che CloudFront firmi le richieste di origine solo quando la richiesta del visualizzatore corrispondente non include un’intestazioneAuthorization
. Con questa impostazione, CloudFront passa all’intestazioneAuthorization
della richiesta del visualizzatore quando ne è presente una, ma firma la richiesta di origine (aggiungendone una propria intestazioneAuthorization
) quando la richiesta del visualizzatore non include un’intestazioneAuthorization
.avvertimento Per passare lungo l’intestazione
Authorization
della richiesta del visualizzatore, devi aggiungere l’intestazioneAuthorization
a una policy della cache per tutti i comportamenti della cache che utilizzano le origini del bucket S3 associate a questo controllo di accesso all'origine.
Utilizzo di un'identità di accesso all'origine (legacy, non consigliata)
L’identità di accesso all'origine(OAI) CloudFront offre funzionalità simili a controllo accessi all'origine (OAC), ma non funziona per tutti gli scenari. Questo è il motivo per cui consigliamo di utilizzare invece OAC. Nello specifico, l'OAI non supporta:
-
Bucket Amazon S3 in tutto Regioni AWS, incluse le regioni opt-in
-
Crittografia lato server con chiavi AWS KMS (SSE-KMS) Amazon S3
-
Richieste dinamiche (
PUT
,POST
oDELETE
) su Amazon S3 -
Il nuovo Regioni AWS lanciato dopo dicembre 2022
Per ulteriori informazioni sulla migrazione da OAI a OAC, consultare Migrazione dell'identità di accesso origine (OAI) al controllo degli accessi origine (OAC).
Quando crei un OAI o ne aggiungi uno a una distribuzione con la console CloudFront, puoi aggiornare automaticamente la policy di bucket Amazon S3 per autorizzare l'autorità di accedere al tuo bucket. In alternativa, è possibile scegliere di creare o aggiornare manualmente la policy di bucket. Qualunque sia il metodo utilizzato, è comunque necessario esaminare le autorizzazioni per assicurarsi che:
-
Il tuo OAI CloudFront può accedere ai file nel bucket per conto dei visualizzatori che li richiedono tramite CloudFront.
-
I visualizzatori non possono utilizzare gli URL di Amazon S3 per accedere ai file al di fuori di CloudFront.
Se si configura CloudFront per accettare e inoltrare tutti i metodi HTTP supportati da CloudFront, assicurarsi di concedere alla propria OAI CloudFront le autorizzazioni desiderate. Ad esempio, se si configura CloudFront per accettare e inoltrare richieste che utilizzano il metodo DELETE
, configurare le policy del bucket per gestire le richieste DELETE
in modo appropriato, cosicché i visualizzatori possano eliminare solo i file da eliminare.
Utilizzo delle politiche bucket di Amazon S3
È possibile concedere a un OAI CloudFront l'accesso ai file in un bucket Amazon S3 creando o aggiornando la policy bucket nei modi seguenti:
-
Utilizzo della scheda Permissions (Autorizzazioni) del bucket Amazon S3 nella console Amazon S3
. -
Utilizzo di PutBucketPolicy nell'API Amazon S3.
-
Utilizzo della console CloudFront
. Quando si aggiunge una OAI alle impostazioni di origine nella console CloudFront, è possibile scegliere Yes, update bucket policy (Sì, aggiorna policy bucket) per indicare a CloudFront di aggiornare la policy bucket per tuo conto.
Se si aggiorna manualmente la policy del bucket, assicurarsi di:
-
Specificare l'OAI corretto come
Principal
nella policy. -
Dare all'OAI le autorizzazioni necessarie per accedere agli oggetti per conto dei visualizzatori.
Per ulteriori informazioni, consultare le sezioni indicate di seguito.
Specificare un OAI come Principal
in una policy di bucket
Per specificare un OAI come Principal
in una policy del bucket Amazon S3, usa l'Amazon Resource Name (ARN) della OAI, che include il relativo ID. Ad esempio:
"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity
EH1HDMB1FH2TC
" }
Per utilizzare l'esempio precedente, sostituire EH1HDMB1FH2TC
con l'ID dell'OAI. Per trovare l'ID dell'OAI, consulta la pagina Identità di accesso origine
Concessione di autorizzazioni a una OAI
Per concedere alla OAI le autorizzazioni per accedere agli oggetti nel bucket Amazon S3, utilizzare le azioni nella policy relative a operazioni API Amazon S3 specifiche. Ad esempio, l'azione s3:GetObject
consente all'OAI di leggere gli oggetti nel bucket. Per ulteriori informazioni, consulta gli esempi riportati nella sezione seguente oppure consulta la sezione Operazioni Amazon S3 nella Guida per l'utente di Amazon Simple Storage Service.
Esempi di policy del bucket Amazon S3
Gli esempi seguenti mostrano le policy del bucket Amazon S3 che concedono l'accesso a una OAI CloudFront a un bucket S3. Per utilizzare questi esempi:
-
Sostituire
EH1HDMB1FH2TC
con l'ID dell'OAI. Per trovare l'ID dell'OAI, consulta la pagina Identità di accesso originenella console CloudFront oppure utilizzare ListCloudFrontorigInAccessIdentities nell'API CloudFront. -
Sostituisci
DOC-EXAMPLE-BUCKET
con il nome del bucket Amazon S3.
Esempio Policy bucket Amazon S3 che fornisce l'accesso in lettura dell'OAI
L'esempio seguente consente all'OAI di leggere gli oggetti nel bucket (s3:GetObject
) specificato.
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity
EH1HDMB1FH2TC
" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" } ] }
Esempio Policy bucket Amazon S3 che fornisce all'OAI l'accesso in lettura e scrittura
L'esempio seguente consente all'OAI di leggere e scrivere oggetti nel bucket specificato (s3:GetObject
e s3:PutObject
). Ciò consente ai visualizzatori di caricare file sul tuo bucket Amazon S3 tramite CloudFront.
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity
EH1HDMB1FH2TC
" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET
/*" } ] }
Utilizzo degli ACL oggetto Amazon S3 (non cconsigliato)
Consigliamo l’utilizzo delle policy di bucket Amazon S3 per consentire a un OAI l'accesso a un bucket S3. È possibile utilizzare gli ACL come descritto in questa sezione, ma non è consigliato.
Amazon S3 consiglia di impostare S3 Object Ownership a proprietario del bucket applicato, il che significa che gli ACL sono disabilitati per il bucket e gli oggetti in esso contenuti. Quando si applica questa impostazione per la proprietà degli oggetti, è necessario utilizzare le policy del bucket per consentire l'accesso all'OAI (vedere la sezione precedente).
Questa sezione seguente è solo per i casi d'uso legacy che richiedono ACL.
È possibile concedere a una OAI CloudFront l'accesso ai file in un bucket Amazon S3 creando o aggiornando l'ACL del file nei modi seguenti:
-
Utilizzo della scheda Permissions (Autorizzazioni) dell'oggetto Amazon S3 nella Console Amazon S3
. -
Utilizzo di PutObjectAcl nell'API Amazon S3.
Quando si concede l'accesso a una OAI utilizzando un ACL, è necessario specificare l'OAI utilizzando il relativo ID utente Amazon S3 canonico. Questo è il valore di Amazon S3 canonical user ID (ID utente canonico Amazon S3) nella pagina Identità di accesso origineS3CanonicalUserId
restituito al momento della creazione dell'OAI o chiamare ListCloudFrontorigInAccessIdentities nell'API CloudFront.
Le regioni Amazon S3 più recenti richiedono l'utilizzo di Signature Version 4 per le richieste autenticate. (Per le versioni di firma supportate in ogni regione Amazon S3, consulta Endpoint e quote Amazon Simple Storage Service nei Riferimenti generali AWS.) Se utilizzi un'identità di accesso origine e se il bucket si trova in una delle regioni che richiedono Signature Version 4, nota quanto segue:
-
Le richieste
DELETE
,GET
,HEAD
,OPTIONS
ePATCH
sono supportate senza qualifiche. -
Se vuoi inviare richieste
PUT
a CloudFront per caricare file sul tuo bucket Amazon S3, devi aggiungere un'intestazionex-amz-content-sha256
alla richiesta. Il valore dell'intestazione deve contenere un hash SHA-256 del corpo della richiesta. Per maggiori informazioni, consulta la documentazione relativa all'intestazionex-amz-content-sha256
nella pagina Intestazioni richieste comuni nella Documentazione di riferimento all'API di Amazon Simple Storage Service. -
Le richieste
POST
non sono supportate.