Génération d'un objet présigné URL pour télécharger un objet dans un compartiment S3 on Outposts - Amazon S3 on Outposts

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Génération d'un objet présigné URL pour télécharger un objet dans un compartiment S3 on Outposts

Pour accorder un accès limité dans le temps aux objets stockés localement sur un Outpost sans mettre à jour votre politique de compartiment, vous pouvez utiliser un présigné. URL Avec presignedURLs, en tant que propriétaire du bucket, vous pouvez partager des objets avec des personnes dans votre cloud privé virtuel (VPC) ou leur donner la possibilité de télécharger ou de supprimer des objets.

Lorsque vous créez un présigné à URL l'aide du AWS SDKs ou du AWS Command Line Interface (AWS CLI), vous l'URLassociez à une action spécifique. Vous accordez également un accès limité dans le temps au présigné URL en choisissant un délai d'expiration personnalisé qui peut être compris entre 1 seconde et 7 jours. Lorsque vous partagez le document présignéURL, la personne qui s'y trouve VPC peut exécuter l'action intégrée URL comme s'il s'agissait de l'utilisateur signataire d'origine. Lorsque le délai d'expiration URL atteint, il URL expire et ne fonctionne plus.

Lorsque vous créez un document présignéURL, vous devez fournir vos informations d'identification de sécurité, puis spécifier les éléments suivants :

  • Un point d'accès Amazon Resource Name (ARN) pour le bucket Amazon S3 on Outposts

  • Une clé d'objet

  • Une HTTP méthode (PUTpour télécharger des objets)

  • Une date et une heure d'expiration

Un présigné n'URLest valide que pour la durée spécifiée. En d'autres termes, vous devez lancer l'action autorisée par la URL date et l'heure d'expiration antérieures. Vous pouvez utiliser un présigné URL plusieurs fois, jusqu'à la date et à l'heure d'expiration. Si vous avez créé un jeton URL présigné à l'aide d'un jeton temporaire, URL celui-ci expire lorsque le jeton expire, même si vous l'avez créé URL avec une date d'expiration ultérieure.

Si l'action autorisée par un présigné URL comprend plusieurs étapes, telles qu'un téléchargement en plusieurs parties, vous devez commencer toutes les étapes avant l'heure d'expiration. Si S3 on Outposts essaie de démarrer une étape avec une date expiréeURL, vous recevez un message d'erreur.

Les utilisateurs du cloud privé virtuel (VPC) qui ont accès au présigné URL peuvent télécharger des objets. Par exemple, un utilisateur VPC ayant accès au présigné URL peut télécharger un objet dans votre compartiment. Étant donné que les fichiers présignés URLs accordent l'accès à votre compartiment S3 on Outposts à tous VPC les utilisateurs du compartiment URL présignés, nous vous recommandons de les protéger de manière appropriée. URLs Pour plus de détails sur la protection des documents présignésURLs, consultezLimiter les capacités présignées URL.

Toute personne possédant des informations de sécurité valides peut créer un présignéURL. Cependant, le présigné URL doit être créé par une personne autorisée à effectuer l'opération sur laquelle le présigné URL est basé. Pour de plus amples informations, veuillez consulter Qui peut créer un présigné URL.

Utilisation du AWS SDKs pour générer une opération d'objet présignée URL pour un S3 sur Outposts

Java
SDKpour Java 2.x

Cet exemple montre comment générer un présigné URL que vous pouvez utiliser pour télécharger un objet dans un compartiment S3 on Outposts pendant une durée limitée. Pour de plus amples informations, veuillez consulter Utilisation de Presigned URLs pour S3 sur 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
SDKpour Python (Boto3)

Cet exemple montre comment générer un présigné URL capable d'exécuter une action S3 sur Outposts pendant une durée limitée. Pour de plus amples informations, veuillez consulter Utilisation de Presigned URLs pour S3 sur Outposts. Pour faire une demande auprès duURL, utilisez le Requests package.

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()