Limitazione dell'accesso a un'origine Amazon S3 - Amazon CloudFront

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Limitazione dell'accesso a un'origine Amazon S3

CloudFront offre due modi per inviare richieste autenticate a un'origine Amazon S3: Origin Access Control (OAC) e Origin Access Identity (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 e DELETE) su Amazon S3

L'identità di accesso origine (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 migrare dell'identità di accesso origine (OAI) al controllo degli accessi origine (OAC), vedere Migrazione dell'identità di accesso origine (OAI) al controllo degli accessi origine (OAC).

Note
  • Quando usi CloudFront OAC con le origini dei bucket Amazon S3, devi impostare Amazon S3 Object Ownership su Bucket owner enforced, l'impostazione predefinita per i nuovi bucket Amazon S3. Se hai bisogno di ACL, utilizza l'impostazione preferita del proprietario di Bucket per mantenere il controllo sugli oggetti caricati tramite. CloudFront

  • Se la tua origine è un bucket Amazon S3 configurato come endpoint di un sito Web, devi configurarlo CloudFront come origine personalizzata. Ciò significa che non è possibile utilizzare OAC (o OAI). OAC non supporta il reindirizzamento all'origine tramite Lambda @Edge.

Argomenti

Creazione di un nuovo controllo degli accessi origine

Completa i passaggi descritti nei seguenti argomenti per configurare un nuovo controllo di accesso all'origine in. CloudFront

Prerequisiti

Prima di creare e configurare Origin Access Control (OAC), devi disporre di una CloudFront distribuzione con un'origine di 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 CloudFront distribuzione con un'origine del bucket S3, consulta. Iniziare con una distribuzione semplice CloudFront

Nota

Quando usi OAC per proteggere l'origine del tuo bucket S3, la comunicazione tra e Amazon CloudFront S3 avviene sempre tramite HTTPS, indipendentemente dalle tue impostazioni specifiche.

Fornitura dell'autorizzazione di controllo accesso origine per accedere al bucket S3

Prima di creare un controllo di accesso all'origine (OAC) o configurarlo in una CloudFront distribuzione, assicurati che l'OAC disponga dell'autorizzazione per accedere all'origine del bucket S3. Esegui questa operazione dopo aver creato una CloudFront distribuzione, ma prima di aggiungere l'OAC all'origine S3 nella configurazione di distribuzione.

Per concedere all'OAC l'autorizzazione ad accedere al bucket S3, utilizza una policy del bucket S3 per consentire al CloudFront service principal () di accedere al bucket. cloudfront.amazonaws.com Utilizza un Condition elemento della policy per consentire l'accesso CloudFront al bucket solo quando la richiesta è per conto della distribuzione che contiene l' CloudFront 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 relative ai bucket S3 che consentono a un CloudFront OAC di accedere a un'origine S3.

Esempio Policy dei 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:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Account AWS ID>:distribution/<CloudFront distribution ID>" } } } }
Esempio Policy S3 bucket 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:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Account AWS ID>:distribution/<CloudFront distribution ID>" } } } }

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.

