Introducción a Amazon S3 mediante la AWS CLI - Amazon Simple Storage Service

Introducción a Amazon S3 mediante la AWS CLI

Puede comenzar a utilizar Amazon S3 mediante la AWS Command Line Interface (AWS CLI) para trabajar con buckets y objetos de uso general. Un bucket es un contenedor de objetos. Un objeto es un archivo y cualquier metadato que describa ese archivo.

Para almacenar un objeto en Amazon S3, cree un bucket y, a continuación, cargue el objeto en el bucket. Cuando el objeto está en el bucket, puede abrirlo, descargarlo y moverlo. Cuando ya no necesite un objeto o un bucket, puede limpiar los recursos.

Con Amazon S3 paga únicamente por lo que usa. Para obtener más información acerca de las características y precios de Amazon S3, consulte Amazon S3. Si es cliente nuevo de Amazon S3, puede comenzar con Amazon S3 de forma gratuita. Para obtener más información, consulte Capa gratuita de AWS.

nota

Para obtener más información sobre el uso de la clase de almacenamiento Amazon S3 Express One Zone con buckets de directorio, consulte Tutorial: introducción a S3 Express One Zone y Trabajar con buckets de de directorio.

Configuración

Antes de empezar a utilizar la AWS CLI con Amazon S3, asegúrese de que:

Para verificar que el perfil de la AWS CLI está configurado correctamente, ejecute el comando siguiente:

aws sts get-caller-identity

Para obtener más información, consulte get-caller-identity en la Referencia de comandos de la AWS CLI.

Este comando muestra una lista de los comandos de Amazon S3 disponibles si la AWS CLI está correctamente instalada y configurada.

Paso 1: Crear el primer bucket de Amazon S3

Después de configurar la AWS CLI, estará listo para crear un bucket en Amazon S3. Todos los objetos de Amazon S3 se almacenan en un bucket. Por tanto, debe crear un bucket para poder almacenar datos en Amazon S3.

nota

No se le cobrará por la creación de un bucket. Solo se le cobrará por almacenar objetos en el bucket y por transferirlos dentro y fuera de este. Los cargos en los que incurrirá al seguir los ejemplos de esta guía son mínimos (inferiores a 1 USD). Para obtener más información acerca de los cargos de almacenamiento, consulte Precios de Amazon S3.

