Come posso risolvere i problemi relativi a URL o cookie firmati in CloudFront?

Ultimo aggiornamento: 02/06/2022

Sto proteggendo i contenuti privati tramite Amazon CloudFront e un URL firmato o cookie firmati. Ricevo un errore 403 Accesso negato. In che modo posso risolvere l'errore?

Breve descrizione

Amazon CloudFront potrebbe restituire un errore 403 Accesso negato se si verifica un problema con un URL firmato o con i cookie firmati. Consulta le seguenti sezioni di risoluzione per le cause di questo errore e la procedura di risoluzione dei problemi.

Risoluzione

Quando attivi l'opzione Limita l'accesso ai visualizzatori in un comportamento, è necessario determinare un firmatario. Un firmatario è un gruppo di chiavi attendibili creato in CloudFront o un account AWS che contiene una coppia di chiavi CloudFront. I seguenti messaggi di errore 403 indicano che le informazioni sul firmatario sono mancanti o errate:

Errore 403 Accesso negato con il messaggio "Valore del cookie o parametro di query Key-Pair-Id mancante".

Questo messaggio indica che il parametro della stringa di query Key-pair-ID è mancante o vuoto in un URL firmato.

Errore 403 Accesso negato con il messaggio "Valore del cookie o parametro di query Key-Pair-Id mancante".

Questo messaggio indica che il parametro della stringa di query CloudFront-Key-Pair-ID è mancante o vuoto nel cookie firmato.

Errore 403 Accesso negato con messaggio "Chiave sconosciuta".

Questo messaggio indica che CloudFront non è in grado di verificare le informazioni del firmatario tramite Key-Pair-ID (per gli URL firmati) o CloudFront-Key-Pair-ID (per i cookie firmati). Per risolvere il problema, verifica che sia utilizzato il valore corretto di Key-Pair-ID per un URL firmato o CloudFront-Key-Pair-ID per i cookie firmati. Per prima cosa:

Se utilizzi un URL firmato, trova e prendi nota del valore di Key-Pair-ID.
-oppure-
Se utilizzi cookie firmati, trova e prendi nota del valore di CloudFront-Key-Pair-ID.

Quindi, trova l'ID chiave e conferma che corrisponda al Key-Pair-ID o al CloudFront-Key-Pair-ID:

  1. Apri la console CloudFront. Nel pannello di navigazione a sinistra, scegli Distribuzioni.
  2. Scegli la tua distribuzione. Seleziona la scheda Comportamenti.
  3. Seleziona il nome del comportamento, quindi scegli Modifica.
  4. Trova l'impostazione Limita accesso visualizzatore.
    Nota: se l'opzione è impostata su , le richieste di file che corrispondono al modello di percorso di questo comportamento di cache devono utilizzare l'URL firmato o il cookie firmato.
  5. Dopo aver verificato che il campo Limita accesso alla visualizzazione è impostato su , seleziona il campo Tipo di autorizzazione attendibile.
  6. Se il valore dell'impostazione Tipo di autorizzazione attendibile è Gruppi di chiavi attendibili, prendi nota del nome del gruppo di chiavi attendibili.
    Quindi, trova gli ID delle chiavi pubbliche per un gruppo di chiavi di attendibilità e poi torna alla console di CloudFront. Scegli Gruppi di chiavi. Nell'elenco dei gruppi di chiavi, scegli il nome del gruppo di chiavi attendibili di cui hai preso nota.
    Verifica che il valore di Key-Pair-Id o CloudFront-Key-Pair-Id annotato nel passaggio 1 corrisponda a uno degli ID chiave pubblica nel gruppo di chiavi attendibili.
  7. Se il valore del tipo Autorizzazione attendibile è Firmatario attendibile, vengono utilizzate le credenziali CloudFront generate da AWS. In questo caso, il valore di Key-Pair-Id o CloudFront-Key-Pair-Id annotato nel passaggio 1 deve corrispondere all'ID chiave di accesso delle credenziali CloudFront.
    Per trovare l'ID chiave di accesso delle credenziali CloudFront, consulta Creazione di coppie di chiavi per i firmatari.

Quando si crea un URL firmato o un cookie firmato, un'istruzione della policy in formato JSON specifica le restrizioni sull'URL firmato. Questa dichiarazione determina per quanto tempo l'URL è valido. CloudFront restituirà l'errore 403 Accesso negato se:

  • Un URL firmato viene inviato in un momento successivo al valore di Expires in un URL firmato utilizzando la policy di accesso predefinita.
  • Un cookie firmato viene inviato in un momento successivo al valore di CloudFront-Expires in un cookie firmato utilizzando la policy di accesso predefinita.
  • Un URL firmato o un cookie firmato viene inviato in un momento successivo al valore di DateLessThan o precedente al valore di DateGreaterThan nella policy personalizzata.

