Generazione di un preimpostato URL per caricare un oggetto su un bucket S3 on Outposts - Amazon S3 su Outposts

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Generazione di un preimpostato URL per caricare un oggetto su un bucket S3 on Outposts

Per concedere un accesso limitato nel tempo agli oggetti archiviati localmente su Outpost senza aggiornare la tua policy sui bucket, puoi utilizzare un file predefinito. URL Con presignedURLs, in qualità di proprietario del bucket puoi condividere oggetti con altre persone nel tuo cloud privato virtuale (VPC) o concedere loro la possibilità di caricare o eliminare oggetti.

Quando crei un predefinito URL utilizzando il AWS SDKs o il AWS Command Line Interface (AWS CLI), lo associ a un'azione URL specifica. Puoi inoltre concedere un accesso limitato nel tempo ai predefiniti URL scegliendo un tempo di scadenza personalizzato che può essere compreso tra 1 secondo e massimo 7 giorni. Quando condividi il prefirmatoURL, la persona che ne fa parte VPC può eseguire l'azione incorporata nel file URL come se fosse l'utente firmatario originale. Quando URL raggiunge la scadenza, URL scade e non funziona più.

Quando si crea un predefinitoURL, è necessario fornire le credenziali di sicurezza e quindi specificare quanto segue:

  • Un punto di accesso Amazon Resource Name (ARN) per il bucket Amazon S3 on Outposts

  • Una chiave oggetto

  • Un HTTP metodo (PUTper caricare oggetti)

  • Una data e un'ora di scadenza

Un predefinito URL è valido solo per la durata specificata. Cioè, è necessario avviare l'azione consentita entro la data e l'ora URL precedenti alla scadenza. È possibile utilizzare un'impostazione predefinita URL più volte, fino alla data e all'ora di scadenza. Se hai creato un prefirmato URL utilizzando un token temporaneo, questo URL scade alla scadenza del token, anche se lo hai creato URL con una scadenza successiva.

Se l'azione consentita da un predefinito URL consiste in più passaggi, ad esempio un caricamento in più parti, è necessario avviare tutti i passaggi prima della scadenza. Se S3 on Outposts tenta di iniziare una fase con una URL scadenza, ricevi un errore.

Gli utenti nel cloud privato virtuale (VPC) che hanno accesso al predefinito URL possono caricare oggetti. Ad esempio, un utente del gruppo VPC che ha accesso al predefinito URL può caricare un oggetto nel tuo bucket. Poiché la funzionalità prefirmata URLs concede l'accesso al tuo bucket S3 on Outposts a qualsiasi utente del gruppo VPC che ha accesso al bucket prefirmatoURL, ti consigliamo di proteggerli in modo appropriato. URLs Per maggiori dettagli sulla protezione dei predefiniti, consulta. URLs Limitazione delle funzionalità predefinite URL

Chiunque disponga di credenziali di sicurezza valide può creare un prefirmato. URL Tuttavia, il prefirmato URL deve essere creato da qualcuno che dispone dell'autorizzazione a eseguire l'operazione su cui si basa il prefirmatoURL. Per ulteriori informazioni, consulta Chi può creare un predefinito URL.

Utilizzo AWS SDKs di per generare un prefirmato URL per un'operazione sull'oggetto S3 on Outposts

Java
SDKper Java 2.x

Questo esempio mostra come generare un predefinito URL che puoi usare per caricare un oggetto su un bucket S3 on Outposts per un periodo di tempo limitato. Per ulteriori informazioni, consulta Utilizzo di presigned URLs per S3 su Outposts.

public static void signBucket(S3Presigner presigner, String outpostAccessPointArn, String keyName) { try { PutObjectRequest objectRequest = PutObjectRequest.builder() .bucket(accessPointArn) .key(keyName) .contentType("text/plain") .build(); PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder() .signatureDuration(Duration.ofMinutes(10)) .putObjectRequest(objectRequest) .build(); PresignedPutObjectRequest presignedRequest = presigner.presignPutObject(presignRequest); String myURL = presignedRequest.url().toString(); System.out.println("Presigned URL to upload a file to: " +myURL); System.out.println("Which HTTP method must be used when uploading a file: " + presignedRequest.httpRequest().method()); // Upload content to the S3 on Outposts bucket by using this URL. URL url = presignedRequest.url(); // Create the connection and use it to upload the new object by using the presigned URL. HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true); connection.setRequestProperty("Content-Type","text/plain"); connection.setRequestMethod("PUT"); OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream()); out.write("This text was uploaded as an object by using a presigned URL."); out.close(); connection.getResponseCode(); System.out.println("HTTP response code is " + connection.getResponseCode()); } catch (S3Exception e) { e.getStackTrace(); } catch (IOException e) { e.getStackTrace(); } }
Python
SDKper Python (Boto3)

Questo esempio mostra come generare un predefinito in URL grado di eseguire un'azione S3 su Outposts per un periodo di tempo limitato. Per ulteriori informazioni, consulta Utilizzo di presigned URLs per S3 su Outposts. Per effettuare una richiesta conURL, usa il pacchetto. Requests

import argparse import logging import boto3 from botocore.exceptions import ClientError import requests logger = logging.getLogger(__name__) def generate_presigned_url(s3_client, client_method, method_parameters, expires_in): """ Generate a presigned S3 on Outposts 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 that 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 ) logger.info("Got presigned URL: %s", url) except ClientError: logger.exception( "Couldn't get a presigned URL for client method '%s'.", client_method) raise return url def usage_demo(): logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s') print('-'*88) print("Welcome to the Amazon S3 on Outposts presigned URL demo.") print('-'*88) parser = argparse.ArgumentParser() parser.add_argument('accessPointArn', help="The name of the S3 on Outposts access point ARN.") parser.add_argument( 'key', help="For a GET operation, the key of the object in S3 on Outposts. For a " "PUT operation, the name of a file to upload.") parser.add_argument( 'action', choices=('get', 'put'), help="The action to perform.") args = parser.parse_args() s3_client = boto3.client('s3') client_action = 'get_object' if args.action == 'get' else 'put_object' url = generate_presigned_url( s3_client, client_action, {'Bucket': args.accessPointArn, 'Key': args.key}, 1000) print("Using the Requests package to send a request to the URL.") response = None if args.action == 'get': response = requests.get(url) elif args.action == 'put': print("Putting data to the URL.") try: with open(args.key, 'r') as object_file: object_text = object_file.read() response = requests.put(url, data=object_text) except FileNotFoundError: print(f"Couldn't find {args.key}. For a PUT operation, the key must be the " f"name of a file that exists on your computer.") if response is not None: print("Got response:") print(f"Status: {response.status_code}") print(response.text) print('-'*88) if __name__ == '__main__': usage_demo()