Creación de un bucket
  1. Cree un bucket con el comando s3api create-bucket. Sustituya amzn-s3-demo-bucket por un nombre de bucket único y us-east-1 por la región que desee:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1

    Para las regiones distintas de us-east-1, debe especificar la restricción de ubicación:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-west-2 --create-bucket-configuration LocationConstraint=us-west-2
    nota
    • Una vez que haya creado un bucket, no podrá modificar su región.

    • Puede seleccionar una región cercana para minimizar la latencia y los costos, así como para satisfacer los requisitos normativos. Los objetos almacenados en una región nunca abandonarán esa región salvo que usted los transfiera de forma específica a otra. Para obtener una lista de regiones de AWS para Amazon S3, consulte Puntos de enlace de los servicios de AWS en la Referencia general de Amazon Web Services.

    • El nombre del bucket debe:

      • Ser exclusivo dentro de una partición. Una partición es una agrupación de regiones. AWS actualmente tiene tres particiones: aws (regiones comerciales), aws-cn (regiones de China) y aws-us-gov (regiones de AWS GovCloud (US)).

      • Tener entre 3 y 63 caracteres.

      • Contener solo letras minúsculas, números, puntos (.) y guiones (-). Para obtener una mejor compatibilidad, se recomienda evitar el uso de puntos (.) en los nombres de bucket, excepto para los buckets que se utilizan solo para el alojamiento estático de sitios web.

      • Comenzar y terminar por un número o una letra.

    • Una vez que haya creado el bucket, no podrá modificar su nombre.

    • No incluya información confidencial en el nombre del bucket. El nombre del bucket será visible en las URL que señalan a los objetos almacenados en él.

  2. Compruebe que el bucket se ha creado mostrando todos los buckets:

    aws s3 ls
  3. Para Propiedad de objetos, puede desactivar o habilitar las ACL y controlar la propiedad de los objetos cargados en el bucket.

    ACL desactivadas

    Para establecer Propietario del bucket obligatorio (predeterminado): las ACL están desactivadas y el propietario del bucket tiene automáticamente la propiedad y el control total sobre cada objeto del bucket de uso general:

    aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerEnforced}]"
    nota

    Las ACL están desactivadas de forma predeterminada. La mayoría de los casos de uso modernos de Amazon S3 ya no requieren el uso de ACL. Le recomendamos que mantenga las ACL desactivadas, excepto en circunstancias inusuales en las que necesite controlar el acceso a cada objeto de manera individual. Para obtener más información, consulte Control de la propiedad de los objetos y desactivación de las ACL del bucket.

    ACL habilitadas

    • Para establecer Propietario del bucket preferido: el propietario del bucket tiene la propiedad y el control total sobre los nuevos objetos que otras cuentas escriben en el bucket con la ACL predefinida bucket-owner-full-control:

      aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=BucketOwnerPreferred}]"

      Si aplica la configuración de Propietario del bucket preferido y desea requerir que todas las cargas de Amazon S3 incluyan la ACL predefinida bucket-owner-full-control, puede agregar Requisito de la ACL predefinida bucket-owner-full-control para las operaciones PUT de Amazon S3 (propietario del bucket preferido) que solo permita cargas de objetos que utilicen esta ACL.

    • Para establecer Escritor de objetos: la cuenta de AWS que carga un objeto es propietaria del objeto, tiene control total sobre él y puede conceder a otros usuarios acceso a él a través de las ACL:

      aws s3api put-bucket-ownership-controls --bucket amzn-s3-demo-bucket --ownership-controls="Rules=[{ObjectOwnership=ObjectWriter}]"
    nota

    La configuración predeterminada es Aplicada al propietario del bucket. Para aplicar la configuración predeterminada y mantener las ACL deshabilitadas, solo se necesita el permiso s3:CreateBucket. Para habilitar las ACL, debe tener el permiso s3:PutBucketOwnershipControls.

    Para comprobar la configuración actual de Propiedad de objetos del bucket:

    aws s3api get-bucket-ownership-controls --bucket amzn-s3-demo-bucket
  4. Para comprobar que Bloqueo del acceso público está habilitado (está habilitado de forma predeterminada para los buckets nuevos):

    aws s3api get-public-access-block --bucket amzn-s3-demo-bucket

    De forma predeterminada, las cuatro configuraciones de Bloqueo del acceso público están habilitadas para los buckets nuevos. Le recomendamos que deje todas las configuraciones activadas a menos que sepa que necesita desactivar una o varias para su caso de uso específico. Para obtener más información acerca del bloqueo del acceso público, consulte Bloquear el acceso público a su almacenamiento de Amazon S3.

    Si necesita habilitar Bloqueo del acceso público, use el siguiente comando:

    aws s3api put-public-access-block --bucket amzn-s3-demo-bucket --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
    nota

    Para habilitar todas las configuraciones de Bloqueo de acceso público, solo se requiere el permiso s3:CreateBucket. Para desactivar cualquier configuración de Bloqueo de acceso público, debe tener el permiso s3:PutBucketPublicAccessBlock.

  5. Para habilitar el control de versiones para el bucket:

    aws s3api put-bucket-versioning --bucket amzn-s3-demo-bucket --versioning-configuration Status=Enabled

    De forma predeterminada, control de versiones de buckets está desactivado. El control de versiones es una forma de conservar diversas variantes de un objeto en el mismo bucket. Puede utilizar el control de versiones para conservar, recuperar y restaurar todas las versiones de los objetos almacenados en su bucket de . Con el control de versiones, se puede recuperar fácilmente de acciones no deseadas del usuario y de errores de la aplicación. Para obtener más información sobre el control de versiones, consulte Retención de varias versiones de objetos con Control de versiones de S3.

  6. Bloqueo de objetos de Amazon S3 ayuda a proteger los objetos nuevos para que no se eliminen ni sobrescriban. Para obtener más información, consulte Bloqueo de objetos mediante Bloqueo de objetos. Para habilitar Bloqueo de objetos mediante Bloqueo de objetos (requiere el control de versiones del bucket):

    Para un nuevo bucket:

    aws s3api create-bucket --bucket amzn-s3-demo-bucket --region us-east-1 --object-lock-enabled-for-bucket

    Para un bucket existente:

    aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket --object-lock-configuration '{"ObjectLockEnabled": "Enabled"}'

    Si quiere establecer un valor predeterminado Bloqueo de objetos mediante Bloqueo de objetos además de habilitar el bloqueo de objetos, puede usar:

    aws s3api put-object-lock-configuration --bucket amzn-s3-demo-bucket --object-lock-configuration '{"ObjectLockEnabled":"Enabled","Rule":{"DefaultRetention":{"Mode":"COMPLIANCE","Days":30}}}'

    Puede sustituir "COMPLIANCE" por "GOVERNANCE" para un modo menos restrictivo y ajustar el número de días según sea necesario.

    nota

    Para crear un bucket con Bloqueo de objetos, debe tener los siguientes permisos: s3:CreateBucket, s3:PutBucketVersioning y s3:PutBucketObjectLockConfiguration.

  7. Puede agregar etiquetas al bucket. Con la asignación de costos de AWS, puede utilizar etiquetas de bucket para anotar la facturación por el uso de un bucket. Una etiqueta es un par clave-valor que representa una etiqueta que podrá asignar a un bucket. Para obtener más información, consulte Uso de etiquetas de buckets de S3 de asignación de costos.

    Para agregar etiquetas al bucket:

    aws s3api put-bucket-tagging --bucket amzn-s3-demo-bucket --tagging 'TagSet=[{Key=Purpose,Value=Testing},{Key=Environment,Value=Development}]'
  8. Los buckets y los objetos nuevos se cifran utilizando el cifrado en el servidor con las claves administradas por Amazon S3 (SSE-S3) como nivel base de la configuración de cifrado. Para verificar el cifrado predeterminado del bucket, utilice el siguiente comando:

    aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket

    También puede configurar el cifrado en el servidor con claves de AWS KMS (SSE-KMS) y el cifrado en el servidor de doble capa con claves de AWS KMS (DSSE-KMS) para el bucket. La clave administrada por AWS (aws/s3) y las claves administradas por el cliente se pueden usar como la clave de AWS KMS para la configuración de cifrado SSE-KMS y DSSE-KMS. Para obtener más información acerca de las claves administradas por el cliente, consulte Claves de cliente y claves de AWS en la Guía para desarrolladores de AWS Key Management Service. Para obtener más información acerca de cómo crear una clave de AWS KMS, consulte Creación de claves en la Guía para desarrolladores de AWS Key Management Service.

    importante

    La clave de AWS KMS debe estar en la misma región de AWS que el bucket de Amazon S3. Las claves de KMS entre regiones no son compatibles con el cifrado de buckets de Amazon S3.

    Cuando configure el bucket para que use el cifrado predeterminado con SSE-KMS, también puede utilizar las claves de bucket de Amazon S3. Las claves de bucket de Amazon S3 reducen el costo del cifrado al reducir el tráfico de solicitudes de Amazon S3 a AWS KMS. Para obtener más información, consulte Reducción del costo de SSE-KMS con las claves de bucket de Amazon S3. Las claves de bucket de Amazon S3 no son compatibles con DSSE-KMS. En la AWS CLI, las claves de bucket de Amazon S3 NO están habilitadas de forma predeterminada al crear un nuevo bucket. Esto es diferente del comportamiento de la consola, donde están habilitadas de forma predeterminada.

    Para configurar SSE-KMS y habilitar las claves de bucket de Amazon S3:

    aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration "{\"Rules\":[{\"ApplyServerSideEncryptionByDefault\":{\"SSEAlgorithm\":\"aws:kms\",\"KMSMasterKeyID\":\"YOUR-KMS-KEY-ARN\"},\"BucketKeyEnabled\":true}]}"

    Para comprobar si las claves de bucket de Amazon S3 están habilitadas para un bucket:

    aws s3api get-bucket-encryption --bucket amzn-s3-demo-bucket

    El resultado incluirá un campo BucketKeyEnabled establecido en true o false.

    Para configurar DSSE-KMS, use el siguiente comando:

    aws s3api put-bucket-encryption --bucket amzn-s3-demo-bucket --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms:dsse","KMSMasterKeyID":"YOUR-KMS-KEY-ARN"}}]}'

    Para obtener más información acerca del cifrado predeterminado, consulte Establecer el comportamiento del cifrado predeterminado del lado del servidor para los buckets de Amazon S3. Para obtener más información sobre SSE-S3, consulte Uso del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3).

    importante

    Si utiliza la opción de SSE-KMS o DSSE-KMS para la configuración de cifrado predeterminado, se le aplicará la cuota de solicitudes por segundo (RPS) de AWS KMS. Puede reducir las llamadas a la API de KMS habilitando las claves de bucket de Amazon S3, lo que disminuye el número de solicitudes enviadas a AWS KMS. Para obtener más información acerca de las cuotas de AWS KMS y cómo solicitar un aumento de cuota, consulte Cuotas en la Guía para desarrolladores de AWS Key Management Service.