Esempio Dichiarazione politica chiave KMS che consente a un CloudFront OAC di accedere a una chiave KMS per SSE-KMS
{ "Sid": "AllowCloudFrontServicePrincipalSSE-KMS", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Account AWS ID>:root", "Service": "cloudfront.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Account AWS ID>:distribution/<CloudFront distribution ID>" } } }

Creazione del controllo accesso origine

Per creare un controllo di accesso all'origine (OAC), puoi utilizzare l',, the o l'APIAWS Management Console. AWS CloudFormation AWS CLI CloudFront

Console
Per creare un controllo di accesso all'origine
  1. Accedi AWS Management Console e apri la CloudFront console all'indirizzohttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Nel pannello di navigazione a sinistra, scegli Accesso origine.

  3. Scegli Crea un'impostazione di controllo.

  4. Nel modulo Crea un'impostazione di controllo, effettua le seguenti operazioni:

    1. Nel riquadro Dettagli, inserisci un Nome e (facoltativamente) una Descrizione per il controllo degli accessi all'origine.

    2. Nel riquadro Impostazioni, si consiglia di mantenere l'impostazione predefinita (Richieste di firma (consigliato)). Per ulteriori informazioni, consulta Impostazioni avanzate per il controllo dell'accesso all'origine.

  5. Scegli S3 dal menu a discesa tipo di origine.

  6. Scegli Crea.

    Dopo aver creato l'OAC, prendere nota del Nome. In questa procedura, eseguire le seguenti operazioni:

Per aggiungere un controllo di accesso di origine a un'origine S3 in una distribuzione
  1. Apri la CloudFront console all'indirizzohttps://console.aws.amazon.com/cloudfront/v4/home.

  2. Scegli una distribuzione con un'origine S3 a cui desideri aggiungere l'OAC, quindi scegli lascheda Origini.

  3. Selezionare l'origine S3 alla quale si desidera aggiungere l'OAC, quindi scegliere Modifica.

  4. Per Origin Access, scegli le impostazioni di controllo degli accessi di Origin (consigliato).

  5. Nel menu a discesa Controllo degli accessi origine, scegliere l'OAC che desideri utilizzare.

  6. Seleziona Salvataggio delle modifiche.

La distribuzione inizia a essere distribuita in tutte le CloudFront edge location. Quando una edge location riceve la nuova configurazione, firma tutte le richieste che invia all'origine del bucket S3.

CloudFormation

Per creare un Origin Access Control (OAC) con AWS CloudFormation, utilizzare il tipo di risorsa AWS::CloudFront::OriginAccessControl. L'esempio seguente mostra la sintassi del modello AWS CloudFormation, in formato YAML, per la creazione di un controllo accesso origine.

Type: AWS::CloudFront::OriginAccessControl Properties: OriginAccessControlConfig: Description: An optional description for the origin access control Name: ExampleOAC OriginAccessControlOriginType: s3 SigningBehavior: always SigningProtocol: sigv4

Per ulteriori informazioni, consulta AWS::CloudFront::OriginAccessControl nella Guida per l'AWS CloudFormationutente.

CLI

Per creare un controllo di accesso all'origine con AWS Command Line Interface (AWS CLI), utilizzare il comando aws cloudfront create-origin-access-control. È possibile utilizzare un file di input per fornire i parametri di input del comando, anziché specificare ogni singolo parametro come input della riga di comando.

Per creare un controllo di accesso all'origine (CLI con file di input)
  1. Per creare un file denominato origin-access-control.yaml, utilizza il comando seguente. Tale file contiene tutti i parametri di input per il comando create-origin-access-control.

    aws cloudfront create-origin-access-control --generate-cli-skeleton yaml-input > origin-access-control.yaml
  2. Aprire il file origin-access-control.yaml appena creato. Modifica il file per aggiungere un nome per l'OAC, una descrizione (opzionale) e modificare SigningBehavior in always. Quindi salvare il file.

    Per ulteriori informazioni sulle impostazioni OAC, consultare Impostazioni avanzate per il controllo dell'accesso all'origine.

  3. Utilizzare il comando seguente per creare il controllo di accesso origine utilizzando i parametri di input dal file origin-access-control.yaml.

    aws cloudfront create-origin-access-control --cli-input-yaml file://origin-access-control.yaml

    Prendere nota del valore Id nell'output del comando. È necessario per aggiungere l'OAC a un'origine del bucket S3 in una distribuzione. CloudFront

Per allegare un OAC a un'origine bucket S3 in una distribuzione esistente (CLI con file di input)
  1. Usa il comando seguente per salvare la configurazione di distribuzione per la CloudFront distribuzione a cui desideri aggiungere l'OAC. La distribuzione deve avere un'origine del bucket S3.

    aws cloudfront get-distribution-config --id <CloudFront distribution ID> --output yaml > dist-config.yaml
  2. Aprire il file denominato dist-config.yaml appena creato. Modifica il file apportando le seguenti modifiche:

    • Nell'oggetto Origins, aggiungi l'ID dell'OAC al campo a cui è stato assegnato il nome OriginAccessControlId.

    • Rimuovi il valore dal campo denominato OriginAccessIdentity, se esiste.

    • Rinominare il campo ETag in IfMatch, ma non modificare il valore del campo.

    Salvare il file al termine.

  3. Utilizzare il comando seguente per aggiornare la distribuzione e utilizzare il controllo di accesso origine.

    aws cloudfront update-distribution --id <CloudFront distribution ID> --cli-input-yaml file://dist-config.yaml

La distribuzione inizia a essere distribuita in tutte le CloudFront edge location. Quando una edge location riceve la nuova configurazione, firma tutte le richieste che invia all'origine del bucket S3.

API

Per creare un controllo di accesso all'origine con l' CloudFront API, usa CreateOriginAccessControl. Per ulteriori informazioni sui campi specificati in questa chiamata API, consulta e la documentazione di riferimento delle API per AWS SDK o altro client API.

Dopo aver creato un controllo di accesso origine, è possibile collegarlo all'origine del bucket S3 in una distribuzione, utilizzando una delle seguenti chiamate API:

Per entrambe queste chiamate API, fornire l'ID di controllo dell'accesso origine nel campo OriginAccessControlId, all'interno di un'origine. Per ulteriori informazioni sugli altri campi specificati in queste chiamate API, consulta Valori da specificare durante la creazione o l'aggiornamento di una distribuzione e la documentazione di riferimento delle API per l'SDK AWS o un altro client API.

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.

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:::<S3 bucket name>/*", "Condition": { "StringEquals": { "AWS:SourceArn": "arn:aws:cloudfront::<Account AWS ID>:distribution/<CloudFront distribution ID>" } } }, { "Sid": "AllowLegacyOAIReadOnly", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }

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 dell'accesso all' CloudFront origine 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, firma CloudFront 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 nevernell'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 che non è accessibile pubblicamente, CloudFront non puoi accedere all'origine. L'origine del bucket S3 restituisce gli errori CloudFront e li CloudFront trasmette agli spettatori.

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 firmare le richieste CloudFront di origine solo quando la richiesta del visualizzatore corrispondente non include un'intestazione. Authorization Con questa impostazione, CloudFront trasmette l'Authorizationintestazione della richiesta del visualizzatore quando ne è presente una, ma firma la richiesta di origine (aggiungendo la propria Authorization intestazione) quando la richiesta del visualizzatore non include un'intestazione. Authorization

avvertimento

Per passare lungo l'intestazione Authorization della richiesta del visualizzatore, devi aggiungere l'intestazione Authorization 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)

CloudFront origin access identity (OAI) offre funzionalità simili a quelle di Origin Access Control (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 AWS KMS (SSE-KMS) Amazon S3

  • Richieste dinamiche (PUT, POST o DELETE) 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 CloudFront console, puoi aggiornare automaticamente la policy del bucket Amazon S3 per concedere all'OAI l'autorizzazione ad 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 CloudFront OAI può accedere ai file nel bucket per conto degli utenti che li richiedono. CloudFront

  • Gli utenti non possono utilizzare gli URL di Amazon S3 per accedere ai tuoi file dall'esterno. CloudFront

Importante

Se configuri CloudFront per accettare e inoltrare tutti i metodi HTTP CloudFront supportati, assicurati di concedere all' CloudFront OAI le autorizzazioni desiderate. Ad esempio, se CloudFront configuri l'accettazione e l'inoltro delle richieste che utilizzano questo DELETE metodo, configura la tua bucket policy per gestire DELETE le richieste in modo appropriato in modo che gli utenti possano eliminare solo i file che desideri.

Utilizzo delle politiche bucket di Amazon S3

Puoi consentire a un CloudFront OAI di accedere ai file in un bucket Amazon S3 creando o aggiornando la policy del bucket nei seguenti modi:

  • Utilizzo della scheda Permissions (Autorizzazioni) del bucket Amazon S3 nella console Amazon S3.

  • Utilizzo PutBucketPolicynell'API Amazon S3.

  • Utilizzo della console CloudFront. Quando aggiungi un OAI alle impostazioni di origine nella CloudFront console, puoi scegliere Sì, aggiorna la policy del bucket per dire di aggiornare la policy del bucket CloudFront 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. Per esempio:

"Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity <origin access identity ID>" }

Trova l'ID OAI nella CloudFront console in Security, Origin access, Identities (legacy). In alternativa, utilizzalo ListCloudFrontOriginAccessIdentitiesnell'API. CloudFront

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 dei bucket Amazon S3 che consentono a CloudFront OAI di accedere a un bucket S3.

Trova l'ID OAI nella CloudFront console in Security, Origin access, Identities (legacy). In alternativa, utilizzalo ListCloudFrontOriginAccessIdentitiesnell'API. CloudFront

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 <origin access identity ID>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }
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 agli utenti di caricare file nel 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 <origin access identity ID>" }, "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::<S3 bucket name>/*" } ] }

Utilizzo degli ACL oggetto Amazon S3 (non cconsigliato)

Importante

Consigliamo l'utilizzo delle policy di bucket Amazon S3 per consentire a un OAI l'accesso a un bucket S3. È possibile utilizzare le liste di controllo degli accessi (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.

Puoi consentire a un CloudFront OAI di accedere ai file in un bucket Amazon S3 creando o aggiornando l'ACL del file nei seguenti modi:

Quando si concede l'accesso a una OAI utilizzando un ACL, è necessario specificare l'OAI utilizzando il relativo ID utente Amazon S3 canonico. Nella CloudFront console, puoi trovare questo ID in Security, Origin access, Identities (legacy). Se utilizzi l' CloudFront API, utilizza il valore dell'S3CanonicalUserIdelemento che è stato restituito quando hai creato l'OAI o richiama ListCloudFrontOriginAccessIdentitiesl' CloudFrontAPI.

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, consultare Endpoint e quote Amazon Simple Storage Service nei Riferimenti generali di 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 e PATCH sono supportate senza qualifiche.

  • Le richieste POST non sono supportate.