Carga de objetos con URL prefirmadas - Amazon Simple Storage Service

Carga de objetos con URL prefirmadas

Puede utilizar URL prefirmadas para permitir que alguien cargue un objeto en su bucket de Amazon S3. El uso de una URL prefirmada permitirá cargar datos sin necesidad de que otra parte disponga de credenciales ni permisos de seguridad de AWS. Una URL prefirmada está limitada por los permisos del usuario que la crea. Es decir, si recibe una URL prefirmada para cargar un objeto, podrá cargarlo solamente si el creador de la URL cuenta con los permisos necesarios para ello.

Cuando alguien usa la URL para cargar un objeto, Amazon S3 crea el objeto en el bucket especificado. Si ya existe en el bucket un objeto con la misma clave que se ha especificado en la URL prefirmada, Amazon S3 reemplaza el objeto existente con el objeto cargado. Tras la carga, el propietario del bucket será el propietario del objeto.

Para obtener información general sobre las URL prefirmadas, consulte Descarga y carga de objetos con URL prefirmadas.

Puede crear URL prefirmada para cargar un objeto sin necesidad de escribir código alguno gracias a AWS Explorer para Visual Studio. Puede generar una URL prefirmada mediante programación con los SDK de AWS.

nota

En este momento, AWS Toolkit for Visual Studio no es compatible con Visual Studio para Mac.

  1. Instale AWS Toolkit for Visual Studio siguiendo las instrucciones de Installing and setting up the Toolkit for Visual Studio en la Guía del usuario de AWS Toolkit for Visual Studio.

  2. Conéctese a AWS con los pasos siguientes, Conexión a AWS en la Guía del usuario de AWS Toolkit for Visual Studio.

  3. En el panel lateral izquierdo que tiene la etiqueta Explorador de AWS, haga clic con el botón derecho en el bucket en el que desee cargar un objeto.

  4. Elija Crear URL prefirmada…

  5. En la ventana emergente, defina la fecha y la hora de vencimiento de su URL prefirmada.

  6. En Clave de objeto, establezca el nombre del archivo que se va a cargar. El archivo que vaya a cargar debe coincidir exactamente con este nombre. Si ya existe un objeto con la misma clave de objeto en el bucket, Amazon S3 sustituirá el objeto existente por el objeto recién cargado.

  7. Elija PUT para especificar que esta URL prefirmada se utilizará para cargar un objeto.

  8. Elija el botón Generate (Generar).

  9. Para copiar la URL en el portapapeles, elija Copy (Copiar).

  10. Para usar esta URL, puede enviar una solicitud PUT con el comando curl. Incluya la ruta completa al archivo y la propia URL prefirmada.

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

Puede generar una URL prefirmada que pueda realizar una acción de S3 durante un tiempo limitado.

nota

Si utiliza la CLI de AWS o los AWS SDK, el tiempo de caducidad de las URL prefirmadas puede establecerse hasta en siete días. Para obtener más información, consulte Tiempo de caducidad para las URL prefirmadas.

Python

El siguiente script Python genera una URL prefirmada PUT para cargar un objeto en un bucket de propósito general de S3.

  1. Copie el contenido del script y guárdelo como el archivo “put-only-url.py”. Para utilizar los siguientes ejemplos, reemplace los marcadores de posición de entrada de usuario por información propia (como el nombre de archivo).

    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.", ) args = parser.parse_args() # By default, this will use credentials from ~/.aws/credentials s3_client = boto3.client("s3") # The presigned URL is specified to expire in 1000 seconds url = generate_presigned_url( s3_client, "put_object", {"Bucket": args.bucket, "Key": args.key}, 1000 ) print(f"Generated PUT presigned URL: {url}") if __name__ == "__main__": main()
  2. Para generar una URL prefirmada PUT para cargar un archivo, ejecute el siguiente script con el nombre del bucket y la ruta del objeto deseado.

    El siguiente comando utiliza valores de ejemplo. Reemplace los marcadores de posición de entrada del usuario por información propia.

    python put-only-url.py amzn-s3-demo-bucket <object-path>

    El script generará una URL prefirmada PUT:

    Generated PUT presigned URL: https://amzn-s3-demo-bucket.s3.amazonaws.com/object.txt?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Signature=vjbyNxybdZaMmLa%2ByT372YEAiv4%3D&Expires=1741978496
  3. Ahora puede cargar el archivo utilizando la URL prefirmada generada con curl:

    curl -X PUT -T "path/to/your/local/file" "generated-presigned-url"

Para ver más ejemplos de cómo utilizar los SDK de AWS para generar una URL prefirmada para cargar un objeto, consulte Creación de una URL prefirmada para Amazon S3 mediante un AWS SDK.