Ha creado un bucket en Amazon S3. El siguiente paso es cargar un objeto en el bucket.

Paso 2: Cargar un objeto en el bucket

Después de crear un bucket en Amazon S3, podrá cargar un objeto en el bucket. Un objeto puede ser cualquier clase de archivo: un archivo de texto, una fotografía, un video, etc.

Para cargar un objeto a un bucket
  1. Cree un archivo de texto sencillo para cargar. Puede utilizar cualquier editor de texto o ejecutar el siguiente comando:

    echo 'Hello, Amazon S3!' > example.txt
  2. Cargue el archivo en el bucket con el comando s3 cp:

    aws s3 cp example.txt s3://amzn-s3-demo-bucket/

    Si la carga se realiza correctamente, verá un resultado similar al siguiente:

    upload: ./example.txt to s3://amzn-s3-demo-bucket/example.txt
  3. Verifique que el objeto se haya cargado mostrando el contenido del bucket:

    aws s3 ls s3://amzn-s3-demo-bucket/

Ha añadido correctamente un objeto a su bucket. El siguiente paso es descargar un objeto.

Paso 3: Descargar un objeto

Ahora que ha cargado un objeto a un bucket, puede ver información sobre el objeto y descargarlo en su equipo local.

Descarga de un objeto desde un bucket de Amazon S3
  1. Obtención de información sobre el objeto:

    aws s3api head-object --bucket amzn-s3-demo-bucket --key example.txt

    Este comando devuelve metadatos sobre el objeto, incluidos su tipo de contenido, longitud del contenido y fecha de última modificación.

  2. Descargue el objeto en el ordenador local:

    aws s3 cp s3://amzn-s3-demo-bucket/example.txt downloaded-example.txt

    Si la descarga se realiza correctamente, verá un resultado similar al siguiente:

    download: s3://amzn-s3-demo-bucket/example.txt to ./downloaded-example.txt
  3. Verifique el contenido del archivo descargado:

    cat downloaded-example.txt
