Caricamento di oggetti con URL prefirmati - Amazon Simple Storage Service

Caricamento di oggetti con URL prefirmati

Puoi utilizzare gli URL prefirmati per consentire a qualcuno di caricare un oggetto nel tuo bucket Amazon S3. L'utilizzo di un URL prefirmato consentirà il caricamento senza che un'altra parte disponga di credenziali o autorizzazioni AWS di sicurezza. Le funzionalità dell'URL prefirmato sono limitate dalle autorizzazioni dell'utente che lo ha creato. In altre parole, se si riceve un URL prefirmato per caricare un oggetto, è possibile caricarlo solo se il creatore dell'URL dispone delle autorizzazioni necessarie per caricare tale oggetto.

Quando carichi un oggetto nel bucket utilizzando l'URL, Amazon S3 crea l'oggetto in un bucket specifico. 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. Dopo il caricamento, il proprietario del bucket sarà il proprietario dell'oggetto.

Per ulteriori informazioni sugli URL prefirmati, consulta Download e caricamento di oggetti con URL predefiniti.

Genera un URL prefirmato per un oggetto senza scrivere alcun codice mediante AWS Explorer per Visual Studio. È possibile generare un URL prefirmato in modo programmatico utilizzando AWS SDK.

Nota

Al momento, AWS Toolkit for Visual Studio non supporta Visual Studio per Mac.

  1. Installa AWS Toolkit for Visual Studio utilizzando le seguenti istruzioni, Installazione e configurazione del Toolkit per Visual Studio nella Guida all'utente AWS Toolkit for Visual Studio.

  2. Effettua la connessione a AWS utilizzando i seguenti passaggi, Connessione a AWS nella Guida per l'utente di AWS Toolkit for Visual Studio.

  3. Nel pannello laterale sinistro di AWS Explorer, fai clic con il pulsante destro del mouse sul bucket in cui si desidera caricare un oggetto.

  4. Scegli Crea URL prefirmato...

  5. Nella finestra a comparsa, imposta la data e l'ora di scadenza dell'URL prefirmato.

  6. Per Chiave dell'oggetto, imposta il nome del file da caricare. Il file che si sta caricando deve corrispondere esattamente a questo nome. Se nel bucket esiste già un oggetto con la stessa chiave dell'oggetto, Amazon S3 sostituirà l'oggetto esistente con quello appena caricato.

  7. Scegli PUT per specificare che questo URL prefirmato verrà utilizzato per caricare un oggetto.

  8. Scegli il pulsante Genera.

  9. Per copiare l’URL negli appunti, scegliere Copia.

  10. Per utilizzare questo URL, puoi inviare una richiesta PUT con il comando curl. Includi il percorso completo del file e l'URL prefirmato stesso.

    curl -X PUT -T "/path/to/file" "presigned URL"

È possibile generare un URL prefirmato in grado di eseguire un’azione S3 per un periodo di tempo limitato.

Nota

Se si utilizza AWS CLI o gli AWS SDK, la scadenza degli URL prefirmati può essere impostata fino a 7 giorni. Per ulteriori informazioni, consulta Scadenza degli URL prefirmati.

Python

Il seguente script Python genera un URL prefirmato PUT per caricare un oggetto in un bucket per uso generico S3.

  1. Copia il contenuto dello script e salvalo come file “put-only-url.py”. Per utilizzare l’esempio seguente, sostituisci i segnaposto per l’input dell’utente con le informazioni appropriate, ad esempio il nome file.

    import argparse import boto3 from botocore.exceptions import ClientError def generate_presigned_url(s3_client, client_method, method_parameters, expires_in): """ Generate a presigned Amazon S3 URL that can be used to perform an action. :param s3_client: A Boto3 Amazon S3 client. :param client_method: The name of the client method that the URL performs. :param method_parameters: The parameters of the specified client method. :param expires_in: The number of seconds the presigned URL is valid for. :return: The presigned URL. """ try: url = s3_client.generate_presigned_url( ClientMethod=client_method, Params=method_parameters, ExpiresIn=expires_in ) except ClientError: print(f"Couldn't get a presigned URL for client method '{client_method}'.") raise return url def main(): parser = argparse.ArgumentParser() parser.add_argument("bucket", help="The name of the bucket.") parser.add_argument( "key", help="The key (path and filename) in the S3 bucket.", ) parser.add_argument( "--region", help="The AWS region where the bucket is located.", default="us-east-1" ) parser.add_argument( "--content-type", help="The content type of the file to upload.", default="application/octet-stream" ) args = parser.parse_args() # Create S3 client with explicit region configuration s3_client = boto3.client("s3", region_name=args.region) # Optionally set signature version if needed for older S3 regions # s3_client.meta.config.signature_version = 's3v4' # The presigned URL is specified to expire in 1000 seconds url = generate_presigned_url( s3_client, "put_object", { "Bucket": args.bucket, "Key": args.key, "ContentType": args.content_type # Specify content type }, 1000 ) print(f"Generated PUT presigned URL: {url}") if __name__ == "__main__": main()
  2. Per generare un URL prefirmato PUT per il caricamento di un file, esegui lo script seguente con il nome del bucket e il percorso dell’oggetto desiderato.

    Il seguente comando utilizza valori di esempio. Sostituisci i segnaposto per l’input dell’utente con le informazioni appropriate.

    python put-only-url.py amzn-s3-demo-bucket <object-path> --region us-east-1 --content-type application/octet-stream

    Lo script produrrà un URL prefirmato PUT:

    Generated PUT presigned URL: https://amzn-s3-demo-bucket.s3.amazonaws.com/object.txt?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
  3. È ora possibile caricare il file utilizzando l’URL prefirmato generato con curl. Assicurati di includere lo stesso tipo di contenuto utilizzato durante la generazione dell’URL:

    curl -X PUT -T "path/to/your/local/file" -H "Content-Type: application/octet-stream" "generated-presigned-url"

    Se hai specificato un tipo di contenuto diverso durante la generazione dell’URL, assicurati di utilizzare lo stesso tipo di contenuto nel comando curl.

Per altri esempi di utilizzo degli AWS SDK per generare un URL prefirmato per il caricamento di un oggetto, consulta Creazione di un URL prefirmato per Amazon S3 utilizzando un AWS SDK.

Correzione degli errori SignatureDoesNotMatch

Se riscontri un errore SignatureDoesNotMatch durante l’utilizzo di URL prefirmati, verifica quanto segue:

  • Verifica che l’ora di sistema sia sincronizzata con un server di riferimento dell’ora affidabile

  • Assicurati di utilizzare l’URL esattamente come generato, senza alcuna modifica

  • Controlla se l’URL è scaduto e generane uno nuovo se necessario

  • Assicurati che il tipo di contenuto nella richiesta di caricamento corrisponda al tipo di contenuto specificato durante la generazione dell’URL

  • Verifica di utilizzare la Regione corretta per il bucket

  • Quando utilizzi curl, racchiudi l’URL tra virgolette per gestire correttamente i caratteri speciali