Usando AWS re:Post, accetti AWS re:Post Termini di utilizzo

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

7 minuti di lettura
0

Sto usando Amazon CloudFront e un URL firmato o cookie firmati per proteggere i contenuti privati. Ricevo un errore 403 Accesso negato.

Risoluzione

Se Amazon CloudFront riscontra un problema con un URL firmato o cookie firmati, potresti ricevere un errore 403 Accesso negato.

Un URL firmato o un cookie firmato non include il firmatario corretto

Quando attivi l'opzione Restrict Viewer Access in un comportamento, devi determinare un firmatario. Un firmatario è un gruppo di chiavi attendibile 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:

L'errore include il messaggio "Missing Key-Pair-Id query parameter or cookie value."

Questo messaggio indica un parametro di query Key-Pair-Id mancante o vuoto con un URL firmato. Oppure indica un parametro della stringa di query CloudFront-Key-Pair-ID mancante in un cookie firmato.

L'errore include il messaggio "Unknown Key."

Questo messaggio indica che CloudFront non è in grado di verificare le informazioni sui firmatari tramite Key-pair-ID per gli URL firmati o CloudFront-Key-Pair-ID per i cookie firmati.

Per risolvere questo problema, verifica che venga utilizzato il valore Key-Pair-ID corretto per un URL firmato o CloudFront-Key-Pair-ID per i cookie firmati:

Se utilizzi un URL firmato, trova e annota il valore di Key-Pair-ID.
-or-
Se utilizzi cookie firmati, trova e annota il valore di CloudFront-Key-Pair-ID.

Quindi, trova il Key ID e conferma che corrisponda al Key-Pair-ID o al CloudFront-Key-Pair-ID:

  1. Apri la console CloudFront. Nel menu di navigazione, scegli Distribuzioni.
  2. Seleziona la tua distribuzione. Scegli la scheda Comportamenti.
  3. Seleziona il nome del comportamento, quindi scegli Modifica.
  4. Trova l'impostazione Limita l'accesso degli spettatori.
    Nota: Se è impostato su , le richieste di file che corrispondono al modello di percorso del comportamento della cache devono utilizzare l'URL firmato o il cookie firmato.
  5. Seleziona il campo Tipo di autorizzazione attendibile.
  6. Se l'impostazione del valore del tipo di autorizzazione attendibile è Gruppi di chiavi attendibili, annota il nome del gruppo di chiavi attendibili. Trova gli ID delle chiavi pubbliche per il gruppo di chiavi attendibili:
    Apri la console CloudFront.
    Scegli Gruppi chiave. Scegli il nome del gruppo di chiavi attendibili che hai annotato.
    Verifica che il valore Key-Pair-Id o CloudFront-Key-Pair-Id corrisponda a uno degli ID di chiave pubblici nel gruppo di chiavi attendibili.
  7. Se il valore del tipo di autorizzazione attendibile è firmatario attendibile, CloudFront utilizza le credenziali generate da AWS. In questo caso, il valore Key-Pair-Id o CloudFront-Key-Pair-Id deve corrispondere all'ID chiave d'accesso delle credenziali CloudFront.
    Nota: Per trovare l'ID chiave d'accesso delle credenziali di CloudFront, consulta Creazione di coppie di chiavi per i firmatari.

Un URL firmato o un cookie firmato non viene inviato in un momento valido

Quando si crea un URL firmato o un cookie firmato, una dichiarazione politica in formato JSON specifica le restrizioni sull'URL firmato. Questa dichiarazione determina per quanto tempo l'URL è valido. CloudFront restituisce un errore 403 Accesso negato nei seguenti scenari:

**Nota:**I valori Scade, CloudFront-Expires, DateLessThan e DateGreaterThan sono in formato orario Unix in secondi e Coordinated Universal Time (UTC). Ad esempio, il 1° gennaio 2013 alle 10:00 UTC viene convertito in 1357034400 nel formato orario Unix. Se usi l'ora dell'epoca, usa un numero intero a 32 bit per una data non 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 indicano che si utilizza una policy personalizzata. L'istruzione della policy è in formato JSON ed è codificata in base64. Per scoprire il valore DateLessThan o DateGreaterThan, usa un comando di decodifica a base64.