nota
  • A diferencia de la consola, la AWS CLI puede descargar varios objetos a la vez utilizando comodines o la marca --recursive.

  • Al descargar objetos con la AWS CLI, los puntos (.) al final de los nombres de clave de los objetos se conservan, a diferencia de la consola donde se eliminan. Esto es importante si las claves de los objetos terminan con puntos.

Ejemplo de descarga de varios objetos:

Para descargar varios objetos de un bucket de Amazon S3 con extensiones de archivo específicas, utilice el comando de copia recursiva con los filtros exclude y include como se muestra en el ejemplo.

aws s3 cp s3://amzn-s3-demo-bucket/ . --recursive --exclude "*" --include "*.txt"

Ha descargado correctamente el objeto. El siguiente paso es copiar el objeto en una carpeta.

Paso 4: Copiar el objeto en una carpeta

Ha añadido un objeto a un bucket y ha descargado el objeto. Ahora, cree una carpeta y copie el objeto en la carpeta.

Para copiar un objeto en una carpeta
  1. En Amazon S3, las carpetas están representadas por prefijos en claves de objetos. Cree una “carpeta” copiando un objeto con un prefijo:

    aws s3 cp s3://amzn-s3-demo-source-bucket/example.txt s3://amzn-s3-demo-destination-bucket/favorite-files/example.txt

    Si la copia se realiza correctamente, verá un resultado similar al siguiente:

    copy: s3://amzn-s3-demo-source-bucket/example.txt to s3://amzn-s3-demo-destination-bucket/favorite-files/example.txt
  2. Verifique que el objeto se ha copiado mostrando el contenido de la carpeta:

    aws s3 ls s3://amzn-s3-demo-destination-bucket/favorite-files/

