Uso compartido de objetos con URL prefirmadas - Amazon S3 en Outposts

Uso compartido de objetos con URL prefirmadas

Para conceder acceso por tiempo limitado a los objetos que se almacenan localmente en un Outpost sin actualizar su política de bucket, puede usar una URL prefirmada. Con las URL prefirmadas, usted, como propietario del bucket, puede compartir objetos con personas en su nube privada virtual (VPC) o concederles la capacidad de cargar o eliminar objetos.

Cuando crea una URL prefirmada con el SDK de AWS o el AWS Command Line Interface (AWS CLI), asocia la URL a una acción específica. También puede conceder acceso por tiempo limitado a la URL prefirmada eligiendo un tiempo de caducidad personalizado que puede ser de tan solo 1 segundo y de hasta 7 días. Cuando comparte la URL prefirmada, la persona de la VPC puede realizar la acción incrustada en la URL como si fuera el usuario de firma original. La URL caducará y ya no funcionará cuando llegue a su hora de vencimiento.

Cuando crea una URL prefirmada, debe proporcionar sus credenciales de seguridad y luego especificar lo siguiente:

  • Un nombre de recurso de Amazon (ARN) de punto de acceso para el bucket de Amazon S3 en Outposts

  • Una clave del objeto

  • Un método HTTP (GET para descargar objetos)

  • Una fecha y hora de caducidad

Una URL prefirmada solo es válida para la duración especificada. Es decir, debe comenzar la acción permitida por la URL antes de la fecha y hora de vencimiento. Puede utilizar una URL prefirmada varias veces, hasta la fecha y hora de vencimiento. Si creó una URL prefirmada con un token temporal, la URL caducará cuando caduque el token, incluso si creó la URL con un tiempo de vencimiento posterior.

Los usuarios de la nube privada virtual (VPC) que tienen acceso a la URL prefirmada pueden acceder al objeto. Por ejemplo, si tiene un video en su bucket y tanto el bucket como el objeto son privados, puede compartir el video con otros generando una URL prefirmada. Dado que las URL prefirmadas otorgan acceso a sus buckets de S3 en Outposts a quien tenga la URL, recomendamos que las proteja adecuadamente. Para obtener más información acerca de la protección de direcciones URL prefirmadas, consulte Limitación de las capacidades de URL prefirmadas.

Cualquiera que tenga credenciales de seguridad válidas puede crear una URL prefirmada. Sin embargo, la URL prefirmada debe haber sido creada por alguien que tenga permisos para realizar la operación en la que se basa la URL prefirmada. Para obtener más información, consulte Quién puede crear una URL prefirmada.

Puede generar una URL prefirmada para compartir un objeto en un bucket de S3 en Outposts mediante el SDK de AWS y la AWS CLI. Para obtener más información, consulte los ejemplos siguientes.

Puede usar los SDK de AWS para generar una URL prefirmada que puede dar a terceros para que puedan recuperar un objeto.

nota

Cuando use los SDK de AWS para generar una URL prefirmada, el tiempo máximo de vencimiento de una URL prefirmada es de 7 días desde el momento de su creación.

Java

El siguiente ejemplo genera una URL prefirmada que puede dar a terceros de modo que puedan recuperar un objeto desde un bucket de S3 en Outposts. Para obtener más información, consulte Uso de URL prefirmadas para S3 en Outposts. Para utilizar este ejemplo, reemplace los user input placeholders con su propia información.

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 accessPointArn = "*** access point ARN ***"; 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(accessPointArn, 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

El siguiente ejemplo genera una URL prefirmada que puede dar a terceros de modo que puedan recuperar un objeto desde un bucket de S3 en Outposts. Para obtener más información, consulte Uso de URL prefirmadas para S3 en Outposts. Para utilizar este ejemplo, reemplace los user input placeholders con su propia información.

using Amazon; using Amazon.S3; using Amazon.S3.Model; using System; namespace Amazon.DocSamples.S3 { class GenPresignedURLTest { private const string accessPointArn = "*** access point ARN ***"; 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 = accessPointArn, 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; } } }
Python

Los siguientes ejemplos generan una URL prefirmada para compartir un objeto mediante el SDK para Python (Boto3). Por ejemplo, utilice un cliente Boto3 y la función generate_presigned_url para generar una URL prefirmada que le permita GET un objeto.

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

Con el objetivo de obtener más información acerca del uso de SDK para Python (Boto3) a fin de generar una URL prefirmada, consulte Python en la Referencia de la API de AWS SDK for Python (Boto).

El siguiente ejemplo del comando de AWS CLI genera una URL prefirmada para un bucket de S3 en Outposts. Para utilizar este ejemplo, reemplace los user input placeholders con su propia información.

nota

Cuando use la AWS CLI para generar una URL prefirmada, el tiempo máximo de vencimiento de una URL prefirmada es de 7 días desde el momento de su creación.

aws s3 presign s3://arn:aws:s3-outposts:us-east-1:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/example-outpost-access-point/mydoc.txt --expires-in 604800

Para obtener más información, consulte presign en la Referencia de comandos de la AWS CLI.