Nota: i valori in Expires, CloudFront-Expires, DateLessThan e DateGreaterThan sono in formato orario Unix (in secondi) e Coordinated Universal Time (UTC). Ad esempio, il 1 gennaio 2013 10:00 UTC viene convertito in 1357034400 in formato orario Unix. Se si utilizza l'ora epoch, utilizza un numero intero a 32 bit per una data che non sia successiva a 2147483647 (19 gennaio 2038 alle 03:14:07 UTC).

Il parametro Policy in un URL firmato o l'attributo CloudFront - Policy in un cookie firmato indica che viene utilizzata una policy personalizzata. L'istruzione della policy è in formato JSON ed è codificata in base64. Per scoprire il valore di DateLessThan o DateGreaterThan, utilizza un comando di decodifica 64base.

Di seguito è riportato un esempio di policy personalizzata di codifica base64:

eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__

Utilizza il seguente comando Linux per decodificare la policy personalizzata in formato codificato base64 in formato JSON. In questo esempio viene utilizzato il valore dell'esempio precedente. Sostituisci con la tua policy personalizzata.

$ echo -n eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__ | base64 -di

L'output del comando è simile al seguente:

{ "Statement": [{ "Resource": "http://d111111abcdef8.cloudfront.net/game_download.zip", "Condition": { "IpAddress": { "AWS:SourceIp": "192.0.2.0/24" }, "DateLessThan": { "AWS:EpochTime": 1426500000 } } }] }

CloudFront restituirà un errore 403 Accesso negato se più di un'istruzione è inclusa nella policy di accesso predefinita o nella policy personalizzata.

Per risolvere i problemi, utilizza il comando Linux nella sezione precedente per verificare l'istruzione della policy personalizzata. Verifica i dettagli del tuo codice e conferma che nella policy di accesso predefinita o nella politica personalizzata è inclusa solo una istruzione.

CloudFront restituirà un errore 403 Accesso negato se:

  • L'URL di base nella chiave Resource nell'istruzione della policy ha un URL abbreviato (www.esempio.com). Usa un URL completo (http://www.esempio.com).
  • L'URL di base non ha la codifica dei caratteri UTF-8.
  • L'URL di base non include tutti i nomi di parametri e la punteggiatura.
  • Il protocollo HTTP o HTTPS nell'URL di base non corrisponde al protocollo utilizzato in una richiesta che invia un URL firmato o cookie firmati.
  • Il nome di dominio nell'URL di base non corrisponde al valore dell'intestazione Host utilizzata dall'agente utente che invia un URL firmato o cookie firmati.
  • La stringa di query URL di base include caratteri non validi.

CloudFront restituirà un errore 403 Accesso negato se:

  • L'istruzione della policy include spazi (inclusi tabulazioni e caratteri di nuova riga).
  • La policy di accesso predefinita o la policy personalizzata non è formattata come stringa prima di essere sottoposta a hash. Questo può accadere se crei un URL firmato o un cookie firmato senza utilizzare un SDK AWS.
  • La policy non è stata sottoposta a hashing prima di generare la firma. Questo può accadere se stai creando un URL firmato o un cookie firmato senza utilizzare un SDK AWS.

Per le best practice relative alla firma quando si utilizzano un URL firmato o cookie firmati, consulta Esempi di codice per la creazione di una firma per un URL firmato.

CloudFront restituirà un errore 403 Accesso negato se:

  • Un URL firmato o cookie firmati sono stati inviati da un indirizzo IP IPv6.
  • Un URL firmato o cookie firmati non sono stati inviati da un indirizzo IPv4 o da un intervallo IP IPv4 specificato nella policy personalizzata.

La chiave IpAddress è disponibile solo nella policy personalizzata in un URL firmato o in un cookie firmato. Gli indirizzi IP in formato IPv6 non sono supportati. Se utilizzi una policy personalizzata che include IpAddress, non abilitare IPv6 per la distribuzione.

CloudFront restituisce un errore 403 Accesso negato se i cookie vengono restituiti da CloudFront ma non vengono inclusi nelle richieste successive allo stesso dominio. In questo caso, controlla gli attributi dei cookie Domain e Path nell'intestazione di risposta Set-Cookie.

Il valore Domain è il nome di dominio per il file richiesto. Se non specifichi un attributo Domain, il valore di default sarà il nome del dominio nell'URL. Questo vale solo per il nome di dominio specificato, non per i sottodomini. Se si specifica un attributo Domain, questo si applica anche ai sottodomini.

Se si specifica un attributo Domain, il nome di dominio nell'URL e il valore dell'attributo Domain devono corrispondere. Puoi specificare il nome di dominio che CloudFront assegna alla tua distribuzione (ad esempio, d111111abcdef8.cloudfront.net), ma non puoi specificare *.cloudfront.net per il nome di dominio. Per utilizzare un nome di dominio alternativo (ad esempio, esempio.com) negli URL, aggiungi un nome di dominio alternativo alla tua distribuzione.

Il valore Path è il percorso per il file richiesto. Se non si specifica un attributo Path, il valore di default sarà il percorso nell'URL.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?