Ha copiado correctamente el objeto en una carpeta. El siguiente paso es eliminar los objetos y el bucket.

Paso 5: Eliminar los objetos y el bucket

Cuando ya no necesite un objeto o un bucket, le recomendamos que los elimine para evitar que se carguen más. Si ha completado esta explicación introductoria como un ejercicio de aprendizaje y no piensa utilizar el bucket o los objetos, le recomendamos los elimine para que no se acumulen los cargos.

Antes de eliminar el bucket, debe vaciarlo o eliminar los objetos que contiene. Después de eliminar los objetos y el bucket, ya no estarán disponibles.

Si desea seguir utilizando el mismo nombre de bucket, le recomendamos que elimine los objetos o vacíe el bucket, pero no lo elimine. Después de eliminar un bucket, el nombre estará disponible para reutilizarlo. Sin embargo, otra cuenta de AWS podría crear un bucket con el mismo nombre antes de tener la oportunidad de reutilizarlo.

Eliminación de un objeto

Si desea elegir los objetos que desea eliminar sin vaciar todos los objetos del bucket, puede eliminar un objeto.

Elimine un objeto específico:

aws s3 rm s3://amzn-s3-demo-bucket/example.txt

Si la eliminación se realiza correctamente, verá un resultado similar al siguiente:

delete: s3://amzn-s3-demo-bucket/example.txt

Vaciar el bucket

Si planea eliminar el bucket, primero debe vaciarlo, lo que elimina todos los objetos, las versiones y los marcadores de eliminación del bucket.

Para vaciar un bucket
importante

