Download e caricamento di oggetti con URL predefiniti
Per concedere un accesso limitato nel tempo agli oggetti in Amazon S3 senza aggiornare la policy del bucket, puoi utilizzare un URL prefirmato. Un URL prefirmato può essere inserito in un browser o utilizzato da un programma per scaricare un oggetto. Le credenziali utilizzate dall’URL prefirmato sono quelle del principale AWS Identity and Access Management (IAM) che ha generato l’URL.
Puoi anche utilizzare gli URL prefirmati per consentire a qualcuno di caricare un oggetto specifico nel tuo bucket Amazon S3. Ciò consente un caricamento senza richiedere a un'altra parte di disporre di credenziali o autorizzazioni AWS di sicurezza. Se nel bucket esiste già un oggetto con la stessa chiave specificata nell'URL prefirmato, Amazon S3 sostituisce l'oggetto esistente con l'oggetto caricato.
È possibile utilizzare l'URL prefirmato più volte, fino alla data e all'ora di scadenza.
Quando crei un URL prefirmato, devi fornire le credenziali di sicurezza e specificare quanto segue:
-
Un bucket Amazon S3
-
Una chiave oggetto (se il download di questo oggetto sarà nel tuo bucket Amazon S3, se lo stai caricando questo è il nome del file da caricare)
-
Un metodo HTTP (
GETper scaricare oggetti,PUTper caricare,HEADper leggere i metadati degli oggetti e così via) -
Un intervallo di tempo di scadenza
Quando si utilizzano gli URL prefirmati per caricare oggetti, è possibile verificare l’integrità degli oggetti utilizzando i checksum. Mentre gli URL prefirmati creati con AWS Signature Version 2 supportano solo i checksum MD5, gli URL prefirmati creati con AWS Signature Version 4 supportano algoritmi di checksum aggiuntivi tra cui CRC-64/NVME, CRC32, CRC32C, SHA-1 e SHA-256. Per utilizzare questi algoritmi di checksum aggiuntivi, assicurati di utilizzare AWS Signature Version 4 e includi l’intestazione di checksum appropriata nella richiesta di caricamento. Per ulteriori informazioni sull'integrità degli oggetti, consulta Verifica dell'integrità degli oggetti in Amazon S3.
Argomenti
Chi può creare un URL prefirmato
Qualsiasi utente che disponga di credenziali di sicurezza valide può creare un URL prefirmato. Tuttavia, per accedere a un oggetto, è necessario che l'URL prefirmato sia creato da un utente che dispone dell'autorizzazione a eseguire l'operazione su cui si basa l'URL prefirmato.
Le credenziali che puoi utilizzare per creare un URL prefirmato sono:
-
Utente IAM: valido fino a 7 giorni quando utilizzi AWS Signature Version 4.
Per creare un URL prefirmato valido fino a 7 giorni, devi prima delegare le credenziali dell'utente IAM (la chiave di accesso e la chiave segreta) al metodo in uso per creare l’URL prefirmato.
-
Credenziali di sicurezza temporanee: non possono essere valide più a lungo delle credenziali stesse. Queste credenziali includono:
-
Credenziali del ruolo IAM: l’URL prefirmato scade alla scadenza della sessione del ruolo, anche se è specificato un tempo più lungo.
-
Credenziali del ruolo IAM utilizzate dalle istanze Amazon EC2: valide per la durata delle credenziali del ruolo (in genere 6 ore).
-
Credenziali AWS Security Token Service: valide solo per la durata delle credenziali temporanee.
-
Nota
Se hai creato un URL prefirmato utilizzando credenziali temporanee, l'URL scade insieme alle credenziali. In generale, un URL prefirmato scade quando la credenziale utilizzata per crearlo viene revocata, cancellata o disattivata. Ciò avviene anche se l'URL è stato creato con un orario di scadenza successivo. Per la durata delle credenziali di sicurezza temporanee, consulta Comparing AWS STS API operations nella IAM User Guide.
Tempo di scadenza per gli URL prefirmati
Un URL prefirmato rimane valido per il periodo di tempo specificato al momento della generazione dell'URL. Se crei un URL prefirmato con la console di Amazon S3, il tempo di scadenza può essere impostato tra 1 minuto e 12 ore. Se si utilizzano gli SDK AWS CLI o AWS, il tempo di scadenza può essere impostato fino a 7 giorni.
Se si è creato un URL prefirmato utilizzando un token temporaneo, l'URL scade quando scade il token. In generale, un URL prefirmato scade quando la credenziale utilizzata per crearlo viene revocata, cancellata o disattivata. Ciò avviene anche se l'URL è stato creato con un orario di scadenza successivo. Per ulteriori informazioni su come le credenziali utilizzate influiscono sulla data di scadenza, consultaChi può creare un URL prefirmato.
Simple Storage Service (Amazon S3) verifica la data e l'ora di scadenza in un URL firmato al momento della richiesta HTTP. Ad esempio, se un client inizia a scaricare un file di grandi dimensioni immediatamente prima dell'ora di scadenza, il download viene completato anche se l'ora di scadenza viene superata. Se la connessione TCP viene interrotta e il client prova a riavviare il download dopo la scadenza, il download non riesce.
Limitazione delle funzionalità degli URL prefirmati
Le funzionalità dell'URL prefirmato sono limitate dalle autorizzazioni dell'utente che lo ha creato. In sostanza, gli URL prefirmati sono token di connessione che consentono l'accesso agli utenti che li possiedono. Pertanto, consigliamo di proteggerli in modo appropriato. Di seguito sono elencati alcuni metodi che puoi usare per limitare l'uso degli URL prefirmati.
AWS Signature Version 4 (SigV4)
Per applicare un comportamento specifico quando le richieste dell'URL prefirmato vengono autenticate tramite AWS Signature Version 4 (SigV4), puoi utilizzare le chiavi di condizione nelle policy del bucket e nelle policy dei punti di accesso. Ad esempio, la policy di bucket seguente utilizza la condizione s3:signatureAge per negare qualsiasi richiesta di URL prefirmato da Amazon S3 sugli oggetti nel bucket amzn-s3-demo-bucket se la firma ha più di 10 minuti. Per utilizzare questo esempio, sostituisci con le informazioni appropriate.user input
placeholders
Per ulteriori informazioni sulle chiavi della policy relative a AWS Signature Version 4, consulta AWS Autenticazione Signature Version 4 nella Documentazione di riferimento delle API di Amazon Simple Storage Service.
Limitazioni per percorso di rete
Se desideri limitare l'utilizzo di URL prefirmati e tutti gli accessi Amazon S3 a percorsi di rete specifici, puoi scrivere le policy AWS Identity and Access Management (IAM). Puoi impostare queste policy sul principale del servizio IAM che effettua la chiamata, sul bucket Amazon S3 o su entrambi.
Una restrizione del percorso di rete sul principale IAM richiede all'utente di tali credenziali di effettuare le richieste dalla rete specificata. Una restrizione sul bucket o sul punto di accesso richiede che tutte le richieste a quella risorsa provengano dalla rete specificata. Queste restrizioni si applicano anche al di fuori dello scenario di URL prefirmato.
La chiave della condizione globale IAM utilizzata dipende dal tipo di endpoint. Se utilizzi l'endpoint pubblico per Amazon S3, utilizza aws:SourceIp. Se utilizzi un endpoint di cloud privato virtuale (VPC) per Amazon S3, usa aws:SourceVpc o aws:SourceVpce.
La seguente istruzione di policy IAM richiede che il principale del servizio acceda ad AWS solo dall'intervallo di rete specificato. Con questa istruzione della policy, tutti gli accessi devono avere origine da tale intervallo. Ciò include il caso di un utente che utilizza un URL prefirmato per Amazon S3. Per utilizzare questo esempio, sostituisci con le informazioni appropriate.user input
placeholders
{ "Sid": "NetworkRestrictionForIAMPrincipal", "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "NotIpAddressIfExists": {"aws:SourceIp": "IP-address-range"}, "BoolIfExists": {"aws:ViaAWSService": "false"} } }
Domande frequenti sugli URL prefirmati
D: Perché gli URL prefirmati scadono prima dell’ora di scadenza configurata?
Gli URL prefirmati rimangono validi solo finché le relative credenziali sottostanti sono valide. Un URL prefirmato scade all’ora di scadenza configurata o alla scadenza delle credenziali associate, a seconda di quale evento si verifica per primo. Per le attività o i container di Amazon Elastic Container Service, le credenziali di ruolo ruotano in genere ogni 1-6 ore. Quando si utilizza AssumeRole di AWS Security Token Service (AWS STS), l’URL prefirmato scade al termine della sessione del ruolo, che per impostazione predefinita è 1 ora. Per i profili di istanza Amazon EC2, le credenziali dei metadati ruotano periodicamente con un periodo di validità massimo di circa 6 ore.
D: Perché ricevo l’errore 403 Forbidden quando accedo a un URL prefirmato?
Prima di generare un URL prefirmato, verifica di disporre delle autorizzazioni corrette. L’utente o il ruolo IAM che genera l’URL deve disporre delle autorizzazioni necessarie, ad esempio s3:GetObject, per l’operazione specifica. Inoltre, verifica che la policy di bucket di Amazon S3 non neghi esplicitamente l’accesso all’oggetto.
D: Ricevo errori SignatureDoesNotMatch. Come è possibile risolvere il problema?
Se riscontri errori SignatureDoesNotMatch durante l’utilizzo di URL prefirmati di Amazon S3, le cause comuni possono essere diverse. Innanzitutto, assicurati che l’orologio di sistema sia sincronizzato con un server Network Time Protocol (NTP), poiché anche piccole variazioni di tempo possono invalidare le firme. Inoltre, tieni presente che alcuni proxy aziendali possono modificare le intestazioni o le stringhe di query, causando potenzialmente mancate corrispondenze tra le firme. Per risolvere i problemi, prova a eseguire un test senza il proxy. Infine, verifica che tutti i parametri della richiesta, inclusi il metodo HTTP, le intestazioni e la stringa di query, corrispondano esattamente tra la generazione e l’utilizzo dell’URL. La risoluzione di questi problemi può spesso risolvere gli errori SignatureDoesNotMatch.
D: Ricevo errori ExpiredToken. Cosa è necessario fare?
Gli errori ExpiredToken ricevuti durante l’utilizzo di URL prefirmati indicano che le credenziali AWS utilizzate per generare l’URL non sono più valide. Per risolvere il problema, aggiorna le credenziali AWS prima di generare nuovi URL prefirmati. Per le applicazioni di lunga durata, è consigliabile implementare la logica di aggiornamento delle credenziali per mantenere l’accesso continuo. Se appropriato, è possibile utilizzare le credenziali di lunga durata o implementare meccanismi di aggiornamento dei token. Se utilizzi AssumeRole di AWS Security Token Service (AWS STS), verifica che la durata della sessione configurata soddisfi i requisiti del caso d’uso. Tieni presente che gli URL prefirmati rimangono validi solo per la durata delle credenziali sottostanti, quindi è essenziale implementare una corretta gestione delle credenziali.