Esempio di policy personalizzata con codifica base64:

eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__

Per decodificare una policy personalizzata in formato con codifica base64 in formato JSON, esegui il seguente comando Linux. Sostituisci il valore della policy con il valore della tua policy personalizzata:

echo "eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cDovL2QxMTExMTFhYmNkZWY4LmNsb3VkZnJvbnQubmV0L2dhbWVfZG93bmxvYWQuemlwIiwiQ29uZGl0aW9uIjp7IklwQWRkcmVzcyI6eyJBV1M6U291cmNlSXAiOiIxOTIuMC4yLjAvMjQifSwiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MjY1MDAwMDB9fX1dfQ__" | tr -- '-_~' '+=/' | base64 -d

Riceverai un output simile al seguente esempio:

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

Un URL firmato o un cookie firmato contiene più di un'istruzione nella policy

Se più di un'istruzione è inclusa in una policy predefinita o in una policy personalizzata, CloudFront restituisce un errore 403 Accesso negato.

Per risolvere questo problema, esegui il comando Linux nella sezione precedente per controllare la dichiarazione della policy personalizzata. Verifica i dettagli del codice, quindi conferma che nella policy predefinita o nella policy personalizzata sia inclusa una sola dichiarazione.

Un URL firmato o un cookie firmato ha un URL di base errato nella policy

CloudFront restituisce un errore 403 Accesso negato quando l'URL di base nella policy non è corretto:

  • È abbreviato (www.example.com) nella chiave Risorsa. Usa un URL completo (http://www.example.com).
  • Non esiste una codifica dei caratteri UTF-8.
  • Non include tutti i nomi di punteggiatura e parametri.
  • Il protocollo HTTP o HTTPS non corrisponde al protocollo utilizzato in una richiesta che invia un URL firmato o cookie firmati.
  • Il nome di dominio non corrisponde all'intestazione host utilizzata dallo user agent per inviare un URL firmato o cookie firmati.
  • La stringa di query include caratteri non validi.

Un URL firmato o un cookie firmato presenta una firma errata nella policy

CloudFront restituisce un errore 403 Accesso negato nei seguenti scenari:

  • La dichiarazione politica include spazi bianchi, inclusi tabulazioni e caratteri di nuova riga.
  • La policy predefinita o la policy personalizzata non viene formattata come stringa prima di essere sottoposta a hash. Ciò accade quando crei un URL firmato o un cookie firmato senza un SDK AWS.
  • La policy non viene sottoposta a hash prima di generare la firma. Ciò accade quando crei l'URL firmato o il cookie firmato senza un SDK AWS.

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

Un URL firmato o un cookie firmato è stato inviato da un indirizzo IP o intervallo IP non supportato

CloudFront restituisce un errore 403 Accesso negato quando un URL firmato o un cookie firmato viene inviato da un indirizzo IPv6. Oppure, viene inviato da un indirizzo IPv4 o da un intervallo IPv4 non consentito nella politica personalizzata.

La chiave IpAddress è disponibile solo nella policy personalizzata contenuta 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 attivare IPv6 per la distribuzione.

Un cookie firmato non include gli attributi Dominio e Percorso nelle intestazioni di risposta Set-cookie

CloudFront restituisce un errore 403 Accesso negato quando i cookie ritornano da CloudFront ma non sono inclusi nelle richieste successive allo stesso dominio. In questo caso, controlla gli attributi dei cookie Dominio e Percorso nell'intestazione della risposta Set-Cookie.

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

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

L'attributo Percorso è il percorso del file richiesto. Se non specifichi un attributo Percorso, il valore predefinito è il percorso nell'URL.

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa