Condivisione di oggetti mediante URL prefirmati - Amazon Simple Storage Service

Condivisione di oggetti mediante URL prefirmati

Di default, tutti gli oggetti S3 sono privati. Solo il proprietario dell'oggetto dispone dell'autorizzazione per accedere allo stesso. Tuttavia, il proprietario dell'oggetto può facoltativamente condividere gli oggetti con altri creando un URL prefirmato e utilizzando le credenziali di sicurezza personali, per concedere un'autorizzazione limitata nel tempo per il download degli oggetti.

Quando crei un URL prefirmato per un oggetto, devi fornire le credenziali di sicurezza e quindi specificare un nome per il bucket, una chiave dell'oggetto, il metodo HTTP (GET per il download dell'oggetto), nonché la data e l'ora di scadenza. Gli URL prefirmati sono validi solo per la durata specificata. Se hai creato un URL prefirmato utilizzando un token temporaneo, l'URL scade insieme al token, anche se per l'URL è indicata una data di scadenza successiva.

Chiunque riceva l'URL prefirmato può quindi accedere all'oggetto. Ad esempio, se il bucket contiene un video e sia il bucket che l'oggetto sono privati, è possibile condividere il video con altri generando un URL prefirmato. Poiché gli URL prefirmati consentono l'accesso ai tuoi bucket Amazon S3 a chiunque disponga dell'URL, ti consigliamo di proteggerli in modo appropriato. Per ulteriori informazioni sulla protezione degli URL prefirmati, consulta la sezione Limitazione delle funzionalità degli URL prefirmati.

Per ulteriori informazioni su chi può creare un URL prefirmato, consulta la sezione Chi può creare un URL prefirmato.

Generazione di un URL prefirmato per la condivisione di un oggetto

Puoi generare un URL prefirmato per un oggetto senza scrivere alcun codice mediante la console S3 oppure AWS Explorer per Visual Studio. Puoi anche generare un URL prefirmato a livello di programmazione tramite gli SDK AWS per Java, .NET, Ruby, PHP, Node.js, Python e Go.

Puoi utilizzare la AWS Management Console per generare un URL prefirmato per un oggetto seguendo questi fasi.

Nota

Nella console Amazon S3, il tempo massimo di scadenza per un URL preimpostato è di 12 ore dal momento della creazione.

Come generare un URL prefirmato utilizzando la AWS Management Console
  1. Accedi alla AWS Management Console e apri la console Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Nell'elenco Buckets (Bucket) scegli il nome del bucket contenente gli oggetto per cui desideri ottenere l'URL prefirmato.

  3. Nell'elenco Objects (Oggetti), seleziona l'oggetto per cui desideri creare un URL prefirmato.

  4. Nel menu Actions (Operazioni), scegli Create presigned URL (Crea URL prefirmato).

  5. Specifica per quanto tempo desideri che l'URL prefirmato sia valido.

  6. Scegli Create presigned URL (Crea URL prefirmato).

  7. Quando viene visualizzata la conferma, l'URL viene automaticamente copiato negli appunti. Verrà visualizzato un pulsante per copiare l'URL preimpostato qualora fosse necessario copiarlo di nuovo.

Se si utilizza Visual Studio, è possibile generare un URL prefirmato per un oggetto senza scrivere alcun codice mediante AWS Explorer per Visual Studio. Qualsiasi utente che dispone di questo URL può caricare un oggetto. Per ulteriori informazioni, consulta Utilizzo di Amazon S3 da AWS Explorer.

Nota

Con AWS Explorer per Visual Studio, il tempo massimo di scadenza per un URL preimpostato è di 7 giorni dal momento della creazione.

Per istruzioni su come installare AWS Explorer, consulta Sviluppo con Amazon S3 utilizzando SDK AWS ed explorer.

Il seguente esempio genera un URL prefirmato che puoi fornire ad altri utenti in modo che possano recuperare un oggetto.

Nota

Con gli SDK AWS, il tempo massimo di scadenza per un URL preimpostato è di 7 giorni dal momento della creazione.

Java

Il seguente esempio genera un URL prefirmato che è possibile fornire ad altri utenti in modo che possano recuperare un oggetto da un bucket S3. Per ulteriori informazioni, consulta Condivisione di oggetti mediante URL prefirmati.

Per istruzioni su come creare e testare un esempio di utilizzo, consulta Test degli esempi di codice Java di Amazon S3.

import com.amazonaws.AmazonServiceException; import com.amazonaws.HttpMethod; import com.amazonaws.SdkClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3ClientBuilder; import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; import java.io.IOException; import java.net.URL; import java.time.Instant; public class GeneratePresignedURL { public static void main(String[] args) throws IOException { Regions clientRegion = Regions.DEFAULT_REGION; String bucketName = "*** Bucket name ***"; String objectKey = "*** Object key ***"; try { AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(clientRegion) .withCredentials(new ProfileCredentialsProvider()) .build(); // Set the presigned URL to expire after one hour. java.util.Date expiration = new java.util.Date(); long expTimeMillis = Instant.now().toEpochMilli(); expTimeMillis += 1000 * 60 * 60; expiration.setTime(expTimeMillis); // Generate the presigned URL. System.out.println("Generating pre-signed URL."); GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, objectKey) .withMethod(HttpMethod.GET) .withExpiration(expiration); URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest); System.out.println("Pre-Signed URL: " + url.toString()); } catch (AmazonServiceException e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } catch (SdkClientException e) { // Amazon S3 couldn't be contacted for a response, or the client // couldn't parse the response from Amazon S3. e.printStackTrace(); } } }
.NET

Per istruzioni su come creare e testare un esempio di utilizzo, consulta Esecuzione degli esempi di codice .NET di Amazon S3.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; namespace Amazon.DocSamples.S3 { class GenPresignedURLTest { private const string bucketName = "*** bucket name ***"; private const string objectKey = "*** object key ***"; // Specify how long the presigned URL lasts, in hours private const double timeoutDuration = 12; // Specify your bucket region (an example region is shown). private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2; private static IAmazonS3 s3Client; public static void Main() { s3Client = new AmazonS3Client(bucketRegion); string urlString = GeneratePreSignedURL(timeoutDuration); } static string GeneratePreSignedURL(double duration) { string urlString = ""; try { GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest { BucketName = bucketName, Key = objectKey, Expires = DateTime.UtcNow.AddHours(duration) }; urlString = s3Client.GetPreSignedURL(request1); } catch (AmazonS3Exception e) { Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message); } catch (Exception e) { Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message); } return urlString; } } }
PHP

Per ulteriori informazioni sull'utilizzo di AWS SDK for PHP versione 3 per generare un URL prefirmato, consulta URL prefirmato di Amazon S3 con AWS SDK for PHP versione 3 nella Guida per gli sviluppatori di AWS SDK for PHP.

Python

Genera un URL prefirmato per condividere un oggetto utilizzando l'SDK for Python (Boto3). Ad esempio, utilizza un client Boto3 e la funzione generate_presigned_url per generare un URL prefirmato che ottiene un oggetto.

import boto3 url = boto3.client('s3').generate_presigned_url( ClientMethod='get_object', Params={'Bucket': 'BUCKET_NAME', 'Key': 'OBJECT_KEY'}, ExpiresIn=3600)

Per ulteriori informazioni sull'utilizzo di SDK for Python (Boto3) per generare un URL prefirmato, consulta Python nella Documentazione di riferimento delle API di AWS SDK for Python (Boto).

Per generare un URL prefirmato per condividere un oggetto utilizzando la AWS CLI, consulta presign nella Documentazione di riferimento per i comandi di AWS CLI.

Nota

Con la AWS CLI, il tempo massimo di scadenza per un URL preimpostato è di 7 giorni dal momento della creazione.