La operación de vaciado del bucket no se puede revertir. Se eliminarán los objetos añadidos al bucket mientras la acción de vaciado del bucket está en curso.

  1. Opción 1: para buckets más pequeños, utilice el comando rm con la marca --recursive para eliminar todos los objetos del bucket:

    aws s3 rm s3://amzn-s3-demo-bucket --recursive

    Este comando elimina todos los objetos del bucket, incluidos los objetos en carpetas.

    nota

    Si el bucket contiene muchos objetos u objetos grandes, es posible que se agote el tiempo de espera de este comando. Para buckets con grandes cantidades de datos, utilice la regla de ciclo de vida de Amazon S3 para hacer caducar los objetos en los buckets.

    Opción 2: use las reglas de ciclo de vida de Amazon S3 (recomendado para buckets grandes)

    Para buckets con muchos objetos u objetos grandes, utilice una regla de ciclo de vida de Amazon S3 para que caduquen y se eliminen automáticamente todos los objetos. Espere a que se procese la regla de ciclo de vida (esto puede tardar hasta 24 horas). Para obtener más información sobre el uso de reglas de ciclo de vida para vaciar buckets, consulte ¿Cómo puedo vaciar un bucket de Amazon S3 mediante una regla de configuración del ciclo de vida?.

  2. Verifique que el bucket esté vacío:

    aws s3 ls s3://amzn-s3-demo-bucket
  3. Si el bucket tiene habilitado el control de versiones, utilice los siguientes comandos para eliminar los objetos versionados y los marcadores de eliminación.

    Elimine los objetos versionados:

    aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete "$(aws s3api list-object-versions --bucket amzn-s3-demo-bucket --output json --query='{Objects: Versions[].{Key:Key,VersionId:VersionId}}')"

    Eliminación de marcadores de eliminación:

    aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete "$(aws s3api list-object-versions --bucket amzn-s3-demo-bucket --output json --query='{Objects: DeleteMarkers[].{Key:Key,VersionId:VersionId}}')"
  4. Compruebe que el bucket esté vacío de todas las versiones de objetos y marcadores de eliminación:

    aws s3api list-object-versions --bucket amzn-s3-demo-bucket

    El resultado no debería mostrar ninguna versión ni marcadores de eliminación restantes.

Eliminar el bucket

Después de vaciar el bucket o eliminar todos los objetos de él, puede eliminarlo.

importante

La eliminación de un bucket no se puede revertir. Los nombres de bucket son únicos. Si elimina el bucket, otro usuario de AWS podrá utilizar el nombre. Si desea seguir utilizando el mismo nombre de bucket, no elimine el bucket. En su lugar, vacíe y guarde el bucket.

Para eliminar su bucket de
  1. Elimine el bucket:

    aws s3api delete-bucket --bucket amzn-s3-demo-bucket
  2. Verifique que el bucket se haya eliminado mostrando todos los buckets:

    aws s3 ls

Pasos a seguir a continuación

En los ejemplos anteriores, aprendió cómo realizar algunas tareas básicas de Amazon S3 mediante la AWS CLI.

En los siguientes temas se explican las rutas de aprendizaje que puede usar para obtener más información acerca de Amazon S3 para poder implementarlo en sus aplicaciones.

La siguiente lista muestra los comandos de la AWS CLI comunes para Amazon S3:

  • cp: copia archivos u objetos entre el sistema de archivos local y Amazon S3 o entre ubicaciones de Amazon S3

  • ls: muestra los objetos y prefijos comunes de Amazon S3 bajo un bucket y prefijo especificados

  • mb: crea un bucket de Amazon S3

  • mv: mueve archivos u objetos entre el sistema de archivos local y Amazon S3 o entre ubicaciones de Amazon S3

  • presign: genera una URL prefirmada para un objeto de Amazon S3 que permite el acceso temporal sin credenciales de AWS

  • rb: elimina un bucket vacío de Amazon S3. Puede usar la marca --force para vaciar y eliminar automáticamente un bucket con contenido en un solo comando. Esta acción no se puede deshacer.

  • rm: elimina objetos de Amazon S3

  • sync: sincroniza directorios y prefijos de Amazon S3 mediante la copia recursiva de archivos nuevos y actualizados del directorio de origen al de destino.

  • website: configura un bucket como un sitio web estático

Para obtener más información acerca de los comandos AWS CLI para Amazon S3, consulte los siguientes recursos:

  • s3: comandos de Amazon S3 de alto nivel que simplifican las operaciones comunes

  • s3api: acceso directo a todas las operaciones de la API de Amazon S3

  • s3control: acceso directo a todas las operaciones de la API de control de Amazon S3