Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

s3 DG PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 800

Amazon Simple Storage Service

Guía del desarrollador


Versión de API 2006-03-01
Amazon Simple Storage Service Guía del desarrollador

Amazon Simple Storage Service: Guía del desarrollador


Copyright © 2019 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,
in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits
Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not
be affiliated with, connected to, or sponsored by Amazon.
Amazon Simple Storage Service Guía del desarrollador

Table of Contents
¿Qué es Amazon S3? ......................................................................................................................... 1
¿Cómo...? ................................................................................................................................. 1
Introducción ....................................................................................................................................... 2
Información general de Amazon S3 y esta guía .............................................................................. 2
Ventajas del uso de Amazon S3 ................................................................................................... 2
Conceptos de Amazon S3 ........................................................................................................... 3
Buckets ............................................................................................................................. 3
Objetos ............................................................................................................................. 3
Claves .............................................................................................................................. 3
Regiones ........................................................................................................................... 4
Modelo de consistencia de datos de Amazon S3 ..................................................................... 4
Características de Amazon S3 ..................................................................................................... 6
Clases de almacenamiento .................................................................................................. 6
Políticas de buckets ............................................................................................................ 6
AWS Identity and Access Management (IAM) ......................................................................... 7
Listas de control de acceso ................................................................................................. 7
Control de versiones ........................................................................................................... 8
Operaciones ...................................................................................................................... 8
Application Programming Interface (API, Interfaz de programación de aplicaciones) de Amazon S3 .......... 8
La interfaz de REST ........................................................................................................... 8
La interfaz de SOAP ........................................................................................................... 9
Pago de Amazon S3 ................................................................................................................... 9
Servicios relacionados ................................................................................................................. 9
Realización de solicitudes .................................................................................................................. 10
Acerca de las claves de acceso .................................................................................................. 10
Claves de acceso a la cuenta de AWS ................................................................................ 10
Claves de acceso de usuario de IAM ................................................................................... 10
Credenciales de seguridad temporales ................................................................................. 11
Puntos de enlace de solicitud ..................................................................................................... 12
Realización de solicitudes mediante IPv6 ..................................................................................... 12
Introducción a IPv6 ........................................................................................................... 12
Uso de direcciones IPv6 en políticas de IAM ........................................................................ 13
Prueba de compatibilidad de dirección IP ............................................................................. 14
Uso de los puntos de enlace de doble pila ........................................................................... 15
Realización de solicitudes con los SDK de AWS ........................................................................... 19
Usar un cuenta de AWS o credenciales de usuario de IAM ..................................................... 19
Uso de credenciales temporales de usuario de IAM ............................................................... 26
Uso de credenciales temporales de usuario federado ............................................................. 34
Realización de solicitudes con la API de REST ............................................................................. 45
Puntos de enlace de doble pila (API de REST) ..................................................................... 46
Alojamiento virtual de buckets ............................................................................................ 46
Solicitud de redireccionamiento y la API de REST ................................................................. 51
Buckets ........................................................................................................................................... 54
Creación de un bucket .............................................................................................................. 55
Acerca de los permisos ..................................................................................................... 56
Administración del acceso público a los buckets ............................................................................ 56
Acceso a un bucket .................................................................................................................. 57
Opciones de configuración de buckets ......................................................................................... 58
Restricciones y limitaciones ........................................................................................................ 60
Reglas para la nomenclatura .............................................................................................. 60
Ejemplos de creación de buckets ................................................................................................ 61
Uso de la consola de Amazon S3 ....................................................................................... 62
Uso del AWS SDK for Java. ............................................................................................... 62
Uso del AWS SDK para .NET ............................................................................................. 63

Versión de API 2006-03-01


iii
Amazon Simple Storage Service Guía del desarrollador

Mediante el AWS SDK para Ruby versión 3 ......................................................................... 64


Mediante otros SDK de AWS ............................................................................................. 64
Eliminación o vaciado de un bucket ............................................................................................. 64
Eliminar un bucket ............................................................................................................ 65
Vaciado de un bucket ........................................................................................................ 67
Cifrado predeterminado de un bucket .......................................................................................... 69
Cómo configurar el cifrado predeterminado para un bucket de Amazon S3 ................................. 70
Cambiar del uso de políticas de bucket para aplicar el cifrado al cifrado predeterminado ............... 70
Uso del cifrado predeterminado con la replicación .................................................................. 70
Monitorización del cifrado predeterminado con CloudTrail y CloudWatch .................................... 71
Más información ............................................................................................................... 72
Configuración de sitio web de un bucket ...................................................................................... 72
Mediante la Consola de administración de AWS .................................................................... 72
Uso del AWS SDK for Java. ............................................................................................... 72
Mediante AWS SDK para .NET ........................................................................................... 74
Mediante SDK para PHP ................................................................................................... 75
Mediante la API de REST .................................................................................................. 76
Transfer Acceleration ................................................................................................................. 76
¿Por qué utilizar Transfer Acceleration? ............................................................................... 77
Introducción ..................................................................................................................... 77
Requisitos de uso de Aceleración de transferencia de Amazon S3 ............................................ 78
Transfer Acceleration Ejemplos ........................................................................................... 79
Buckets de pago por solicitante .................................................................................................. 83
Configuración con la consola .............................................................................................. 84
Configuración con la API REST .......................................................................................... 85
Detalles de cargos ............................................................................................................ 87
Control de acceso ..................................................................................................................... 87
Informes de facturación y de uso ................................................................................................ 88
Informes de facturación ..................................................................................................... 88
Informe de uso ................................................................................................................. 90
Cómo interpretar los informes de facturación y de uso ............................................................ 92
Uso de etiquetas de asignación de costos .......................................................................... 101
Objetos .......................................................................................................................................... 104
Clave y metadatos de objetos ................................................................................................... 105
Claves de objeto ............................................................................................................. 105
Metadatos de objetos ...................................................................................................... 108
Clases de almacenamiento ....................................................................................................... 110
Clases de almacenamiento para objetos a los que se obtiene acceso con frecuencia ................. 110
Clase de almacenamiento que optimiza automáticamente los objetos a los que se obtiene
acceso frecuente e infrecuentemente ................................................................................. 111
Clases de almacenamiento para objetos a los que se obtiene acceso con poca frecuencia .......... 111
Clases de almacenamiento para el archivado de objetos ....................................................... 112
Comparación de las clases de almacenamiento de Amazon S3 .............................................. 113
Establecimiento de la clase de almacenamiento de un objeto ................................................. 114
Subrecursos ........................................................................................................................... 115
Control de versiones ................................................................................................................ 115
Etiquetado de objetos .............................................................................................................. 118
Operaciones de la API relacionadas con el etiquetado de objetos ........................................... 119
Etiquetado de objetos e información adicional ..................................................................... 121
Administración de etiquetas de objetos ............................................................................... 124
Administración del ciclo de vida ................................................................................................ 127
¿Cuándo debo usar la configuración del ciclo de vida? ......................................................... 128
¿Cómo puedo configurar un ciclo de vida? ......................................................................... 128
Consideraciones adicionales ............................................................................................. 128
Elementos de configuración del ciclo de vida ....................................................................... 136
Ejemplos de configuración del ciclo de vida ........................................................................ 143
Configuración del ciclo de vida .......................................................................................... 154

Versión de API 2006-03-01


iv
Amazon Simple Storage Service Guía del desarrollador

Cross-Origin Resource Sharing (CORS, Uso compartido de recursos entre orígenes) ......................... 163
Uso compartido de recursos entre orígenes: casos de uso .................................................... 163
¿Cómo configuro el CORS en mi bucket? ........................................................................... 163
¿Cómo Amazon S3 evalúa la configuración CORS en un bucket? .......................................... 166
Habilitar CORS ............................................................................................................... 166
Solución de problemas de CORS ...................................................................................... 172
Operaciones en objetos ........................................................................................................... 172
Obtención de objetos ....................................................................................................... 173
Carga de objetos ............................................................................................................ 181
Copia de objetos ............................................................................................................. 219
Listas de claves de objetos .............................................................................................. 230
Eliminación de objetos ..................................................................................................... 236
Selección de contenido de los objetos ................................................................................ 254
Restaurar objetos archivados ............................................................................................ 258
Consultar objetos archivados ............................................................................................ 263
Análisis de clases de almacenamiento ............................................................................................... 267
Cómo configurar el análisis de clases de almacenamiento ............................................................. 267
Análisis de clases de almacenamiento ....................................................................................... 268
¿Cómo puedo exportar los datos del análisis de clases de almacenamiento? .................................... 271
Diseño del archivo de exportación del análisis de clases de almacenamiento ............................ 272
API REST de análisis de Amazon S3 ......................................................................................... 272
Seguridad ...................................................................................................................................... 273
Protección de los datos ............................................................................................................ 273
Privacidad entre redes ..................................................................................................... 274
Cifrado de datos ............................................................................................................. 274
Identity and Access Management .............................................................................................. 312
Introducción .................................................................................................................... 312
Uso de políticas de bucket y usuario .................................................................................. 353
Administración de acceso con ACL .................................................................................... 418
Bloqueo de acceso público ............................................................................................... 430
Registro y monitorización ......................................................................................................... 438
Validación de la conformidad .................................................................................................... 439
Inventario ....................................................................................................................... 439
Resiliencia .............................................................................................................................. 448
Cifrado de copia de seguridad .......................................................................................... 449
Control de versiones ........................................................................................................ 449
Bloqueo de objetos ......................................................................................................... 472
Seguridad de la infraestructura .................................................................................................. 479
Configuración y análisis de vulnerabilidades ................................................................................ 480
Prácticas recomendadas de seguridad ....................................................................................... 480
Prácticas recomendadas preventivas de seguridad de Amazon S3 .......................................... 480
Monitorización y auditoría de prácticas recomendadas de Amazon S3 ..................................... 483
Operaciones por lotes ...................................................................................................................... 486
Terminología .......................................................................................................................... 486
Conceptos básicos: trabajos ..................................................................................................... 487
Cómo funciona un trabajo ................................................................................................ 487
Especificación de un manifiesto ......................................................................................... 487
Creación de un trabajo ............................................................................................................ 488
Creación de una solicitud de trabajo .................................................................................. 489
Creación de una respuesta de trabajo ................................................................................ 490
Concesión de permisos para operaciones por lotes .............................................................. 490
Recursos relacionados ..................................................................................................... 493
Operaciones ........................................................................................................................... 494
PUT Object Copy ............................................................................................................ 494
Initiate Restore Object ..................................................................................................... 494
Llamar a una función Lambda. .......................................................................................... 496
Put Object ACL ............................................................................................................... 503

Versión de API 2006-03-01


v
Amazon Simple Storage Service Guía del desarrollador

Put Object Tagging ......................................................................................................... 503


Administración de trabajos ........................................................................................................ 504
Hacer un listado de trabajos ............................................................................................. 504
Ver detalles del flujo de trabajo ......................................................................................... 505
Asignación de la prioridad de los trabajos ........................................................................... 505
Estado del trabajo ........................................................................................................... 505
Seguimiento de los errores de los trabajos .......................................................................... 507
Notificaciones y registro ................................................................................................... 508
Informes de finalización .................................................................................................... 508
Ejemplos ................................................................................................................................ 508
Ejemplos de informes de finalización .................................................................................. 509
Copia entre cuentas ........................................................................................................ 510
Ejemplos de la CLI de AWS ............................................................................................ 515
Ejemplos de Java ........................................................................................................... 518
Alojamiento de un sitio web estático .................................................................................................. 523
Punto de enlace de sitio web .................................................................................................... 524
Diferencias clave entre el punto de enlace del sitio web de Amazon y de la API de REST ............ 525
Configuración de un bucket para alojamiento de sitios web ............................................................ 526
Activación del alojamiento de sitios web ............................................................................. 526
Configuración para el uso de documentos de índice ............................................................. 526
Permisos requeridos para obtener acceso a un sitio web ...................................................... 528
Configuración del registro de tráfico web (opcional) .............................................................. 529
(Opcional) Soporte para documento de error personalizado ................................................... 530
(Opcional) Configuración del redireccionamiento .................................................................. 531
Tutoriales de ejemplo .............................................................................................................. 538
Ejemplo: configuración para sitio web estático. .................................................................... 538
Ejemplo: configuración de un sitio web estático con un dominio personalizado .......................... 540
Ejemplo: Aumento de la velocidad del sitio web con Amazon CloudFront ................................. 546
Borrar recursos de ejemplo .............................................................................................. 549
Notificaciones ................................................................................................................................. 551
Información general ................................................................................................................. 551
Cómo habilitar las notificaciones de eventos ............................................................................... 553
Tipos y destinos de las notificaciones de eventos ........................................................................ 554
Tipos de eventos admitidos .............................................................................................. 554
Destinos admitidos .......................................................................................................... 555
Configuración de notificaciones con filtrado de nombre de clave de objeto ........................................ 556
Ejemplos de configuraciones de notificaciones válidas con filtrado de nombre de clave de objeto .. 556
Ejemplos de configuraciones de notificación con superposición de prefijo/sufijo no válida ............ 558
Concesión de permisos para publicar mensajes de notificación de eventos a un destino ..................... 560
Concesión de permisos para invocar una función AWS Lambda ............................................. 560
Concesión de permisos para publicar mensajes en un tema de SNS o una cola de SQS ............. 561
Tutorial de ejemplo 1 ............................................................................................................... 562
Resumen de tutorial ........................................................................................................ 563
Paso 1: Creación de un tema de Amazon SNS ................................................................... 563
Paso 2: Creación de una cola de Amazon SQS ................................................................... 564
Paso 3: Adición de una configuración de notificación a su bucket ........................................... 565
Paso 4: Prueba de la configuración ................................................................................... 568
Tutorial de ejemplo 2 ............................................................................................................... 568
Estructura de mensaje de evento .............................................................................................. 568
Replicación ..................................................................................................................................... 573
Tipos de replicación de objetos ................................................................................................. 573
Cuando utilizar la replicación .................................................................................................... 573
Cuándo se debe usar la CRR ................................................................................................... 573
Cuándo se debe usar la SRR ................................................................................................... 574
Requisitos de replicación .......................................................................................................... 574
¿Qué replica Amazon S3? ....................................................................................................... 575
¿Qué se replica? ............................................................................................................ 575

Versión de API 2006-03-01


vi
Amazon Simple Storage Service Guía del desarrollador

Elementos que no se replican ........................................................................................... 576


Temas relacionados ........................................................................................................ 577
Información general de configuración de la replicación .................................................................. 578
Información general de la configuración de replicación .......................................................... 579
Configuración de permisos para la replicación ..................................................................... 587
Configuraciones de replicación adicionales .................................................................................. 590
Cambio del propietario de la réplica ................................................................................... 591
Replicación de objetos cifrados ......................................................................................... 593
Tutoriales de replicación ........................................................................................................... 598
Ejemplo 1: Configuración de buckets en la misma cuenta ...................................................... 599
Ejemplo 2: Configuración de buckets en cuentas diferentes ................................................... 608
Ejemplo 3: Cambio del propietario de la réplica ................................................................... 609
Ejemplo 4: Replicación de objetos cifrados ......................................................................... 613
Información del estado de replicación ......................................................................................... 618
Temas relacionados ........................................................................................................ 619
Solución de problemas de replicación ........................................................................................ 619
Temas relacionados ........................................................................................................ 620
Replicación: consideraciones adicionales .................................................................................... 620
Configuración de ciclo de vida y réplicas de objetos ............................................................. 621
Configuración del control de versión y la replicación ............................................................. 621
Configuración de registro y replicación ............................................................................... 621
CRR y la región de destino .............................................................................................. 622
Interrupción temporal de replicación ................................................................................... 622
Temas relacionados ........................................................................................................ 622
Direccionamiento de solicitudes ......................................................................................................... 623
Solicitudes de redireccionamiento en la API REST ....................................................................... 623
Direccionamiento de DNS ................................................................................................ 623
Redireccionamiento de solicitud temporal ............................................................................ 624
Redireccionamiento de solicitud permanente ....................................................................... 626
Ejemplos de redireccionamiento de solicitud ........................................................................ 626
Consideraciones acerca del DNS .............................................................................................. 627
Optimización del rendimiento de Amazon S3 ....................................................................................... 628
Directrices de rendimiento ........................................................................................................ 629
Medición del rendimiento .................................................................................................. 629
Escalado horizontal ......................................................................................................... 629
Uso de recuperaciones de rango de byte ............................................................................ 629
Reintento de solicitudes ................................................................................................... 630
Combinación de Amazon S3 y Amazon EC2 en la misma región ............................................ 630
Uso de Transfer Acceleration para minimizar la latencia ........................................................ 630
Uso de los SDK de AWS más recientes ............................................................................. 630
Patrones de diseño de rendimiento ............................................................................................ 631
Almacenamiento en caché para el contenido de acceso frecuente .......................................... 631
Tiempos de espera y reintentos de aplicaciones sensibles a la latencia .................................... 632
Escalado horizontal y uso en paralelo de solicitudes ............................................................. 632
Aceleración de las transferencias de datos dispares en sentido geográfico .............................. 633
Monitorización ................................................................................................................................. 635
Herramientas de monitorización ................................................................................................. 635
Herramientas automatizadas ............................................................................................. 635
Herramientas manuales .................................................................................................... 636
Monitorización de métricas con CloudWatch ................................................................................ 636
Dimensiones y métricas ................................................................................................... 637
Métricas diarias de almacenamiento para buckets de Amazon S3 para CloudWatch ................... 637
Métricas de solicitudes de Amazon S3 para CloudWatch ....................................................... 638
Dimensiones de Amazon S3 CloudWatch ........................................................................... 640
Acceso a las métricas de CloudWatch ............................................................................... 642
Recursos relacionados ..................................................................................................... 643
Configuraciones de métricas para buckets .................................................................................. 643

Versión de API 2006-03-01


vii
Amazon Simple Storage Service Guía del desarrollador

El "mejor esfuerzo" y la entrega de métricas en CloudWatch .................................................. 644


Filtrado de configuraciones de métricas .............................................................................. 644
Cómo agregar configuraciones de métricas ......................................................................... 644
Registro con Amazon S3 .......................................................................................................... 645
Registro de llamadas a la API con AWS CloudTrail ...................................................................... 647
Información de Amazon S3 en CloudTrail ........................................................................... 647
Uso de registros de CloudTrail con los registros de acceso al servidor en Amazon S3 y
CloudWatch Logs ............................................................................................................ 652
Ejemplo: Entradas de archivos de log de Amazon S3 ........................................................... 653
Recursos relacionados ..................................................................................................... 655
Identificación de solicitudes de Amazon S3 mediante CloudTrail ..................................................... 655
Cómo captura CloudTrail las solicitudes realizadas a Amazon S3 ........................................... 655
Cómo habilitar el registro de eventos de CloudTrail para los buckets y los objetos de S3 ............. 655
Identificación de las solicitudes realizadas a Amazon S3 en un registro de CloudTrail ................. 656
Uso de AWS CloudTrail para identificar solicitudes de Signature Version 2 en Amazon S3 ........... 658
Uso de CloudTrail para identificar el acceso a objetos de Amazon S3 ...................................... 660
Recursos relacionados ..................................................................................................... 655
BitTorrent ....................................................................................................................................... 663
Cómo se le cobra la entrega por BitTorrent ................................................................................. 663
Uso de BitTorrent para recuperar objetos almacenados en Amazon S3 ........................................... 664
Publicación de contenido con Amazon S3 y BitTorrent .................................................................. 665
Control de errores ........................................................................................................................... 666
La respuesta de error de REST ................................................................................................ 666
Encabezados de respuesta ............................................................................................... 666
Respuesta de error ......................................................................................................... 667
La respuesta de error de SOAP ................................................................................................ 668
Prácticas recomendadas para los errores de Amazon S3 .............................................................. 668
Reintente en caso de recibir una respuesta de InternalErrors ................................................. 668
Ajuste la aplicación para errores SlowDown repetidos ........................................................... 668
Aísle los errores .............................................................................................................. 669
Solución de problemas de Amazon S3 ............................................................................................... 670
Solución de problemas de Amazon S3 por síntoma ...................................................................... 670
Aumentos significativos en las respuestas HTTP 503 a solicitudes para buckets con control de
versiones habilitado ......................................................................................................... 670
Comportamiento inesperado al acceder a los buckets configurados con CORS ......................... 671
Obtención de ID de solicitudes de Amazon S3 para AWS Support .................................................. 671
Utilización de HTTP para obtener ID de solicitudes .............................................................. 671
Utilización de un navegador web para obtener ID de solicitudes ............................................. 671
Utilización de los SDK de AWS para obtener ID de solicitudes ............................................... 672
Uso de AWS CLI para obtener ID de solicitudes .................................................................. 673
Temas relacionados ................................................................................................................ 673
Registros de acceso al servidor ........................................................................................................ 674
Cómo habilitar el registro de acceso al servidor ........................................................................... 674
Formato de clave de objeto de registro ...................................................................................... 676
¿Cómo se envían los registros? ................................................................................................ 676
Envío de archivos de registro de servidor según el mejor esfuerzo .................................................. 676
Los cambios del estado de los registros del bucket se aplican con el tiempo ..................................... 677
Habilitación del registro con la consola ....................................................................................... 677
Habilitación de registros mediante programación .......................................................................... 677
Habilitación del registro .................................................................................................... 677
Concesión de permisos de WRITE y READ_ACP al grupo Envío de archivos de registro ............. 678
Ejemplo: AWS SDK para .NET .......................................................................................... 678
Recursos relacionados ..................................................................................................... 680
Formato de registro ................................................................................................................. 680
Registros adicionales para operaciones de copia ................................................................. 685
Información de registro de acceso personalizada ................................................................. 689
Consideraciones sobre programación para el formato de registro de acceso al servidor extensible 689

Versión de API 2006-03-01


viii
Amazon Simple Storage Service Guía del desarrollador

Eliminación de archivos de registro ............................................................................................ 689


Recursos relacionados ..................................................................................................... 690
Uso de registros de acceso de Amazon S3 para identificar solicitudes de Amazon S3 ........................ 690
Habilitación de registros de acceso de Amazon S3 para solicitudes ......................................... 690
Consulta de registros de acceso de Amazon S3 para solicitudes ............................................ 692
Uso de los archivos de registro de Amazon S3 para identificar solicitudes SigV2 ....................... 695
Uso de archivos de registro de Amazon S3 para identificar el acceso a objetos ......................... 695
Recursos relacionados ..................................................................................................... 696
SDK y exploradores de AWS ............................................................................................................ 697
Especificación de Signature Version en la autenticación de solicitudes ............................................ 698
AWS Signature Version 2 se va a desactivar (esta característica quedará obsoleta) para Amazon
S3 ................................................................................................................................. 700
Transición de Signature Version 2 a Signature Version 4 ....................................................... 701
Configuración de la CLI de AWS ............................................................................................... 704
Uso del AWS SDK for Java. ..................................................................................................... 705
La organización de API de Java ........................................................................................ 706
Prueba de ejemplos de código Java de Amazon S3 ............................................................. 706
Uso del AWS SDK para .NET ................................................................................................... 706
La organización de la API de .NET .................................................................................... 707
Ejecución de ejemplos de código .NET de Amazon S3 ......................................................... 708
Uso del AWS SDK para PHP y ejecución de ejemplos de PHP ...................................................... 708
Niveles de AWS SDK para PHP ...................................................................................... 708
Ejecución de ejemplos de PHP ......................................................................................... 709
Recursos relacionados ..................................................................................................... 709
Uso de la versión 3 de AWS SDK parar Ruby ............................................................................. 709
La organización de la API de Ruby .................................................................................... 709
Prueba de ejemplos de script de Ruby ............................................................................... 709
Uso del AWS SDK for Python (Boto) ......................................................................................... 710
Uso de los AWS Mobile SDK para iOS y Android ........................................................................ 710
Más información .............................................................................................................. 711
Uso de la biblioteca de JavaScript de AWS Amplify ...................................................................... 711
Más información .............................................................................................................. 711
Apéndices ...................................................................................................................................... 712
Apéndice A: uso de la API SOAP .............................................................................................. 712
Elementos comunes de la Application Programming Interface (API, Interfaz de programación de
aplicaciones) de SOAP .................................................................................................... 712
Autenticación de solicitudes SOAP .................................................................................... 713
Configuración de políticas de acceso con SOAP .................................................................. 714
Apéndice B: Autenticación de solicitudes (AWS Signature Versión 2) .............................................. 715
Autenticación de solicitudes con la API de REST ................................................................. 715
Firma y autenticación de solicitudes REST .......................................................................... 717
Cargas basadas en el navegador con POST ....................................................................... 728
Recursos ....................................................................................................................................... 744
Referencia de la SQL ...................................................................................................................... 745
Comando SELECT .................................................................................................................. 745
Lista SELECT ................................................................................................................. 745
Cláusula FROM .............................................................................................................. 745
Cláusula WHERE ............................................................................................................ 749
Cláusula LIMIT (solo para Amazon S3 Select) ..................................................................... 749
Acceso mediante atributos ................................................................................................ 749
Distinción entre mayúsculas y minúsculas en los nombres de atributos o encabezados ............... 750
Uso de palabras clave reservadas como términos definidos por el usuario ................................ 751
Expresiones escalares ..................................................................................................... 751
Tipos de datos ........................................................................................................................ 752
Conversiones de tipos de datos ........................................................................................ 752
Tipos de datos admitidos ................................................................................................. 752
Operadores ............................................................................................................................ 753

Versión de API 2006-03-01


ix
Amazon Simple Storage Service Guía del desarrollador

Operadores lógicos ......................................................................................................... 753


Operadores de comparación ............................................................................................. 753
Operadores de coincidencia de patrones ............................................................................ 753
Operadores matemáticos .................................................................................................. 753
Jerarquía de los operadores ............................................................................................. 754
Palabras clave reservadas ........................................................................................................ 754
Funciones SQL ....................................................................................................................... 758
Funciones de agregación (solo Amazon S3 Select) .............................................................. 758
Funciones condicionales .................................................................................................. 759
Funciones de conversión .................................................................................................. 760
Funciones Date ............................................................................................................... 761
Funciones de cadena ...................................................................................................... 767
Historial de revisión ......................................................................................................................... 770
Actualizaciones anteriores ........................................................................................................ 773
AWS Glossary ................................................................................................................................ 790

Versión de API 2006-03-01


x
Amazon Simple Storage Service Guía del desarrollador
¿Cómo...?

¿Qué es Amazon S3?


Amazon Simple Storage Service es un servicio de almacenamiento para Internet. Está diseñado para
facilitar a los desarrolladores recursos de computación escalables basados en Web.

Amazon S3 tiene una interfaz de servicios web simple que puede utilizar para almacenar y recuperar
cualquier cantidad de datos, en cualquier momento, desde cualquier parte de la web. Ofrece a cualquier
desarrollador acceso a la misma infraestructura de almacenamiento de datos económica, altamente
escalable, fiable, segura y rápida que utiliza Amazon para mantener su propia red global de sitios web.
Este servicio tiene como fin maximizar los beneficios del escalado y trasladarlos a los desarrolladores.

En esta guía se explican los conceptos principales de Amazon S3, como los de bucket y objeto, y cómo
trabajar con estos recursos con la interfaz de programación de aplicaciones (API) de Amazon S3.

¿Cómo...?
Información Secciones pertinentes

Información general de productos y Amazon S3


precios

Descubra esta rápida introducción Guía de introducción a Amazon Simple Storage Service
práctica a Amazon S3

Aprenda la terminología y los conceptos Introducción a Amazon S3 (p. 2)


claves de Amazon S3

¿Cómo se trabaja con buckets? Uso de buckets de Amazon S3 (p. 54)

¿Cómo se trabaja con objetos? Trabajo con objetos de Amazon S3 (p. 104)

¿Cómo se hacen solicitudes? Realización de solicitudes (p. 10)

¿Cómo se administra el acceso a los Administración de identidad y acceso en Amazon


recursos? S3 (p. 312)

Versión de API 2006-03-01


1
Amazon Simple Storage Service Guía del desarrollador
Información general de Amazon S3 y esta guía

Introducción a Amazon S3
Esta introducción a Amazon Simple Storage Service (Amazon S3) ofrece un resumen detallado de este
servicio web. Después de leer esta sección, tendrá una idea más clara sobre lo que ofrece y cómo
adaptarlo a su compañía.

Temas
• Información general de Amazon S3 y esta guía (p. 2)
• Ventajas del uso de Amazon S3 (p. 2)
• Conceptos de Amazon S3 (p. 3)
• Características de Amazon S3 (p. 6)
• Application Programming Interface (API, Interfaz de programación de aplicaciones) de Amazon
S3 (p. 8)
• Pago de Amazon S3 (p. 9)
• Servicios relacionados (p. 9)

Información general de Amazon S3 y esta guía


Amazon S3 tiene una interfaz de servicios web simple que puede utilizar para almacenar y recuperar
cualquier cantidad de datos, en cualquier momento, desde cualquier parte de la web.

En esta guía se describe cómo enviar solicitudes para crear buckets, almacenar y recuperar sus objetos, y
administrar permisos en sus recursos. En esta guía también se describe el control de acceso y el proceso
de autenticación. El control de acceso define quién puede acceder a los objetos y los buckets en Amazon
S3, y el tipo de acceso (por ejemplo, READ y WRITE). El proceso de autenticación verifica la identidad de
un usuario que intenta acceder a Amazon Web Services (AWS).

Ventajas del uso de Amazon S3


Amazon S3 está intencionalmente desarrollado con un conjunto mínimo de características que se centra
en la simplicidad y robustez. A continuación se describen algunas ventaja de utilizar Amazon S3:

• Creación de buckets: cree y nombre un bucket que almacena datos. Los buckets son los contenedores
fundamentales en Amazon S3 para el almacenamiento de datos.
• Almacenamiento de datos en buckets: almacene una cantidad ilimitada de datos en un bucket. Cargue la
cantidad de objetos que desee en un bucket de Amazon S3. Cada objeto puede contener hasta 5 TB de
datos. Cada objeto se almacena y recupera con una clave única asignada por el desarrollador.
• Descarga de datos: descargue sus datos o permita que otros lo hagan. Descargue los datos en cualquier
momento o permita que otros hagan lo mismo.
• Permisos: conceda o deniegue acceso a otras personas que desean cargar o descargar datos en
su bucket de Amazon S3. Conceda permisos para cargar y descargar a tres tipos de usuarios. Los
mecanismos de autenticación pueden ayudar a proteger los datos del acceso no autorizado.
• Interfaces estándar: utilice las interfaces REST y SOAP basadas en estándares diseñadas para trabajar
con cualquier conjunto de herramientas de desarrollo de Internet.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Versión de API 2006-03-01


2
Amazon Simple Storage Service Guía del desarrollador
Conceptos de Amazon S3

Conceptos de Amazon S3
En esta sección se describen conceptos y terminología clave que debe comprender para utilizar Amazon
S3 de manera eficiente. Estos se presentan en el orden en que probablemente los encuentre.

Temas
• Buckets (p. 3)
• Objetos (p. 3)
• Claves (p. 3)
• Regiones (p. 4)
• Modelo de consistencia de datos de Amazon S3 (p. 4)

Buckets
Un bucket es un contenedor para objetos almacenados en Amazon S3. Cada objeto está almacenado
en un bucket. Por ejemplo, si el objeto denominado photos/puppy.jpg se almacena en el bucket
johnsmith, es direccionable mediante el URL http://johnsmith.s3.amazonaws.com/photos/
puppy.jpg.

Los buckets sirven a diversos fines:

• Organizan el espacio de nombres de Amazon S3 al más alto nivel.


• Identifican la cuenta responsable para los cargos de almacenamiento y transferencia de datos.
• Juegan un papel en control de acceso.
• Sirven como la unidad de agregación para informes de uso.

Puede configurar los buckets para que se creen en una región de AWS específica. Para obtener más
información, consulte Acceso bucket (p. 57). También puede configurar un bucket de manera que cada
vez que se le agrega un objeto, Amazon S3 genere un ID de versión único y se lo asigne al objeto. Para
obtener más información, consulte Uso del control de versiones (p. 449).

Para obtener más información acerca de los buckets, consulte Uso de buckets de Amazon S3 (p. 54).

Objetos
Los objetos son las entidades fundamentales almacenadas en Amazon S3. Los objetos se componen de
datos de objetos y metadatos. La parte de datos resulta opaca a Amazon S3. Los metadatos son conjuntos
de pares nombre-valor que describen el objeto. Incluyen algunos metadatos predeterminados, como la
fecha de la última modificación y los metadatos HTTP estándar, como Content-Type. También puede
especificar metadatos personalizados en el momento en que se almacena el objeto.

Un objeto se identifica de forma exclusiva dentro de un bucket con una clave (nombre) y un ID de versión.
Para obtener más información, consulte Claves (p. 3) y Uso del control de versiones (p. 449).

Claves
Una clave es el identificador único de un objeto dentro de un bucket. Cada objeto de un bucket tiene
exactamente una clave. La combinación de un bucket, clave e ID de versión identifican de forma única
cada objeto. Por tanto, puede pensar en Amazon S3 como asignación de datos básica entre «bucket +
clave + versión» y el objeto en sí. A cada objeto de Amazon S3 se puede acceder de forma exclusiva
a través de la combinación de punto de enlace de servicio web, nombre del bucket, clave, y en forma

Versión de API 2006-03-01


3
Amazon Simple Storage Service Guía del desarrollador
Regiones

opcional, una versión. Por ejemplo, en el URL http://doc.s3.amazonaws.com/2006-03-01/


AmazonS3.wsdl, "doc" es el nombre del bucket y "2006-03-01/AmazonS3.wsdl" es la clave.

Para obtener más información acerca de las claves de objeto, consulte Claves de objeto.

Regiones
Puede elegir la región geográfica de AWS donde Amazon S3 almacenará los buckets que usted crea.
Puede elegir una región para optimizar la latencia, minimizar los costos o cumplir con requisitos legales.
Los objetos almacenados en una región nunca la abandonan, a menos que se transfieran expresamente a
otra región. Por ejemplo, los objetos almacenados en la región UE (Irlanda) permanecen siempre en ella.
Note

Solo puede tener acceso a Amazon S3 y sus características en las regiones de AWS que están
habilitadas para su cuenta.

Para ver una lista de las regiones y los puntos de enlace de Amazon S3, consulte Regiones y puntos de
enlace en la Referencia general de AWS.

Modelo de consistencia de datos de Amazon S3


Amazon S3 brinda consistencia de lectura tras escritura para PUTS de objetos nuevos en su bucket de S3
en todas las regiones con una advertencia. La advertencia indica que si usted realiza una solicitud HEAD
o GET al nombre de clave (para averiguar si el objeto existe) antes de crear el objeto, Amazon S3 brinda
consistencia final para lectura tras escritura.

Amazon S3 ofrece consistencia final para sobrescribir PUTS y DELETES en todas las regiones.

Las actualizaciones en una sola clave son atómicas. Por ejemplo, si envía una solicitud PUT a una clave
existente, una lectura posterior puede devolver los datos anteriores o los datos actualizados, pero nunca
devolverá datos dañados o parciales.

Amazon S3 consigue una alta disponibilidad replicando datos entre varios servidores ubicados en centros
de datos de AWS. Si una solicitud PUT se realiza correctamente, sus datos se almacenan de forma
segura. Sin embargo, la información sobre los cambios se debe replicar en todo Amazon S3, lo que puede
llevar algo de tiempo, y por lo tanto, usted deberá observar los siguientes comportamientos:

• Un proceso escribe un nuevo objeto en Amazon S3 y enumera inmediatamente claves dentro del bucket.
Hasta que el cambio se propague totalmente, es posible que el objeto no aparezca en la lista.
• Un proceso reemplaza un objeto existente e inmediatamente intenta leerlo. Hasta que el cambio se
propague totalmente, Amazon S3 podría devolver los datos anteriores.
• Un proceso elimina un objeto existente e inmediatamente intenta leerlo. Hasta que la eliminación se
propague totalmente, Amazon S3 puede devolver los datos eliminados.
• Un proceso elimina un objeto existente y enumera inmediatamente claves dentro del bucket. Hasta que
la eliminación se propague totalmente, Amazon S3 puede enumerar los objetos eliminados.

Note

Amazon S3 actualmente no admite el bloque de objetos. Si se realizan dos solicitudes PUT


simultáneamente a la misma clave, prevalece la solicitud con la marca temporal más reciente. Si
esto es un problema, deberá crear un mecanismo de bloque de objeto en su aplicación.
Las actualizaciones se basan en claves. No se pueden realizar actualizaciones atómicas en
las claves. Por ejemplo, no puede realizar la actualización de una clave que depende de la
actualización de otra clave, a menos que diseñe esta funcionalidad en su aplicación.

En la siguiente tabla se describen las características de la lectura consistente final y la lectura consistente.

Versión de API 2006-03-01


4
Amazon Simple Storage Service Guía del desarrollador
Modelo de consistencia de datos de Amazon S3

Lectura consistente final Lectura consistente

Lecturas obsoletas posibles Sin lecturas obsoletas

Latencia de lectura más baja Latencia de lectura potencialmente más alta

Mayor desempeño de lectura Desempeño de lectura potencialmente más bajo

Aplicaciones simultáneas
En esta sección se brindan ejemplos de solicitudes de lectura consistente final y lectura consistente
cuando varios clientes escriben a los mismos elementos.

En este ejemplo, tanto W1 (escritura 1) como W2 (escritura 2) se completan antes del inicio de R1 (lectura
1) y R2 (lectura 2). Para una lectura consistente, R1 y R2 devuelven color = ruby. En una lectura
consistente final, R1 y R2 podrían devolver color = red o color = ruby, en función del tiempo
transcurrido.

En el siguiente ejemplo, W2 no se completa antes del inicio de R1. Por lo tanto, R1 puede devolver color
= ruby o color = garnet para una lectura consistente o una lectura consistente final. Además,
según la cantidad de tiempo transcurrido, es posible que una lectura consistente final no devuelva ningún
resultado.

Para una lectura consistente, R2 devuelve color = garnet. En una lectura consistente final, R2 podría
devolver color = ruby o color = garnet, en función del tiempo transcurrido.

En el último ejemplo, el Cliente 2 realiza una W2 antes de que Amazon S3 devuelva un resultado exitoso
para la W1; por lo tanto, se desconoce el resultado del valor final (color = garnet o color = brick).

Versión de API 2006-03-01


5
Amazon Simple Storage Service Guía del desarrollador
Características de Amazon S3

Todas las lecturas posteriores (lectura consistente o lectura consistente final) pueden devolver cualquiera
de los dos valores. Además, según la cantidad de tiempo transcurrido, es posible que una lectura
consistente final no devuelva ningún resultado.

Características de Amazon S3
En esta sección se describen las características principales de Amazon S3.

Temas
• Clases de almacenamiento (p. 6)
• Políticas de buckets (p. 6)
• AWS Identity and Access Management (IAM) (p. 7)
• Listas de control de acceso (p. 7)
• Control de versiones (p. 8)
• Operaciones (p. 8)

Clases de almacenamiento
Amazon S3 ofrece una gama de clases de almacenamiento diseñada para diferentes casos de uso.
Incluyen Amazon S3 STANDARD para almacenamiento general de los datos a los que se accede
frecuentemente, Amazon S3 STANDARD_IA para datos de duración prolongada a los que se obtiene
acceso con menos frecuencia y GLACIER para un archivado a largo plazo.

Para obtener más información, consulte Clases de almacenamiento de Amazon S3 (p. 110).

Políticas de buckets
Las políticas de buckets brindan control de acceso centralizado a los buckets y a los objetos en función
de una variedad de condiciones, como las operaciones de Amazon S3, los solicitantes, los recursos y los
aspectos de la solicitud (p. ej., la dirección IP). Las políticas se expresan en nuestro lenguaje de la política
de acceso y permiten la administración centralizada de los permisos. Los permisos asociados a un bucket
se aplican a todos los objetos de ese bucket.

Tanto las personas como las compañías pueden utilizar las políticas de buckets. Cuando las compañías
se registran en Amazon S3, estas crean una cuenta. A partir de entonces, la compañía se convierte en
sinónimo de cuenta. Las cuentas (y los empleados) son financieramente responsables de los recursos de
Amazon que crean. Las cuentas tienen la facultad de conceder permisos de política de buckets y asignar

Versión de API 2006-03-01


6
Amazon Simple Storage Service Guía del desarrollador
AWS Identity and Access Management (IAM)

permisos a empleados en función de diversas condiciones. Por ejemplo, una cuenta puede crear una
política que le brinde al usuario acceso de escritura:

• a un bucket de S3 en particular;
• desde una red corporativa de la cuenta;
• durante el horario comercial;

Una cuenta puede conceder acceso de lectura y escritura limitado a un usuario, pero también le permite
a otra crear y eliminar buckets. Una cuenta podría permitir que varias oficinas de campo almacenen sus
informes diarios en un único bucket. Podría permitir a cada oficina escribir solo en un determinado conjunto
de nombres (por ejemplo, "Nevada/*" o "Utah/*") y solo desde el rango de direcciones IP de la oficina.

A diferencia de las listas de control de acceso (descritas más adelante), que pueden añadir (conceder)
permisos solo a objetos individuales, las políticas pueden añadir o denegar permisos a todos los objetos
(o un subconjunto de ellos) de un bucket. Con una solicitud, una cuenta puede configurar permisos para
cualquier cantidad de objetos en un bucket. Una cuenta puede utilizar comodines (similar a operadores de
expresión normales) en nombres de recursos de Amazon (ARN) y otros valores. A continuación, la cuenta
podría controlar el acceso a grupos de objetos que empiezan por un prefijo común o terminan por una
expresión dada, como, por ejemplo, .html.

Solo el propietario del bucket puede asociar una política a un bucket. Las políticas (escritas en el lenguaje
de la política de acceso) permiten o deniegan solicitudes en función de lo siguiente:

• Operaciones de buckets de Amazon S3 (como PUT ?acl) y operaciones de objetos (como PUT
Object o GET Object)
• Solicitante
• Condiciones especificadas en la política

Una cuenta puede controlar el acceso en función de operaciones específicas de Amazon S3, como
GetObject, GetObjectVersion, DeleteObject o DeleteBucket.

Las condiciones pueden incluir direcciones IP, rangos de direcciones IP en notación CIDR, fechas, agentes
de usuario, origen de referencia y transportes de HTTP (HTTP y HTTPS).

Para obtener más información, consulte Uso de políticas de bucket y usuario (p. 353).

AWS Identity and Access Management (IAM)


Puede usar AWS Identity and Access Management (IAM) para gestionar el acceso a sus recursos de
Amazon S3.

Por ejemplo, puede usar IAM con Amazon S3 para controlar el tipo de acceso que tiene un usuario o grupo
de usuarios a partes concretas de un bucket Amazon S3 cuya propiedad es de la cuenta de AWS.

Para obtener más información sobre IAM, consulte lo siguiente:

• AWS Identity and Access Management (IAM)


• Introducción
• Guía del usuario de IAM

Listas de control de acceso


Puede controlar el acceso a cada uno de sus buckets y objetos con una lista de control de acceso (ACL).
Para obtener más información, consulte Administración de acceso con ACL (p. 418).

Versión de API 2006-03-01


7
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Control de versiones
Puede usar el control de versiones para conservar diversas variantes de un objeto en el mismo bucket.
Para obtener más información, consulte Control de versiones de objetos (p. 115).

Operaciones
A continuación se describen las operaciones más comunes que ejecutará a través de la API.

Operaciones comunes

• Crear un bucket: cree y nombre su propio bucket para almacenar sus objetos.
• Escribir un objeto: cree o sobrescriba un objeto para almacenar datos. Cuando escribe un objeto, debe
especificar una clave única en el espacio de nombres de su bucket. Aquí también es cuando debe
especificar cualquier control de acceso que desea aplicar en el objeto.
• Leer un objeto: relea los datos. Puede descargar los datos a través de HTTP o BitTorrent.
• Eliminar un objeto: elimine algunos de sus datos.
• Enumerar claves: indique las claves incluidas en uno de sus buckets. Puede filtrar la lista de claves en
función de un prefijo.

Más adelante en esta guía se describen en detalles estas operaciones y todas las demás funcionalidades.

Application Programming Interface (API, Interfaz de


programación de aplicaciones) de Amazon S3
La arquitectura de Amazon S3 está diseñada con un lenguaje de programación neutro y utiliza nuestras
interfaces compatibles con AWS para almacenar y recuperar objetos.

Amazon S3 brinda una interfaz de REST y una interfaz de SOAP. Estas son similares, pero hay algunas
diferencias. Por ejemplo en la interfaz de REST, los metadatos se devuelven en encabezados HTTP. Dado
que solo admitimos solicitudes HTTP de hasta 4 KB (sin incluir el cuerpo), la cantidad de metadatos que
puede aplicar es limitada.
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

La interfaz de REST
La API de REST es un interfaz HTTP para Amazon S3. Con REST, usted puede utilizar solicitudes HTTP
estándar para crear, recuperar y eliminar buckets y objetos.

Puede utilizar cualquier conjunto de herramientas que admita HTTP para utilizar la API de REST. Incluso
puede utilizar un navegador para recuperar objetos, siempre y cuando se puedan leer de forma anónima.

La API de REST utiliza códigos de estado y encabezados HTTP estándar, para que los conjuntos de
herramientas y los navegadores estándar funcionen según lo previsto. En algunas áreas, hemos añadido
una funcionalidad al HTTP (por ejemplo, añadimos encabezados para admitir el control de acceso). En
estos casos, hicimos todo lo posible para añadir la nueva funcionalidad de manera que coincida con el
estilo del uso de HTTP estándar.

Versión de API 2006-03-01


8
Amazon Simple Storage Service Guía del desarrollador
La interfaz de SOAP

La interfaz de SOAP
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

La API de SOAP brinda una interfaz de SOAP 1.1 con codificación literal de documentos. La manera
más común de utilizar SOAP es descargar Web Services Description Language (WSDL, lenguaje de
descripción de servicios web) (consulte http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl), utilizar
un conjunto de herramientas de SOAP, como Apache Axis o Microsoft .NET, para crear enlaces y luego
escribir el código que utiliza los enlaces para llamar a Amazon S3.

Pago de Amazon S3
Los precios para Amazon S3 están diseñados de manera que no tiene que planificar los requisitos de
almacenamiento de su aplicación. La mayoría de los proveedores de almacenamiento lo obligan a comprar
una capacidad predeterminada de almacenamiento y transferencia de red: si excede esa capacidad, su
servicio se cancela o usted debe pagar cargos excesivos. Si no excede esa capacidad, paga como si la
hubiera utilizado toda.

Amazon S3 le cobra solo lo que realmente utiliza, sin costos ocultos ni cargos excesivos. Esto ofrece a los
desarrolladores un servicio de costo variable que puede crecer junto con la compañía mientras disfrutan
las ventajas económicas de la infraestructura de AWS.

Antes de almacenar algo en Amazon S3, debe registrarse en el servicio y proporcionar un método de pago
que se facturará al final de cada mes. No existe ningún costo de instalación para comenzar a utilizar este
servicio. Al final del mes, se le cobra automáticamente con el método de pago de acuerdo con el uso de
ese mes.

Para obtener información acerca del pago por el almacenamiento de Amazon S3, consulte Precios de
Amazon S3.

Servicios relacionados
Una vez que carga sus datos en Amazon S3, puede utilizarlos con otros servicios de AWS. Los siguientes
servicios son los que puede utilizar con más frecuencia:

• Amazon Elastic Compute Cloud: este servicio web proporciona recursos de computación virtual en la
nube. Para obtener más información, consulte la página de detalles del producto de Amazon EC2.
• Amazon EMR: este servicio permite a empresas, investigadores, analistas de datos y desarrolladores
procesar de forma fácil y rentable grandes volúmenes de datos. Utiliza un marco Hadoop hospedado
que se ejecuta en la infraestructura basada en la web de Amazon EC2 y Amazon S3. Para obtener más
información, consulte la página de detalles del producto de Amazon EMR.
• AWS Snowball: este servicio acelera la transferencia de grandes cantidades de datos desde y hacia
AWS mediante el uso de dispositivos de almacenamiento físicos, sin tener que pasar por Internet. Cada
tipo de dispositivo AWS Snowball puede transportar datos a velocidades superiores a las de Internet.
Para transportar los datos, estos se envían en los dispositivos a través de un transportista regional. Para
obtener más información, consulte la página de detalles del producto de AWS Snowball.

Versión de API 2006-03-01


9
Amazon Simple Storage Service Guía del desarrollador
Acerca de las claves de acceso

Realización de solicitudes
Temas
• Acerca de las claves de acceso (p. 10)
• Puntos de enlace de solicitud (p. 12)
• Realización de solicitudes a Amazon S3 mediante IPv6 (p. 12)
• Realización de solicitudes con los SDK de AWS (p. 19)
• Realización de solicitudes con la API de REST (p. 45)

Amazon S3 es un servicio de REST. Puede enviar solicitudes a Amazon S3 con la API REST o las
bibliotecas de encapsulamiento de los SDK de AWS (consulte Código de muestra y bibliotecas) que
incluyen la API de REST de Amazon S3 subyacente, lo que simplifica sus tareas de programación.

Toda interacción con Amazon S3 es autenticada o anónima. La autenticación es un proceso que permite
verificar la identidad del solicitante que intenta acceder a un producto de Amazon Web Services (AWS).
Las solicitudes autenticadas deben incluir un valor de firma que autentique al remitente de la solicitud. El
valor de firma, en parte, se genera a partir de las claves de acceso de AWS del solicitante (ID de clave
de acceso y clave de acceso secreta). Para obtener más información acerca de cómo obtener claves de
acceso, consulte ¿Cómo obtengo credenciales de seguridad? en la AWS General Reference

Si utiliza el SDK de AWS, las bibliotecas computan la firma a partir de las claves que usted proporciona.
Sin embargo, si realiza llamadas directas a la API de REST en su aplicación, debe escribir el código para
computar la firma y añadirla a la solicitud.

Acerca de las claves de acceso


En las siguientes secciones se revisan los tipos de claves de acceso que puede utilizar para realizar
solicitudes autenticadas.

Claves de acceso a la cuenta de AWS


Las claves de acceso a la cuenta brindan acceso completo a los recursos de AWS que son propiedad de la
cuenta. A continuación, se proporcionan ejemplos de claves de acceso:

• ID de clave de acceso (una cadena alfanumérica de 20 caracteres). Por ejemplo:


AKIAIOSFODNN7EXAMPLE
• Clave de acceso secreta (una cadena de 40 caracteres). Por ejemplo: wJalrXUtnFEMI/K7MDENG/
bPxRfiCYEXAMPLEKEY

El ID de clave de acceso identifica una cuenta de AWS de forma exclusiva. Puede utilizar estas claves de
acceso para enviar solicitudes autenticadas a Amazon S3.

Claves de acceso de usuario de IAM


Puede crear una cuenta de AWS para su compañía; sin embargo, puede haber varios empleados en la
organización que necesitan acceso a los recursos de AWS de su organización. Compartir sus claves de

Versión de API 2006-03-01


10
Amazon Simple Storage Service Guía del desarrollador
Credenciales de seguridad temporales

acceso para una cuenta de AWS reduce la seguridad; y crear cuentas de AWS individuales para cada
empleado puede no ser conveniente. Además, no puede compartir fácilmente recursos como buckets y
objetos ya que estos pertenecen a diferentes cuentas. Para compartir recursos, debe conceder permisos,
lo que implica un trabajo adicional.

En dichos casos, puede utilizar AWS Identity and Access Management (IAM) para crear usuarios en su
cuenta de AWS con sus propias claves de acceso y adjuntar políticas de usuario de IAM para concederles
los permisos de acceso a recursos adecuados. Para administrar mejor estos usuarios, IAM le permite crear
grupos de usuarios y conceder permisos a nivel grupal que se aplican a todos los usuarios de ese grupo.

Estos usuarios se denominan usuarios de IAM, y usted los crea y administra en AWS. La cuenta principal
controla la capacidad de un usuario para acceder a AWS. Cualquier recurso creado por un usuario de IAM
es controlado y pagado por la cuenta principal de AWS. Estos usuarios de IAM pueden enviar solicitudes
autenticadas a Amazon S3 con sus propias credenciales de seguridad. Para obtener más información
acerca de la creación y administración de usuarios en su cuenta de AWS, consulte la página de detalles
del producto de AWS Identity and Access Management.

Credenciales de seguridad temporales


Además de crear usuarios de IAM con sus propias claves de acceso, IAM también le permite otorgar
credenciales de seguridad temporales (claves de acceso temporales y un token de seguridad) a cualquier
usuario de IAM para que tenga acceso a sus servicios y recursos de AWS. También puede administrar
usuarios en su sistema que no pertenecen a AWS. Estos se conocen como usuarios federados. Además,
los usuarios pueden ser aplicaciones que usted crea para acceder a sus recursos de AWS.

IAM proporciona la API de AWS Security Token Service para que pueda solicitar credenciales de
seguridad temporales. Para solicitar estas credenciales, puede utilizar la API de AWS STS o el SDK
de AWS. La API devuelve credenciales de seguridad temporales (ID de clave de acceso y clave de
acceso secreta) y un token de seguridad. Estas credenciales son válidas solo durante el tiempo que usted
especifica cuando las solicita. Usted utiliza el ID de clave de acceso y la clave secreta de la misma manera
que los utiliza cuando envía solicitudes con sus claves de acceso de usuario de IAM o cuenta de AWS.
Además, debe incluir el token en cada solicitud que envía a Amazon S3.

Un usuario de IAM puede solicitar estas credenciales de seguridad temporales para uso propio o puede
entregarlas a usuarios federados o aplicaciones. Cuando solicita credenciales de seguridad temporales
para usuarios federados, debe proporcionar un nombre de usuario y una política de IAM que defina los
permisos que desea asociar a estas credenciales de seguridad temporales. El usuario federado no puede
tener más permisos que el usuario de la cuenta principal de IAM que solicitó las credenciales temporales.

Puede utilizar estas credenciales de seguridad temporales para realizar solicitudes a Amazon S3. Las
bibliotecas de la API computan el valor de firma necesario con esas credenciales para autenticar su
solicitud. Si envía las solicitudes con las credenciales vencidas, Amazon S3 deniega la solicitud.

Para obtener información acerca de cómo firmar solicitudes con credenciales de seguridad temporales
en sus solicitudes de API de REST, consulte Firma y autenticación de solicitudes REST (p. 717).
Para obtener información acerca del envío de solicitudes con los SDK de AWS, consulte Realización de
solicitudes con los SDK de AWS (p. 19).

Para obtener más información acerca de asistencia de IAM sobre las credenciales de seguridad
temporales, consulte Credenciales de seguridad temporales en la Guía del usuario de IAM.

Para más seguridad, puede solicitar la Multifactor Authentication (MFA, Autenticación multifactor) cuando
accede a sus recursos de Amazon S3 mediante la configuración de una política de bucket. Para obtener
información, consulte Incorporación de una política de bucket para requerir MFA (p. 391). Después
de solicitar la MFA para acceder a sus recursos de Amazon S3, la única manera de acceder a estos
recursos es proporcionando credenciales temporales que se crean con una clave de MFA. Para obtener
más información, consulte la página de detalles de Autenticación multifactor de AWS y Configuración del
acceso a una API protegido por MFA en la Guía del usuario de IAM.

Versión de API 2006-03-01


11
Amazon Simple Storage Service Guía del desarrollador
Puntos de enlace de solicitud

Puntos de enlace de solicitud


Usted envía solicitudes REST al punto de enlace predefinido del servicio. Para ver una lista de todos los
servicios de AWS y los puntos de enlace correspondientes, consulte Regiones y puntos de enlace en la
AWS General Reference.

Realización de solicitudes a Amazon S3 mediante


IPv6
Amazon Simple Storage Service (Amazon S3) admite la capacidad de acceder a los buckets de S3
mediante Internet Protocol version 6 (IPv6), además del protocolo IPv4. Los puntos de enlace de doble pila
de Amazon S3 admiten solicitudes a buckets de S3 a través de IPv6 y IPv4. No hay cargos adicionales por
acceder a Amazon S3 mediante IPv6. Para obtener más información sobre los precios, consulte Precios de
Amazon S3.

Temas
• Introducción a la realización de solicitudes en IPv6 (p. 12)
• Uso de direcciones IPv6 en políticas de IAM (p. 13)
• Prueba de compatibilidad de dirección IP (p. 14)
• Uso de los puntos de enlace de doble pila en Amazon S3 (p. 15)

Introducción a la realización de solicitudes en IPv6


Para hacer una solicitud a un bucket de S3 mediante IPv6, debe utilizar un punto de enlace de doble stack.
En la siguiente sección se describe cómo hacer solicitudes mediante IPv6 con los punto de enlace de
doble stack.

A continuación se describen algunos puntos que debe tener en cuenta antes de intentar acceder a un
bucket mediante IPv6:

• El cliente y la red que acceden al bucket deben estar autorizados para utilizar IPv6.
• Se admiten tanto solicitudes de estilo alojamiento virtual como de tipo ruta para el acceso a IPv6. Para
obtener más información, consulte Puntos de enlace de doble pila en Amazon S3 (p. 15).
• Si utiliza el filtrado de dirección IP de origen en sus políticas de bucket o de usuario de AWS Identity and
Access Management (IAM), debe actualizar las políticas para incluir los rangos de direcciones IPv6. Para
obtener más información, consulte Uso de direcciones IPv6 en políticas de IAM (p. 13).
• Cuando utiliza IPv6, los archivos de registro de acceso al servidor producen direcciones IP en un formato
de IPv6. Debe actualizar el software, las herramientas y los scripts existentes que utiliza para analizar
archivos de registro de Amazon S3 para que puedan analizar las direcciones Remote IP con formato
de IPv6. Para obtener más información, consulte Formato de registro de acceso al servidor de Amazon
S3 (p. 680) y Registro de acceso al servidor de Amazon S3 (p. 674).
Note

Si experimenta problemas relacionados con la presencia de direcciones IPv6 en archivos de


registro, contacte con AWS Support.

Versión de API 2006-03-01


12
Amazon Simple Storage Service Guía del desarrollador
Uso de direcciones IPv6 en políticas de IAM

Realización de solicitudes mediante IPv6 con puntos de enlace


de doble stack
Puede realizar solicitudes con llamadas a la API de Amazon S3 mediante IPv6 con los puntos de enlace de
doble pila. Las operaciones de la API de Amazon S3 funcionan de la misma manera que cuando accede a
Amazon S3 mediante IPv6 o IPv4. El desempeño también debe ser el mismo.

Cuando utiliza la API de REST, accede directamente al punto de enlace de doble stack. Para obtener más
información, consulte Puntos de enlace de doble pila (p. 15).

Al usar la AWS Command Line Interface (AWS CLI) y los SDK de AWS, puede utilizar un parámetro o una
marca para cambiar a un punto de conexión de doble pila. También puede especificar el punto de conexión
de doble pila directamente como una anulación del punto de conexión de Amazon S3 en el archivo de
configuración.

Puede utilizar el punto de enlace de doble stack para acceder a un bucket mediante IPv6 desde cualquiera
de las siguientes opciones:

• La AWS CLI, consulte Uso de los puntos de enlace de doble pila desde la AWS CLI (p. 16).
• Los Software Development Kit (SDK, kits de desarrollo de software) de AWS, consulte Uso de los puntos
de enlace de doble pila desde los SDK de AWS (p. 16).
• La Application Programming Interface (API, Interfaz de programación de aplicaciones) de AWS, consulte
Realización de solicitudes a los puntos de enlace de doble pila con la API de REST (p. 46).

Características no disponibles con IPv6


Las siguientes características no se admiten actualmente para el acceso a un bucket de S3 mediante IPv6:

• Alojamiento de sitios web estáticos en un bucket de S3


• BitTorrent

Uso de direcciones IPv6 en políticas de IAM


Antes de intentar acceder a un bucket mediante IPv6, debe asegurarse de que las políticas de usuario
de IAM o de bucket de S3 utilizadas para el filtrado de direcciones IP estén actualizadas para incluir los
rangos de direcciones IPv6. Si no se actualizan la políticas de filtrado de direcciones IP para gestionar
direcciones IPv6, los clientes pueden perder u obtener incorrectamente el acceso al bucket cuando
comienzan a utilizar IPv6. Para obtener más información acerca de cómo administrar los permisos de
acceso con IAM, consulte Administración de identidad y acceso en Amazon S3 (p. 312).

Las políticas de IAM que filtran direcciones IP utilizan operadores de condición de dirección IP. La
siguiente política de buckets identifica el rango 54.240.143.* de direcciones IPv4 permitidas mediante
operadores de condición de dirección IP. Cualquier dirección IP fuera de este rango no podrá acceder
al bucket (examplebucket). Dado que todas las direcciones IPv6 están fuera del rango permitido, esta
política evita que las direcciones IPv6 puedan acceder a examplebucket.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",

Versión de API 2006-03-01


13
Amazon Simple Storage Service Guía del desarrollador
Prueba de compatibilidad de dirección IP

"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
}
}
]
}

Puede modificar el elemento Condition de la política de buckets para permitir los rangos de direcciones
IPv4 (54.240.143.0/24) y IPv6 (2001:DB8:1234:5678::/64) como se muestra en el siguiente
ejemplo. Puede utilizar el mismo tipo de bloque Condition que se muestra en el ejemplo para actualizar
las políticas de bucket y de usuario de IAM.

"Condition": {
"IpAddress": {
"aws:SourceIp": [
"54.240.143.0/24",
"2001:DB8:1234:5678::/64"
]
}
}

Antes de utilizar IPv6, debe actualizar todas las políticas de bucket y de usuario de IAM relevantes que
utilizan filtrado de direcciones IP para permitir los rangos de direcciones IPv6. Le recomendamos que
actualice sus políticas de IAM con los rangos de direcciones IPv6 de su organización además de los
rangos de direcciones IPv4 existentes. Para ver un ejemplo de una política de bucket que permite el
acceso a través de IPv6 y IPv4, consulte Restricción del acceso a direcciones IP específicas (p. 388).

Puede revisar sus políticas de usuario de IAM en la consola de IAM en https://console.aws.amazon.com/


iam/. Para obtener más información sobre IAM, consulte la Guía del usuario de IAM. Para obtener
información acerca de cómo editar políticas de bucket de S3, consulte ¿Cómo agrego una política de
bucket en S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Prueba de compatibilidad de dirección IP


Si utiliza Linux/Unix o Mac OS X, puede probar si tiene acceso a un punto de enlace de doble pila
mediante IPv6 con el comando curl como se muestra en el siguiente ejemplo:

Example

curl -v http://s3.dualstack.us-west-2.amazonaws.com/

Usted obtiene información similar a la del siguiente ejemplo. Si está conectado mediante IPv6, la dirección
IP conectada será una dirección IPv6.

* About to connect() to s3-us-west-2.amazonaws.com port 80 (#0)


* Trying IPv6 address... connected
* Connected to s3.dualstack.us-west-2.amazonaws.com (IPv6 address) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.18.1 (x86_64-unknown-linux-gnu) libcurl/7.18.1 OpenSSL/1.0.1t
zlib/1.2.3
> Host: s3.dualstack.us-west-2.amazonaws.com

Si utiliza Microsoft Windows 7 o Windows 10, puede probar si tiene acceso a un punto de enlace de doble
pila mediante IPv6 o IPv4 con el comando ping como se muestra en el siguiente ejemplo.

Versión de API 2006-03-01


14
Amazon Simple Storage Service Guía del desarrollador
Uso de los puntos de enlace de doble pila

ping ipv6.s3.dualstack.us-west-2.amazonaws.com

Uso de los puntos de enlace de doble pila en Amazon


S3
Los puntos de enlace de doble pila de Amazon S3 admiten solicitudes a buckets de S3 por IPv6 y IPv4. En
esta sección se describe cómo utilizar los puntos de enlace de doble pila.

Temas
• Puntos de enlace de doble pila en Amazon S3 (p. 15)
• Uso de los puntos de enlace de doble pila desde la AWS CLI (p. 16)
• Uso de los puntos de enlace de doble pila desde los SDK de AWS (p. 16)
• Uso de los puntos de enlace de doble pila desde la API REST (p. 18)

Puntos de enlace de doble pila en Amazon S3


Cuando realiza una solicitud a un punto de conexión de doble pila, la URL del bucket resuelve a una
dirección IPv6 o IPv4. Para obtener más información sobre cómo obtener acceso a un bucket por IPv6,
consulte Realización de solicitudes a Amazon S3 mediante IPv6 (p. 12).

Cuando utiliza la API REST, accede directamente a un punto de conexión de Amazon S3 usando el
nombre del punto de conexión (URI). Puede obtener acceso a un bucket de S3 mediante un punto de
conexión de doble pila con un nombre de punto de conexión de estilo alojado virtual o de estilo ruta.
Amazon S3 solo es compatible con nombres de puntos de enlace de doble pila regionales, lo que implica
que debe especificar la región como parte del nombre.

Use las siguientes convenciones de nomenclatura para los nombres de punto de conexión de doble pila de
estilo alojado virtual y de estilo de ruta

• punto de conexión de doble pila de estilo alojado virtual:

bucketname.s3.dualstack.aws-region.amazonaws.com

 
• punto de conexión de doble pila de estilo de ruta:

s3.dualstack.aws-region.amazonaws.com/bucketname

Para obtener más información acerca de los estilos de denominación de los puntos de enlace, consulte
Acceso a un bucket (p. 57). Para ver una lista de los puntos de enlace de Amazon S3, consulte
Regiones y puntos de enlace en la AWS General Reference.
Important

Puede usar transfer acceleration con los puntos de enlace de doble pila. Para obtener más
información, consulte Introducción a Aceleración de transferencia de Amazon S3 (p. 77).

Al usar la AWS Command Line Interface (AWS CLI) y los SDK de AWS, puede utilizar un parámetro o una
marca para cambiar a un punto de conexión de doble pila. También puede especificar el punto de conexión
de doble pila directamente como una anulación del punto de conexión de Amazon S3 en el archivo de
configuración. En las secciones siguientes se describe cómo utilizar los puntos de enlace de doble pila
desde la AWS CLI y desde los AWS SDK.

Versión de API 2006-03-01


15
Amazon Simple Storage Service Guía del desarrollador
Uso de los puntos de enlace de doble pila

Uso de los puntos de enlace de doble pila desde la AWS CLI


Esta sección proporciona ejemplos de comandos de la AWS CLI. que se usan para realizar solicitudes a
un punto de conexión de doble pila. Para obtener instrucciones acerca de cómo configurar la AWS CLI,
consulte Configuración de la CLI de AWS (p. 704).

Puede establecer el valor de configuración use_dualstack_endpoint a true en un perfil de su archivo


de AWS Config para redirigir todas las solicitudes de Amazon S3 que realicen los comandos s3 y s3api
de la AWS CLI al punto de enlace de doble pila para la región especificada. Puede especificar la región en
el archivo de configuración o en un comando utilizando la opción --region.

Cuando utilice puntos de enlace de doble pila con la AWS CLI, puede utilizar los estilos de
direccionamiento path y virtual. El estilo de direccionamiento configurado en el archivo de
configuración controla si el nombre del bucket está en el hostname o es parte de la URL. La CLI intentará,
de manera predeterminada, usar el estilo virtual siempre que sea posible, pero si es necesario recurrirá al
estilo de ruta. Para obtener más información, consulte AWS CLI Amazon S3 Configuration.

También puede realizar cambios a la configuración mediante un comando, como se muestra


en el siguiente ejemplo, en el que se configura use_dualstack_endpoint como true y
addressing_style como virtual en el perfil predeterminado.

$ aws configure set default.s3.use_dualstack_endpoint true


$ aws configure set default.s3.addressing_style virtual

Si quiere utilizar un punto de conexión de doble pila exclusivamente para comandos de la AWS CLI
específicos (no para todos los comandos), puede usar uno de los métodos siguientes:

• Puede utilizar el punto de conexión de doble pila por cada comando configurando el parámetro --
endpoint-url como https://s3.dualstack.aws-region.amazonaws.com o http://
s3.dualstack.aws-region.amazonaws.com para cualquier comando s3 o s3api.

$ aws s3api list-objects --bucket bucketname --endpoint-url https://s3.dualstack.aws-


region.amazonaws.com

• Puede configurar perfiles separados en su archivo de AWS Config. Por ejemplo, puede crear
un perfil que configure use_dualstack_endpoint como true y un perfil que no configure
use_dualstack_endpoint. Al ejecutar un comando, especifique qué perfil quiere usar, en función de
si quiere usar el punto de conexión de doble pila o no.

Note

Por el momento, al usar la AWS CLI no podrá utilizar la transfer acceleration con puntos de enlace
de doble pila. Sin embargo, pronto ofreceremos compatibilidad con la CLI de AWS. Para obtener
más información, consulte Uso de Transfer Acceleration desde la AWS Command Line Interface
(AWS CLI) (p. 80).

Uso de los puntos de enlace de doble pila desde los SDK de


AWS
En esta sección se proporcionan ejemplos de cómo obtener acceso a un punto de conexión de doble pila
con los AWS SDK.

Ejemplo de punto de enlace de doble pila con AWS SDK for Java
En el siguiente ejemplo se muestra cómo habilitar puntos de enlace de doble pila al crear un cliente de
Amazon S3 mediante AWS SDK for Java.

Versión de API 2006-03-01


16
Amazon Simple Storage Service Guía del desarrollador
Uso de los puntos de enlace de doble pila

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional de Java, consulte
Prueba de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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;

public class DualStackEndpoints {

public static void main(String[] args) {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
// Create an Amazon S3 client with dual-stack endpoints enabled.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.withDualstackEnabled(true)
.build();

s3Client.listObjects(bucketName);
} 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();
}
}
}

Si está utilizando AWS SDK for Java en Windows, puede que tenga que configurar adecuadamente la
siguiente propiedad de la máquina virtual Java (JVM):

java.net.preferIPv6Addresses=true

Ejemplo de punto de enlace de doble pila con el AWS SDK para .NET
Al usar el AWS SDK para .NET, puede usar la clase de AmazonS3Config para habilitar el uso de un
punto de conexión de doble pila, como se muestra en el siguiente ejemplo.

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class DualStackEndpointTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;

Versión de API 2006-03-01


17
Amazon Simple Storage Service Guía del desarrollador
Uso de los puntos de enlace de doble pila

private static IAmazonS3 client;

public static void Main()


{
var config = new AmazonS3Config
{
UseDualstackEndpoint = true,
RegionEndpoint = bucketRegion
};
client = new AmazonS3Client(config);
Console.WriteLine("Listing objects stored in a bucket");
ListingObjectsAsync().Wait();
}

private static async Task ListingObjectsAsync()


{
try
{
var request = new ListObjectsV2Request
{
BucketName = bucketName,
MaxKeys = 10
};
ListObjectsV2Response response;
do
{
response = await client.ListObjectsV2Async(request);

// Process the response.


foreach (S3Object entry in response.S3Objects)
{
Console.WriteLine("key = {0} size = {1}",
entry.Key, entry.Size);
}
Console.WriteLine("Next Continuation Token: {0}",
response.NextContinuationToken);
request.ContinuationToken = response.NextContinuationToken;
} while (response.IsTruncated == true);
}
catch (AmazonS3Exception amazonS3Exception)
{
Console.WriteLine("An AmazonS3Exception was thrown. Exception: " +
amazonS3Exception.ToString());
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
}
}
}
}

Para ver una muestra completa en .NET para enumerar objetos, consulte Lista de claves con AWS SDK
para .NET (p. 234).

Para obtener información acerca de cómo crear y probar una muestra funcional en .NET, consulte
Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

Uso de los puntos de enlace de doble pila desde la API REST


Para obtener información sobre cómo realizar solicitudes a puntos de enlace de doble pila con la
API REST, consulte Realización de solicitudes a los puntos de enlace de doble pila con la API de
REST (p. 46).

Versión de API 2006-03-01


18
Amazon Simple Storage Service Guía del desarrollador
Realización de solicitudes con los SDK de AWS

Realización de solicitudes con los SDK de AWS


Temas
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS (p. 19)
• Realización de solicitudes con las credenciales temporales de usuario de IAM (p. 26)
• Realización de solicitudes con credenciales temporales de usuario federado (p. 34)

Puede enviar solicitudes autenticadas a Amazon S3 con los SDK de AWS o mediante las llamadas a la
Application Programming Interface (API, Interfaz de programación de aplicaciones) de REST directamente
en su aplicación. La API del SDK de AWS usa las credenciales que proporciona para computar la firma
para autenticación. Si usa la API de REST directamente en su aplicación, debe escribir el código necesario
para computar la firma a fin de autenticar su solicitud. Para ver una lista de los SDK de AWS disponibles,
consulte Código de muestra y bibliotecas.

Realización de solicitudes con las credenciales de


usuario de IAM o de una cuenta de AWS
Puede usar su cuenta de AWS o sus credenciales de seguridad de un usuario de IAM para enviar
solicitudes autenticadas a Amazon S3. En esta sección se proporcionan ejemplos de cómo enviar
solicitudes autenticadas con AWS SDK for Java, AWS SDK para .NET y AWS SDK para PHP. Para ver
una lista de los SDK de AWS disponibles, consulte Código de muestra y bibliotecas.

Temas
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS: AWS SDK
for Java (p. 20)
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS: AWS SDK
para .NET (p. 21)
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS: AWS SDK
para PHP (p. 23)
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS: AWS SDK
parar Ruby (p. 24)

Cada uno de estos SDK de AWS utiliza una cadena de proveedores de credenciales específica del SDK
para encontrar y utilizar las credenciales, y realizar acciones en nombre del propietario de las credenciales.
Todas estas cadenas de proveedores de credenciales tienen en común que todas buscan el archivo de
credenciales local de AWS.

La forma más sencilla de configurar credenciales para los SDK de AWS es utilizar un archivo de
credenciales de AWS. Si utiliza la AWS Command Line Interface (AWS CLI), es posible que ya tenga
configurado un archivo local de credenciales de AWS. De lo contrario, utilice el siguiente procedimiento
para configurar un archivo de credenciales:

Para crear un archivo local de credenciales de AWS

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https://


console.aws.amazon.com/iam/.
2. Cree un usuario con permisos limitados a los servicios y acciones a los que desea que tenga acceso
el código. Para obtener más información acerca de cómo crear un usuario de IAM, consulte Creación
de usuarios de IAM (consola), y siga las instrucciones hasta el paso 8.
3. Elija Download .csv (Descargar .csv) para guardar una copia local de sus credenciales de AWS.

Versión de API 2006-03-01


19
Amazon Simple Storage Service Guía del desarrollador
Usar un cuenta de AWS o credenciales de usuario de IAM

4. En su equipo, vaya al directorio principal y cree un directorio .aws. En sistemas basados en Unix,
como Linux u OS X, se encuentra en la siguiente ubicación:

~/.aws

En Windows, se encuentra en la siguiente ubicación:

%HOMEPATH%\.aws

5. En el directorio .aws, cree un archivo denominado credentials.


6. Abra el archivo .csv de credenciales que descargó de la consola de IAM y copie su contenido en el
archivo credentials con el siguiente formato:

[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key

7. Guarde el archivo credentials y elimine el archivo .csv que descargó en el paso 3.

El archivo de credenciales compartidas ahora está configurado en el equipo local y está listo para su uso
con los SDK de AWS.

Realización de solicitudes con las credenciales de usuario de


IAM o de una cuenta de AWS: AWS SDK for Java
Para enviar solicitudes autenticadas a Amazon S3 usando sus credenciales de usuario de IAM o de su
cuenta de AWS, siga estos pasos:

• Use la clase AmazonS3ClientBuilder para crear una instancia AmazonS3Client.


• Ejecute uno de los métodos de AmazonS3Client para enviar solicitudes a Amazon S3. El cliente
generará la firma necesaria a partir de las credenciales que proporcione y la incluirá en la solicitud.

En el siguiente ejemplo se realizan las tareas anteriores. Para obtener información acerca de cómo crear y
probar una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).

Example

import com.amazonaws.AmazonServiceException;
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.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;

import java.io.IOException;
import java.util.List;

public class MakingRequests {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

Versión de API 2006-03-01


20
Amazon Simple Storage Service Guía del desarrollador
Usar un cuenta de AWS o credenciales de usuario de IAM

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Get a list of objects in the bucket, two at a time, and


// print the name and size of each object.
ListObjectsRequest listRequest = new
ListObjectsRequest().withBucketName(bucketName).withMaxKeys(2);
ObjectListing objects = s3Client.listObjects(listRequest);
while (true) {
List<S3ObjectSummary> summaries = objects.getObjectSummaries();
for (S3ObjectSummary summary : summaries) {
System.out.printf("Object \"%s\" retrieved with size %d\n",
summary.getKey(), summary.getSize());
}
if (objects.isTruncated()) {
objects = s3Client.listNextBatchOfObjects(objects);
} else {
break;
}
}
} 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();
}
}
}

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Realización de solicitudes con las credenciales de usuario de


IAM o de una cuenta de AWS: AWS SDK para .NET
Para enviar solicitudes autenticadas usando sus credenciales de usuario de IAM o de su cuenta de AWS:

• Cree una instancia de la clase AmazonS3Client.


• Ejecute uno de los métodos de AmazonS3Client para enviar solicitudes a Amazon S3. El cliente
generará la firma necesaria a partir de las credenciales que se le proporcionan y la incluirá en la solicitud
que envíe a Amazon S3.

En el siguiente ejemplo de código C# se muestra cómo realizar las tareas anteriores. Para obtener
información acerca de cómo ejecutar los ejemplos de .NET que aparecen en esta guía y para ver
cómo almacenar sus credenciales en un archivo de configuración, consulte Ejecución de ejemplos de
código .NET de Amazon S3 (p. 708).

Example

Versión de API 2006-03-01


21
Amazon Simple Storage Service Guía del desarrollador
Usar un cuenta de AWS o credenciales de usuario de IAM

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class MakeS3RequestTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
using (client = new AmazonS3Client(bucketRegion))
{
Console.WriteLine("Listing objects stored in a bucket");
ListingObjectsAsync().Wait();
}
}

static async Task ListingObjectsAsync()


{
try
{
ListObjectsRequest request = new ListObjectsRequest
{
BucketName = bucketName,
MaxKeys = 2
};
do
{
ListObjectsResponse response = await client.ListObjectsAsync(request);
// Process the response.
foreach (S3Object entry in response.S3Objects)
{
Console.WriteLine("key = {0} size = {1}",
entry.Key, entry.Size);
}

// If the response is truncated, set the marker to get the next


// set of keys.
if (response.IsTruncated)
{
request.Marker = response.NextMarker;
}
else
{
request = null;
}
} while (request != null);
}
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);
}
}
}

Versión de API 2006-03-01


22
Amazon Simple Storage Service Guía del desarrollador
Usar un cuenta de AWS o credenciales de usuario de IAM

Note

Puede crear el cliente AmazonS3Client sin facilitar sus credenciales de seguridad. Las
solicitudes enviadas con este cliente son solicitudes anónimas y no tienen firma. Amazon
S3 devuelve un error si envía solicitudes anónimas para un recurso que no esté disponible
públicamente.

Para ver ejemplos funcionales, consulte Trabajo con objetos de Amazon S3 (p. 104) y Uso de buckets de
Amazon S3 (p. 54). Puede probar estos ejemplos con su cuenta de AWS o con credenciales de usuario
de IAM.

Por ejemplo, para enumerar todas las claves de objetos de su bucket, consulte Lista de claves con AWS
SDK para .NET (p. 234).

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Realización de solicitudes con las credenciales de usuario de


IAM o de una cuenta de AWS: AWS SDK para PHP
En esta sección se explica el uso de una clase de la versión 3 de AWS SDK para PHP para enviar
solicitudes autenticadas con las credenciales de usuario de IAM o de su cuenta de AWS. Se parte de la
base de que usted ya sigue las instrucciones para Uso del AWS SDK para PHP y ejecución de ejemplos
de PHP (p. 708) y ha instalado AWS SDK para PHP correctamente.

El siguiente ejemplo de PHP muestra cómo el cliente realiza una solicitud con las credenciales de
seguridad para enumerar todos los buckets de su cuenta.

Example

require 'vendor/autoload.php';

use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = '*** Your Bucket Name ***';

$s3 = new S3Client([


'region' => 'us-east-1',
'version' => 'latest',
]);

// Retrieve the list of buckets.


$result = $s3->listBuckets();

try {
// Retrieve a paginator for listing objects.
$objects = $s3->getPaginator('ListObjects', [
'Bucket' => $bucket
]);

echo "Keys retrieved!" . PHP_EOL;

// Print the list of objects to the page.


foreach ($objects as $object) {

Versión de API 2006-03-01


23
Amazon Simple Storage Service Guía del desarrollador
Usar un cuenta de AWS o credenciales de usuario de IAM

echo $object['Key'] . PHP_EOL;


}
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}

Note
Puede crear el cliente S3Client sin facilitar sus credenciales de seguridad. Las solicitudes
enviadas con este cliente son solicitudes anónimas y no tienen firma. Amazon S3 devuelve un
error si envía solicitudes anónimas para un recurso que no esté disponible públicamente.

Para ver ejemplos funcionales, consulte Operaciones en objetos (p. 172). Puede probar estos ejemplos
con su cuenta de AWS o con credenciales de usuario de IAM.

Para ver un ejemplo de enumeración de claves de objetos en un bucket, consulte Lista de claves con AWS
SDK para PHP (p. 235).

Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Documentación de AWS SDK para PHP

Realización de solicitudes con las credenciales de usuario de


IAM o de una cuenta de AWS: AWS SDK parar Ruby
Para poder utilizar la versión 3 del AWS SDK parar Ruby para hacer llamadas a Amazon S3, debe
establecer las credenciales de acceso a AWS que utiliza el SDK para comprobar el acceso a los buckets
y los objetos. Si ha configurado las credenciales compartidas en el perfil de credenciales de AWS de su
sistema local, la versión 3 del SDK para Ruby puede utilizarlas, lo que le evitará tener que declararlas en el
código. Para obtener más información acerca de cómo configurar las credenciales compartidas, consulte
Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS (p. 19).

En el siguiente fragmento de código de Ruby se utilizan las credenciales de un archivo de credenciales de


AWS compartido en un equipo local para autenticar una solicitud para obtener todos los nombres de claves
de objeto de un bucket específico. Hace lo siguiente:

1. Crea una instancia de la clase Aws::S3::Resource.


2. Realiza una solicitud a Amazon S3 enumerando los objetos de un bucket con el método bucket de
Aws::S3::Resource. El cliente genera el valor de firma necesario a partir de las credenciales del
archivo de credenciales de AWS del equipo y lo incluye en la solicitud que envía a Amazon S3.
3. Imprime la matriz de nombres de claves de objeto en el terminal.

Example

# This snippet example does the following:


# Creates an instance of the Aws::S3::Resource class.
# Makes a request to Amazon S3 by enumerating objects in a bucket using the bucket method
of Aws::S3::Resource.
# The client generates the necessary signature value from the credentials in the AWS
credentials file on your computer,
# and includes it in the request it sends to Amazon S3.
# Prints the array of object key names to the terminal.
# The credentials that are used for this example come from a local AWS credentials file on
the computer that is running this application.
# The credentials are for an IAM user who can list objects in the bucket that the user
specifies when they run the application.

Versión de API 2006-03-01


24
Amazon Simple Storage Service Guía del desarrollador
Usar un cuenta de AWS o credenciales de usuario de IAM

# Use the Amazon S3 modularized gem for version 3 of the AWS Ruby SDK.
require 'aws-sdk-s3'

# Get an Amazon S3 resource.


s3 = Aws::S3::Resource.new(region: 'us-west-2')

# Create an array of up to the first 100 object keynames in the bucket.


bucket = s3.bucket('example_bucket').objects.collect(&:key)

# Print the array to the terminal.


puts bucket

Aunque no tenga un archivo de credenciales de AWS local, puede crear el recurso Aws::S3::Resource
y ejecutar código en los buckets y los objetos de Amazon S3. Las solicitudes enviadas con la versión 3 de
SDK para Ruby son anónimas, sin firma de manera predeterminada. Amazon S3 devuelve un error si envía
solicitudes anónimas para un recurso que no esté disponible públicamente.

Puede utilizar y ampliar el fragmento de código anterior para aplicaciones del SDK para Ruby, como se
muestra en el siguiente ejemplo, que es más robusto. Las credenciales que se utilizan para este ejemplo
proceden de un archivo de credenciales de AWS local existente en el equipo en que se ejecuta esta
aplicación. Las credenciales son las de un usuario de IAM que puede obtener la lista de objetos del bucket
especificado por el usuario cuando se ejecuta la aplicación.

# This snippet example does the following:


# Creates an instance of the Aws::S3::Resource class.
# Makes a request to Amazon S3 by enumerating objects in a bucket using the bucket method
of Aws::S3::Resource.
# The client generates the necessary signature value from the credentials in the AWS
credentials file on your computer,
# and includes it in the request it sends to Amazon S3.
# Prints the array of object key names to the terminal.
# The credentials that are used for this example come from a local AWS credentials file on
the computer that is running this application.
# The credentials are for an IAM user who can list objects in the bucket that the user
specifies when they run the application.

# Use the Amazon S3 modularized gem for version 3 of the AWS Ruby SDK.
require 'aws-sdk-s3'

# Usage: ruby auth_request_test.rb OPERATION BUCKET


# Currently only the list operation is supported

# The operation to perform on the bucket.


operation = 'list' # default
operation = ARGV[0] if (ARGV.length > 0)

if ARGV.length > 1
bucket_name = ARGV[1]
else
exit 1
end

# Get an Amazon S3 resource.


s3 = Aws::S3::Resource.new(region: 'us-west-2')

# Get the bucket by name.


bucket = s3.bucket(bucket_name)

case operation

when 'list'
if bucket.exists?
# Enumerate the bucket contents and object etags.
puts "Contents of '%s':" % bucket_name

Versión de API 2006-03-01


25
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario de IAM

puts ' Name => GUID'

bucket.objects.limit(50).each do |obj|
puts " #{obj.key} => #{obj.etag}"
end
else
puts "The bucket '%s' does not exist!" % bucket_name
end

else
puts "Unknown operation: '%s'! Only list is supported." % operation
end

Realización de solicitudes con las credenciales


temporales de usuario de IAM
Temas
• Realización de solicitudes con las credenciales temporales de usuario de IAM: AWS SDK for
Java (p. 26)
• Realización de solicitudes con las credenciales temporales de usuario de IAM: AWS SDK
para .NET (p. 28)
• Realización de solicitudes con las credenciales temporales de usuario de IAM o de una cuenta de
AWS: AWS SDK para PHP (p. 30)
• Realización de solicitudes con las credenciales temporales de usuario de IAM: AWS SDK parar
Ruby (p. 32)

Una cuenta de AWS o un usuario de IAM puede solicitar las credenciales de seguridad temporales y
utilizarlas para enviar solicitudes autenticadas a Amazon S3. En esta sección se proporcionan ejemplos
sobre cómo utilizar AWS SDK for Java, .NET y PHP para obtener las credenciales de seguridad
temporales y utilizarlas para autenticar las solicitudes para Amazon S3.

Realización de solicitudes con las credenciales temporales de


usuario de IAM: AWS SDK for Java
Un usuario de IAM o una cuenta de AWS pueden solicitar credenciales de seguridad temporales (consulte
Realización de solicitudes (p. 10)) con AWS SDK for Java y utilizarlas para obtener acceso a Amazon
S3. Estas credenciales caducan cuando termine la sesión especificada. Para utilizar las credenciales de
seguridad temporales de IAM, siga estos pasos:

1. Cree una instancia de la clase AWSSecurityTokenServiceClient. Para obtener información


acerca de cómo proporcionar las credenciales, consulte Uso de los SDK, la CLI y los exploradores de
AWS (p. 697).
2. Asuma la función deseada llamando al método assumeRole() del cliente Security Token Service
(STS).
3. Inicie sesión utilizando el método getSessionToken() del cliente STS. Proporcione información
acerca de la sesión para este método con un objeto GetSessionTokenRequest.

El método devuelve las credenciales de seguridad temporales.


4. Empaquete las credenciales de seguridad temporales en un objeto BasicSessionCredentials.
Utilice este objeto para proporcionar las credenciales de seguridad temporales al cliente de Amazon
S3.
5. Cree una instancia de la clase AmazonS3Client usando las credenciales de seguridad temporales.
Envíe las solicitudes a Amazon S3 con este cliente. Si envía las solicitudes con las credenciales
vencidas, Amazon S3 devolverá un error.

Versión de API 2006-03-01


26
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario de IAM

Note

Si obtiene las credenciales de seguridad temporales con las credenciales de seguridad de su


cuenta de AWS, las credenciales de seguridad temporales tendrán validez durante una hora
únicamente. Puede especificar la duración de la sesión solo si utiliza las credenciales del usuario
de IAM para solicitar una sesión.

En el siguiente ejemplo se muestra un conjunto de claves de objeto del bucket especificado. En el ejemplo
se obtienen credenciales de seguridad temporales para una sesión de dos horas y se utilizan para enviar
una solicitud autenticada a Amazon S3.

Si desea probar el ejemplo con las credenciales del usuario de IAM, tendrá que crear un usuario de IAM
en su cuenta de AWS. Para obtener más información acerca de cómo crear un usuario de IAM, consulte
Creación del primer grupo de usuarios y administradores de IAM en la Guía del usuario de IAM.

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
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.ObjectListing;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.amazonaws.services.securitytoken.model.GetSessionTokenRequest;
import com.amazonaws.services.securitytoken.model.GetSessionTokenResult;

public class MakingRequestsWithIAMTempCredentials {


public static void main(String[] args) {
Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
// Creating the STS client is part of your trusted code. It has
// the security credentials you use to obtain temporary security credentials.
AWSSecurityTokenService stsClient =
AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Start a session.
GetSessionTokenRequest getSessionTokenRequest = new
GetSessionTokenRequest().withDurationSeconds(7200);
// The duration can be set to more than 3600 seconds only if temporary
// credentials are requested by an IAM user rather than an account owner.
GetSessionTokenResult sessionTokenResult =
stsClient.getSessionToken(getSessionTokenRequest);
Credentials sessionCredentials = sessionTokenResult
.getCredentials()

.withSessionToken(sessionTokenResult.getCredentials().getSessionToken())
.withExpiration(sessionTokenResult.getCredentials().getExpiration());

// Package the temporary security credentials as a BasicSessionCredentials


object

Versión de API 2006-03-01


27
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario de IAM

// for an Amazon S3 client object to use.


BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(
sessionCredentials.getAccessKeyId(),
sessionCredentials.getSecretAccessKey(),
sessionCredentials.getSessionToken());

// Provide temporary security credentials so that the Amazon S3 client


// can send authenticated requests to Amazon S3. You create the client
// using the basicSessionCredentials object.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new
AWSStaticCredentialsProvider(basicSessionCredentials))
.withRegion(clientRegion)
.build();

// Verify that getting the session token worked and the permissions are set
correctly
// by getting a set of object keys from the bucket.
ObjectListing objects = s3Client.listObjects(bucketName);
System.out.println("No. of Objects: " + objects.getObjectSummaries().size());
} 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();
}
}
}

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Realización de solicitudes con las credenciales temporales de


usuario de IAM: AWS SDK para .NET
Un usuario de IAM o una cuenta de AWS puede solicitar credenciales de seguridad temporales con AWS
SDK para .NET y utilizarlas para obtener acceso a Amazon S3. Estas credenciales caducan cuando
termine la sesión. Para obtener credenciales de seguridad temporales y acceder a Amazon S3, siga estos
pasos:

1. Cree una instancia del cliente de AWS Security Token Service.


AmazonSecurityTokenServiceClient. Para obtener información acerca de cómo proporcionar
las credenciales, consulte Uso de los SDK, la CLI y los exploradores de AWS (p. 697).
2. Inicie una sesión utilizando el método GetSessionToken del cliente de STS que creó en el
paso anterior. Proporcione información acerca de la sesión para este método con un objeto
GetSessionTokenRequest.

El método devuelve las credenciales de seguridad temporales.


3. Empaquete las credenciales de seguridad temporales en una instancia del objeto
SessionAWSCredentials. Utilice este objeto para proporcionar las credenciales de seguridad
temporales al cliente de Amazon S3.
4. Cree una instancia de la clase AmazonS3Client al proporcionar las credenciales de seguridad
temporales. Envíe las solicitudes a Amazon S3 con este cliente. Si envía las solicitudes con las
credenciales vencidas, Amazon S3 devolverá un error.

Versión de API 2006-03-01


28
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario de IAM

Note

Si obtiene las credenciales de seguridad temporales con las credenciales de seguridad de


su cuenta de AWS, esas credenciales tendrán validez durante una hora únicamente. Puede
especificar la duración de una sesión solo si utiliza las credenciales de usuario de IAM para
solicitar una sesión.

En el siguiente ejemplo de código C# se muestran las claves de objeto del bucket especificado. A modo
de ilustración, en el ejemplo se obtienen las credenciales de seguridad temporales para una sesión
predeterminada de una hora y se utilizan para enviar una solicitud autenticada a Amazon S3.

Si desea probar el ejemplo con las credenciales del usuario de IAM, tiene que crear un usuario de
IAM en su cuenta de AWS. Para obtener más información acerca de cómo crear un usuario de IAM,
consulte Creación del primer grupo de usuarios y administradores de IAM en la Guía del usuario de
IAM. Para obtener más información acerca de la realización de solicitudes, consulte Realización de
solicitudes (p. 10).

Para obtener instrucciones sobre la creación y comprobación de un ejemplo funcional, consulte Ejecución
de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class TempCredExplicitSessionStartTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
public static void Main()
{
ListObjectsAsync().Wait();
}

private static async Task ListObjectsAsync()


{
try
{
// Credentials use the default AWS SDK for .NET credential search chain.
// On local development machines, this is your default profile.
Console.WriteLine("Listing objects stored in a bucket");
SessionAWSCredentials tempCredentials = await
GetTemporaryCredentialsAsync();

// Create a client by providing temporary security credentials.


using (s3Client = new AmazonS3Client(tempCredentials, bucketRegion))
{
var listObjectRequest = new ListObjectsRequest
{
BucketName = bucketName
};
// Send request to Amazon S3.
ListObjectsResponse response = await
s3Client.ListObjectsAsync(listObjectRequest);

Versión de API 2006-03-01


29
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario de IAM

List<S3Object> objects = response.S3Objects;


Console.WriteLine("Object count = {0}", objects.Count);
}
}
catch (AmazonS3Exception s3Exception)
{
Console.WriteLine(s3Exception.Message, s3Exception.InnerException);
}
catch (AmazonSecurityTokenServiceException stsException)
{
Console.WriteLine(stsException.Message, stsException.InnerException);
}
}

private static async Task<SessionAWSCredentials> GetTemporaryCredentialsAsync()


{
using (var stsClient = new AmazonSecurityTokenServiceClient())
{
var getSessionTokenRequest = new GetSessionTokenRequest
{
DurationSeconds = 7200 // seconds
};

GetSessionTokenResponse sessionTokenResponse =
await stsClient.GetSessionTokenAsync(getSessionTokenRequest);

Credentials credentials = sessionTokenResponse.Credentials;

var sessionCredentials =
new SessionAWSCredentials(credentials.AccessKeyId,
credentials.SecretAccessKey,
credentials.SessionToken);
return sessionCredentials;
}
}
}
}

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Realización de solicitudes con las credenciales temporales de


usuario de IAM o de una cuenta de AWS: AWS SDK para PHP
En este tema se explicará el uso de las clases de la versión 3 de AWS SDK para PHP para solicitar
credenciales de seguridad temporales y utilizarlas para obtener acceso a Amazon S3. Se parte de la base
de que usted ya sigue las instrucciones para Uso del AWS SDK para PHP y ejecución de ejemplos de
PHP (p. 708) y ha instalado AWS SDK para PHP correctamente.

Tanto un usuario de IAM como una cuenta de AWS pueden solicitar credenciales de seguridad temporales
mediante la versión 3 de AWS SDK para PHP. A continuación, puede usar las credenciales temporales
para acceder a Amazon S3. Las credenciales caducan cuando finaliza la duración de la sesión. De forma
predeterminada, la sesión durará una hora. Si utiliza las credenciales de usuario de IAM, puede especificar
la duración (entre 1 y 36 horas), cuando solicita las credenciales de seguridad temporales. Para obtener
más información acerca de las credenciales de seguridad temporales, consulte Credenciales de seguridad
temporales en la Guía del usuario de IAM. Para obtener más información acerca de la realización de
solicitudes, consulte Realización de solicitudes (p. 10).

Versión de API 2006-03-01


30
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario de IAM

Note

Si obtiene las credenciales de seguridad temporales con las credenciales de seguridad de


su cuenta de AWS, estas tendrán validez durante una hora únicamente. Puede especificar la
duración de la sesión solo si utiliza las credenciales del usuario de IAM para solicitar una sesión.

Example

En el siguiente ejemplo de PHP se muestran las claves de objeto del bucket especificado con las
credenciales de seguridad temporales. En el ejemplo se obtienen credenciales de seguridad temporales
para una sesión predeterminada de una hora y se utilizan para enviar una solicitud autenticada a Amazon
S3. Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución
de ejemplos de PHP (p. 709).

Si desea probar el ejemplo con las credenciales del usuario de IAM, tiene que crear un usuario de IAM en
su cuenta de AWS. Para obtener información acerca de cómo crear un usuario de IAM, consulte Creación
del primer grupo de usuarios y administradores de IAM en la Guía del usuario de IAM. Para obtener un
ejemplo de configuración de la duración de la sesión utilizando las credenciales de usuario de IAM para
solicitar una sesión, consulte Realización de solicitudes con credenciales temporales de usuario federado -
AWS SDK para PHP (p. 40).

require 'vendor/autoload.php';

use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = '*** Your Bucket Name ***';

$sts = new StsClient([


'version' => 'latest',
'region' => 'us-east-1'
]);

$sessionToken = $sts->getSessionToken();

$s3 = new S3Client([


'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => $sessionToken['Credentials']['AccessKeyId'],
'secret' => $sessionToken['Credentials']['SecretAccessKey'],
'token' => $sessionToken['Credentials']['SessionToken']
]
]);

$result = $s3->listBuckets();

try {
// Retrieve a paginator for listing objects.
$objects = $s3->getPaginator('ListObjects', [
'Bucket' => $bucket
]);

echo "Keys retrieved!" . PHP_EOL;

// List objects
foreach ($objects as $object) {
echo $object['Key'] . PHP_EOL;
}
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;

Versión de API 2006-03-01


31
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario de IAM

Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Documentación de AWS SDK para PHP

Realización de solicitudes con las credenciales temporales de


usuario de IAM: AWS SDK parar Ruby
Un usuario de IAM o una cuenta de AWS puede solicitar credenciales de seguridad temporales con AWS
SDK parar Ruby y utilizarlas para obtener acceso a Amazon S3. Estas credenciales caducan cuando
termine la sesión. De forma predeterminada, la sesión durará una hora. Si utiliza las credenciales de
usuario de IAM, puede especificar la duración (entre 1 y 36 horas), cuando solicita las credenciales de
seguridad temporales. Para obtener más información sobre la solicitud de credenciales de seguridad
temporales, consulte Realización de solicitudes (p. 10).
Note

Si obtiene las credenciales de seguridad temporales con las credenciales de seguridad de


su cuenta de AWS, estas tendrán validez durante una hora únicamente. Puede especificar la
duración de la sesión solo si utiliza las credenciales del usuario de IAM para solicitar una sesión.

El siguiente ejemplo de código Ruby crea un usuario temporal para mostrar los elementos en un bucket
especificado durante una hora. Para utilizar este ejemplo, debe tener credenciales de AWS con los
permisos necesarios para crear nuevos clientes de AWS Security Token Service (AWS STS) y mostrar
buckets de Amazon S3.

# This snippet example does the following:


# The following Ruby example creates a temporary user to list the items in a specified
bucket
# for one hour. To use this example, you must have AWS credentials that have the necessary
# permissions to create new AWS Security Token Service (AWS STS) clients, and list Amazon
S3 buckets using temporary security credentials
# using your AWS account security credentials, the temporary security credentials are valid
for only one hour. You can
# specify session duration only if you use &IAM; user credentials to request a session.

require 'aws-sdk-core'
require 'aws-sdk-s3'
require 'aws-sdk-iam'

USAGE = <<DOC

Usage: assumerole_create_bucket_policy.rb -b BUCKET -u USER [-r REGION] [-d] [-h]

Assumes a role for USER to list items in BUCKET for one hour.

BUCKET is required and must already exist.

USER is required and if not found, is created.

If REGION is not supplied, defaults to us-west-2.

-d gives you extra (debugging) information.

-h displays this message and quits.

DOC

Versión de API 2006-03-01


32
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario de IAM

def print_debug(debug, s)
if debug
puts s
end
end

# Get the user if they exist, otherwise create them


def get_user(region, user_name, debug)
iam = Aws::IAM::Resource.new(region: region)

# See if user exists


user = iam.user(user_name)

# If user does not exist, create them


if user == nil
user = iam.create_user(user_name: user_name)
iam.wait_until(:user_exists, user_name: user_name)
print_debug(debug, "Created new user #{user_name}")
else
print_debug(debug, "Found user #{user_name} in region #{region}")
end

user
end

# main
region = 'us-west-2'
user_name = ''
bucket_name = ''

i = 0

while i &lt; ARGV.length


case ARGV[i]

when '-b'
i += 1
bucket_name = ARGV[i]

when '-u'
i += 1
user_name = ARGV[i]

when '-r'
i += 1

region = ARGV[i]

when '-h'
puts USAGE
exit 0

else
puts 'Unrecognized option: ' + ARGV[i]
puts USAGE
exit 1

end

i += 1
end

if bucket_name == ''
puts 'You must supply a bucket name'
puts USAGE

Versión de API 2006-03-01


33
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

exit 1
end

if user_name == ''
puts 'You must supply a user name'
puts USAGE
exit 1
end

# Create a new Amazon STS client and get temporary credentials. This uses a role that was
already created.
begin
creds = Aws::AssumeRoleCredentials.new(
client: Aws::STS::Client.new(region: region),
role_arn: "arn:aws:iam::111122223333:role/assumedrolelist",
role_session_name: "assumerole-s3-list"
)

# Create an Amazon S3 resource with temporary credentials.


s3 = Aws::S3::Resource.new(region: region, credentials: creds)

puts "Contents of '%s':" % bucket_name


puts ' Name => GUID'

s3.bucket(bucket_name).objects.limit(50).each do |obj|
puts " #{obj.key} => #{obj.etag}"
end
rescue StandardError => ex
puts 'Caught exception accessing bucket ' + bucket_name + ':'
puts ex.message
end

Realización de solicitudes con credenciales


temporales de usuario federado
Puede solicitar credenciales de seguridad temporales y proporcionarlas a sus usuarios federados o
aplicaciones que necesitan acceso a sus recursos de AWS. En esta sección se brindan ejemplos de cómo
puede utilizar el Software Development Kit (SDK, Kit de desarrollo de software) de AWS para obtener
credenciales de seguridad temporales para sus usuarios federados o aplicaciones, y enviar solicitudes
autenticadas a Amazon S3 con esas credenciales. Para ver una lista de los SDK de AWS disponibles,
consulte Código de muestra y bibliotecas.
Note

Tanto la cuenta de AWS como un usuario de IAM pueden solicitar credenciales de seguridad
temporales para usuarios federados. Sin embargo, para mayor seguridad, solo un usuario de IAM
con los permisos necesarios debe solicitar estas credenciales temporales para asegurarse de que
el usuario federado obtenga al menos los permisos del usuario de IAM que realiza la solicitud.
En algunas aplicaciones, puede resultarle útil crear un usuario de IAM con permisos específicos
con el único fin de proporcionar credenciales de seguridad temporales a sus usuarios federados y
aplicaciones.

Cómo realizar solicitudes con credenciales temporales de usuario


federado - AWS SDK for Java
Puede proporcionar credenciales de seguridad temporales para sus usuarios federados y aplicaciones de
modo que estos puedan enviar solicitudes autenticadas para obtener acceso a sus recursos de AWS. Al
solicitar estas credenciales temporales, debe proporcionar un nombre de usuario y una política de IAM
que describa los permisos de recursos que desea otorgar. De forma predeterminada, la sesión durará una

Versión de API 2006-03-01


34
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

hora. Puede solicitar las credenciales de seguridad temporales para usuarios federados y aplicaciones
para establecer un valor de duración distinto de forma explícita.
Note
Para mayor seguridad, cuando solicite las credenciales de seguridad temporales para usuarios
federados y aplicaciones, recomendamos que use un usuario de IAM específico que solo tenga
los permisos de acceso necesarios El usuario temporal creado nunca puede obtener más
permisos que el usuario de IAM que solicitó las credenciales de seguridad temporales. Para
obtener más información, consulte Preguntas frecuentes sobre AWS IAM.

Para proporcionar credenciales de seguridad y utilizar una solicitud autenticada para obtener acceso a
recursos, haga lo siguiente:

• Cree una instancia de la clase AWSSecurityTokenServiceClient. Para obtener información acerca


de cómo proporcionar las credenciales, consulte Uso del AWS SDK for Java. (p. 705).
• Inicie una sesión utilizando el método getFederationToken() del cliente Security Token Service
(STS). Proporcione información acerca de la sesión, como el nombre de usuario y una política de IAM
que desee adjuntar a las credenciales temporales. Puede proporcionar una duración de sesión opcional.
Este método devuelve sus credenciales de seguridad temporales.
• Empaquete las credenciales de seguridad temporales en una instancia del objeto
BasicSessionCredentials. Utilice este objeto para proporcionar las credenciales de seguridad
temporales al cliente de Amazon S3.
• Cree una instancia de la clase AmazonS3Client usando las credenciales de seguridad temporales.
Envíe las solicitudes a Amazon S3 con este cliente. Si envía las solicitudes con las credenciales
vencidas, Amazon S3 devolverá un error.

Example
En el siguiente ejemplo se enumeran las claves del bucket de S3 especificado. En el ejemplo obtiene las
credenciales de seguridad temporales para una sesión de dos horas para su usuario federado y utiliza
las credenciales para enviar solicitudes autenticadas a Amazon S3. Para ejecutar el ejemplo, debe crear
un usuario de IAM con una política asociada que permita al usuario solicitar credenciales de seguridad
temporales y generar una lista de sus recursos de AWS. La siguiente política lo cumple:

{
"Statement":[{
"Action":["s3:ListBucket",
"sts:GetFederationToken*"
],
"Effect":"Allow",
"Resource":"*"
}
]
}

Para obtener más información acerca de cómo crear un usuario de IAM, consulte Creación del primer
grupo de usuarios y administradores de IAM en la Guía del usuario de IAM.

Después de crear un usuario de IAM y asociarle la política anterior, puede ejecutar el ejemplo siguiente.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.policy.Policy;

Versión de API 2006-03-01


35
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

import com.amazonaws.auth.policy.Resource;
import com.amazonaws.auth.policy.Statement;
import com.amazonaws.auth.policy.Statement.Effect;
import com.amazonaws.auth.policy.actions.S3Actions;
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.ObjectListing;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.amazonaws.services.securitytoken.model.GetFederationTokenRequest;
import com.amazonaws.services.securitytoken.model.GetFederationTokenResult;

import java.io.IOException;

public class MakingRequestsWithFederatedTempCredentials {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Specify bucket name ***";
String federatedUser = "*** Federated user name ***";
String resourceARN = "arn:aws:s3:::" + bucketName;

try {
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder
.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

GetFederationTokenRequest getFederationTokenRequest = new


GetFederationTokenRequest();
getFederationTokenRequest.setDurationSeconds(7200);
getFederationTokenRequest.setName(federatedUser);

// Define the policy and add it to the request.


Policy policy = new Policy();
policy.withStatements(new Statement(Effect.Allow)
.withActions(S3Actions.ListObjects)
.withResources(new Resource(resourceARN)));
getFederationTokenRequest.setPolicy(policy.toJson());

// Get the temporary security credentials.


GetFederationTokenResult federationTokenResult =
stsClient.getFederationToken(getFederationTokenRequest);
Credentials sessionCredentials = federationTokenResult.getCredentials();

// Package the session credentials as a BasicSessionCredentials


// object for an Amazon S3 client object to use.
BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(
sessionCredentials.getAccessKeyId(),
sessionCredentials.getSecretAccessKey(),
sessionCredentials.getSessionToken());
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new
AWSStaticCredentialsProvider(basicSessionCredentials))
.withRegion(clientRegion)
.build();

// To verify that the client works, send a listObjects request using


// the temporary security credentials.
ObjectListing objects = s3Client.listObjects(bucketName);
System.out.println("No. of Objects = " + objects.getObjectSummaries().size());
} catch (AmazonServiceException e) {

Versión de API 2006-03-01


36
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

// 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();
}
}
}

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Realización de solicitudes con credenciales temporales de


usuario federado - AWS SDK para .NET
Puede proporcionar credenciales de seguridad temporales para sus usuarios federados y aplicaciones de
modo que estos puedan enviar solicitudes autenticadas para obtener acceso a sus recursos de AWS. Al
solicitar estas credenciales temporales, debe proporcionar un nombre de usuario y una política de IAM
que describa los permisos de recursos que desea otorgar. De forma predeterminada, la sesión dura una
hora. Puede solicitar las credenciales de seguridad temporales para usuarios federados y aplicaciones
para establecer un valor de duración distinto de forma explícita. Para obtener información acerca del envío
de solicitudes autenticadas, consulte Realización de solicitudes (p. 10).
Note

Cuando solicite las credenciales de seguridad temporales para usuarios federados y aplicaciones,
para mayor seguridad le sugerimos que use un usuario de IAM específico que solo tenga los
permisos de acceso necesarios El usuario temporal creado nunca puede obtener más permisos
que el usuario de IAM que solicitó las credenciales de seguridad temporales. Para obtener más
información, consulte Preguntas frecuentes sobre AWS IAM.

Siga estas instrucciones:

• Cree una instancia del cliente de AWS Security Token Service, clase
AmazonSecurityTokenServiceClient. Para obtener información acerca de cómo proporcionar las
credenciales, consulte Uso del AWS SDK para .NET (p. 706).
• Inicie sesión utilizando el método GetFederationToken del cliente STS. Tiene que proporcionar
información acerca de la sesión, como el nombre de usuario y una política de IAM que desee adjuntar a
las credenciales temporales. También tiene la posibilidad de proporcionar una duración de sesión. Este
método devuelve sus credenciales de seguridad temporales.
• Empaquete las credenciales de seguridad temporales en una instancia del objeto
SessionAWSCredentials. Utilice este objeto para proporcionar las credenciales de seguridad
temporales al cliente de Amazon S3.
• Cree una instancia de la clase AmazonS3Client proporcionando las credenciales de seguridad
temporales. Use este cliente para enviar solicitudes a Amazon S3. Si envía las solicitudes con las
credenciales vencidas, Amazon S3 devolverá un error.

Example

En el siguiente ejemplo de C# se enumeran las claves del bucket especificado. En el ejemplo se obtienen
las credenciales de seguridad temporales para una sesión de dos horas para el usuario federado (User1) y
se utilizan las credenciales para enviar solicitudes autenticadas a Amazon S3.

Versión de API 2006-03-01


37
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

• Para este ejercicio cree un usuario de IAM con permisos mínimos. Con las credenciales de este usuario
de IAM solicite credenciales temporales para otros usuarios. Este ejemplo solo enumera los objetos de
un bucket específico. Cree un usuario de IAM con la siguiente política asociada:

{
"Statement":[{
"Action":["s3:ListBucket",
"sts:GetFederationToken*"
],
"Effect":"Allow",
"Resource":"*"
}
]
}

La política permite al usuario de IAM solicitar las credenciales de seguridad temporales y el permiso de
acceso para mostrar solo sus recursos de AWS. Para obtener más información acerca de cómo crear un
usuario de IAM, consulte Creación del primer grupo de usuarios y administradores de IAM en la Guía del
usuario de IAM.
• Use las credenciales de seguridad del usuario de IAM para probar el siguiente ejemplo. En el ejemplo
se envía una solicitud autenticada a Amazon S3 con las credenciales de seguridad temporales. En el
ejemplo se especifica la siguiente política cuando se solicitan las credenciales de seguridad temporales
para el usuario federado (User1), que restringe el acceso para mostrar los objetos de un bucket
específico (YourBucketName). Debe actualizar la política y proporcionar su propio nombre de bucket
existente.

{
"Statement":[
{
"Sid":"1",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":"arn:aws:s3:::YourBucketName"
}
]
}

• Example

Actualice la siguiente muestra y proporcione el nombre de bucket que especificó en la política de acceso
del usuario federado anterior. Para obtener instrucciones acerca de cómo crear y probar un ejemplo
funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class TempFederatedCredentialsTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;

Versión de API 2006-03-01


38
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

private static IAmazonS3 client;

public static void Main()


{
ListObjectsAsync().Wait();
}

private static async Task ListObjectsAsync()


{
try
{
Console.WriteLine("Listing objects stored in a bucket");
// Credentials use the default AWS SDK for .NET credential search chain.
// On local development machines, this is your default profile.
SessionAWSCredentials tempCredentials =
await GetTemporaryFederatedCredentialsAsync();

// Create a client by providing temporary security credentials.


using (client = new AmazonS3Client(bucketRegion))
{
ListObjectsRequest listObjectRequest = new ListObjectsRequest();
listObjectRequest.BucketName = bucketName;

ListObjectsResponse response = await


client.ListObjectsAsync(listObjectRequest);
List<S3Object> objects = response.S3Objects;
Console.WriteLine("Object count = {0}", objects.Count);

Console.WriteLine("Press any key to continue...");


Console.ReadKey();
}
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered ***. 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);
}
}

private static async Task<SessionAWSCredentials>


GetTemporaryFederatedCredentialsAsync()
{
AmazonSecurityTokenServiceConfig config = new
AmazonSecurityTokenServiceConfig();
AmazonSecurityTokenServiceClient stsClient =
new AmazonSecurityTokenServiceClient(
config);

GetFederationTokenRequest federationTokenRequest =
new GetFederationTokenRequest();
federationTokenRequest.DurationSeconds = 7200;
federationTokenRequest.Name = "User1";
federationTokenRequest.Policy = @"{
""Statement"":
[
{
""Sid"":""Stmt1311212314284"",
""Action"":[""s3:ListBucket""],
""Effect"":""Allow"",
""Resource"":""arn:aws:s3:::" + bucketName + @"""
}

Versión de API 2006-03-01


39
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

]
}
";

GetFederationTokenResponse federationTokenResponse =
await stsClient.GetFederationTokenAsync(federationTokenRequest);
Credentials credentials = federationTokenResponse.Credentials;

SessionAWSCredentials sessionCredentials =
new SessionAWSCredentials(credentials.AccessKeyId,
credentials.SecretAccessKey,
credentials.SessionToken);
return sessionCredentials;
}
}
}

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Realización de solicitudes con credenciales temporales de


usuario federado - AWS SDK para PHP
En este tema se explica cómo usar clases de la versión 3 de AWS SDK para PHP para solicitar
credenciales de seguridad temporales para usuarios federados y aplicaciones, y utilizarlas para obtener
acceso recursos almacenados en Amazon S3. Se parte de la base de que usted ya sigue las instrucciones
para Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK
para PHP correctamente.

Puede proporcionar credenciales de seguridad temporales a sus usuarios federados y aplicaciones para
que puedan enviar solicitudes autenticadas para obtener acceso a sus recursos de AWS. Al solicitar estas
credenciales temporales, debe proporcionar un nombre de usuario y una política de IAM que describa los
permisos de recursos que desea otorgar. Estas credenciales caducan cuando finaliza la duración de la
sesión. De forma predeterminada, la sesión durará una hora. Puede solicitar las credenciales de seguridad
temporales para usuarios federados y aplicaciones para establecer explícitamente otro valor para la
duración. Para obtener más información acerca de las credenciales de seguridad temporales, consulte
Credenciales de seguridad temporales en la Guía del usuario de IAM. Para obtener más información sobre
cómo proporcionar credenciales de seguridad temporales a sus usuarios federados y sus aplicaciones,
consulte Realización de solicitudes (p. 10).

Para mayor seguridad, cuando solicite las credenciales de seguridad temporales para usuarios federados
y aplicaciones, recomendamos que use un usuario de IAM específico que solo tenga los permisos de
acceso necesarios El usuario temporal creado nunca puede obtener más permisos que el usuario de IAM
que solicitó las credenciales de seguridad temporales. Para obtener información acerca de la identidad
federada, consulte Preguntas frecuentes sobre AWS IAM.

Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución de
ejemplos de PHP (p. 709).

Example

En el siguiente ejemplo de PHP se enumeran las claves del bucket especificado. En el ejemplo se obtienen
las credenciales de seguridad temporales para una sesión de una hora para el usuario federado (User1). A
continuación, use las credenciales de seguridad temporales para enviar solicitudes autenticadas a Amazon
S3.

Versión de API 2006-03-01


40
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

Para mayor seguridad, cuando solicite las credenciales temporales para otros usuarios, utilice las
credenciales de seguridad de un usuario de IAM que tenga permisos para solicitar credenciales de
seguridad temporales. Para asegurarse de que el usuario de IAM otorga solo los permisos específicos de
la aplicación mínimos al usuario federado, también puede limitar los permisos de acceso a este usuario
de IAM. En este ejemplo solo se enumera objetos de un bucket específico. Cree un usuario de IAM con la
siguiente política asociada:

{
"Statement":[{
"Action":["s3:ListBucket",
"sts:GetFederationToken*"
],
"Effect":"Allow",
"Resource":"*"
}
]
}

La política permite al usuario de IAM solicitar las credenciales de seguridad temporales y el permiso de
acceso para mostrar solo sus recursos de AWS. Para obtener más información acerca de cómo crear un
usuario de IAM, consulte Creación del primer grupo de usuarios y administradores de IAM en la Guía del
usuario de IAM.

Ahora puede utilizar las credenciales de seguridad del usuario de IAM para probar el siguiente ejemplo. En
el ejemplo se envía una solicitud autenticada a Amazon S3 con las credenciales de seguridad temporales.
Cuando solicite las credenciales de seguridad temporales para el usuario federado (User1), el ejemplo
especifica la política siguiente, que restringe el acceso para enumerar los objetos de un bucket específico.
Actualice la política con el nombre de su bucket.

{
"Statement":[
{
"Sid":"1",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":"arn:aws:s3:::YourBucketName"
}
]
}

En el siguiente ejemplo, al especificar el recurso de política, reemplace YourBucketName por el nombre


del bucket.

require 'vendor/autoload.php';

use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = '*** Your Bucket Name ***';

// In real applications, the following code is part of your trusted code. It has
// the security credentials that you use to obtain temporary security credentials.
$sts = new StsClient(
[
'version' => 'latest',
'region' => 'us-east-1']
);

// Fetch the federated credentials.

Versión de API 2006-03-01


41
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

$sessionToken = $sts->getFederationToken([
'Name' => 'User1',
'DurationSeconds' => '3600',
'Policy' => json_encode([
'Statement' => [
'Sid' => 'randomstatementid' . time(),
'Action' => ['s3:ListBucket'],
'Effect' => 'Allow',
'Resource' => 'arn:aws:s3:::' . $bucket
]
])
]);

// The following will be part of your less trusted code. You provide temporary
// security credentials so the code can send authenticated requests to Amazon S3.

$s3 = new S3Client([


'region' => 'us-east-1',
'version' => 'latest',
'credentials' => [
'key' => $sessionToken['Credentials']['AccessKeyId'],
'secret' => $sessionToken['Credentials']['SecretAccessKey'],
'token' => $sessionToken['Credentials']['SessionToken']
]
]);

try {
$result = $s3->listObjects([
'Bucket' => $bucket
]);
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}

Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Documentación de AWS SDK para PHP

Cómo realizar solicitudes con credenciales temporales de usuario


federado - AWS SDK parar Ruby
Puede proporcionar credenciales de seguridad temporales para sus usuarios federados y aplicaciones de
modo que estos puedan enviar solicitudes autenticadas para obtener acceso a sus recursos de AWS. Al
solicitar estas credenciales temporales al servicio de IAM, debe proporcionar un nombre de usuario y una
política de IAM que describa los permisos de recursos que desea conceder. De forma predeterminada,
la sesión durará una hora. Sin embargo, si solicita las credenciales temporales con las credenciales de
usuario de IAM, puede solicitar las credenciales de seguridad temporales para usuarios federados y
aplicaciones para establecer un valor de duración distinto de forma explícita. Para obtener más información
sobre cómo proporcionar credenciales de seguridad temporales para sus usuarios federados y sus
aplicaciones, consulte Realización de solicitudes (p. 10).
Note

Para mayor seguridad, cuando solicita las credenciales de seguridad temporales para usuarios
federados y aplicaciones, se recomienda utilizar un usuario de IAM específico que solo tenga los
permisos de acceso necesarios. El usuario temporal creado nunca puede obtener más permisos
que el usuario de IAM que solicitó las credenciales de seguridad temporales. Para obtener más
información, consulte Preguntas frecuentes sobre AWS IAM.

Versión de API 2006-03-01


42
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

Example

En el siguiente ejemplo de código Ruby se permite que un usuario federado con un conjunto limitado de
permisos enumere las clave en el bucket especificado.

require 'aws-sdk-s3'
require 'aws-sdk-iam'

USAGE = <<DOC

Usage: ruby auth_federation_token_request_test.rb -b BUCKET -u USER [-r REGION] [-d] [-h]

Creates a federated policy for USER to list items in BUCKET for one hour.

BUCKET is required and must already exist.

USER is required and if not found, is created.

If REGION is not supplied, defaults to us-west-2.

-d gives you extra (debugging) information.

-h displays this message and quits.

DOC

def print_debug(debug, s)
if debug
puts s
end
end

# Get the user if they exist, otherwise create them


def get_user(region, user_name, debug)
iam = Aws::IAM::Client.new(region: 'us-west-2')

# See if user exists


user = iam.user(user_name)

# If user does not exist, create them


if user == nil
user = iam.create_user(user_name: user_name)
iam.wait_until(:user_exists, user_name: user_name)
print_debug(debug, "Created new user #{user_name}")
else
print_debug(debug, "Found user #{user_name} in region #{region}")
end

user
end

# main
region = 'us-west-2'
user_name = ''
bucket_name = ''

i = 0

while i < ARGV.length


case ARGV[i]

when '-b'
i += 1
bucket_name = ARGV[i]

Versión de API 2006-03-01


43
Amazon Simple Storage Service Guía del desarrollador
Uso de credenciales temporales de usuario federado

when '-u'
i += 1
user_name = ARGV[i]

when '-r'
i += 1
region = ARGV[i]

when '-h'
puts USAGE
exit 0

else
puts 'Unrecognized option: ' + ARGV[i]
puts USAGE
exit 1

end

i += 1
end

if bucket_name == ''
puts 'You must supply a bucket name'
puts USAGE
exit 1
end

if user_name == ''
puts 'You must supply a user name'
puts USAGE
exit 1
end

# Create a new STS client and get temporary credentials.


sts = Aws::STS::Client.new(region: region)

creds = sts.get_federation_token({
duration_seconds: 3600,
name: user_name,
policy: "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"Stmt1\",\"Effect\":\"Allow
\",\"Action\":\"s3:ListBucket\",\"Resource\":\"arn:aws:s3:::#{bucket_name}\"}]}",
})

# Create an Amazon S3 resource with temporary credentials.


s3 = Aws::S3::Resource.new(region: region, credentials: creds)

puts "Contents of '%s':" % bucket_name


puts ' Name => GUID'

begin
s3.bucket(bucket_name).objects.limit(50).each do |obj|
puts " #{obj.key} => #{obj.etag}"
end
rescue StandardError => ex
puts 'Caught exception accessing bucket ' + bucket_name + ':'
puts ex.message
end

Versión de API 2006-03-01


44
Amazon Simple Storage Service Guía del desarrollador
Realización de solicitudes con la API de REST

Realización de solicitudes con la API de REST


Esta sección incluye información acerca de cómo realizar solicitudes a los puntos de enlace de Amazon
S3 con la API de REST. Para ver una lista de los puntos de enlace de Amazon S3, consulte Regiones y
puntos de enlace en la AWS General Reference.

Temas
• Realización de solicitudes a los puntos de enlace de doble pila con la API de REST (p. 46)
• Alojamiento virtual de buckets (p. 46)
• Solicitud de redireccionamiento y la API de REST (p. 51)

Cuando realiza solicitudes con la API de REST, puede utilizar los URI de tipo alojamiento virtual o tipo
ruta para los puntos de enlace de Amazon S3. Para obtener más información, consulte Uso de buckets de
Amazon S3 (p. 54).

Example Solicitud de tipo alojamiento virtual


A continuación se muestra un ejemplo de una solicitud de tipo alojamiento virtual para eliminar el archivo
puppy.jpg del bucket denominado examplebucket.

DELETE /puppy.jpg HTTP/1.1


Host: examplebucket.s3.amazonaws.com
Date: Mon, 11 Apr 2016 12:00:00 GMT
x-amz-date: Mon, 11 Apr 2016 12:00:00 GMT
Authorization: authorization string

Example Solicitud de tipo ruta


A continuación se muestra un ejemplo de una versión tipo ruta de la misma solicitud.

DELETE /examplebucket/puppy.jpg HTTP/1.1


Host: s3-us-west-2.amazonaws.com
Date: Mon, 11 Apr 2016 12:00:00 GMT
x-amz-date: Mon, 11 Apr 2016 12:00:00 GMT
Authorization: authorization string

Actualmente Amazon S3 admite acceso de estilo alojado y de ruta en todas las regiones, pero esto irá
cambiando (consulte la siguiente nota Importante). La sintaxis estilo ruta requiere que use el punto de
enlace específico de la región cuando intenta el acceso al bucket. Por ejemplo, si tiene un bucket llamado
mybucket que reside en la región UE (Irlanda), le interesa utilizar la sintaxis estilo ruta y el objeto se llama
puppy.jpg, el URI correcto es http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg.

Recibirá un código de respuesta HTTP 307 error de redireccionamiento temporal y un mensaje en el que
se indica el URI correcto del recurso si intenta obtener acceso a un bucket fuera de la región EE. UU. Este
(N. Virginia) con la misma sintaxis estilo ruta que usa uno de lo siguiente:

• http://s3.amazonaws.com
• un punto de enlace para una región diferente de la región donde reside el bucket. Por ejemplo, si utiliza
http://s3-us-west-1.amazonaws.com para un bucket creado en la región EE.UU. Oeste (Norte de
California).

Important
Los buckets creados después del 30 de septiembre de 2020 solo admitirán solicitudes virtuales
de estilo alojado. Las solicitudes de estilo de ruta seguirán siendo compatibles para con los

Versión de API 2006-03-01


45
Amazon Simple Storage Service Guía del desarrollador
Puntos de enlace de doble pila (API de REST)

buckets creados en esta fecha y antes de ella. Para más información, consulte Amazon S3 Path
Deprecation Plan – The Rest of the Story.

Realización de solicitudes a los puntos de enlace de


doble pila con la API de REST
Cuando utiliza la API de REST, puede acceder directamente al punto de enlace de doble pila con un
nombre de punto de enlace de tipo alojamiento virtual o tipo ruta (URI). Todos los nombres de punto de
enlace de doble pila de Amazon S3 incluyen la región en el nombre. A diferencia de los puntos de enlace
estándar que solo admiten IPv4, tanto los puntos de enlace de tipo alojamiento virtual como los de tipo ruta
utilizan nombres de puntos de enlace específicos de la región.

Example Solicitud de punto de enlace de doble pila de tipo alojamiento virtual

Puede utilizar un punto de enlace de tipo alojamiento virtual en su solicitud REST como se muestra en el
siguiente ejemplo que recupera el objeto puppy.jpg del bucket denominado examplebucket.

GET /puppy.jpg HTTP/1.1


Host: examplebucket.s3.dualstack.us-west-2.amazonaws.com
Date: Mon, 11 Apr 2016 12:00:00 GMT
x-amz-date: Mon, 11 Apr 2016 12:00:00 GMT
Authorization: authorization string

Example Solicitud de punto de enlace de doble pila de tipo ruta

O bien, puede utilizar un punto de enlace de tipo ruta en su solicitud como se muestra en el siguiente
ejemplo.

GET /examplebucket/puppy.jpg HTTP/1.1


Host: s3.dualstack.us-west-2.amazonaws.com
Date: Mon, 11 Apr 2016 12:00:00 GMT
x-amz-date: Mon, 11 Apr 2016 12:00:00 GMT
Authorization: authorization string

Para obtener más información acerca de los puntos de enlace de doble pila, consulte Uso de los puntos de
enlace de doble pila en Amazon S3 (p. 15).

Alojamiento virtual de buckets


Temas
• Especificación de bucket de encabezado de host HTTP (p. 47)
• Ejemplos (p. 48)
• Personalización de URL de Amazon S3 con CNAME (p. 49)
• Limitaciones (p. 51)
• Compatibilidad con versiones anteriores (p. 51)

En general, el alojamiento virtual es la práctica que consiste en distribuir múltiples sitios web desde un
solo servidor web. Una manera de diferenciar sitios es mediante el uso del nombre de host aparente de la
solicitud en lugar de solo la parte del nombre de la ruta del URI. Para especificar un bucket, una solicitud
REST de Amazon S3 normal utiliza el primer componente delimitado por una barra inclinada de la ruta
del URI de la solicitud. También puede utilizar el alojamiento virtual de Amazon S3 para hacer referencia
a un bucket en una llamada a la API de REST mediante el encabezado Host de HTTP. En la práctica,

Versión de API 2006-03-01


46
Amazon Simple Storage Service Guía del desarrollador
Alojamiento virtual de buckets

Amazon S3 interpreta que Host significa que es posible acceder a la mayoría de los buckets de manera
automática (para tipos limitados de solicitudes) en http://bucketname.s3.amazonaws.com. Además,
al nombrar su bucket según su nombre de dominio registrado y al convertir ese nombre en un alias de DNS
para Amazon S3, puede personalizar completamente la URL de sus recursos de Amazon S3, por ejemplo,
http://my.bucketname.com/.

Además del atractivo de los URL personalizados, un segundo beneficio del alojamiento virtual es la
capacidad de publicar al “directorio raíz” del servidor virtual de su bucket. Esta capacidad puede ser
importante ya que varias aplicaciones existentes buscan archivos en esta ubicación estándar. Por ejemplo,
favicon.ico, robots.txt y crossdomain.xml se encuentran en la raíz.

Actualmente Amazon S3 admite acceso de estilo alojado y de ruta en todas las regiones, pero esto irá
cambiando (consulte la siguiente nota Importante). La sintaxis estilo ruta requiere que use el punto de
enlace específico de la región cuando intenta el acceso al bucket. Por ejemplo, si tiene un bucket llamado
mybucket que reside en la región UE (Irlanda), le interesa utilizar la sintaxis estilo ruta y el objeto se llama
puppy.jpg, el URI correcto es http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg.

Recibirá un código de respuesta HTTP 307 error de redireccionamiento temporal y un mensaje en el que
se indica el URI correcto del recurso si intenta obtener acceso a un bucket fuera de la región EE. UU. Este
(N. Virginia) con la misma sintaxis estilo ruta que usa uno de lo siguiente:

• http://s3.amazonaws.com
• un punto de enlace para una región diferente de la región donde reside el bucket. Por ejemplo, si utiliza
http://s3-us-west-1.amazonaws.com para un bucket creado en la región EE.UU. Oeste (Norte de
California).

Important

Los buckets creados después del 30 de septiembre de 2020 solo admitirán solicitudes virtuales
de estilo alojado. Las solicitudes de estilo de ruta seguirán siendo compatibles para con los
buckets creados en esta fecha y antes de ella. Para más información, consulte Amazon S3 Path
Deprecation Plan – The Rest of the Story.

Si utiliza el punto de enlace EE.UU. Este (Norte de Virginia) (s3.amazonaws.com), en lugar del punto de
enlace específico de la región (por ejemplo, s3-us-west-1.amazonaws.com), Amazon S3 direcciona
cualquier solicitud de tipo alojamiento virtual a la región EE.UU. Este (Norte de Virginia) de forma
predeterminada. Cuando se crea un bucket en cualquier región lanzada hasta el 20 de marzo de 2019,
Amazon S3 actualiza el DNS para redirigir la solicitud a la ubicación correcta, lo que puede llevar algo
de tiempo. Mientras tanto, se aplica la regla predeterminada y la solicitud de tipo alojamiento virtual
se dirige a la región de EE.UU. Este (Norte de Virginia). A continuación, Amazon S3 la redirige con el
redireccionamiento HTTP 307 a la región correcta.

Para los buckets de S3 de regiones lanzadas después del 20 de marzo de 2019, el DNS no enruta la
solicitud directamente a la región de AWS en la que reside el bucket. En su lugar, devuelve un error de
solicitud errónea HTTP 400.

Para obtener más información, consulte Solicitudes de redireccionamiento en la API REST (p. 623).

Al usar buckets de tipo alojamiento virtual con SSL, el certificado comodín de SSL solo coincide con
los buckets que no contienen puntos. Para solucionar esto, use HTTP o escriba su propia lógica de
verificación de certificado.

Especificación de bucket de encabezado de host HTTP


Siempre y cuando su solicitud GET no utilice el punto de enlace de SSL, puede especificar el bucket para
la solicitud con el encabezado del Host HTTP. El encabezado del Host en una solicitud de REST se
interpreta de la siguiente manera:

Versión de API 2006-03-01


47
Amazon Simple Storage Service Guía del desarrollador
Alojamiento virtual de buckets

• Si el encabezado del Host se omite o su valor es s3.amazonaws.com, el bucket para la solicitud


será el primer componente delimitado por una barra inclinada del URI de la solicitud y la clave para la
solicitud será el resto del URI de la solicitud. Este es el método más común, según se ilustra en el primer
y segundo ejemplo de esta sección. Solo se puede omitir el encabezado Host para solicitudes HTTP 1.0.
• De lo contrario, si el valor del encabezado Host termina por .s3.amazonaws.com, el nombre del
bucket es la primera parte del valor del encabezado Host hasta .s3.amazonaws.com. La clave para
la solicitud es el URI de la solicitud. Esta interpretación expone los buckets como subdominios de
s3.amazonaws.com, según se ilustra en los ejemplos tercero y cuarto de esta sección.
• De lo contrario, el bucket para la solicitud es el valor en minúscula del encabezado del Host y la clave
para la solicitud es el URI de la solicitud. Esta interpretación es útil si registró el mismo nombre de
DNS que el nombre de su bucket y estableció ese nombre como alias de nombre canónico (CNAME)
para Amazon S3. El procedimiento para registrar nombres de dominio y configurar DNS está fuera del
propósito de esta guía, pero el resultado se muestra en el ejemplo final en esta sección.

Ejemplos
En esta sección se proporcionan ejemplos de URL y solicitudes.

Example Método de tipo ruta

En este ejemplo se utiliza johnsmith.net como el nombre de bucket y homepage.html como el


nombre de clave.

El URL es el siguiente:

http://s3.amazonaws.com/johnsmith.net/homepage.html

La solicitud es la siguiente:

GET /johnsmith.net/homepage.html HTTP/1.1


Host: s3.amazonaws.com

La solicitud con HTTP 1.0 y la omisión del encabezado de host son los siguientes:

GET /johnsmith.net/homepage.html HTTP/1.0

Para obtener información acerca de los nombres compatibles con el DNS, consulte Limitaciones (p. 51).
Para obtener más información acerca de las claves, consulte Claves (p. 3).

Example Método de tipo alojamiento virtual

En este ejemplo se utiliza johnsmith.net como el nombre de bucket y homepage.html como el


nombre de clave.

El URL es el siguiente:

http://johnsmith.net.s3.amazonaws.com/homepage.html

La solicitud es la siguiente:

GET /homepage.html HTTP/1.1


Host: johnsmith.net.s3.amazonaws.com

El método de tipo alojamiento virtual requiere que el nombre de bucket sea compatible con el DNS.

Versión de API 2006-03-01


48
Amazon Simple Storage Service Guía del desarrollador
Alojamiento virtual de buckets

Example Método de tipo alojamiento virtual para un bucket en una región distinta de EE.UU. Este
(Norte de Virginia)

En este ejemplo, se utiliza johnsmith.eu como nombre del bucket en la región UE (Irlanda) y
homepage.html como nombre de la clave.

El URL es el siguiente:

http://johnsmith.eu.s3-eu-west-1.amazonaws.com/homepage.html

La solicitud es la siguiente:

GET /homepage.html HTTP/1.1


Host: johnsmith.eu.s3-eu-west-1.amazonaws.com

En lugar de utilizar el punto de enlace específico de la región, también puede utilizar el punto de enlace
de la región EE. UU. Este (Norte de Virginia), independientemente de la región en la que se encuentre el
bucket.

http://johnsmith.eu.s3.amazonaws.com/homepage.html

La solicitud es la siguiente:

GET /homepage.html HTTP/1.1


Host: johnsmith.eu.s3.amazonaws.com

Example Método de CNAME

En este ejemplo se utiliza www.johnsmith.net como el nombre de bucket y homepage.html como el


nombre de clave. Para utilizar este método, debe configurar su nombre de DNS como un alias de CNAME
para bucketname.s3.amazonaws.com.

El URL es el siguiente:

http://www.johnsmith.net/homepage.html

El ejemplo es el siguiente:

GET /homepage.html HTTP/1.1


Host: www.johnsmith.net

Personalización de URL de Amazon S3 con CNAME


Según sus necesidades, es posible que no desee que s3.amazonaws.com aparezca en su sitio web o
servicio. Por ejemplo, si aloja las imágenes de su sitio web en Amazon S3, puede que prefiera http://
images.johnsmith.net/ en lugar de http://johnsmith-images.s3.amazonaws.com/.

El nombre del bucket debe ser el mismo que el CNAME. Por lo tanto,
http://images.johnsmith.net/filename sería lo mismo que http://
images.johnsmith.net.s3.amazonaws.com/filename si se creara un CNAME para asignar
images.johnsmith.net a images.johnsmith.net.s3.amazonaws.com.

Cualquier bucket con un nombre compatible con el DNS se puede denominar de la siguiente
manera: http://[BucketName].s3.amazonaws.com/[Filename], por ejemplo, http://

Versión de API 2006-03-01


49
Amazon Simple Storage Service Guía del desarrollador
Alojamiento virtual de buckets

images.johnsmith.net.s3.amazonaws.com/mydog.jpg. Al utilizar el CNAME, puede asignar


images.johnsmith.net a un nombre de host de Amazon S3 para que la URL anterior se convierta en
http://images.johnsmith.net/mydog.jpg.

El registro CNAME de DNS debe usar el nombre de host de tipo alojamiento virtual
adecuado como alias de su nombre de dominio. Por ejemplo, si su nombre de bucket
y nombre de dominio son images.johnsmith.net, el registro de CNAME debe usar
images.johnsmith.net.s3.amazonaws.com como alias.

images.johnsmith.net CNAME images.johnsmith.net.s3.amazonaws.com.

Configurar el destino de alias en s3.amazonaws.com también funciona, pero puede generar


redireccionamientos HTTP adicionales.

Amazon S3 utiliza el nombre de host para determinar el nombre del bucket. Por ejemplo, suponga que
configuró www.example.com como un CNAME para www.example.com.s3.amazonaws.com. Cuando
accede a http://www.example.com, Amazon S3 recibe una solicitud similar a la siguiente:

Example

GET / HTTP/1.1
Host: www.example.com
Date: date
Authorization: signatureValue

Amazon S3 solo ve el nombre de host original www.example.com y desconoce el mapeo de CNAME que
se utiliza para resolver la solicitud. Por tanto, el nombre del bucket debe ser el mismo que el CNAME.

Se puede utilizar cualquier punto de enlace de Amazon S3 en un CNAME. Por ejemplo, se puede utilizar
s3-ap-southeast-1.amazonaws.com en los CNAME. Para obtener más información acerca de los
puntos de enlace, consulte Puntos de enlace de solicitud (p. 12).

Para asociar un nombre de host a un bucket de Amazon S3 mediante los CNAME

1. Seleccione un nombre de host que pertenezca a un domino que usted controla. En este ejemplo se
utiliza el subdominio images del dominio johnsmith.net.
2. Cree un bucket que coincida con el nombre de host. En este ejemplo, los nombres de host y de bucket
son images.johnsmith.net.
Note

El nombre del bucket debe coincidir exactamente con el nombre de host.


3. Cree un registro CNAME que defina el nombre de host como un alias para el bucket de Amazon S3.
Por ejemplo:

images.johnsmith.net CNAME images.johnsmith.net.s3.amazonaws.com


Important

Por motivos de direccionamiento de solicitudes, el registro de CNAME se debe definir


exactamente como se muestra en el ejemplo anterior. De lo contrario, puede parecer que
funciona correctamente, pero al final provoca un comportamiento impredecible.
Note

El procedimiento para la configuración de DNS depende de su servidor de DNS o proveedor


de DNS. Para obtener información específica, consulte la documentación de su servidor o
contáctese con su proveedor.
Versión de API 2006-03-01
50
Amazon Simple Storage Service Guía del desarrollador
Solicitud de redireccionamiento y la API de REST

Limitaciones
Las URL de host virtuales solo son compatibles con solicitudes no SSL (HTTP).
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Compatibilidad con versiones anteriores


Las versiones anteriores de Amazon S3 hacían caso omiso incorrectamente del encabezado Host
HTTP. Las aplicaciones que dependen de este comportamiento indocumentado se deben actualizar para
configurar correctamente el encabezado del Host. Dado que Amazon S3 determina el nombre del bucket
a partir del Host cuando está presente, el síntoma más probable de este problema es recibir un código de
resultado de error NoSuchBucket imprevisto.

Solicitud de redireccionamiento y la API de REST


Temas
• Redireccionamiento y agentes de usuario HTTP (p. 51)
• Redireccionamientos y 100-continue (p. 52)
• Ejemplo de redireccionamiento (p. 52)

En esta sección se describe cómo administrar el redireccionamiento HTTP mediante la API REST de
Amazon S3. Para obtener información general sobre el redireccionamiento en Amazon S3, consulte
Solicitudes de redireccionamiento en la API REST (p. 623) en la Amazon Simple Storage Service API
Reference.

Redireccionamiento y agentes de usuario HTTP


Los programas que usan la API REST de Amazon S3 deberían poder ocuparse de los redireccionamientos
o bien en la capa de aplicación o bien en la capa HTTP. Muchas bibliotecas clientes y agentes de usuario
HTTP pueden configurarse para administrar los redireccionamientos de forma correcta y automática.
Sin embargo, hay muchas otras que tienen implementaciones de los redireccionamientos incorrectas o
incompletas.

Antes de depender de una biblioteca para cumplir el requisito de redireccionamiento, pruebe lo siguiente:

• Compruebe que todos los encabezados de solicitudes HTTP estén incluidos correctamente en la
solicitud redirigida (la segunda solicitud tras haber recibido un redireccionamiento) incluidos los
estándares HTTP como la autorización y la fecha.
• Compruebe que los redireccionamientos que no sean GET, como PUT o DELETE, funcionen
correctamente.
• Compruebe que las solicitudes PUT grandes sigan los redireccionamientos correctamente.
• Compruebe que las solicitudes PUT sigan los redireccionamientos correctamente si la respuesta 100-
continue tarda demasiado en llegar.

Los agentes de usuario HTTP que se ajusten estrictamente a RFC 2616 podrían necesitar una
confirmación explícita antes de seguir un redireccionamiento si el método de solicitud HTTP no es
GET o HEAD. Normalmente, es seguro seguir los redireccionamientos generados por Amazon S3
automáticamente, ya que el sistema generará redireccionamientos solamente a los hosts del dominio
amazonaws.com, y el efecto de la solicitud redirigida será el mismo que el de la solicitud original.

Versión de API 2006-03-01


51
Amazon Simple Storage Service Guía del desarrollador
Solicitud de redireccionamiento y la API de REST

Redireccionamientos y 100-continue
Para administrar el redireccionamiento de forma más sencilla, mejorar la eficacia y evitar los costos
asociados con el envío duplicado del cuerpo de una solicitud redirigida, configure su aplicación para usar
100-continues en operaciones PUT. Cuando su aplicación usa 100-continue, no envía el cuerpo de la
solicitud hasta que recibe una confirmación. Si el mensaje se rechaza en función de los encabezados, el
cuerpo del mismo no se llega a enviar. Para obtener más información sobre 100-continue, visite RFC 2616
Sección 8.2.3
Note

Según RFC 2616, al usar Expect: Continue sin un servidor HTTP conocido, no debería
esperar un periodo indefinido para enviar el cuerpo de la solicitud. Esto se debe a que algunos
servidores HTTP no reconocen 100-continue. Sin embargo, Amazon S3 sí que reconoce si su
solicitud contiene un Expect: Continue y responderá con un estado 100-continue provisional o
un código de estado final. Además, no se producirá ningún error de redireccionamiento tras recibir
la autorización provisional del 100-continue. Así, le resultará más fácil evitar recibir una respuesta
de redireccionamiento mientras sigue escribiendo el cuerpo de la solicitud.

Ejemplo de redireccionamiento
En esta sección se ofrece un ejemplo de interacción cliente-servidor mediante redireccionamientos HTTP y
100-continue.

A continuación mostramos un ejemplo de PUT al bucket quotes.s3.amazonaws.com.

PUT /nelson.txt HTTP/1.1


Host: quotes.s3.amazonaws.com
Date: Mon, 15 Oct 2007 22:18:46 +0000

Content-Length: 6
Expect: 100-continue

Amazon S3 devuelve lo siguiente:

HTTP/1.1 307 Temporary Redirect


Location: http://quotes.s3-4c25d83b.amazonaws.com/nelson.txt?rk=8d47490b
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Mon, 15 Oct 2007 22:18:46 GMT

Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>


<Error>
<Code>TemporaryRedirect</Code>
<Message>Please re-send this request to the
specified temporary endpoint. Continue to use the
original request endpoint for future requests.
</Message>
<Endpoint>quotes.s3-4c25d83b.amazonaws.com</Endpoint>
<Bucket>quotes</Bucket>
</Error>

El cliente sigue la respuesta de redireccionamiento y envía una nueva solicitud al punto de conexión
temporal quotes.s3-4c25d83b.amazonaws.com.

PUT /nelson.txt?rk=8d47490b HTTP/1.1

Versión de API 2006-03-01


52
Amazon Simple Storage Service Guía del desarrollador
Solicitud de redireccionamiento y la API de REST

Host: quotes.s3-4c25d83b.amazonaws.com
Date: Mon, 15 Oct 2007 22:18:46 +0000

Content-Length: 6
Expect: 100-continue

Amazon S3 devuelve un 100-continue que indica que el cliente debería continuar con el envío del cuerpo
de la solicitud.

HTTP/1.1 100 Continue

El cliente envía el cuerpo de la solicitud.

ha ha\n

Amazon S3 devuelve la respuesta final.

HTTP/1.1 200 OK
Date: Mon, 15 Oct 2007 22:18:48 GMT

ETag: "a2c8d6b872054293afd41061e93bc289"
Content-Length: 0
Server: AmazonS3

Versión de API 2006-03-01


53
Amazon Simple Storage Service Guía del desarrollador

Uso de buckets de Amazon S3


Para cargar sus datos (fotos, vídeos, documentos, etc.) en Amazon S3, primero tiene que crear un bucket
de S3 en una de las regiones de AWS. Luego puede cargar la cantidad de objetos que desee en el bucket.

En términos de implementación, los buckets y objetos son recursos y Amazon S3 proporciona Application
Program Interfaces (API, Interfaces de programación de aplicaciones) para que pueda administrarlos.
Por ejemplo, puede crear un bucket y cargar objetos con la API de Amazon S3. También puede usar la
consola de Amazon S3 para realizar estas operaciones. La consola utiliza las API de Amazon S3 para
enviar solicitudes a Amazon S3.

En esta sección se explica cómo trabajar con buckets. Para obtener información acerca del uso de objetos,
consulte Trabajo con objetos de Amazon S3 (p. 104).

Un nombre de bucket de Amazon S3 es globalmente único y todas las cuentas de AWS comparten el
espacio de nombres. Esto significa que, una vez que se crea un bucket, ninguna otra cuenta de AWS
de ninguna otra región de AWS puede usar el nombre de ese bucket hasta que el bucket se elimina. No
debe confiar en convenciones específicas de nomenclatura de buckets para propósitos de verificación
de la seguridad o disponibilidad. Para conocer las directrices de nomenclatura de buckets, consulte
Restricciones y limitaciones de los buckets (p. 60).

Amazon S3 crea buckets en la región que usted especifique. Elija cualquier región de AWS que esté
geográficamente cerca de usted para optimizar la latencia, minimizar los costos o satisfacer los requisitos
reglamentarios. Por ejemplo, si vive en Europa, puede que le convenga crear los buckets en las regiones
UE (Irlanda) o UE (Fráncfort). Para obtener una lista de las regiones de Amazon S3, consulte Regiones y
puntos de enlace en la Referencia general de AWS.
Note

Los objetos que pertenecen a un bucket que se crea en una región de AWS específica
permanecen siempre en ella, a menos que se transfieran de manera explícita a otra región. Por
ejemplo, los objetos que están almacenados en la región UE (Irlanda) permanecen siempre en
ella.

Temas
• Creación de un bucket (p. 55)
• Administración del acceso público a los buckets (p. 56)
• Acceso a un bucket (p. 57)
• Opciones de configuración de buckets (p. 58)
• Restricciones y limitaciones de los buckets (p. 60)
• Ejemplos de creación de buckets (p. 61)
• Eliminación o vaciado de un bucket (p. 64)
• Cifrado predeterminado de Amazon S3 para los buckets de S3 (p. 69)
• Administración de la configuración de sitio web de un bucket (p. 72)
• Aceleración de transferencia de Amazon S3 (p. 76)
• Buckets de pago por solicitante (p. 83)
• Buckets y control de acceso (p. 87)

Versión de API 2006-03-01


54
Amazon Simple Storage Service Guía del desarrollador
Creación de un bucket

• Informes de facturación y de uso para los buckets de S3 (p. 88)

Creación de un bucket
Amazon S3 proporciona las API para crear y administrar buckets. De forma predeterminada, puede crear
hasta 100 buckets en cada una de sus cuentas de AWS. Si necesita más buckets, puede presentar una
solicitud de aumento del límite del servicio para aumentar el límite de buckets de la cuenta hasta un
máximo de 1000 buckets. Para obtener información acerca de cómo solicitar un aumento del límite de
buckets, consulte Límites de los servicios de AWS en la Referencia general de AWS.

Cuando crea un bucket, proporciona un nombre y la región de AWS donde desea crear el bucket. Para
obtener información acerca de la nomenclatura de los buckets, consulte Reglas para la nomenclatura de
buckets (p. 60).

En un bucket, puede almacenar la cantidad de objetos que desee.

Puede crear un bucket con cualquiera de los siguientes métodos:

• Mediante la consola
• Mediante programación, con los SDK de AWS
Note
Si lo necesita, también puede realizar las llamadas a la API REST de Amazon S3 directamente
desde su código. Sin embargo, esto puede ser engorroso porque debe escribir el código para
autenticar las solicitudes. Para obtener más información, consulte la sección sobre PUT Bucket
en la Amazon Simple Storage Service API Reference.

Si usa los SDK de AWS, primero crea un cliente y luego usa el cliente para enviar una solicitud de crear
un bucket.  Cuando cree el cliente, puede especificar una región de AWS. US East (N. Virginia) es la
región predeterminada. Tenga en cuenta lo siguiente:
• Si usted especifica la región US East (N. Virginia) para crear un cliente, el cliente usa el siguiente
punto de enlace para comunicarse con Amazon S3:

s3.amazonaws.com

Note
• Puede usar este cliente para crear un bucket en cualquier región de AWS lanzada hasta el
20 de marzo de 2019. Para crear un bucket en las regiones que se lanzaron después del
20 de marzo de 2019, debe crear un cliente específico para la región en la que desea crear
el bucket. Para obtener más información sobre cómo habilitar y deshabilitar una región de
AWS, consulte Regiones y puntos de enlace de AWS en la AWS General Reference.
• Los buckets creados después del 30 de septiembre de 2020 solo admitirán solicitudes
virtuales de estilo alojado. Las solicitudes de estilo de ruta seguirán siendo compatibles
para con los buckets creados en esta fecha y antes de ella. Para más información, consulte
Amazon S3 Path Deprecation Plan – The Rest of the Story.

En la solicitud de creación de buckets:


• Si no especifica una región, Amazon S3 crea el bucket en la región US East (N. Virginia).
• Si especifica una región de AWS, Amazon S3 crea el bucket en la región especificada.
• Si especifica cualquier otra región de AWS para crear un cliente, cada una de estas regiones se
asigna al punto de enlace específico de la región:

s3.<region>.amazonaws.com

Versión de API 2006-03-01


55
Amazon Simple Storage Service Guía del desarrollador
Acerca de los permisos

Por ejemplo, si especifica la región eu-west-1 para crear un cliente, se asigna al siguiente punto de
enlace específico de la región:

s3.eu-west-1.amazonaws.com

En este caso, puede usar el cliente para crear un bucket solo en la región eu-west-1. Amazon S3
devolverá un error si especifica cualquier otra región en su solicitud para crear un bucket.
• Si crea un cliente para obtener acceso a un punto de enlace de doble stack, debe especificar una
región de AWS. Para obtener más información, consulte Puntos de enlace de doble pila (p. 15).

Para ver una lista de las regiones de AWS disponibles, consulte Regiones y puntos de enlace en la AWS
General Reference.

Para ver ejemplos, consulte Ejemplos de creación de buckets (p. 61).

Acerca de los permisos


Puede usar las credenciales raíz de la cuenta de AWS para crear un bucket y realizar cualquier otra
operación de Amazon S3. Sin embargo, AWS recomienda no usar las credenciales raíz de la cuenta de
AWS para realizar solicitudes como la de creación de un bucket. En su lugar, cree un usuario de Identity
and Access Management (IAM) y concédale acceso completo a dicho usuario (de forma predeterminada,
los usuarios no tienen permisos). Estos usuarios se denominan usuarios administradores. Para interactuar
con AWS y realizar tareas, como crear un bucket, crear usuarios y concederles permisos, puede usar las
credenciales del usuario administrador, en lugar de las credenciales raíz de su cuenta.

Para obtener más información, consulte Credenciales de cuenta raíz y credenciales de usuario de IAM en
la Referencia general de AWS y Prácticas recomendadas de IAM en la Guía del usuario de IAM.

La cuenta de AWS que crea un recurso se convierte en la propietaria de dicho recurso. Por ejemplo, si
usted crea un usuario de IAM en su cuenta de AWS y le concede al usuario permiso para crear un bucket,
el usuario puede crear un bucket. Sin embargo, el usuario no es el propietario del bucket; la cuenta de
AWS a la que pertenece el usuario es la propietaria del bucket. El usuario necesita un permiso adicional
del propietario del recurso para realizar otras operaciones en el bucket. Para obtener más información
acerca de la administración de permisos para los recursos de Amazon S3, consulte Administración de
identidad y acceso en Amazon S3 (p. 312).

Administración del acceso público a los buckets


El acceso público se otorga a grupos y objetos a través de listas de control de acceso (ACL), políticas de
bucket o ambas. Para ayudarle a administrar el acceso público a los recursos de Amazon S3, Amazon
S3 cuenta con una configuración de bloqueo de acceso público. La configuración de bloqueo de acceso
público de Amazon S3 puede anular políticas de buckets y ACL para que pueda aplicar límites uniformes
al acceso público a dichos recursos. Puede aplicar una configuración de bloqueo de acceso público a
buckets individuales o a todos los buckets de la cuenta.

Para ayudar a garantizar que todos los buckets y objetos de Amazon S3 tienen su acceso público
bloqueado, se recomienda activar los cuatro ajustes de bloqueo de acceso público de la cuenta. Estos
ajustes bloquean el acceso público a todos los buckets actuales y futuros.

Antes de aplicar estos ajustes, verifique que sus aplicaciones funcionen correctamente sin acceso público.
Si necesita algún nivel de acceso público a los buckets u objetos, como, por ejemplo, con el fin de alojar un
sitio web estático, tal y como se describe en Alojamiento de un sitio web estático en Amazon S3 (p. 523),

Versión de API 2006-03-01


56
Amazon Simple Storage Service Guía del desarrollador
Acceso a un bucket

puede personalizar los ajustes individuales para que se adapten a sus casos de uso de almacenamiento.
Para obtener más información, consulte Uso de Amazon S3 Block Public Access (p. 430).

Acceso a un bucket
Para obtener acceso a su bucket puede usar la consola de Amazon S3. Con la User Interface (UI, Interfaz
de usuario) de la consola, puede realizar prácticamente todas las operaciones en el bucket sin tener que
escribir ningún código.

Si obtiene acceso a un bucket mediante programación, tenga en cuenta que Amazon S3 admite la
arquitectura RESTful en la que los buckets y objetos son recursos, cada uno con un Uniform Resource
Identifier (URI, Identificador uniforme de recursos) mediante el cual se identifica específicamente el
recurso.

Amazon S3 admite URL tanto de tipo alojamiento virtual como de tipo ruta para obtener acceso a un
bucket.

• En una URL de tipo alojamiento virtual, el nombre del bucket forma parte del nombre del dominio en la
URL. Por ejemplo:  
• http://bucket.s3-aws-region.amazonaws.com
• http://bucket.s3.amazonaws.com
Note

No es posible tener acceso a los buckets creados en las regiones lanzadas


después del 20 de marzo de 2019 a través del esquema de nomenclatura
https://bucket.s3.amazonaws.com.

En una URL de tipo alojamiento virtual, puede usar cualquiera de estos puntos de enlace. Si hace una
solicitud al punto de enlace http://bucket.s3.amazonaws.com, el Domain Name System (DNS,
Sistema de nombres de dominio) tiene información suficiente para direccionar su solicitud directamente a
la región donde reside su bucket.

Para obtener más información, consulte Alojamiento virtual de buckets (p. 46).

 
• En una URL de tipo ruta, el nombre del bucket no forma parte del dominio. Por ejemplo:
• Punto de enlace específico de la región, http://s3-aws-region.amazonaws.com/bucket
• Punto de enlace de la región EE. UU. Este (Norte de Virginia), http://
s3.amazonaws.com/bucket

En un URL de tipo ruta, el punto de enlace que usa debe coincidir con la región en la que reside el
bucket. Por ejemplo, si su bucket está en la región América del Sur (São Paulo), debe usar el punto de
enlace http://s3.sa-east-1.amazonaws.com/bucket. Si su bucket está en la región EE. UU.
Este (Norte de Virginia), debe usar el punto de enlace http://s3.amazonaws.com/bucket.

Important

Debido a que se puede obtener acceso a los buckets mediante los URL de tipo ruta y alojamiento
virtual, le recomendamos crear buckets con nombres de buckets compatibles con DNS. Para
obtener más información, consulte Restricciones y limitaciones de los buckets (p. 60).

Acceso a un bucket de S3 mediante el IPv6


Versión de API 2006-03-01
57
Amazon Simple Storage Service Guía del desarrollador
Opciones de configuración de buckets

Amazon S3 tiene un conjunto de puntos de enlace de doble pila que admite solicitudes a los buckets de
S3 mediante Internet Protocol version 6 (IPv6) y mediante IPv4. Para obtener más información, consulte
Realización de solicitudes mediante IPv6 (p. 12).

Opciones de configuración de buckets


Amazon S3 admite varias opciones para que configure su bucket. Por ejemplo, puede configurar su bucket
para alojamiento de sitios web, añadir configuraciones para administrar el ciclo de vida de los objetos en
el bucket y configurar el bucket para registrar todo el acceso al bucket. Amazon S3 admite subrecursos
para que almacene y administre la información de configuración del bucket. Es decir, puede usar la API
de Amazon S3 para crear y administrar estos subrecursos. También puede usar la consola o los SDK de
AWS.
Note
También hay configuraciones a nivel del objeto. Por ejemplo, puede configurar permisos a nivel
del objeto mediante la configuración de una Access Control List (ACL, Lista de control de acceso)
que sea específica para ese objeto.

Estos se denominan subrecursos porque existen en el contexto de un bucket u objeto específico. En la


siguiente tabla, se muestran los subrecursos que le permiten administrar configuraciones específicas de
buckets.

Subrecurso Descripción

cors (uso Puede configurar su bucket para permitir solicitudes entre orígenes.
compartido de
recursos entre Para obtener más información, consulte la sección sobre uso compartido de
orígenes) recursos entre orígenes.

notificación de Puede habilitar su bucket para que le envíe notificaciones de eventos


eventos especificados de buckets.

Para obtener más información, consulte Configuración de notificaciones de


eventos de Amazon S3 (p. 551).

ciclo de vida Puede definir reglas de ciclo de vida para los objetos de su bucket que tienen
un ciclo de vida bien definido. Por ejemplo, puede definir una regla para archivar
objetos un año después de su creación o para eliminar objetos 10 años después
de su creación.

Para obtener más información, consulte Administración del ciclo de vida de los
objetos.

location Cuando cree un bucket, deberá especificar la región de AWS donde desea
que Amazon S3 cree el bucket. Amazon S3 almacena esta información en el
subrecurso ubicación y proporciona una API para que recupere esta información.

registro El registro le permite realizar un seguimiento de las solicitudes de acceso a su


bucket. Cada entrada del registro de acceso contiene detalles de la solicitud de
acceso tales como el solicitante, el nombre del bucket, la hora de la solicitud, la
acción solicitada, el estado de la respuesta y el código de error, si hay alguno.
La información del registro de acceso puede ser útil en auditorías de acceso y
seguridad. También puede ayudarle a conocer mejor su base de clientes y a
entender su factura de Amazon S3.  

Para obtener más información, consulte Registro de acceso al servidor de Amazon


S3 (p. 674).

Versión de API 2006-03-01


58
Amazon Simple Storage Service Guía del desarrollador
Opciones de configuración de buckets

Subrecurso Descripción

bloqueo de objetos Para usar el bloqueo de objetos de Amazon S3, debe habilitarlo para un bucket.
De manera opcional, puede configurar un modo y un periodo de retención
predeterminados para los nuevos objetos colocados en el bucket.

Para obtener más información, consulte Configuración del bucket (p. 475).

política y ACL Todos sus recursos (como buckets y objetos) son de carácter privado de forma
(lista de control de predeterminada. Amazon S3 admite opciones de política y lista de control de
acceso) acceso (ACL) de buckets para que conceda y administre los permisos a nivel del
bucket. Amazon S3 almacena la información de los permisos en los subrecursos
política y acl.

Para obtener más información, consulte Administración de identidad y acceso en


Amazon S3 (p. 312).

replicación La replicación consiste en la copia automática y asincrónica de los objetos de


los buckets en diferentes o en las mismas regiones de AWS. Para obtener más
información, consulte Replicación (p. 573).

requestPayment De forma predeterminada, la cuenta de AWS que crea el bucket (el propietario del
bucket) paga las descargas realizadas desde el bucket. Mediante este subrecurso,
el propietario del bucket puede especificar que se le cobre la descarga a la
persona que la solicita. Amazon S3 proporciona una API para que administre este
subrecurso.

Para obtener más información, consulte Buckets de pago por solicitante (p. 83).

etiquetado Puede añadir etiquetas de asignación de costos al bucket para categorizar y


seguir sus costos de AWS. Amazon S3 proporciona el subrecurso etiquetado para
almacenar y administrar etiquetas en un bucket. Mediante las etiquetas que aplica
a su bucket, AWS genera un informe de asignación de costos con el uso y los
costos agregados por sus etiquetas.

Para obtener más información, consulte Informes de facturación y de uso para los
buckets de S3 (p. 88).

aceleración de Transfer Acceleration permite transferir archivos de manera rápida, fácil y segura
transferencia entre su cliente y un bucket de S3 a larga distancia. Transfer Acceleration
aprovecha las ubicaciones de borde distribuidas globalmente de Amazon
CloudFront.

Para obtener más información, consulte Aceleración de transferencia de Amazon


S3 (p. 76).

control de versiones EL control de versiones lo ayuda a recuperar objetos que se han sobrescrito y
eliminado accidentalmente.

Recomendamos el control de versiones como práctica recomendada para


recuperar objetos que se han eliminado o sobrescrito accidentalmente.

Para obtener más información, consulte Uso del control de versiones (p. 449).

sitio web Puede configurar su bucket para el alojamiento de sitios web estáticos. Amazon
S3 almacena esta configuración creando un subrecurso sitio web.

Para obtener más información, consulte Alojamiento de un sitio web estático en


Amazon S3

Versión de API 2006-03-01


59
Amazon Simple Storage Service Guía del desarrollador
Restricciones y limitaciones

Restricciones y limitaciones de los buckets


Cada bucket le pertenece a la cuenta de AWS que lo creó. De forma predeterminada, puede crear hasta
100 buckets en cada una de sus cuentas de AWS. Si necesita buckets adicionales, puede presentar
una solicitud de aumento del límite de servicio para aumentar el límite de buckets de la cuenta hasta
un máximo de 1000 buckets. Para obtener información acerca de cómo aumentar su límite de buckets,
consulte Límites de los servicios de AWS en la Referencia general de AWS.

No se puede transferir la titularidad de un bucket; sin embargo, si un bucket está vacío, lo puede eliminar.
Después de eliminar un bucket, el nombre se puede volver a utilizar, pero es posible que usted no pueda
volver a utilizarlo por varias razones. Por ejemplo, alguna otra cuenta pudo crear un bucket con ese
nombre. También tenga en cuenta que es posible que deba pasar algo de tiempo para que pueda volver a
usar el nombre. Entonces, si desea usar el mismo nombre de bucket, no elimine el bucket.

No hay ningún límite en la cantidad de objetos que se pueden almacenar en un bucket ni hay diferencia
de desempeño según la cantidad de buckets. Puede almacenar todos los objetos en un solo bucket u
organizarlos en varios buckets.
Important

Una vez que haya creado un bucket, no puede cambiar su región.

No puede crear un bucket dentro de otro bucket.

La ingeniería de alta disponibilidad de Amazon S3 se centra en las operaciones GET, PUT, LIST y
DELETE. Debido a que las operaciones de los buckets funcionan en un espacio de recursos centralizados
y globales, no es apropiado crear o eliminar buckets en la ruta de códigos de alta disponibilidad de su
aplicación. Es mejor crear o eliminar buckets en una rutina de inicialización o configuración distinta que
ejecuta con menos frecuencia.
Note

Si su aplicación crea buckets automáticamente, elija un esquema de nomenclatura de buckets


que sea poco probable que ocasione conflictos de nomenclatura. Asegúrese de que la lógica de
su aplicación elija un nombre de bucket diferente si un nombre de bucket ya ha sido usado.

Reglas para la nomenclatura de buckets


Una vez que se crea un bucket de S3, no se puede cambiar el nombre, por lo que debe elegirlo con
prudencia.
Important

El 1 de marzo de 2018, actualizamos las convenciones de nomenclatura de los buckets


de S3 en la región US East (N. Virginia) para ajustarnos a las que utilizamos en todas las
demás regiones de AWS del mundo. Amazon S3 ya no permite crear nombres de buckets
que contengan letras mayúsculas o guiones bajos. Este cambio garantiza que se pueda
abordar cada bucket utilizando un direccionamiento de estilo de host virtual como, por ejemplo,
https://myawsbucket.s3.amazonaws.com. Le recomendamos encarecidamente que
revise los procesos actuales de creación de buckets para asegurarse de que se ajustan a estas
convenciones de nomenclatura compatibles con DNS.

A continuación, se muestran las reglas para los nombres de los buckets de S3 de todas las regiones de
AWS:

• Los nombres deben ser únicos entre todos los buckets existentes en Amazon S3.
• Los nombres de los buckets deben cumplir las convenciones de nomenclatura de DNS.

Versión de API 2006-03-01


60
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de creación de buckets

• Los nombres de buckets deben tener un mínimo de 3 y un máximo de 63 caracteres de largo.


• Los nombres de los buckets no pueden contener caracteres en mayúscula ni caracteres de subrayado.
• Los nombres de los buckets deben comenzar por una letra en minúscula o un número.
• Los nombres de buckets deben ser una serie de una o más etiquetas. Las etiquetas adyacentes están
separadas por un solo punto (.). Los nombres de buckets pueden contener letras minúsculas, números y
guiones. Cada etiqueta debe comenzar y terminar con una letra minúscula o un número.
• Los nombres de buckets no deben tener el formato de una dirección IP (por ejemplo, 192.168.5.4).
• Si utiliza buckets de estilo de alojamiento virtual con Capa de conexión segura (SSL), el certificado
comodín de SSL solo se asociará con los buckets que no contengan puntos. Para solucionar esto, use
HTTP o escriba su propia lógica de verificación de certificado. Cuando use buckets de tipo alojamiento
virtual, le recomendamos que no utilice puntos (".") en los nombres de bucket.

Nombres de buckets heredados no compatibles con DNS


A partir del 1 de marzo de 2018, hemos actualizado las convenciones de nomenclatura de los buckets de
S3 en la región US East (N. Virginia) para requerir nombres que sean compatibles con DNS.

Anteriormente, la región US East (N. Virginia) permitía estándares menos rigurosos para la nomenclatura
de los buckets, lo que podía dar lugar a que el nombre del bucket no cumpliera con las convenciones
de DNS. Por ejemplo, MyAWSbucket era un nombre de bucket válido a pesar de que contiene letras
mayúsculas. Si intenta obtener acceso a este bucket mediante una solicitud de tipo alojamiento virtual
(http://MyAWSbucket.s3.amazonaws.com/yourobject), la URL resuelve el bucket myawsbucket
y no el bucket MyAWSbucket. Como respuesta, Amazon S3 devuelve el siguiente error: “no se encontró el
bucket”. Para obtener más información acerca del acceso de tipo alojamiento virtual a los buckets, consulte
Alojamiento virtual de buckets (p. 46).

Las reglas heredadas sobre los nombres de buckets de la región US East (N. Virginia) permitían que los
nombres de los buckets tuvieran como máximo 255 caracteres y pudieran estar formados por cualquier
combinación de letras mayúsculas, letras minúsculas, números, puntos (.), guiones (-) y caracteres de
subrayado (_).

El nombre del bucket que use para Aceleración de transferencia de Amazon S3 debe cumplir con las
convenciones del DNS y no debe contener puntos (“.”). Para obtener más información acerca de Transfer
Acceleration, consulte Aceleración de transferencia de Amazon S3 (p. 76).

Ejemplos de creación de buckets


Temas
• Uso de la consola de Amazon S3 (p. 62)
• Uso del AWS SDK for Java. (p. 62)
• Uso del AWS SDK para .NET (p. 63)
• Mediante el AWS SDK para Ruby versión 3 (p. 64)
• Mediante otros SDK de AWS (p. 64)

El siguiente ejemplo de código crea un bucket mediante programación con los SDK de AWS para
Java, .NET y Ruby. Los ejemplos de códigos realizan las siguientes tareas:

• Crean un bucket, si el bucket aún no existe. En los ejemplos, el bucket se crea de la siguiente manera:
• Crean un cliente mediante la especificación explícita de una región de AWS (en el ejemplo se usa la
región s3-eu-west-1). En consecuencia, el cliente se comunica con Amazon S3 con el punto de
enlace s3-eu-west-1.amazonaws.com. Puede especificar cualquier otra región de AWS. Para ver

Versión de API 2006-03-01


61
Amazon Simple Storage Service Guía del desarrollador
Uso de la consola de Amazon S3

una lista de las regiones de AWS, consulte Regiones y puntos de enlace en la Referencia general de
AWS.
• Envían una solicitud de creación de buckets mediante la especificación del nombre de un bucket
únicamente. La solicitud de creación del bucket no especifica otra región de AWS. El cliente envía una
solicitud a Amazon S3 para crear el bucket en la región que especificó al crear el cliente. Una vez que
ha creado un bucket, no puede cambiar su región.
Note

Si especifica explícitamente una región de AWS en la solicitud de creación del bucket que es
diferente de la región que especificó cuando creó el cliente, es posible que obtenga un error.
Para obtener más información, consulte Creación de un bucket (p. 55).

Las bibliotecas de los SDK envían la solicitud PUT bucket a Amazon S3 para crear el bucket. Para
obtener más información, consulte PUT Bucket.
• Recuperan la información acerca de la ubicación del bucket: Amazon S3 almacena información de la
ubicación del bucket en el subrecurso ubicación asociado con el bucket. Las bibliotecas de los SDK
envían la solicitud de ubicación de GET Bucket (consulte GET Bucket location) para recuperar esta
información.

Uso de la consola de Amazon S3


Para crear un bucket con la consola de Amazon S3, consulte ¿Cómo puedo crear un bucket de S3? en la
Guía del usuario de la consola de Amazon Simple Storage Service.

Uso del AWS SDK for Java.


Example

Este ejemplo muestra cómo crear un bucket de Amazon S3 con AWS SDK for Java. Para obtener
instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de ejemplos de
código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.CreateBucketRequest;
import com.amazonaws.services.s3.model.GetBucketLocationRequest;

import java.io.IOException;

public class CreateBucket {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

if (!s3Client.doesBucketExistV2(bucketName)) {

Versión de API 2006-03-01


62
Amazon Simple Storage Service Guía del desarrollador
Uso del AWS SDK para .NET

// Because the CreateBucketRequest object doesn't specify a region, the


// bucket is created in the region specified in the client.
s3Client.createBucket(new CreateBucketRequest(bucketName));

// Verify that the bucket was created by retrieving it and checking its
location.
String bucketLocation = s3Client.getBucketLocation(new
GetBucketLocationRequest(bucketName));
System.out.println("Bucket location: " + bucketLocation);
}
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and 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();
}
}
}

Uso del AWS SDK para .NET


Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

Example

using Amazon.S3;
using Amazon.S3.Model;
using Amazon.S3.Util;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class CreateBucketTest
{
private const string bucketName = "*** bucket name ***";
// 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);
CreateBucketAsync().Wait();
}

static async Task CreateBucketAsync()


{
try
{
if (!(await AmazonS3Util.DoesS3BucketExistAsync(s3Client, bucketName)))
{
var putBucketRequest = new PutBucketRequest
{
BucketName = bucketName,
UseClientRegion = true
};

Versión de API 2006-03-01


63
Amazon Simple Storage Service Guía del desarrollador
Mediante el AWS SDK para Ruby versión 3

PutBucketResponse putBucketResponse = await


s3Client.PutBucketAsync(putBucketRequest);
}
// Retrieve the bucket location.
string bucketLocation = await FindBucketLocationAsync(s3Client);
}
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);
}
}
static async Task<string> FindBucketLocationAsync(IAmazonS3 client)
{
string bucketLocation;
var request = new GetBucketLocationRequest()
{
BucketName = bucketName
};
GetBucketLocationResponse response = await
client.GetBucketLocationAsync(request);
bucketLocation = response.Location.ToString();
return bucketLocation;
}
}
}

Mediante el AWS SDK para Ruby versión 3


Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Uso de la versión
3 de AWS SDK parar Ruby (p. 709).

Example

require 'aws-sdk-s3'

s3 = Aws::S3::Client.new(region: 'us-west-2')
s3.create_bucket(bucket: 'bucket-name')

Mediante otros SDK de AWS


Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.

Eliminación o vaciado de un bucket


Eliminar un bucket vacío es sencillo. No obstante, en algunas situaciones, es posible que tenga que
eliminar o vaciar un bucket que contenga objetos. En esta sección, explicaremos cómo eliminar objetos en
un bucket sin control de versiones y cómo eliminar versiones de objetos y marcadores de eliminación en
un bucket con control de versiones activado. Para obtener más información sobre el control de versiones,
consulte Uso del control de versiones (p. 449). En algunas situaciones es posible que decida vaciar un
bucket en lugar de eliminarlo. En esta sección explicamos las diversas opciones que puede usar para
eliminar o vaciar un bucket que contenga objetos.

Versión de API 2006-03-01


64
Amazon Simple Storage Service Guía del desarrollador
Eliminar un bucket

Temas
• Eliminar un bucket (p. 65)
• Vaciado de un bucket (p. 67)

Eliminar un bucket
Puede eliminar un bucket y sus contenidos mediante programación con los SDK de AWS. También puede
usar la configuración del ciclo de vida de un bucket para vaciar su contenido y, a continuación, eliminar el
bucket. También hay otras opciones, como usar la consola de Amazon S3 y la CLI de AWS, pero existen
ciertos límites sobre estos métodos, en función del número de objetos que contenga su bucket y el estado
del control de versiones del mismo.

Eliminar un bucket con la consola de Amazon S3


La consola de Amazon S3 permite eliminar un bucket que podría estar o no vacío. Para obtener
información sobre cómo usar la consola de Amazon S3 para eliminar un bucket, consulte ¿Cómo elimino
un bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service

Eliminar un bucket con la AWS CLI


Puede eliminar un bucket que contenga objetos con la AWS CLI solo si el bucket no tiene habilitado el
control de versiones. Si el bucket no tiene el habilitado el control de versiones, puede usar el comando de
la AWS CLI rb (remove bucket) con el parámetro --force para eliminar un bucket que no esté vacío.
Este comando elimina todos los objetos en primer lugar, y después elimina el bucket.

$ aws s3 rb s3://bucket-name --force

Para obtener más información, consulte Uso de comandos S3 de alto nivel con la AWS Command Line
Interface en la AWS Command Line Interface Guía del usuario.

Para eliminar un bucket que no esté vacío y no tenga habilitado el control de versiones, tiene las siguientes
opciones:

• Elimine el bucket mediante programación con el AWS SDK.


• Elimine todos los objetos mediante la configuración del ciclo de vida del bucket y, a continuación, elimine
el bucket vacío con la consola de Amazon S3.

Eliminación de un bucket mediante la configuración del ciclo de


vida
Puede configurar el ciclo de vida de su bucket para provocar el vencimiento de los objetos. A continuación,
Amazon S3 eliminará los objetos que hayan vencido. Puede agregar reglas de configuración del ciclo de
vida para provocar la expiración de todos los objetos o de un subconjunto de los mismos que tenga un
prefijo específico en el nombre de la clave. Por ejemplo, para eliminar todos los objetos de un bucket,
puede configurar una regla del ciclo de vida que haga que venzan los objetos un día después de su
creación.

Si en su bucket se ha habilitado el control de versiones, también puede configurar la regla para que
provoque el vencimiento de objetos no actuales.

Después de que Amazon S3 elimina todos los objetos de su bucket, podrá eliminar el bucket o conservarlo.

Versión de API 2006-03-01


65
Amazon Simple Storage Service Guía del desarrollador
Eliminar un bucket

Important

Si quiere solamente vaciar el bucket y no eliminarlo, asegúrese de borrar la regla de configuración


del ciclo de vida que agregó para vaciar el bucket, de modo que los nuevos objetos que cree en el
bucket permanezcan en él.

Para obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127) y
Configuración del vencimiento de objetos (p. 135).

Eliminar un bucket con los AWS SDK


Puede utilizar los AWS SDK para eliminar un bucket. En las siguientes secciones se presentan ejemplos
de cómo eliminar un bucket con el AWS SDK para .NET y Java. En primer lugar, el código elimina los
objetos del bucket, y a continuación elimina el bucket. Para obtener más información sobre otros SDK de
AWS, consulte Herramientas para Amazon Web Services.

Eliminar un bucket con AWS SDK for Java


En el siguiente ejemplo de Java se elimina un bucket que contiene objetos. En el ejemplo se eliminan
todos los objetos y, a continuación, se elimina el bucket. El ejemplo funciona también con buckets con o sin
control de versiones habilitado.
Note

En buckets sin control de versiones habilitado, puede eliminar todos los objetos directamente y
después eliminar el bucket. En buckets con control de versiones habilitado, debe eliminar todas
las versiones de objetos antes de eliminar el bucket.

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.*;

import java.util.Iterator;

public class DeleteBucket {

public static void main(String[] args) {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Delete all objects from the bucket. This is sufficient


// for unversioned buckets. For versioned buckets, when you attempt to delete
objects, Amazon S3 inserts
// delete markers for all objects, but doesn't delete the object versions.
// To delete objects from versioned buckets, delete all of the object versions
before deleting
// the bucket (see below for an example).

Versión de API 2006-03-01


66
Amazon Simple Storage Service Guía del desarrollador
Vaciado de un bucket

ObjectListing objectListing = s3Client.listObjects(bucketName);


while (true) {
Iterator<S3ObjectSummary> objIter =
objectListing.getObjectSummaries().iterator();
while (objIter.hasNext()) {
s3Client.deleteObject(bucketName, objIter.next().getKey());
}

// If the bucket contains many objects, the listObjects() call


// might not return all of the objects in the first listing. Check to
// see whether the listing was truncated. If so, retrieve the next page of
objects
// and delete them.
if (objectListing.isTruncated()) {
objectListing = s3Client.listNextBatchOfObjects(objectListing);
} else {
break;
}
}

// Delete all object versions (required for versioned buckets).


VersionListing versionList = s3Client.listVersions(new
ListVersionsRequest().withBucketName(bucketName));
while (true) {
Iterator<S3VersionSummary> versionIter =
versionList.getVersionSummaries().iterator();
while (versionIter.hasNext()) {
S3VersionSummary vs = versionIter.next();
s3Client.deleteVersion(bucketName, vs.getKey(), vs.getVersionId());
}

if (versionList.isTruncated()) {
versionList = s3Client.listNextBatchOfVersions(versionList);
} else {
break;
}
}

// After all objects and object versions are deleted, delete the bucket.
s3Client.deleteBucket(bucketName);
} 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();
}
}
}

Vaciado de un bucket
Puede vaciar el contenido de un bucket (es decir, eliminar su contenido pero conservar el bucket) mediante
programación con el AWS SDK. También puede especificar la configuración del ciclo de vida de un bucket
para que provoque el vencimiento de objetos de modo que Amazon S3 pueda eliminarlos. También hay
otras opciones, como usar la consola de Amazon S3 y la AWS CLI, pero existen ciertos límites sobre este
método, en función del número de objetos que contenga su bucket y el estado del control de versiones del
mismo.

Temas

Versión de API 2006-03-01


67
Amazon Simple Storage Service Guía del desarrollador
Vaciado de un bucket

• Vaciar un bucket con la consola de Amazon S3 (p. 68)


• Vaciar un bucket con la AWS CLI (p. 68)
• Vaciado de un bucket mediante la configuración del ciclo de vida (p. 68)
• Vaciar un bucket con la AWS SDKs (p. 69)

Vaciar un bucket con la consola de Amazon S3


Para obtener información sobre cómo usar la consola de Amazon S3 para vaciar un bucket, consulte
¿Cómo puedo vaciar un bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage
Service

Vaciar un bucket con la AWS CLI


Solo puede vaciar un bucket con la AWS CLI si el bucket no tiene habilitado el control de versiones. Si el
bucket no tiene el habilitado el control de versiones, puede usar el comando de la AWS CLI rm (remove
bucket) con el parámetro --recursive para vaciar un bucket (o eliminar un subconjunto de objetos con
un prefijo de nombre de clave específico).

El siguiente comando rm elimina objetos con el prefijo de nombre de clave doc, por ejemplo, doc/doc1 y
doc/doc2.

$ aws s3 rm s3://bucket-name/doc --recursive

Use el siguiente comando para eliminar todos los objetos sin especificar ningún prefijo.

$ aws s3 rm s3://bucket-name --recursive

Para obtener más información, consulte Uso de comandos S3 de alto nivel con la AWS Command Line
Interface en la AWS Command Line Interface Guía del usuario.
Note

No puede eliminar objetos de un bucket que tenga habilitado el control de versiones. Amazon S3
agregará un marcador de eliminación al eliminar un objeto, que es lo que hará este comando.
Para obtener más información sobre el control de versiones, consulte Uso del control de
versiones (p. 449).

Para vaciar un bucket que tenga habilitado el control de versiones, tiene las siguientes opciones:

• Elimine el bucket mediante programación con el AWS SDK.


• Usar la configuración del ciclo de vida del bucket para solicitar que Amazon S3 elimine los objetos.
• Use la consola de Amazon S3. Para obtener más información, consulte ¿Cómo puedo vaciar un bucket
de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Vaciado de un bucket mediante la configuración del ciclo de vida


Puede configurar el ciclo de vida de un bucket para provocar el vencimiento de los objetos y, a
continuación, solicitar que Amazon S3 elimine los objetos que hayan vencido. Puede agregar reglas de
configuración del ciclo de vida para provocar la expiración de todos los objetos o de un subconjunto de
los mismos que tenga un prefijo específico en el nombre de la clave. Por ejemplo, para eliminar todos los
objetos de un bucket, puede configurar una regla del ciclo de vida que haga que venzan los objetos un día
después de su creación.

Versión de API 2006-03-01


68
Amazon Simple Storage Service Guía del desarrollador
Cifrado predeterminado de un bucket

Si en su bucket se ha habilitado el control de versiones, también puede configurar la regla para que
provoque el vencimiento de objetos no actuales.
Warning

Tras el vencimiento de los objetos, Amazon S3 elimina los objetos que hayan vencido. Si quiere
solamente vaciar el bucket y no eliminarlo, asegúrese de borrar la regla de configuración del ciclo
de vida que agregó para vaciar el bucket, de modo que los nuevos objetos que cree en el bucket
permanezcan en él.

Para obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127) y
Configuración del vencimiento de objetos (p. 135).

Vaciar un bucket con la AWS SDKs


Puede usar los AWS SDK para vaciar un bucket o eliminar un subconjunto de objetos con un prefijo de
nombre de clave específico.

Si desea ver un ejemplo de cómo vaciar un bucket utilizando AWS SDK for Java, consulte Eliminar un
bucket con AWS SDK for Java (p. 66). Con este código eliminará todos los objetos, independientemente
de si el bucket tiene habilitado el control de versiones o no, y después se eliminará el bucket. Si quiere
limitarse a vaciar el bucket, asegúrese de eliminar la instrucción que provoca la eliminación del bucket.

Para obtener más información sobre el uso de otros SDK de AWS, consulte Herramientas para Amazon
Web Services

Cifrado predeterminado de Amazon S3 para los


buckets de S3
El cifrado predeterminado de Amazon S3 proporciona un medio de definir el comportamiento de cifrado
predeterminado para un bucket de S3. Puede configurar el cifrado predeterminado en un bucket para que
todos los objetos se cifren cuando se almacenen en el bucket. Los objetos se cifran mediante el cifrado
del lado del servidor con claves administradas por Amazon S3 (SSE-S3) o claves administradas por AWS
KMS (SSE-KMS).

Cuando usa el cifrado de lado servidor, Amazon S3 cifra un objeto antes de guardarlo en el disco de su
centro de datos y lo descifra al descargarlo. Para obtener más información sobre cómo proteger los datos
mediante el cifrado de lado del servidor y la administración de claves de cifrado, consulte Protección de
datos con el cifrado del lado del servidor (p. 275).

El cifrado predeterminado funciona con todos los buckets de S3 nuevos y existentes. Sin el cifrado
predeterminado, para cifrar todos los objetos almacenados en un bucket, debe incluir la información de
cifrado con la solicitud de almacenamiento de cada objeto. Asimismo, debe configurar una política de
bucket de S3 para rechazar las solicitudes de almacenamiento que no incluyan información de cifrado.

No se aplican cargos adicionales por usar el cifrado predeterminado de buckets de S3. Las solicitudes
para configurar la característica de cifrado predeterminado incluyen cargos de solicitud de Amazon S3
estándar. Para obtener más información acerca de los precios, consulte Precios de Amazon S3. Para
el almacenamiento de claves de cifrado de SSE-KMS, se aplican los cargos de AWS Key Management
Service que se muestran en Precios de AWS KMS.

Temas
• ¿Cómo puedo configurar el cifrado predeterminado de Amazon S3 para un bucket de S3? (p. 70)
• Cambiar del uso de políticas de bucket para aplicar el cifrado al cifrado predeterminado (p. 70)
• Uso del cifrado predeterminado con la replicación (p. 70)

Versión de API 2006-03-01


69
Amazon Simple Storage Service Guía del desarrollador
Cómo configurar el cifrado predeterminado
para un bucket de Amazon S3

• Monitorización del cifrado predeterminado con CloudTrail y CloudWatch (p. 71)


• Más información (p. 72)

¿Cómo puedo configurar el cifrado predeterminado de


Amazon S3 para un bucket de S3?
En esta sección se describe cómo configurar el cifrado predeterminado de Amazon S3. Puede utilizar
los SDK de AWS, la API REST de Amazon S3, la AWS Command Line Interface (AWS CLI) o la consola
de Amazon S3 para habilitar el cifrado predeterminado. La forma más sencilla de configurar el cifrado
predeterminado para un bucket de S3 es usar la Consola de administración de AWS.

Puede configurar el cifrado predeterminado en un bucket mediante alguna de las siguientes formas:

• Use la consola de Amazon S3. Para obtener más información, consulte ¿Cómo puedo habilitar el cifrado
predeterminado para un bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage
Service.
• Utilice las siguientes API REST:
• Utilice la operación de la API REST PUT Bucket encryption para habilitar el cifrado predeterminado y
establecer el tipo de cifrado de lado del servidor para usar SSE-S3 o SSE-KMS.
• Utilice la API REST DELETE Bucket encryption para deshabilitar el cifrado predeterminado de los
objetos. Después de deshabilitar el cifrado predeterminado, Amazon S3 cifra los objetos solo si las
solicitudes PUT incluyen la información de cifrado. Para obtener más información, consulte PUT Object
y PUT Object - Copy.
• Utilice la API REST GET Bucket encryption para comprobar la configuración de cifrado
predeterminado actual.
• Use la AWS CLI y los SDK de AWS. Para obtener más información, consulte Uso de los SDK, la CLI y
los exploradores de AWS (p. 697).

Después de habilitar el cifrado predeterminado para un bucket, se aplica el siguiente comportamiento de


cifrado:

• No hay ninguna variación en el cifrado de los objetos que existían en el bucket antes de que se habilitara
el cifrado predeterminado.
• Cuando carga objetos después de habilitar el cifrado predeterminado:
• Si los encabezados de las solicitudes PUT no incluyen información de cifrado, Amazon S3 utiliza la
configuración de cifrado predeterminada del bucket para cifrar los objetos.
• Si los encabezados de las solicitudes PUT incluyen información de cifrado, Amazon S3 utiliza la
información de cifrado de la solicitud PUT para cifrar los objetos antes de guardarlos en Amazon S3. Si
la solicitud PUT se ejecuta correctamente, la respuesta es HTTP/1.1 200 OK con la información de
cifrado en los encabezados de la respuesta. Para obtener más información, consulte PUT Object.
• Si utiliza la opción de SSE-KMS para la configuración de cifrado predeterminado, se le aplicarán los
límites de RPS (solicitudes por segundo) de AWS KMS. Para obtener más información acerca de los
límites de AWS KMS y de cómo solicitar un aumento de los límites, consulte Límites de AWS KMS.

Cambiar del uso de políticas de bucket para aplicar el


cifrado al cifrado predeterminado
Si actualmente aplica el cifrado de objetos para un bucket de S3 utilizando una política de bucket para
rechazar las solicitudes PUT sin encabezados de cifrado, le recomendamos que utilice el siguiente
procedimiento para empezar a utilizar el cifrado predeterminado.

Versión de API 2006-03-01


70
Amazon Simple Storage Service Guía del desarrollador
Uso del cifrado predeterminado con la replicación

Para dejar de usar una política de bucket para rechazar las solicitudes PUT sin encabezados de
cifrado y empezar a utilizar el cifrado predeterminado

1. Si tiene previsto especificar que el cifrado predeterminado utilice SSE-KMS, asegúrese de que todas
las solicitudes de objetos PUT y GET se firman con Signature Version 4 y se envían a través de
una conexión SSL a Amazon S3. Para obtener información acerca del uso de AWS KMS, consulte
Protección de datos con el cifrado en el servidor mediante claves almacenadas en AWS KMS (SSE-
KMS) (p. 275).
Note

De forma predeterminada, la consola de Amazon S3, la versión de la AWS CLI 1.11.108


y posteriores y todos los SDK de AWS publicados después de mayo de 2016 utilizan
solicitudes firmadas por Signature Version 4 enviadas a Amazon S3 a través de una conexión
SSL.
2. Elimine las instrucciones de la política de bucket que rechazan las solicitudes PUT sin encabezados
de cifrado. (Le recomendamos que guarde una copia de seguridad de la política de bucket que se va a
reemplazar).
3. Para asegurarse de que el comportamiento de cifrado se establece tal y como desea, pruebe varias
solicitudes PUT que simulen su carga de trabajo actual.
4. Si utiliza el cifrado predeterminado con SSE-KMS, monitorice las solicitudes PUT y GET erróneas de
los clientes que no daban error antes de los cambios. Lo más probable es que sean las solicitudes que
no actualizó siguiendo el paso 1. Cambie las solicitudes PUT o GET erróneas de forma que se firmen
con Signature Version 4 de AWS y se envíen a través de SSL.

Después de habilitar el cifrado predeterminado para su bucket de S3, los objetos almacenados en Amazon
S3 a través de solicitudes PUT sin encabezados de cifrado se cifrarán mediante la configuración de cifrado
predeterminado de nivel de bucket.

Uso del cifrado predeterminado con la replicación


Después de habilitar el cifrado predeterminado para un bucket de destino de replicación, se aplica el
siguiente comportamiento de cifrado:

• Si los objetos del bucket de origen no están cifrados, los objetos de réplica del bucket de destino
se cifran mediante la configuración de cifrado predeterminado del bucket de destino. Esto hace que
el elemento ETag del objeto de origen sea diferente al elemento ETag del objeto de réplica. Debe
actualizar las aplicaciones que utilicen el elemento ETag para incluir esta diferencia.

• Si los objetos del bucket de origen están cifrados con SSE-S3 o SSE-KMS, los objetos de réplica
del bucket de destino utilizan el mismo cifrado que el objeto de origen. La configuración de cifrado
predeterminado del bucket de destino no se utiliza.

Monitorización del cifrado predeterminado con


CloudTrail y CloudWatch
Puede realizar un seguimiento de las solicitudes de configuración de cifrado predeterminado a través de
eventos de AWS CloudTrail. Los nombres de eventos de API usados en los registros de CloudTrail son
PutBucketEncryption, GetBucketEncryption y DeleteBucketEncryption. También puede crear
Amazon CloudWatch Events con operaciones de nivel de bucket de S3 como tipo de evento. Para obtener
más información sobre los eventos de CloudTrail, consulte ¿Cómo puedo habilitar el registro en el nivel de
objeto para un bucket de S3 con eventos de datos de CloudWatch?

Versión de API 2006-03-01


71
Amazon Simple Storage Service Guía del desarrollador
Más información

Puede utilizar registros de CloudTrail para las acciones de Amazon S3 de nivel de objeto para realizar
un seguimiento de las solicitudes PUT y POST enviadas a Amazon S3 para verificar si se usa el cifrado
predeterminado para cifrar los objetos cuando las solicitudes PUT entrantes no tienen encabezados de
cifrado.

Cuando Amazon S3 cifra un objeto utilizando la configuración de cifrado predeterminado, el registro


incluye el siguiente campo como el par de nombre-valor: "SSEApplied":"Default_SSE_S3" or
"SSEApplied":"Default_SSE_KMS".

Cuando Amazon S3 cifra un objeto utilizando los encabezados de cifrado PUT, el registro incluye el
siguiente campo como el par de nombre-valor: "SSEApplied":"SSE_S3", "SSEApplied":"SSE_KMS
o "SSEApplied":"SSE_C". Para las cargas multiparte, esta información se incluye en las solicitudes
de la API InitiateMultipartUpload. Para obtener más información sobre el uso de CloudTrail y
CloudWatch, consulte Monitorización de Amazon S3 (p. 635).

Más información
• PUT Bucket encryption
• DELETE Bucket encryption
• GET Bucket encryption

Administración de la configuración de sitio web de


un bucket
Temas
• Administración de sitios web con la Consola de administración de AWS (p. 72)
• Administración de sitios web con AWS SDK for Java (p. 72)
• Administración de sitios web con AWS SDK para .NET (p. 74)
• Administración de sitios web con AWS SDK para PHP (p. 75)
• Administración de sitios web con la API de REST (p. 76)

Puede alojar sitios web estáticos en Amazon S3 configurando su bucket para el alojamiento del sitio web.
Para obtener más información, consulte Alojamiento de un sitio web estático en Amazon S3 (p. 523).
Existen varias formas de administrar la configuración de sitio web de su bucket. Puede usar la Consola
de administración de AWS para administrar la configuración sin escribir código. Puede crear, actualizar
y eliminar mediante programación la configuración de sitio web utilizando los SDK de AWS. Los SDK
proporcionan clases de encapsulamiento en toda la API REST de Amazon S3. Si su aplicación lo requiere,
puede enviar solicitudes de la API REST directamente desde su aplicación.

Administración de sitios web con la Consola de


administración de AWS
Para obtener más información, consulte Configuración de un bucket para alojamiento de sitios
web (p. 526).

Administración de sitios web con AWS SDK for Java


El siguiente ejemplo muestra cómo usar AWS SDK for Java para administrar la configuración de un sitio
web para un bucket. Para agregar una configuración de sitio web a un bucket, proporcione el nombre del

Versión de API 2006-03-01


72
Amazon Simple Storage Service Guía del desarrollador
Uso del AWS SDK for Java.

bucket y una configuración de sitio web. La configuración de sitio web debe incluir un documento de índice
y puede incluir un documento de error opcional. Estos documentos ya deben existir en el bucket. Para
obtener más información, consulte la sección sobre Sitio web PUT Bucket. Para obtener más información
acerca de la función de sitio web de Amazon S3, consulte Alojamiento de un sitio web estático en Amazon
S3 (p. 523).

Example

El siguiente ejemplo utiliza AWS SDK for Java para añadir una configuración de sitio web a un bucket,
recuperar e imprimir la configuración y eliminar la configuración y verificar la eliminación Para obtener
instrucciones acerca de cómo crear y probar una muestra funcional, consulte Prueba de ejemplos de
código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.BucketWebsiteConfiguration;

import java.io.IOException;

public class WebsiteConfiguration {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String indexDocName = "*** Index document name ***";
String errorDocName = "*** Error document name ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();

// Print the existing website configuration, if it exists.


printWebsiteConfig(s3Client, bucketName);

// Set the new website configuration.


s3Client.setBucketWebsiteConfiguration(bucketName, new
BucketWebsiteConfiguration(indexDocName, errorDocName));

// Verify that the configuration was set properly by printing it.


printWebsiteConfig(s3Client, bucketName);

// Delete the website configuration.


s3Client.deleteBucketWebsiteConfiguration(bucketName);

// Verify that the website configuration was deleted by printing it.


printWebsiteConfig(s3Client, bucketName);
} 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();
}
}

Versión de API 2006-03-01


73
Amazon Simple Storage Service Guía del desarrollador
Mediante AWS SDK para .NET

private static void printWebsiteConfig(AmazonS3 s3Client, String bucketName) {


System.out.println("Website configuration: ");
BucketWebsiteConfiguration bucketWebsiteConfig =
s3Client.getBucketWebsiteConfiguration(bucketName);
if (bucketWebsiteConfig == null) {
System.out.println("No website config.");
} else {
System.out.println("Index doc: " +
bucketWebsiteConfig.getIndexDocumentSuffix());
System.out.println("Error doc: " + bucketWebsiteConfig.getErrorDocument());
}
}
}

Administración de sitios web con AWS SDK para .NET


El siguiente ejemplo muestra cómo usar AWS SDK para .NET para administrar la configuración de un sitio
web para un bucket. Para agregar una configuración de sitio web a un bucket, proporcione el nombre del
bucket y una configuración de sitio web. La configuración de sitio web debe incluir un documento de índice
y puede contener un documento de error opcional. Estos documentos ya deben estar almacenados en el
bucket. Para obtener más información, consulte la sección sobre Sitio web PUT Bucket. Para obtener más
información acerca de la función de sitio web de Amazon S3, consulte Alojamiento de un sitio web estático
en Amazon S3 (p. 523).

Example

El siguiente ejemplo de código C# agrega una configuración de sitio web al bucket específico. La
configuración especifica los nombres tanto del documento de índice como el de error. Para obtener
instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de ejemplos de
código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class WebsiteConfigTest
{
private const string bucketName = "*** bucket name ***";
private const string indexDocumentSuffix = "*** index object key ***"; // For
example, index.html.
private const string errorDocument = "*** error object key ***"; // For example,
error.html.
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
AddWebsiteConfigurationAsync(bucketName, indexDocumentSuffix,
errorDocument).Wait();
}

static async Task AddWebsiteConfigurationAsync(string bucketName,


string indexDocumentSuffix,
string errorDocument)
{
try

Versión de API 2006-03-01


74
Amazon Simple Storage Service Guía del desarrollador
Mediante SDK para PHP

{
// 1. Put the website configuration.
PutBucketWebsiteRequest putRequest = new PutBucketWebsiteRequest()
{
BucketName = bucketName,
WebsiteConfiguration = new WebsiteConfiguration()
{
IndexDocumentSuffix = indexDocumentSuffix,
ErrorDocument = errorDocument
}
};
PutBucketWebsiteResponse response = await
client.PutBucketWebsiteAsync(putRequest);

// 2. Get the website configuration.


GetBucketWebsiteRequest getRequest = new GetBucketWebsiteRequest()
{
BucketName = bucketName
};
GetBucketWebsiteResponse getResponse = await
client.GetBucketWebsiteAsync(getRequest);
Console.WriteLine("Index document: {0}",
getResponse.WebsiteConfiguration.IndexDocumentSuffix);
Console.WriteLine("Error document: {0}",
getResponse.WebsiteConfiguration.ErrorDocument);
}
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);
}
}
}
}

Administración de sitios web con AWS SDK para PHP


En este tema se explica cómo utilizar las clases de AWS SDK para PHP para configurar y administrar un
bucket de Amazon S3 para alojar un sitio web. Se parte de la base de que usted ya sigue las instrucciones
para Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK
para PHP correctamente. Para obtener más información acerca de la función de sitio web de Amazon S3,
consulte Alojamiento de un sitio web estático en Amazon S3 (p. 523).

El siguiente ejemplo de PHP agrega una configuración de sitio web al bucket específico. El método
create_website_config proporciona explícitamente los nombres de los documentos de error e índice.
El ejemplo recupera también la configuración del sitio web e imprime la respuesta. Para obtener más
información acerca de la función de sitio web de Amazon S3, consulte Alojamiento de un sitio web estático
en Amazon S3 (p. 523).

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Uso del
AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708).

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';

Versión de API 2006-03-01


75
Amazon Simple Storage Service Guía del desarrollador
Mediante la API de REST

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Add the website configuration.


$s3->putBucketWebsite([
'Bucket' => $bucket,
'WebsiteConfiguration' => [
'IndexDocument' => ['Suffix' => 'index.html'],
'ErrorDocument' => ['Key' => 'error.html']
]
]);

// Retrieve the website configuration.


$result = $s3->getBucketWebsite([
'Bucket' => $bucket
]);
echo $result->getPath('IndexDocument/Suffix');

// Delete the website configuration.


$s3->deleteBucketWebsite([
'Bucket' => $bucket
]);

Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Documentación de AWS SDK para PHP

Administración de sitios web con la API de REST


Puede utilizar la Consola de administración de AWS, o el SDK de AWS para configurar un bucket como
sitio web. Sin embargo, si su aplicación lo requiere, puede enviar solicitudes REST directamente. Para
obtener más información, consulte las siguientes secciones de la Amazon Simple Storage Service API
Reference.

• PUT Bucket website


• GET Bucket website
• DELETE Bucket website

Aceleración de transferencia de Amazon S3


Aceleración de transferencia de Amazon S3 permite transferir archivos de manera rápida, fácil y segura
entre su cliente y un bucket de S3 a larga distancia. Transfer Acceleration aprovecha las ubicaciones de
borde distribuidas globalmente de Amazon CloudFront. A medida que los datos llegan a una ubicación de
borde, se redirigen a Amazon S3 a través de una ruta de red optimizada.

Por el uso de Transfer Acceleration se podrían aplicar cargos por transferencia de datos adicionales. Para
obtener más información sobre los precios, consulte los precios de Amazon S3.

Temas
• ¿Por qué usar Aceleración de transferencia de Amazon S3? (p. 77)

Versión de API 2006-03-01


76
Amazon Simple Storage Service Guía del desarrollador
¿Por qué utilizar Transfer Acceleration?

• Introducción a Aceleración de transferencia de Amazon S3 (p. 77)


• Requisitos de uso de Aceleración de transferencia de Amazon S3 (p. 78)
• Aceleración de transferencia de Amazon S3 Ejemplos (p. 79)

¿Por qué usar Aceleración de transferencia de


Amazon S3?
Puede que quiera usar Transfer Acceleration en un bucket por varios motivos, incluidos los siguientes:

• Porque tiene clientes que cargan a un bucket centralizado desde todo el mundo.
• Porque transfiere gigabytes o terabytes de datos regularmente entre varios continentes.
• No puede utilizar todo el ancho de banda disponible en Internet al cargar en Amazon S3.

Para obtener más información acerca de cuándo usar Transfer Acceleration, consulte Preguntas
frecuentes sobre Amazon S3.

Uso de la herramienta Comparación de velocidad en Aceleración


de transferencia de Amazon S3
Puede utilizar la herramienta Comparación de velocidad de Aceleración de transferencia de Amazon
S3 para comparar velocidades de carga aceleradas y no aceleradas en regiones de Amazon S3. La
herramienta Comparación de velocidad utiliza cargas multiparte para transferir un archivo desde su
navegador a varias regiones de Amazon S3 con y sin Transfer Acceleration.

Puede obtener acceso a la herramienta Comparación de velocidad utilizando cualquiera de los siguientes
métodos:

• Copie la siguiente URL en la ventana de su navegador, sustituyendo region por la región que utilice
(por ejemplo, us-west-2) y yourBucketName por el nombre del bucket que quiera evaluar:

http://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-
speed-comparsion.html?region=region&origBucketName=yourBucketName

Para obtener una lista de las regiones admitidas por Amazon S3, consulte Regiones y puntos de enlace
en la Referencia general de Amazon Web Services.
• Use la consola de Amazon S3. Para ver más detalles, consulte Habilitación de Transfer Acceleration en
la Guía del usuario de la consola de Amazon Simple Storage Service.

Introducción a Aceleración de transferencia de


Amazon S3
Para comenzar a utilizar Aceleración de transferencia de Amazon S3, realice los siguientes pasos:

1. Active Transfer Acceleration en un bucket: para que el bucket funcione con la aceleración de
transferencia, el nombre del bucket debe ajustarse a los requisitos de nomenclatura de DNS y no debe
contener puntos (".").

Puede habilitar Transfer Acceleration en un bucket de cualquiera de las siguientes formas:

Versión de API 2006-03-01


77
Amazon Simple Storage Service Guía del desarrollador
Requisitos de uso de Aceleración
de transferencia de Amazon S3

• Use la consola de Amazon S3. Para obtener más información, consulte Habilitación de Transfer
Acceleration en la Guía del usuario de la consola de Amazon Simple Storage Service.
• Usar la operación PUT Bucket accelerate de la API REST
• Usar la AWS CLI y los SDK de AWS. Para obtener más información, consulte Uso de los SDK, la CLI
y los exploradores de AWS (p. 697).
2. Transfiera datos a y desde el bucket con la aceleración habilitada mediante uno de los siguientes
nombres de dominio de punto de enlace de s3-accelerate:
• bucketname.s3-accelerate.amazonaws.com: para obtener acceso a un bucket con aceleración
habilitada.
• bucketname.s3-accelerate.dualstack.amazonaws.com: para obtener acceso a un bucket
con aceleración habilitada por IPv6. Amazon S3 tiene un conjunto de puntos de enlace de doble pila
que admite solicitudes sobre IPv6 y IPv4. El punto de conexión de doble pila de Transfer Acceleration
solo usa el tipo de nombre de punto de conexión de estilo de alojamiento virtual. Para obtener más
información, consulte Introducción a la realización de solicitudes en IPv6 (p. 12) y Uso de los puntos
de enlace de doble pila en Amazon S3 (p. 15).
Important

La compatibilidad para el punto de enlace acelerado de doble pila actualmente solo está
disponible desde el AWS SDK para Java. Pronto ofreceremos compatibilidad con la CLI de
AWS y otros SDK de AWS.
Note

Puede seguir usando el punto de conexión normal además de los puntos de conexión de
aceleración.

Puede apuntar sus solicitudes PUT object y GET object en Amazon S3 al nombre de dominio de punto
de enlace de Transfer Acceleration tras habilitarlo. Por ejemplo, pongamos que tiene actualmente
una aplicación API REST que usa PUT Object y el nombre de host mybucket.s3.amazonaws.com
en la solicitud PUT. Para acelerar el PUT, solo tiene que cambiar el nombre del host en su solicitud a
mybucket.s3-accelerate.amazonaws.com. Para volver a usar la velocidad de carga estándar, no tiene
más que volver a cambiar el nombre a mybucket.s3.amazonaws.com.

Después de habilitar Transfer Acceleration, puede tardar hasta 20 minutos en darse cuenta de los
beneficios de desempeño. Sin embargo, el punto de conexión acelerado estará disponible en cuando
habilite Transfer Acceleration.

Puede usar el punto de conexión acelerado en la CLI de AWS, los SDK de AWS y otras herramientas
que transfieren datos desde y hacia Amazon S3. Si utiliza los SDK de AWS, algunos de los lenguajes
admitidos usan un marcador de configuración de cliente de punto de enlace acelerado, de modo que no
tendrá que establecer explícitamente el punto de enlace de Transfer Acceleration para bucketname.s3-
accelerate.amazonaws.com. Para ver ejemplos de cómo usar un marcador de configuración de
cliente de punto de conexión acelerado, consulte Aceleración de transferencia de Amazon S3
Ejemplos (p. 79).

Puede usar todas las operaciones de Amazon S3 en los puntos de enlace de aceleración de transferencia,
excepto en las siguientes: GET Service (list buckets), PUT Bucket (create bucket) y DELETE Bucket.
Además, Aceleración de transferencia de Amazon S3 no es compatible con las copias entre regiones
usando PUT Object - Copy.

Requisitos de uso de Aceleración de transferencia de


Amazon S3
Estos son los requisitos para usar Transfer Acceleration en un bucket de S3:
Versión de API 2006-03-01
78
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration Ejemplos

• Transfer Acceleration solo se admite en solicitudes de estilo virtual. Para obtener más información
acerca de las solicitudes de estilo virtual, consulte Realización de solicitudes con la API de REST (p. 45).
• El nombre del bucket que use para Transfer Acceleration debe cumplir con las convenciones del DNS y
no debe contener puntos (“.”).
• Transfer Acceleration debe estar habilitado en el bucket. Tras habilitar Transfer Acceleration en un
bucket, podría tardar hasta 20 minutos antes de que aumente la velocidad de transferencia de datos al
bucket.
• Para obtener acceso al bucket habilitado para Transfer Acceleration, debe usar el punto de
enlace bucketname.s3-accelerate.amazonaws.com o el punto de enlace de doble pila
bucketname.s3-accelerate.dualstack.amazonaws.com para conectar al bucket habilitado
sobre IPv6.
• Debe ser el propietario del bucket o establecer el estado de transfer acceleration. El propietario del
bucket puede asignar permisos a otros usuarios para permitirles establecer el estado de aceleración
en un bucket. El permiso s3:PutAccelerateConfiguration permite a los usuarios habilitar o
deshabilitar Transfer Acceleration en un bucket. El permiso s3:GetAccelerateConfiguration
permite a los usuarios devolver el estado Transfer Acceleration de un bucket, que puede ser Enabled
o Suspended.. Para obtener más información sobre estos permisos, consulte Permisos relacionados
con operaciones de subrecursos de bucket (p. 360) y Administración de identidad y acceso en Amazon
S3 (p. 312).

Más información
• GET Bucket accelerate
• PUT Bucket accelerate

Aceleración de transferencia de Amazon S3 Ejemplos


En esta sección se facilitan ejemplos de cómo habilitar Aceleración de transferencia de Amazon S3 en
un bucket y usar el punto de conexión de aceleración para el bucket habilitado. Algunos de los lenguajes
admitidos por los SDK de AWS (por ejemplo, Java y .NET) usan un marcador de configuración de cliente
de punto de enlace acelerado, de modo que no tendrá que establecer explícitamente el punto de enlace
de Transfer Acceleration para bucketname.s3-accelerate.amazonaws.com. Para obtener más información
acerca de Transfer Acceleration, consulte Aceleración de transferencia de Amazon S3 (p. 76).

Temas
• Uso de la consola de Amazon S3 (p. 79)
• Uso de Transfer Acceleration desde la AWS Command Line Interface (AWS CLI) (p. 80)
• Uso de Transfer Acceleration desde AWS SDK for Java (p. 81)
• Uso de Transfer Acceleration desde AWS SDK para .NET (p. 82)
• Uso de Transfer Acceleration desde AWS SDK para JavaScript (p. 83)
• Uso de Transfer Acceleration desde AWS SDK for Python (Boto) (p. 83)
• Mediante otros SDK de AWS (p. 83)

Uso de la consola de Amazon S3


Para obtener más información sobre cómo habilitar Transfer Acceleration en un bucket con la consola de
Amazon S3, consulte Habilitación de Transfer Acceleration en la Guía del usuario de la consola de Amazon
Simple Storage Service.

Versión de API 2006-03-01


79
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration Ejemplos

Uso de Transfer Acceleration desde la AWS Command Line


Interface (AWS CLI)
En esta sección se proporcionan ejemplos de comandos de la AWS CLI que se usan para Transfer
Acceleration. Para obtener instrucciones acerca de cómo configurar la AWS CLI, consulte Configuración de
la CLI de AWS (p. 704).

Habilitación de Transfer Acceleration en un bucket con la AWS CLI


Puede usar el comando put-bucket-accelerate-configuration de la AWS CLI para habilitar o suspender
Transfer Acceleration en un bucket. En el siguiente ejemplo se usa Status=Enabled para habilitar
Transfer Acceleration en un bucket. Puede usar Status=Suspended para suspender Transfer
Acceleration.

Example

$ aws s3api put-bucket-accelerate-configuration --bucket bucketname --accelerate-


configuration Status=Enabled

Uso de Transfer Acceleration desde la AWS CLI


Si establece el valor de configuración use_accelerate_endpoint en true en un perfil de su archivo de
AWS Config, todas las solicitudes de Amazon S3 realizadas por comandos de la AWS CLI de s3 y s3api se
redirigirán al punto de enlace acelerado: s3-accelerate.amazonaws.com. Transfer Acceleration debe
estar habilitado en su bucket para usar el punto de enlace acelerado.

Todas las solicitudes se envíen mediante el direccionamiento al bucket de estilo virtual: my-bucket.s3-
accelerate.amazonaws.com. Todas las solicitudes ListBuckets, CreateBucket y DeleteBucket
no se enviarán al punto de enlace acelerado, ya que el punto de enlace no admite estas operaciones. Para
obtener más información acerca de use_accelerate_endpoint, consulte Configuración de S3 de AWS
CLI.

En el siguiente ejemplo se establece use_accelerate_endpoint como true en el perfil


predeterminado.

Example

$ aws configure set default.s3.use_accelerate_endpoint true

Si quiere usar el punto de conexión acelerado para algunos comandos de la AWS CLI pero no otros, puede
usar uno de los dos siguientes métodos:

• Puede usar el punto de conexión acelerado por comando estableciendo el parámetro --endpoint-url
como https://s3-accelerate.amazonaws.com o http://s3-accelerate.amazonaws.com
para cualquier comando de s3 o s3api.
• Puede configurar perfiles separados en su archivo AWS Config. Por ejemplo, puede crear un
perfil que configure use_accelerate_endpoint como true y un perfil que no configure
use_accelerate_endpoint. Al ejecutar un comando, especifique qué perfil quiere usar, en función
de si quiere usar el punto de conexión acelerado.

Ejemplos de la AWS CLI para cargar un objeto en un bucket habilitado para


Transfer Acceleration
En el siguiente ejemplo se carga un archivo en un bucket habilitado para Transfer Acceleration usando el
perfil predeterminado que se ha configurado para usar el punto de conexión acelerado.

Versión de API 2006-03-01


80
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration Ejemplos

Example

$ aws s3 cp file.txt s3://bucketname/keyname --region region

En el siguiente ejemplo se carga un archivo en un bucket habilitado para Transfer Acceleration usando el
parámetro --endpoint-url para especificar el punto de enlace acelerado.

Example

$ aws configure set s3.addressing_style virtual


$ aws s3 cp file.txt s3://bucketname/keyname --region region --endpoint-url http://s3-
accelerate.amazonaws.com

Uso de Transfer Acceleration desde AWS SDK for Java


Example

En el siguiente ejemplo se demuestra cómo usar un punto de conexión acelerado para cargar un objeto en
Amazon S3. En el ejemplo se realiza lo siguiente:

• Crea un AmazonS3Client que se configura para usar puntos de conexión de aceleración. Todos los
buckets a los que accede el cliente deben tener habilitada la aceleración de transferencia.
• Habilita la aceleración de transferencia en un bucket específico. Este paso solo es necesario si el bucket
que especifique aún no tiene habilitada la aceleración de transferencia.
• Verifica que la aceleración de transferencia está habilitada para el bucket especificado.
• Carga un nuevo objeto en el bucket especificado utilizando el punto de enlace de aceleración del bucket.

Para obtener más información acerca del uso de Transfer Acceleration, consulte Introducción a
Aceleración de transferencia de Amazon S3 (p. 77). Para obtener instrucciones sobre la creación
y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon
S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.BucketAccelerateConfiguration;
import com.amazonaws.services.s3.model.BucketAccelerateStatus;
import com.amazonaws.services.s3.model.GetBucketAccelerateConfigurationRequest;
import com.amazonaws.services.s3.model.SetBucketAccelerateConfigurationRequest;

public class TransferAcceleration {


public static void main(String[] args) {
Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Key name ***";

try {
// Create an Amazon S3 client that is configured to use the accelerate
endpoint.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.enableAccelerateMode()

Versión de API 2006-03-01


81
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration Ejemplos

.build();

// Enable Transfer Acceleration for the specified bucket.


s3Client.setBucketAccelerateConfiguration(
new SetBucketAccelerateConfigurationRequest(bucketName,
new BucketAccelerateConfiguration(
BucketAccelerateStatus.Enabled)));

// Verify that transfer acceleration is enabled for the bucket.


String accelerateStatus = s3Client.getBucketAccelerateConfiguration(
new GetBucketAccelerateConfigurationRequest(bucketName))
.getStatus();
System.out.println("Bucket accelerate status: " + accelerateStatus);

// Upload a new object using the accelerate endpoint.


s3Client.putObject(bucketName, keyName, "Test object for transfer
acceleration");
System.out.println("Object \"" + keyName + "\" uploaded with transfer
acceleration.");
} 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();
}
}
}

Uso de Transfer Acceleration desde AWS SDK para .NET


En el siguiente ejemplo se demuestra cómo usar AWS SDK para .NET para habilitar Transfer Acceleration
en un bucket. Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte
Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

Example

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class TransferAccelerationTest
{
private const string bucketName = "*** bucket name ***";
// 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);
EnableAccelerationAsync().Wait();
}

static async Task EnableAccelerationAsync()


{
try

Versión de API 2006-03-01


82
Amazon Simple Storage Service Guía del desarrollador
Buckets de pago por solicitante

{
var putRequest = new PutBucketAccelerateConfigurationRequest
{
BucketName = bucketName,
AccelerateConfiguration = new AccelerateConfiguration
{
Status = BucketAccelerateStatus.Enabled
}
};
await s3Client.PutBucketAccelerateConfigurationAsync(putRequest);

var getRequest = new GetBucketAccelerateConfigurationRequest


{
BucketName = bucketName
};
var response = await
s3Client.GetBucketAccelerateConfigurationAsync(getRequest);

Console.WriteLine("Acceleration state = '{0}' ", response.Status);


}
catch (AmazonS3Exception amazonS3Exception)
{
Console.WriteLine(
"Error occurred. Message:'{0}' when setting transfer acceleration",
amazonS3Exception.Message);
}
}
}
}

Al cargar un objeto en un bucket que tenga Transfer Acceleration habilitado, especifique el uso del punto
de enlace de aceleración en el momento de crear un cliente como se muestra:

var client = new AmazonS3Client(new AmazonS3Config


{
RegionEndpoint = TestRegionEndpoint,
UseAccelerateEndpoint = true
}

Uso de Transfer Acceleration desde AWS SDK para JavaScript


Para ver un ejemplo de cómo habilitar Transfer Acceleration usando el SDK de AWS para JavaScript,
consulte la llamada a la operación putBucketAccelerateConfiguration en la AWS SDK for JavaScript API
Reference.

Uso de Transfer Acceleration desde AWS SDK for Python (Boto)


Para ver un ejemplo de cómo habilitar Transfer Acceleration usando SDK for Python, consulte
put_bucket_accelerate_configuration en la AWS SDK for Python (Boto 3) API Reference.

Mediante otros SDK de AWS


Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.

Buckets de pago por solicitante


Temas

Versión de API 2006-03-01


83
Amazon Simple Storage Service Guía del desarrollador
Configuración con la consola

• Configuración de pagos por solicitante con la consola de Amazon S3 (p. 84)


• Configuración de pagos por solicitante con la API de REST (p. 85)
• Detalles de cargos (p. 87)

En general, los propietarios de buckets pagan todos los costos de almacenamiento y transferencia de
datos de Amazon S3 asociados con el bucket. Un propietario de bucket, sin embargo, puede configurar
un bucket para que sea un bucket de pago por solicitante. Con los buckets de pago por solicitante, el
solicitante, en lugar del propietario del bucket, paga el costo de la solicitud y de la descarga de datos del
bucket. El propietario del bucket siempre paga el costo de almacenamiento de datos.

Por lo general, se configuran los buckets para que sean de pago por solicitante cuando desea compartir
datos, pero no incurrir en cargos asociados con el acceso a los datos por parte de otras personas. Puede,
por ejemplo, usar los buckets de pago por solicitante cuando pone a disposición grandes conjuntos de
datos, como directorios de códigos postales, datos de referencia, información geoespacial o datos de
rastreo web.
Important

Si habilita los pagos por solicitante en un bucket, no se permite el acceso anónimo a ese bucket.

Debe autenticar todas las solicitudes relacionadas con buckets de pago por solicitante. La autenticación
de la solicitud le permite a Amazon S3 identificar y cobrarle al solicitante el uso del bucket de pago por
solicitante.

Cuando el solicitante asume una función de AWS Identity and Access Management (IAM) antes de realizar
la solicitud, la solicitud se le cobra a la cuenta a la que pertenece la función. Para obtener más información
sobre los roles de IAM, consulte Roles de IAM en la Guía del usuario de IAM.

Después de configurar un bucket para que sea un bucket de pago por solicitante, los solicitantes deben
incluir el parámetro x-amz-request-payer en sus solicitudes en el encabezado, para solicitudes POST,
GET y HEAD, o como un parámetro en una solicitud REST para mostrar que comprenden que se les
cobrará la solicitud y la descarga de datos.

Los buckets de pago por solicitante no admiten lo siguiente:

• Solicitudes anónimas
• BitTorrent
• Solicitudes SOAP
• No puede usar un bucket de pago por solicitante como bucket de destino para el registro de usuarios
finales o viceversa; sin embargo, puede usar el registro de usuarios finales en un bucket de pago por
solicitante en el que el bucket de destino no sea un bucket de pago por solicitante.

Configuración de pagos por solicitante con la consola


de Amazon S3
Puede usar la consola de Amazon S3 para configurar un bucket de pago por solicitante.

Para configurar un bucket para el pago por solicitante

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
2. En la lista Buckets, haga clic en el icono de detalles a la izquierda del nombre del bucket y luego en
Properties (Propiedades) para mostrar las propiedades del bucket.

Versión de API 2006-03-01


84
Amazon Simple Storage Service Guía del desarrollador
Configuración con la API REST

3. En el panel Properties (Propiedades), haga clic en Requester Pays (Pago por solicitante).
4. Seleccione la casilla Enabled (Habilitado).

Configuración de pagos por solicitante con la API de


REST
Temas
• Configuración del recurso requestPayment en un bucket (p. 85)
• Recuperación de la configuración del recurso requestPayment (p. 86)
• Descarga de objetos en buckets de pago por solicitante (p. 86)

Configuración del recurso requestPayment en un bucket


Solo el propietario del bucket puede establecer el valor de configuración
RequestPaymentConfiguration.payer de un bucket en BucketOwner, el valor predeterminado, o
Requester. La configuración del recurso requestPayment es opcional. De forma predeterminada, el
bucket no es un bucket de pago por solicitante.

Para que un bucket de pago por solicitante vuelva a ser un bucket normal, se usa el valor BucketOwner.
Por lo general, se usaría el valor BucketOwner al cargar datos al bucket de Amazon S3 y luego se
establecería el valor en Requester antes de publicar objetos en el bucket.

Para configurar el recurso requestPayment

• Use una solicitud PUT para establecer el valor Payer en Requester en un bucket especificado.

PUT ?requestPayment HTTP/1.1


Host: [BucketName].s3.amazonaws.com
Content-Length: 173
Date: Wed, 01 Mar 2009 12:00:00 GMT
Authorization: AWS [Signature]

<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Payer>Requester</Payer>
</RequestPaymentConfiguration>

Si la solicitud se realiza correctamente, Amazon S3 devuelve una respuesta similar a la siguiente:

HTTP/1.1 200 OK
x-amz-id-2: [id]
x-amz-request-id: [request_id]
Date: Wed, 01 Mar 2009 12:00:00 GMT
Content-Length: 0

Versión de API 2006-03-01


85
Amazon Simple Storage Service Guía del desarrollador
Configuración con la API REST

Connection: close
Server: AmazonS3
x-amz-request-charged:requester

Puede configurar los pagos por solicitante solo a nivel del bucket; no puede configurar los pagos por
solicitante para objetos específicos dentro del bucket.

Puede configurar un bucket para que tenga el valor BucketOwner o Requester en cualquier momento.
Sin embargo, tenga en cuenta que es posible que haya un pequeño retraso, en términos de minutos, para
que el nuevo valor de configuración surta efecto.
Note

Los propietarios de buckets que dan URL prefirmadas deben pensarlo dos veces antes de
configurar un bucket para que sea de pago por solicitante, en especial si la URL tiene una vida
útil muy larga. Al propietario del bucket se le cobra cada vez que el solicitante usa una URL
prefirmada que usa las credenciales del propietario del bucket.

Recuperación de la configuración del recurso requestPayment


Puede determinar el valor Payer que se establece en un bucket mediante la solicitud del recurso
requestPayment.

Para obtener el recurso requestPayment

• Use una solicitud GET para obtener el recurso requestPayment, como se muestra en la siguiente
solicitud.

GET ?requestPayment HTTP/1.1


Host: [BucketName].s3.amazonaws.com
Date: Wed, 01 Mar 2009 12:00:00 GMT
Authorization: AWS [Signature]

Si la solicitud se realiza correctamente, Amazon S3 devuelve una respuesta similar a la siguiente:

HTTP/1.1 200 OK
x-amz-id-2: [id]
x-amz-request-id: [request_id]
Date: Wed, 01 Mar 2009 12:00:00 GMT
Content-Type: [type]
Content-Length: [length]
Connection: close
Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>


<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Payer>Requester</Payer>
</RequestPaymentConfiguration>

Esta respuesta muestra que el valor payer está configurado en Requester.

Descarga de objetos en buckets de pago por solicitante


Debido a que se les cobra la descarga de datos de los buckets de pago por solicitante a los solicitantes,
las solicitudes deben contener un parámetro especial, x-amz-request-payer, que confirma que el
solicitante sabe que se le cobrará la descarga. Para obtener acceso a los objetos en los buckets de pago
por solicitante, las solicitudes deben incluir lo siguiente:

Versión de API 2006-03-01


86
Amazon Simple Storage Service Guía del desarrollador
Detalles de cargos

• Para las solicitudes GET, HEAD y POST, incluyax-amz-request-payer : requester en el


encabezado.
• Para los URL firmados, incluya x-amz-request-payer=requester en la solicitud.

Si la solicitud se realiza correctamente y se le cobra al solicitante, la respuesta incluye el encabezado


x-amz-request-charged:requester. Si x-amz-request-payer no se encuentra en la solicitud,
Amazon S3 devuelve el error 403 y le cobra la solicitud al propietario del bucket.
Note

Los propietarios de buckets no necesitan añadir x-amz-request-payer a sus solicitudes.


Asegúrese de que haya incluido x-amz-request-payer y su valor en el cálculo
de firmas. Para obtener más información, consulte Construcción del elemento
CanonicalizedAmzHeaders (p. 721).

Para descargar objetos de un bucket de pago por solicitante

• Use una solicitud GET para descargar un objeto de un bucket de pago por solicitante, como se muestra
en la siguiente solicitud.

GET / [destinationObject] HTTP/1.1


Host: [BucketName].s3.amazonaws.com
x-amz-request-payer : requester
Date: Wed, 01 Mar 2009 12:00:00 GMT
Authorization: AWS [Signature]

Si la solicitud GET se realiza correctamente y se le cobra al solicitante, la respuesta incluye x-amz-


request-charged:requester.

Amazon S3 puede devolver el error Access Denied en el caso de solicitudes que intentan obtener
objetos de un bucket de pago por solicitante. Para obtener más información, consulte la sección sobre
respuestas de error.

Detalles de cargos
Los cargos de las solicitudes de pagos por solicitante exitosas son simples: el solicitante paga la
transferencia de datos y la solicitud; el propietario del bucket paga el almacenamiento de datos. Sin
embargo, el propietario del bucket paga la solicitud en las siguientes condiciones:

• El solicitante no incluye el parámetro x-amz-request-payer en el encabezado (solicitudes GET,


HEAD o POST) o como un parámetro (REST) en la solicitud (HTTP código 403).
• Hay un error de autenticación de la solicitud (HTTP código 403).
• La solicitud es anónima (HTTP código 403).
• La solicitud es una solicitud de Simple Object Access Protocol (SOAP, Protocolo simple de acceso a
objetos).

Buckets y control de acceso


Cada bucket tiene una política de control de acceso asociada. Esta política regula la creación, eliminación
y enumeración de objetos dentro del bucket. Para obtener más información, consulte Administración de
identidad y acceso en Amazon S3 (p. 312).

Versión de API 2006-03-01


87
Amazon Simple Storage Service Guía del desarrollador
Informes de facturación y de uso

Informes de facturación y de uso para los buckets


de S3
Cuando se utiliza Amazon Simple Storage Service (Amazon S3), no es necesario pagar ninguna cuota
inicial ni comprometerse a almacenar una cantidad de contenido determinada. Al igual que ocurre con
otros servicios de Amazon Web Services (AWS), pagará por uso, es decir, solo por el consumo realizado.

AWS proporciona los siguientes informes para Amazon S3:

• Informes de facturación: son distintos informes que proporcionan una visión general de toda la actividad
de los servicios de AWS que se utilizan, incluido Amazon S3. AWS siempre factura al propietario del
bucket de S3 con las tarifas de Amazon S3, a menos que el bucket haya sido creado como un bucket
de pago por solicitante. Para obtener más información acerca del pago por solicitante, consulte Buckets
de pago por solicitante (p. 83). Para obtener más información acerca de los informes de facturación,
consulte Informes de facturación de AWS para Amazon S3 (p. 88).
• Informe de uso: es un resumen de la actividad de un servicio específico, agrupado por hora, día o mes.
Puede elegir el tipo de uso y la operación que desea incluir. También puede elegir la forma en que
se agregan los datos. Para obtener más información, consulte Informe de uso de AWS para Amazon
S3 (p. 90).

Los siguientes temas proporcionan información acerca de los informes de facturación y uso de Amazon S3.

Temas
• Informes de facturación de AWS para Amazon S3 (p. 88)
• Informe de uso de AWS para Amazon S3 (p. 90)
• Cómo interpretar los informes de facturación y de uso de AWS para Amazon S3 (p. 92)
• Uso de etiquetas de buckets de S3 de asignación de costos (p. 101)

Informes de facturación de AWS para Amazon S3


La factura mensual de AWS separa la información de uso y los costos por servicio y función de AWS.
Existen varios informes de facturación de AWS: el informe mensual, el informe de asignación de costos
y los informes detallados de facturación. Para obtener información acerca de cómo ver los informes
de facturación, consulte Visualización de su factura en la Guía del usuario de AWS Billing and Cost
Management.

También puede descargar un informe de uso que da más detalles sobre su uso del almacenamiento de
Amazon S3 que los informes de facturación. Para obtener más información, consulte Informe de uso de
AWS para Amazon S3 (p. 90).

En la siguiente tabla se muestran los cargos relacionados con el uso de Amazon S3.

Cargos por uso de Amazon S3

Cargo Comentarios

Almacenamiento Se paga por almacenar objetos en los buckets


de S3. La tarifa que se cobra depende del
tamaño de los objetos, de cuánto tiempo
permanecieron almacenados durante el mes y
de la clase de almacenamiento: STANDARD,
INTELLIGENT_TIERING, STANDARD_IA
(IA quiere decir acceso poco frecuente),

Versión de API 2006-03-01


88
Amazon Simple Storage Service Guía del desarrollador
Informes de facturación

Cargo Comentarios
ONEZONE_IA, GLACIER, DEEP_ARCHIVE o
Almacenamiento de redundancia reducida (RRS).
Para obtener más información acerca de las
clases de almacenamiento, consulte Clases de
almacenamiento de Amazon S3 (p. 110).

Monitorización y automatización Paga un cargo mensual de monitorización y


automatización por objeto almacenado en la clase
de almacenamiento INTELLIGENT_TIERING
para monitorizar patrones de acceso y
mover objetos entre niveles de acceso en
INTELLIGENT_TIERING.

Solicitudes Se paga por las solicitudes, por ejemplo,


solicitudes GET, realizadas en los buckets y los
objetos de S3. Esto incluye las solicitudes del ciclo
de vida. Las tarifas para las solicitudes dependen
del tipo de solicitud que se realiza. Para obtener
más información acerca de los precios de las
solicitudes, consulte Precios de Amazon S3.

Recuperaciones Se paga por recuperar los objetos que


están almacenados en el almacenamiento
STANDARD_IA, ONEZONE_IA, GLACIER y
DEEP_ARCHIVE.

Eliminaciones anticipadas Si se elimina un objeto almacenado en el


almacenamiento INTELLIGENT_TIERING,
STANDARD_IA, ONEZONE_IA, GLACIER o
DEEP_ARCHIVE antes de que se haya cumplido
el compromiso de almacenamiento mínimo, se
pagará una tarifa de eliminación anticipada para
ese objeto.

Administración del almacenamiento Se paga por las características de administración


de almacenamiento (etiquetado de objetos, análisis
e inventario de Amazon S3) activadas en los
buckets de cada cuenta.

Ancho de banda Se paga por todo el ancho de banda que entra y


sale de Amazon S3, excepto lo siguiente:

• Datos entrantes transferidos desde Internet


• Datos salientes transferidos hacia una instancia
de Amazon Elastic Compute Cloud (Amazon
EC2), cuando la instancia está en la misma
región de AWS que el bucket de S3
• Datos salientes transferidos hacia Amazon
CloudFront (CloudFront)

También se paga una tarifa por los datos


transferidos usando Amazon S3 Transfer
Acceleration.

Versión de API 2006-03-01


89
Amazon Simple Storage Service Guía del desarrollador
Informe de uso

Para obtener información detallada acerca de las tarifas de uso de Amazon S3 relativas a almacenamiento,
transferencia de datos y servicios, consulte Precios de Amazon S3 y las Preguntas frecuentes sobre
Amazon S3.

Para obtener información acerca del significado de los códigos y las abreviaturas utilizados en los informes
de facturación y de uso de Amazon S3, consulte Cómo interpretar los informes de facturación y de uso de
AWS para Amazon S3 (p. 92).

Más información
• Informe de uso de AWS para Amazon S3 (p. 90)
• Uso de etiquetas de buckets de S3 de asignación de costos (p. 101)
• Administración de costos y facturación de AWS
• Precios de Amazon S3
• Preguntas frecuentes sobre Amazon S3
• Precios de Glacier

Informe de uso de AWS para Amazon S3


Para obtener información detallada acerca del uso que hace del almacenamiento de Amazon S3,
descargue los informes de uso de AWS generados dinámicamente. Puede elegir el tipo de uso, la
operación y el periodo de tiempo que desea incluir. También puede elegir la forma en que se agregan los
datos.

Cuando se descarga un informe de uso, se pueden obtener los datos de uso agregados por hora, día
o mes. El informe de uso de Amazon S3 muestra las operaciones por tipo de uso y región de AWS, por
ejemplo, la cantidad de datos transferidos fuera de la región de Asia Pacífico (Sídney).

El informe de uso de Amazon S3 incluye la siguiente información:

• Service (Servicio): Amazon Simple Storage Service


• Operation (Operación): la operación realizada en el bucket o en el objeto. Para obtener una explicación
detallada de las operaciones de Amazon S3, consulte Seguimiento de las operaciones en los informes
de uso (p. 100).
• UsageType: uno de los siguientes valores:
• Un código que identifica el tipo de almacenamiento
• Un código que identifica el tipo de solicitud
• Un código que identifica el tipo de recuperación
• Un código que identifica el tipo de transferencia de datos.
• Un código que identifica las eliminaciones anticipadas del almacenamiento INTELLIGENT_TIERING,
STANDARD_IA, ONEZONE_IA, GLACIER o DEEP_ARCHIVE
• StorageObjectCount: el número de objetos almacenados en un bucket determinado

Para obtener una explicación detallada de los tipos de uso de Amazon S3, consulte Cómo interpretar los
informes de facturación y de uso de AWS para Amazon S3 (p. 92).
• Resource (Recurso): el nombre del bucket asociado al uso indicado.
• StartTime (Hora de inicio): la hora de inicio del día en que se realizó el uso, en horario universal
coordinado (UTC).
• EndTime (Hora de finalización): la hora de finalización del día en que se realizó el uso, en horario
universal coordinado (UTC).
• UsageValue (Valor de uso): uno de los siguientes valores de volumen:

Versión de API 2006-03-01


90
Amazon Simple Storage Service Guía del desarrollador
Informe de uso

• El número de solicitudes durante el periodo especificado.


• La cantidad de datos transferidos, en bytes.
• La cantidad de datos almacenados, en bytes-horas, que es el número de bytes almacenados en una
hora determinada
• La cantidad de datos relacionados con las restauraciones desde el almacenamiento DEEP_ARCHIVE,
GLACIER, STANDARD_IA u ONEZONE_IA en bytes

Tip

Para obtener información detallada acerca de cada solicitud que Amazon S3 recibe de sus
objetos, active el registro de acceso del servidor para sus buckets. Para obtener más información,
consulte Registro de acceso al servidor de Amazon S3 (p. 674).

Puede descargar un informe de uso como un archivo XML o como un archivo de valores separados por
comas (CSV). A continuación se muestra un ejemplo de informe de uso con formato CSV abierto en una
aplicación de hoja de cálculo.

Para obtener información acerca de cómo interpretar el informe de uso, consulte Cómo interpretar los
informes de facturación y de uso de AWS para Amazon S3 (p. 92).

Descarga del informe de uso de AWS


Puede descargar un informe de uso como un archivo .xml o .csv.

Para descargar el informe de uso

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
2. En la barra de título, elija su nombre de usuario de AWS Identity and Access Management (IAM) y, a
continuación, elija My Billing Dashboard (Mi panel de facturación).
3. En el panel de navegación, elija Reports (Informes).
4. En la sección Other Reports (Otros informes), elija AWS Usage Report (Informe de uso de &AWS;).
5. En Services: (Servicios), elija Amazon Simple Storage Service.
6. En Download Usage Report (Descargar informe de uso), elija las opciones siguientes:

• Usage Types (Tipos de uso): para obtener una explicación detallada de los tipos de uso de
Amazon S3, consulte Cómo interpretar los informes de facturación y de uso de AWS para Amazon
S3 (p. 92).
• Operation (Operación): para obtener una explicación detallada de las operaciones de Amazon S3,
consulte Seguimiento de las operaciones en los informes de uso (p. 100).
• Time Period (Periodo de tiempo): seleccione el periodo de tiempo que desea que abarque el
informe.
• Report Granularity (Grado de detalle de informe): indique si desea que el informe incluya subtotales
por hora, por día o por mes.
7. Para elegir el formato del informe, elija la opción Download (Descargar) para ese formato y, a
continuación, siga las indicaciones para ver o guardar el informe.

Versión de API 2006-03-01


91
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Más información
• Cómo interpretar los informes de facturación y de uso de AWS para Amazon S3 (p. 92)
• Informes de facturación de AWS para Amazon S3 (p. 88)

Cómo interpretar los informes de facturación y de uso


de AWS para Amazon S3
Los informes de facturación y de uso de Amazon S3 utilizan códigos y abreviaturas. Por ejemplo,
para el tipo de uso, que se define en la siguiente tabla, region se sustituye por una de las siguientes
abreviaturas:

• APE1: Asia Pacífico (Hong Kong)


• APN1: Asia Pacífico (Tokio)
• APN2: Asia Pacífico (Seúl)
• APS1: Asia Pacífico (Singapur)
• APS2: Asia Pacífico (Sídney)
• APS3: Asia Pacífico (Mumbai)
• CAN1: Canadá (Central)
• EUN1: UE Estocolmo
• EUC1: UE (Fráncfort)
• EU: UE (Irlanda)
• EUW2: UE (Londres)
• EUW3: UE (París)
• SAE1: América del Sur (São Paulo)
• UGW1: AWS GovCloud (US-West)
• UGE1: AWS GovCloud (EE.UU. Este)
• USE1 (or no prefix): US East (N. Virginia)
• USE2: EE.UU. Este (Ohio)
• USW1: EE.UU. Oeste (Norte de California)
• USW2: EE.UU. Oeste (Oregón)

Para obtener información acerca de los precios por región de AWS, consulte Precios de Amazon S3.

En la primera columna de la siguiente tabla se enumeran los tipos de uso que aparecen en los informes de
facturación y de uso.

Tipos de uso

Tipo de uso Unidades Grado de Descripción


detalle

region1-region2-AWS-In-Bytes Bytes Por hora La cantidad de datos


transferidos a la región 1 de
AWS desde la región 2 de
AWS

region1-region2-AWS-Out-Bytes Bytes Por hora La cantidad de datos


transferidos desde la región

Versión de API 2006-03-01


92
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Tipo de uso Unidades Grado de Descripción


detalle
1 de AWS a la región 2 de
AWS

region-BatchOperations-Jobs Recuento Por hora Número de trabajos de las


operaciones por lotes de
Amazon S3 realizados.

region-BatchOperations-Objects Recuento Por hora El número de operaciones


de objetos realizadas por
las operaciones por lotes de
Amazon S3.

region-DataTransfer-In-Bytes Bytes Por hora La cantidad de datos


transferidos a Amazon S3
desde Internet

region-DataTransfer-Out-Bytes Bytes Por hora La cantidad de datos


transferidos desde Amazon
1
S3 a Internet

region-C3DataTransfer-In-Bytes Bytes Por hora La cantidad de datos


transferidos a Amazon S3
desde Amazon EC2 dentro
de la misma región de AWS

region-C3DataTransfer-Out-Bytes Bytes Por hora La cantidad de datos


transferidos desde Amazon
S3 a Amazon EC2 dentro
de la misma región de AWS

region-S3G-DataTransfer-In-Bytes Bytes Por hora La cantidad de datos


transferidos a Amazon
S3 para restaurar
objetos desde el
almacenamiento GLACIER
o DEEP_ARCHIVE

region-S3G-DataTransfer-Out-Bytes Bytes Por hora La cantidad de datos


transferidos desde Amazon
S3 para pasar objetos al
almacenamiento GLACIER
o DEEP_ARCHIVE

region-DataTransfer-Regional-Bytes Bytes Por hora La cantidad de datos


transferidos desde Amazon
S3 a los recursos de AWS
dentro de la misma región
de AWS

StorageObjectCount Recuento Por día El número de objetos


almacenados en un bucket
determinado

Versión de API 2006-03-01


93
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Tipo de uso Unidades Grado de Descripción


detalle

region-CloudFront-In-Bytes Bytes Por hora La cantidad de datos


transferidos a una región de
AWS desde una distribución
de CloudFront

region-CloudFront-Out-Bytes Bytes Por hora La cantidad de datos


transferidos desde una
región de AWS a una
distribución de CloudFront

region-EarlyDelete-ByteHrs Bytes- Por hora Uso de almacenamiento


2
Horas prorrateado para los
objetos eliminados del
almacenamiento GLACIER
antes de que finalice el
compromiso mínimo de
3
90 días

region-EarlyDelete-GDA Bytes- Por hora Uso de almacenamiento


2
Horas prorrateado para los
objetos eliminados
del almacenamiento
DEEP_ARCHIVE antes de
que finalice el compromiso
3
mínimo de 180 días

region-EarlyDelete-SIA Bytes-Horas Por hora Uso de almacenamiento


prorrateado para los
objetos eliminados
del almacenamiento
STANDARD_IA antes de
que finalice el compromiso
4
mínimo de 30 días

region-EarlyDelete-ZIA Bytes-Horas Por hora Uso de almacenamiento


prorrateado para los
objetos eliminados
del almacenamiento
ONEZONE_IA antes de
que finalice el compromiso
4
mínimo de 30 días

region-EarlyDelete-SIA-SmObjects Bytes-Horas Por hora Uso de almacenamiento


prorrateado para los objetos
pequeños (de menos de
128 KB) que se eliminaron
del almacenamiento
STANDARD_IA antes
de que finalizara el
compromiso mínimo de
4
30 días

Versión de API 2006-03-01


94
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Tipo de uso Unidades Grado de Descripción


detalle

region-EarlyDelete-ZIA-SmObjects Bytes-Horas Por hora Uso de almacenamiento


prorrateado para los objetos
pequeños (de menos de
128 KB) que se eliminaron
del almacenamiento
ONEZONE_IA antes de que
finalizara el compromiso
4
mínimo de 30 días

region-Inventory-ObjectsListed Objetos Por hora El número de objetos


enumerados para un grupo
de objetos (los objetos se
agrupan por bucket o por
prefijo) con una lista de
inventario

region-Requests-GLACIER-Tier1 Recuento Por hora El número de solicitudes


PUT, COPY, POST,
InitiateMultipartUpload,
UploadPart o
CompleteMultipartUpload en
objetos GLACIER

region-Requests-GLACIER-Tier2 Recuento Por hora El número de solicitudes


GET y todas las demás
solicitudes no enumeradas
en objetos GLACIER

region-Requests-SIA-Tier1 Recuento Por hora El número de solicitudes


PUT, COPY, POST o LIST
realizadas con objetos
STANDARD_IA

region-Requests-ZIA-Tier1 Recuento Por hora El número de solicitudes


PUT, COPY, POST o
LIST realizadas en objetos
ONEZONE_IA

region-Requests-SIA-Tier2 Recuento Por hora El número de solicitudes


GET y todas las demás
del tipo non-SIA-
Tier1 realizadas con objetos
STANDARD_IA

region-Requests-ZIA-Tier2 Recuento Por hora El número de solicitudes


GET y todas las demás
del tipo non-ZIA-Tier1
realizadas en objetos
ONEZONE_IA

Versión de API 2006-03-01


95
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Tipo de uso Unidades Grado de Descripción


detalle

region-Requests-Tier1 Recuento Por hora El número de solicitudes


PUT, COPY, POST
o LIST realizadas en
el almacenamiento
STANDARD, RRS y en las
etiquetas

region-Requests-Tier2 Recuento Por hora El número de solicitudes


GET y todas las demás del
tipo non-Tier1

region-Requests-Tier3 Recuento Por hora El número de solicitudes del


ciclo de vida a GLACIER
o DEEP_ARCHIVE y
solicitudes de restauración
estándar de GLACIER

region-Requests-Tier4 Recuento Por hora El número de transiciones


durante el ciclo de vida
al almacenamiento
INTELLIGENT_TIERING,
STANDARD_IA u
ONEZONE_IA

region-Requests-Tier5 Recuento Por hora El número de solicitudes de


restauración GLACIER en
bloque

region-Requests-GDA-Tier1 Recuento Por hora El número de solicitudes


PUT, COPY, POST,
InitiateMultipartUpload,
UploadPart o
CompleteMultipartUpload
realizadas en objetos de
DEEP Archive

region-Requests-GDA-Tier2 Recuento Por hora El número de solicitudes


GET, HEAD y LIST

region-Requests-GDA-Tier3 Recuento Por hora El número de solicitudes de


restauración estándar de
DEEP_ARCHIVE

region-Requests-GDA-Tier5 Recuento Por hora El número de solicitudes


de restauración de
DEEP_ARCHIVE en bloque

region-Requests-Tier6 Recuento Por hora El número de solicitudes


de restauración GLACIER
rápidas

region-Bulk-Retrieval-Bytes Bytes Por hora El número de bytes de


datos recuperados mediante
solicitudes GLACIER o
DEEP_ARCHIVE en bloque

Versión de API 2006-03-01


96
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Tipo de uso Unidades Grado de Descripción


detalle

region-Requests-INT-Tier1 Recuento Por hora El número de solicitudes


PUT, COPY, POST o LIST
realizadas con objetos
INTELLIGENT_TIERING

region-Requests-INT-Tier2 Recuento Por hora El número de solicitudes


GET y todas las demás del
tipo non-Tier1 realizadas
para objetos
INTELLIGENT_TIERING

región-Select-Returned-INT-Bytes Bytes Por hora El número de bytes


de datos devueltos
mediante solicitudes
Select del almacenamiento
INTELLIGENT_TIERING

región-Select-Scanned-INT-Bytes Bytes Por hora El número de bytes


de datos escaneados
mediante solicitudes
Select del almacenamiento
INTELLIGENT_TIERING

region-EarlyDelete-INT Bytes-Horas Por hora Uso de almacenamiento


prorrateado para los
objetos eliminados de
INTELLIGENT_TIERING
antes de que finalice el
compromiso mínimo de
30 días

region-Monitoring-Automation-INT Objetos Por hora El número de objetos únicos


monitorizados y designados
automáticamente por
capas en la clase
de almacenamiento
INTELLIGENT_TIERING

region-Expedited-Retrieval-Bytes Bytes Por hora El número de bytes de


datos recuperados mediante
solicitudes GLACIER
rápidas

region-Standard-Retrieval-Bytes Bytes Por hora El número de bytes


de datos recuperados
mediante solicitudes
estándar GLACIER o
DEEP_ARCHIVE

region-Retrieval-SIA Bytes Por hora El número de bytes


de datos recuperados
desde el almacenamiento
STANDARD_IA

Versión de API 2006-03-01


97
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Tipo de uso Unidades Grado de Descripción


detalle

region-Retrieval-ZIA Bytes Por hora El número de bytes


de datos recuperados
desde el almacenamiento
ONEZONE_IA

region-StorageAnalytics-ObjCount Objetos Por hora El número de objetos únicos


de cada grupo de objetos
(donde los objetos están
agrupados por bucket o por
prefijo) rastreados por el
análisis de almacenamiento

region-Select-Scanned-Bytes Bytes Por hora El número de bytes


de datos analizados
mediante solicitudes
Select del almacenamiento
STANDARD

region-Select-Scanned-SIA-Bytes Bytes Por hora El número de bytes


de datos analizados
mediante solicitudes
Select del almacenamiento
STANDARD_IA

región-Select-Scanned-ZIA-Bytes Bytes Por hora El número de bytes


de datos analizados
mediante solicitudes
Select del almacenamiento
ONEZONE_IA

region-Select-Returned-Bytes Bytes Por hora El número de bytes


de datos devueltos
mediante solicitudes
Select del almacenamiento
STANDARD

región-Select-Returned-SIA-Bytes Bytes Por hora El número de bytes


de datos devueltos
mediante solicitudes
Select del almacenamiento
STANDARD_IA

región-Select-Returned-ZIA-Bytes Bytes Por hora El número de bytes


de datos devueltos
mediante solicitudes
Select del almacenamiento
ONEZONE_IA

region-TagStorage-TagHrs Etiquetas- Por día El total de etiquetas de


Horas todos los objetos del bucket
por hora

Versión de API 2006-03-01


98
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Tipo de uso Unidades Grado de Descripción


detalle

region-TimedStorage-ByteHrs Bytes-Horas Por día El número de bytes-


horas que los datos
estuvieron almacenados
en el almacenamiento
STANDARD

region-TimedStorage-GLACIERByteHrs Bytes-Horas Por día El número de bytes-horas


que los datos estuvieron
almacenados en el
almacenamiento GLACIER

region-TimedStorage-GlacierStaging Bytes-Horas Por día El número de bytes-horas


que los datos estuvieron
almacenados en el
almacenamiento provisional
GLACIER

region-TimedStorage-GDA-ByteHrs Bytes-Horas Por día El número de bytes-


horas que los datos
estuvieron almacenados
en el almacenamiento
DEEP_ARCHIVE

region-TimedStorage-GDA-Staging Bytes-Horas Por día El número de bytes-horas


que los datos estuvieron
almacenados en el
almacenamiento provisional
DEEP_ARCHIVE

región-TimedStorage-INT-FA-ByteHrs Bytes-Horas Por día El número de bytes-horas


que los datos estuvieron
almacenados en el nivel
de acceso frecuente
del almacenamiento
INTELLIGENT_TIERING

región-TimedStorage-INT-IA-ByteHrs Bytes-Horas Por día El número de bytes-horas


que los datos estuvieron
almacenados en el nivel
de acceso infrecuente
del almacenamiento
INTELLIGENT_TIERING

region-TimedStorage-RRS-ByteHrsb Bytes-Horas Por día El número de bytes-


horas que los datos
estuvieron almacenados
en el Almacenamiento de
redundancia reducida (RRS)

region-TimedStorage-SIA-ByteHrs Bytes-Horas Por día El número de bytes-


horas que los datos
estuvieron almacenados
en el almacenamiento
STANDARD_IA

Versión de API 2006-03-01


99
Amazon Simple Storage Service Guía del desarrollador
Cómo interpretar los informes de facturación y de uso

Tipo de uso Unidades Grado de Descripción


detalle

region-TimedStorage-ZIA-ByteHrs Bytes-Horas Por día El número de bytes-


horas que los datos
estuvieron almacenados
en el almacenamiento
ONEZONE_IA

region-TimedStorage-SIA-SmObjects Bytes-Horas Por día El número de bytes-horas


que los objetos pequeños
(de menos de 128KB)
estuvieron almacenados
en el almacenamiento
STANDARD_IA

region-TimedStorage-ZIA-SmObjects Bytes-Horas Por día El número de bytes-horas


que los objetos pequeños
(de menos de 128 KB)
estuvieron almacenados
en el almacenamiento
ONEZONE_IA

Notas:

1. Si termina una transferencia antes de su finalización, la cantidad de datos que se transfieren podrían
superar la cada de datos que recibe la aplicación. Esta discrepancia podría producirse porque no es
posible ejecutar instantáneamente una solicitud de terminación de transferencia y cierta cantidad de
datos podría estar en tránsito pendiente de ejecución de la solicitud de terminación. Estos datos en
transito se facturan como datos transferidos "fuera".
2. Para obtener más información acerca de la unidad bytes-horas, consulte Conversión de los bytes-horas
de uso en los GB-meses que se facturan (p. 101).
3. Cuando los objetos que se archivan en la clase de almacenamiento GLACIER o DEEP_ARCHIVE se
eliminan, se sobrescriben o se mueven a otra clase de almacenamiento antes de que se haya cumplido
el compromiso de almacenamiento mínimo, que es de 90 días en el caso de GLACIER o de 180 días en
DEEP_ARCHIVE, hay un cargo prorrateado por gigabyte para los días restantes.
4. Para los objetos que se guardan en el almacenamiento INTELLIGENT_TIERING, STANDARD_IA o
ONEZONE_IA, cuando se eliminan, sobrescriben o pasan a otra clase de almacenamiento antes de
30 días, hay un cargo prorrateado por gigabyte para los días restantes.
5. Para los objetos más pequeños (de menos de 128 KB) que se guardan en el almacenamiento
STANDARD_IA o ONEZONE_IA, cuando se eliminan, sobrescriben o pasan a otra clase de
almacenamiento antes de 30 días, hay un cargo prorrateado por gigabyte para los días restantes.
6. No hay un tamaño de objeto mínimo facturable para objetos en la clase de almacenamiento
INTELLIGENT_TIERING, pero los objetos inferiores a 128 KB no son aptos para la designación
automática de capas y siempre se cobrarán conforme al nivel de capa de acceso frecuente
INTELLIGENT_TIERING.

Seguimiento de las operaciones en los informes de uso


Las operaciones describen la acción realizada con un objeto o un bucket de AWS por el tipo de uso
especificado. Las operaciones se indican mediante códigos que expresan claramente su significado, como
PutObject o ListBucket. Para ver qué acciones realizadas en el bucket generaron un tipo de uso
específico, utilice estos códigos. Cuando cree un informe de uso, puede seleccionar All Operations (Todas

Versión de API 2006-03-01


100
Amazon Simple Storage Service Guía del desarrollador
Uso de etiquetas de asignación de costos

las operaciones) para que incluya todas las operaciones, o una operación específica, como por ejemplo,
GetObject.

Conversión de los bytes-horas de uso en los GB-meses que se


facturan
El volumen de almacenamiento que le facturamos cada mes se basa en el promedio de almacenamiento
que ha utilizado a lo largo del mes. Se le factura por todos los datos y metadatos de objetos almacenados
en los buckets que ha creado en su cuenta de AWS. Para obtener más información acerca de los
metadatos, consulte Clave y metadatos de objetos (p. 105).

Medimos su uso del almacenamiento en TimedStorage-ByteHrs, cuyo total se calcula a final de mes para
generar sus cargos mensuales. El informe de uso expresa el uso de almacenamiento en bytes-horas y los
informes de facturación expresan el uso de almacenamiento en GB-meses. Para correlacionar el informe
de uso con los informes de facturación, debe convertir los bytes-horas en GB-meses.

Por ejemplo, si almacena 100 GB (107 374 182 400 bytes) de datos de almacenamiento ESTÁNDAR de


Amazon S3 en un bucket durante los primeros 15 días de marzo y 100 TB (109 951 162 777 600 bytes)
de datos de almacenamiento ESTÁNDAR de Amazon S3 durante los últimos 16 días de marzo, habrá
utilizado 42 259 901 212 262 400 bytes-horas.

En primer lugar, calcule el uso total en bytes-horas:

[107,374,182,400 bytes x 15 days x (24 hours/day)]


+ [109,951,162,777,600 bytes x 16 days x (24 hours/day)]
= 42,259,901,212,262,400 byte-hours

A continuación, convierta los bytes-horas en GB-meses:

42,259,901,212,262,400 byte-hours/1,073,741,824 bytes per GB/24 hours per day


/31 days in March
=52,900 GB-Months

Más información
• Informe de uso de AWS para Amazon S3 (p. 90)
• Informes de facturación de AWS para Amazon S3 (p. 88)
• Precios de Amazon S3
• Preguntas frecuentes sobre Amazon S3
• Precios de Glacier
• Preguntas frecuentes sobre Glacier

Uso de etiquetas de buckets de S3 de asignación de


costos
Para realizar un seguimiento del costo de almacenamiento u otros criterios para proyectos individuales
o grupos de proyectos, etiquete los buckets de Amazon S3 con etiquetas de asignación de costos. Una
etiqueta de asignación de costos es un par clave-valor que se asocia a un bucket de S3. Después de
activar las etiquetas de asignación de costos, AWS las utiliza para organizar los costos de los recursos
en el informe de asignación de costos. Las etiquetas de asignación de costos solo se pueden utilizar para
etiquetar buckets. Para obtener información sobre las etiquetas utilizadas para etiquetación de objetos,
consulte Etiquetado de objetos (p. 118).

Versión de API 2006-03-01


101
Amazon Simple Storage Service Guía del desarrollador
Uso de etiquetas de asignación de costos

El informe mensual de asignación de costos muestra el uso de AWS para su cuenta por categoría de
producto y usuario del AWS Identity and Access Management (IAM). El informe contiene las mismas
partidas que el informe detallado de facturación (consulte Cómo interpretar los informes de facturación y de
uso de AWS para Amazon S3 (p. 92)) y columnas adicionales para las claves de etiquetas.

AWS proporciona dos tipos de etiquetas de asignación de costos, una generada por AWS y las etiquetas
definidas por el usuario. AWS define, crea y aplica automáticamente la etiqueta createdBy generada
por AWS después de un evento CreateBucket de Amazon S3. Las etiquetas definidas por el usuario son
etiquetas que usted define, crea y aplica al bucket de S3.

Debe activar ambos tipos de etiquetas por separado en la consola Gestión de facturación y costos para
que puedan aparecer en los informes de facturación. Para obtener más información acerca de las etiquetas
generadas por AWS, consulte Etiquetas de asignación de costos generadas por AWS. Para obtener más
información acerca de la activación de etiquetas, consulte Uso de etiquetas de asignación de costos en la
Guía del usuario de AWS Billing and Cost Management.

Una etiqueta de asignación de costos definida por el usuario tiene los siguientes componentes:

• La clave de la etiqueta. La clave de la etiqueta es el nombre de la etiqueta. Por ejemplo, en la etiqueta


proyecto/Trinity, proyecto es la clave. La clave de la etiqueta es una cadena que distingue entre
mayúsculas y minúsculas y que puede contener de 1 a 128 caracteres Unicode.

• El valor de la etiqueta. El valor de la etiqueta es una cadena obligatoria. Por ejemplo, en la etiqueta
proyecto/Trinity, Trinity es el valor. El valor de la etiqueta es una cadena que distingue entre mayúsculas
y minúsculas y que puede contener de 0 a 256 caracteres Unicode.

Para obtener información detallada sobre los caracteres permitidos para las etiquetas definidas por el
usuario y otras restricciones, consulte Restricciones de las etiquetas definidas por el usuario en la Guía del
usuario de AWS Billing and Cost Management.

Cada bucket de S3 tiene un conjunto de etiquetas. Un conjunto de etiquetas contiene todas las etiquetas
que están asignadas a ese bucket. Un conjunto de etiquetas puede contener hasta 50 etiquetas, y también
puede estar vacío. Las claves deben ser únicas dentro de un conjunto de etiquetas, pero los valores de un
conjunto de etiquetas no tienen que ser únicos. Por ejemplo, puede tener el mismo valor en los conjuntos
de etiquetas denominados proyecto/Trinity and centro-de-costos/Trinity.

En un bucket, si añade una etiqueta con la misma clave que una etiqueta existente, el valor nuevo
sobrescribe el anterior.

AWS no aplica ningún significado semántico a las etiquetas. Las etiquetas se interpretan estrictamente
como cadenas de caracteres.

Para añadir, enumerar, editar o eliminar etiquetas, puede usar la consola de Amazon S3, la AWS
Command Line Interface (AWS CLI) o la API de Amazon S3.

Para obtener más información acerca de la creación de etiquetas, consulte el tema correspondiente:

• Para crear etiquetas en la consola, consulte ¿Cómo puedo ver las propiedades de un bucket de S3? en
la Guía del usuario de la consola de Amazon Simple Storage Service.
• Para crear etiquetas con la API de Amazon S3, consulte PUT Bucket tagging en la Amazon Simple
Storage Service API Reference.
• Para crear etiquetas con la CLI de AWS, consulte put-bucket-tagging en la AWS CLI Command
Reference.

Para obtener más información acerca de las etiquetas definidas por el usuario, consulte Etiquetas de
asignación de costos definidas por el usuario en la Guía del usuario de AWS Billing and Cost Management.

Versión de API 2006-03-01


102
Amazon Simple Storage Service Guía del desarrollador
Uso de etiquetas de asignación de costos

Más información
• Uso de etiquetas de asignación de costos en la Guía del usuario de AWS Billing and Cost Management.
• Cómo interpretar los informes de facturación y de uso de AWS para Amazon S3 (p. 92)
• Informes de facturación de AWS para Amazon S3 (p. 88)

Versión de API 2006-03-01


103
Amazon Simple Storage Service Guía del desarrollador

Trabajo con objetos de Amazon S3


Amazon S3 es un almacén sencillo de valores claves diseñado para almacenar tantos objetos como
quiera. Puede almacenar estos objetos en uno o varios buckets. Un objeto consiste en lo siguiente:

• Clave: nombre que se le asigna a un objeto. La clave de objeto se usa para recuperar el objeto.

Para obtener más información, consulte Clave y metadatos de objetos (p. 105).
• ID de versión: en un bucket, una clave y un ID de versión identifican exclusivamente un objeto.

El ID de versión es una cadena que genera Amazon S3 cuando se agrega un objeto a un bucket. Para
obtener más información, consulte Control de versiones de objetos (p. 115).
• Valor: contenido que se está almacenando.

El valor de un objeto puede ser cualquier secuencia de bytes. El tamaño de los objetos puede variar
desde cero hasta 5 TB. Para obtener más información, consulte Carga de objetos (p. 181).
• Metadatos: conjunto de pares nombre-valor con el que puede almacenar información relativa al objeto.

Puede asignar metadatos, que se denominan metadatos definidos por el usuario, a sus objetos en
Amazon S3. Amazon S3 asigna también metadatos de sistema a estos objetos, que se usan para
administrar objetos. Para obtener más información, consulte Clave y metadatos de objetos (p. 105).
• Subrecursos: Amazon S3 usa el mecanismo de subrecursos para almacenar la información adicional
específica al objeto.

Dado que los subrecursos están subordinados a los objetos, siempre están asociados con otras
entidades, como objetos o buckets. Para obtener más información, consulte Subrecursos de
objeto (p. 115).
• Información de control de acceso: puede controlar el acceso a los objetos que almacena en Amazon S3.

Amazon S3 admite tanto el control de acceso basado en recursos, como con una lista de control de
acceso (ACL) o políticas de bucket, como el control de acceso basado en usuarios. Para obtener más
información, consulte Administración de identidad y acceso en Amazon S3 (p. 312).

Para obtener más información acerca del trabajo con objetos, consulte las siguientes secciones. Los
recursos de Amazon S3 (por ejemplo, buckets y objetos) son privados de manera predeterminada. Se
deben conceder permisos explícitos para que otras personas puedan obtener acceso a estos recursos. Por
ejemplo, puede que quiera compartir un vídeo o una fotografía almacenada en el bucket de Amazon S3
en su sitio web. Eso solo funciona si se hace que el objeto sea público o si se usa una URL prefirmada en
el sitio web. Para obtener más información acerca de compartir objetos, consulte Compartir un objeto con
otros (p. 179).

Temas
• Clave y metadatos de objetos (p. 105)
• Clases de almacenamiento de Amazon S3 (p. 110)
• Subrecursos de objeto (p. 115)
• Control de versiones de objetos (p. 115)
• Etiquetado de objetos (p. 118)
• Administración del ciclo de vida de los objetos (p. 127)
• Cross-Origin Resource Sharing (CORS, Uso compartido de recursos entre orígenes) (p. 163)

Versión de API 2006-03-01


104
Amazon Simple Storage Service Guía del desarrollador
Clave y metadatos de objetos

• Operaciones en objetos (p. 172)

Clave y metadatos de objetos


Cada objeto de Amazon S3 tiene datos, una clave y metadatos. La clave de objeto (o el nombre de clave)
identifica exclusivamente al objeto en un bucket. Los metadatos de objetos son un conjunto de pares
nombre-valor. Puede establecer los metadatos de un objeto en el momento en el que lo sube. Tras cargar
el objeto, no puede modificar sus metadatos. La única manera de modificar los metadatos de un objeto es
realizar una copia del mismo y configurar sus metadatos.

Temas
• Claves de objeto (p. 105)
• Metadatos de objetos (p. 108)

Claves de objeto
Al crear un objeto, especifica su nombre de clave, que identifica exclusivamente el objeto en el bucket. Por
ejemplo, en la consola de Amazon S3 (consulte Consola de administración de AWS), cuando destaca un
bucket, aparece una lista de los objetos en el bucket. Esos nombres son las claves de objeto. El nombre de
una clave es una secuencia de caracteres Unicode cuya codificación UTF-8 tiene una longitud máxima de
1024 bytes.

El modelo de datos de Amazon S3 es una estructura plana: usted crea un bucket y el bucket almacena
objetos. No existe una jerarquía entre los subbuckets o las subcarpetas. Sin embargo, puede inferir una
jerarquía lógica con prefijos de nombres de clave y delimitadores del mismo modo que lo hace la consola
de Amazon S3. La consola de Amazon S3 admite el concepto de carpetas. Supongamos que el bucket
(admin-created) tiene cuatro objetos con las siguientes claves de objeto:

Development/Projects.xls

Finance/statement1.pdf

Private/taxdocument.pdf

s3-dg.pdf

La consola usa los prefijos de nombres de clave (Development/, Finance/ y Private/) y el


delimitador ("/") para presentar una estructura de carpetas como se muestra:

Versión de API 2006-03-01


105
Amazon Simple Storage Service Guía del desarrollador
Claves de objeto

La clave s3-dg.pdf no tiene prefijo, por lo que su objeto aparece directamente en el nivel raíz del bucket.
Si abre la carpeta Development/, ve el objeto Projects.xlsx dentro.

Note

Amazon S3 admite buckets y objetos y no hay jerarquía en Amazon S3. Sin embargo, los prefijos
y delimitadores en un nombre de clave de objeto permiten que la consola de Amazon S3 y los
SDK de AWS infieran la jerarquía e introduzcan el concepto de carpetas.

Directrices de nomenclatura de claves de objeto


Puede usar cualquier carácter UTF-8 en un nombre de clave de objeto. Sin embargo, el uso de ciertos
caracteres en los nombres de las claves puede provocar problemas con algunas aplicaciones y protocolos.
Las siguientes directrices le ayudan a aumentar al máximo el cumplimiento con DNS, caracteres seguros
para la web, analizadores XML y otras API.

Caracteres seguros
Los siguientes conjuntos de caracteres son habitualmente seguros para su uso en nombres de claves:

Caracteres alfanuméricos • 0-9


• a-z
• A-Z

Caracteres especiales • !
• -
• _
• .
• *
• '
• (
• )

A continuación se proporcionan ejemplos de nombres de claves de objeto válidos:

• 4my-organization

Versión de API 2006-03-01


106
Amazon Simple Storage Service Guía del desarrollador
Claves de objeto

• my.great_photos-2014/jan/myvacation.jpg
• videos/2014/birthday/video1.wmv

Important

Si el nombre de la clave de un objeto consta de un solo punto (.) o de dos puntos (..), no puede
descargar el objeto desde la consola de Amazon S3. Para descargar un objeto con un nombre de
clave de “.” o “..”, debe utilizar la AWS CLI, los SDK de AWS o la API de REST.

Caracteres que podrían requerir un trato especial


Los siguientes caracteres de un nombre de clave podrían requerir un trato adicional en cuando a
codificación, y probablemente tengan que codificarse en la URL o haya que referirse a ellos en HEX.
Algunos de ellos son caracteres no imprimibles y es posible que su navegador no los admita, por lo que
también requieren un trato especial:

• Ampersand ("&")
• Dólar ("$")
• Rangos de caracteres ASCII 00–1F hex (0–31 decimal) y 7F (127 decimal)
• Arroba ("@")
• Igual ("=")
• Punto y coma (";")
• Dos puntos (":")
• Más ("+")
• Espacio: puede que se pierdan secuencias significativas de espacios en algunos usos (especialmente
espacios múltiples).
• Coma (",")
• Signo de cierre de interrogación ("?")

Caracteres que evitar


Evite los siguientes caracteres en un nombre de clave debido a un trato significativamente especial para
que sean coherentes en todas las aplicaciones.

• Barra diagonal invertida ("\")


• Llave de apertura ("{")
• Caracteres ASCII no imprimibles (caracteres decimales 128–255)
• Acento circunflejo ("^")
• Llave de cierre ("}")
• Carácter de porcentaje ("%")
• Acento grave ("`")
• Corchete de cierre ("]")
• Comillas
• Símbolo mayor que (">")
• Corchete de apertura ("[")
• Tilde ("~")
• Símbolo menor que ("<")
• Almohadilla ("#")

Versión de API 2006-03-01


107
Amazon Simple Storage Service Guía del desarrollador
Metadatos de objetos

• Barra vertical ("|")

Metadatos de objetos
Hay dos clases de tipos de metadatos: metadatos del sistema y metadatos definidos por el usuario.

Metadatos de objetos definidos por el sistema


Para cada objeto almacenado en un bucket, Amazon S3 mantiene un conjunto de metadatos del sistema.
Amazon S3 procesa estos metadatos del sistema según sea necesario. Por ejemplo, Amazon S3 mantiene
la fecha de creación del objeto y los metadatos de tamaño y usan esta información como parte de la
administración del objeto.

Existen dos categorías de metadatos del sistema:

1. Los metadatos como la fecha de creación del objeto están controlados por el sistema, y solo Amazon S3
puede modificar el valor.
2. Otros metadatos de sistema, como la clase de almacenamiento configurada para el objeto o si el objeto
tiene habilitado el cifrado en el servidor, son ejemplos de metadatos del sistema cuyos valores controla.
Si el bucket está configurado como sitio web, a veces puede que quiera redirigir una solicitud de página
a otra página o URL externa. En este caso, una página web será un objeto en su bucket. Amazon S3
almacena el valor de redirección de la página como metadatos del sistema cuyo valor controla usted.

Al crear objetos, puede configurar valores de estos elementos de metadatos del sistema o actualizar
los valores cuando lo necesite. Para obtener más información acerca de las clases de almacenamiento,
consulte Clases de almacenamiento de Amazon S3 (p. 110). Para obtener más información acerca del
cifrado del lado del servidor, consulte Protección de datos mediante cifrado (p. 274).

En la siguiente tabla se facilita una lista de metadatos definidos por el sistema y si puede actualizarlos.

Nombre Descripción ¿El usuario


puede
modificar el
valor?

Fecha Fecha y hora actuales. No

Longitud del contenido Tamaño de objeto en bytes. No

Last-Modified Fecha de creación del objeto o última fecha de modificación, No


la que sea posterior.

Content-MD5 Resumen MD5 de 128 bits del objeto cifrado en base64. No

x-amz-server-side- Indica si se ha habilitado el cifrado en el servidor para Sí


encryption el objeto, y si dicho cifrado se realiza desde el AWS
Key Management Service (SSE-KMS) o con un cifrado
administrado por AWS (SSE-S3). Para obtener más
información, consulte Protección de datos con el cifrado del
lado del servidor (p. 275).

x-amz-version-id Versión del objeto. Si activa el control de versiones en No


un bucket, Amazon S3 asigna un número de versión a
los objetos que añada a dicho bucket. Para obtener más
información, consulte Uso del control de versiones (p. 449).

Versión de API 2006-03-01


108
Amazon Simple Storage Service Guía del desarrollador
Metadatos de objetos

Nombre Descripción ¿El usuario


puede
modificar el
valor?

x-amz-delete-marker En un bucket con control de versiones habilitado, este No


marcador booleano indica si el objeto es un marcador de
eliminación.

x-amz-storage-class Clase de almacenamiento utilizado para almacenar el Sí


objeto. Para obtener más información, consulte Clases de
almacenamiento de Amazon S3 (p. 110).

x-amz-website-redirect- Redirige las solicitudes para el objeto asociado a otro Sí


location objeto en el mismo bucket o una URL externa. Para obtener
más información, consulte (Opcional) Configuración del
redireccionamiento de páginas web (p. 531).

x-amz-server-side- Si existe x-amz-server-side-encryption y tiene el valor Sí


encryption-aws-kms- aws:kms, indica el ID de la clave de cifrado maestra de AWS
key-id Key Management Service (AWS KMS) usada para el objeto.

x-amz-server-side- Indica si se ha habilitado el cifrado en el servidor con claves Sí


encryption-customer- de cifrado proporcionadas por el cliente (SSE-C). Para
algorithm obtener más información, consulte Protección de los datos
con el cifrado del lado del servidor con claves de cifrado
proporcionadas por el cliente (SSE-C) (p. 290).

Metadatos de objetos definidos por el usuario


Al cargar un objeto, también puede asignar metadatos al objeto. Esta información opcional se facilita como
par nombre-valor (clave-valor) al enviar una solicitud PUT o POST para crear el objeto. Cuando carga
objetos con la API REST, los nombres opcionales de metadatos definidos por el usuario deben comenzar
por "x-amz-meta-" para distinguirlos de otros encabezados HTTP. Al recuperar el objeto con la API REST,
se devuelve este prefijo. Cuando carga objetos con la API SOAP, no es necesario el prefijo. Al recuperar el
objeto con la API SOAP, el prefijo se elimina, independientemente de qué API se haya usado para cargar
el objeto.
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Cuando se recuperan metadatos con la API REST, Amazon S3 combina encabezados que tengan el
mismo nombre (sin tener en cuenta mayúsculas y minúsculas) en una lista delimitada por comas. Si
algunos metadatos contienen caracteres no imprimibles, no se devuelven. En su lugar, se devuelve el
encabezado x-amz-missing-meta con el número de entradas de metadatos no imprimibles como valor.

Los metadatos definidos por el usuario son un conjunto de pares clave-valor. Amazon S3 almacena las
claves de metadatos definidos por el usuario en minúsculas. Cada par clave-valor debe ajustarse a US-
ASCII cuando se usa REST y a UTF-8 cuando se usa SOAP o subidas basadas en el navegador por
POST.
Note

El encabezado de las solicitudes PUT está limitado a un tamaño de 8 KB. En el encabezado de


la solicitud PUT, los metadatos definidos por el usuario están limitados a un tamaño de 2 KB. El

Versión de API 2006-03-01


109
Amazon Simple Storage Service Guía del desarrollador
Clases de almacenamiento

tamaño de los metadatos definidos por el usuario se mide sumando el número de bytes de la
codificación UTF-8 en cada clave y valor.

Para obtener información acerca de agregar metadatos a su objeto después de que se haya cargado,
consulte ¿Cómo puedo añadir metadatos a un objeto de S3? en la Guía del usuario de la consola de
Amazon Simple Storage Service

Clases de almacenamiento de Amazon S3


Cada objeto de Amazon S3 tiene una clase de almacenamiento asociada. Por ejemplo, si enumera los
objetos de un bucket de S3, la consola muestra la clase de almacenamiento de todos los objetos en la
lista.

Amazon S3 ofrece una gama de clases de almacenamiento para los objetos que almacene. Debe
seleccionar una clase de almacenamiento en función de su escenario de caso de uso y sus requisitos de
acceso y rendimiento. Todas estas clases de almacenamiento ofrecen una alta durabilidad.

Temas
• Clases de almacenamiento para objetos a los que se obtiene acceso con frecuencia (p. 110)
• Clase de almacenamiento que optimiza automáticamente los objetos a los que se obtiene acceso
frecuente e infrecuentemente (p. 111)
• Clases de almacenamiento para objetos a los que se obtiene acceso con poca frecuencia (p. 111)
• Clases de almacenamiento para el archivado de objetos (p. 112)
• Comparación de las clases de almacenamiento de Amazon S3 (p. 113)
• Establecimiento de la clase de almacenamiento de un objeto (p. 114)

Clases de almacenamiento para objetos a los que se


obtiene acceso con frecuencia
Para casos de uso sensibles al desempeño (aquellos que necesitan un tiempo de acceso de milisegundos)
y datos a los que se obtiene acceso frecuentemente, Amazon S3 proporciona las siguientes clases de
almacenamiento:

• STANDARD: la clase de almacenamiento predeterminada. Si no se especifica una clase de


almacenamiento al cargar un objeto, Amazon S3 asigna la clase de almacenamiento STANDARD.

 
• REDUCED_REDUNDANCY: la clase de almacenamiento de redundancia reducida (RRS) se ha
diseñado para los datos no críticos y reproducibles que se pueden almacenar con menor redundancia
que la clase de almacenamiento STANDARD.

Versión de API 2006-03-01


110
Amazon Simple Storage Service Guía del desarrollador
Clase de almacenamiento que optimiza
automáticamente los objetos a los que se
obtiene acceso frecuente e infrecuentemente
Important

Recomendamos que no utilice esta clase de almacenamiento. La clase de almacenamiento


STANDARD es más económica.

En cuanto a durabilidad, los objetos RRS tienen una pérdida anual esperada media del 0,01% de los
objetos. Si se pierde un objeto RRS, Amazon S3 devuelve un error 405 cuando se realizan solicitudes de
ese objeto.

Clase de almacenamiento que optimiza


automáticamente los objetos a los que se obtiene
acceso frecuente e infrecuentemente
La clase de almacenamiento INTELLIGENT_TIERING se ha diseñado para optimizar los costos
de almacenamiento mediante el desplazamiento automático de los datos a la capa de acceso de
almacenamiento más rentable, sin que afecte al rendimiento ni se produzca sobrecarga operativa.
NTELLIGENT_TIERING ofrece ahorro de costos automático al mover los datos en un nivel de
objeto detallado entre dos capas de acceso, una capa de acceso frecuente y otra de acceso poco
frecuente de menor costo, cuando cambian los patrones de acceso. La clase de almacenamiento
INTELLIGENT_TIERING es ideal para optimizar automáticamente los costos de almacenamiento para
datos de larga duración cuando los patrones de acceso se desconocen o son impredecibles.

La clase de almacenamiento INTELLIGENT_TIERING almacena objetos en dos capas de acceso: una


capa optimizada para el acceso frecuente y otra capa de bajo costo optimizada para el acceso poco
frecuente. Por un pequeño cargo mensual de monitorización y automatización por objeto, Amazon S3
monitoriza los patrones de acceso de los objetos en la clase de almacenamiento INTELLIGENT_TIERING
y mueve los objetos a los que no se ha accedido durante 30 días consecutivos a la capa de
acceso poco frecuente. No hay tarifa de recuperación cuando se usa la clase de almacenamiento
INTELLIGENT_TIERING. Si se obtiene acceso a un objeto de la capa de acceso poco frecuente,
se desplaza automáticamente a la capa de acceso frecuente. No se aplican tarifas adicionales a
las capas cuando los objetos se mueven entre las capas dentro de la clase de almacenamiento
INTELLIGENT_TIERING.
Note

La clases de almacenamiento INTELLIGENT_TIERING es adecuada para los objetos de más de


128 KB que se desean almacenar durante al menos 30 días. Si el tamaño del objeto es inferior
a 128 KB, no es elegible para las capas automáticas. Los objetos de menor tamaño pueden
almacenarse, pero siempre se cobrarán con las tarifas de capa de acceso frecuente en la clase de
almacenamiento INTELLIGENT_TIERING. Si se elimina un objeto antes de que termine el periodo
mínimo de almacenamiento de 30 días, se cobrará por 30 días. Para obtener información acerca
de los precios, consulte Precios de Amazon S3.

Clases de almacenamiento para objetos a los que se


obtiene acceso con poca frecuencia
Las clases de almacenamiento STANDARD_IA y ONEZONE_IA están diseñadas para datos de larga
duración y de acceso poco frecuente. (IA significa acceso poco frecuente, infrequent access). Los objetos
STANDARD_IA y ONEZONE_IA están disponibles para el acceso en milisegundos (en eso se parecen a la
clase de almacenamiento STANDARD). Amazon S3 cobra una tarifa de recuperación para estos objetos,
por lo que son más adecuados para los datos a los que se obtiene acceso con poca frecuencia. Para
obtener información acerca de los precios, consulte Precios de Amazon S3.

Versión de API 2006-03-01


111
Amazon Simple Storage Service Guía del desarrollador
Clases de almacenamiento para el archivado de objetos

Por ejemplo, puede elegir las clases de almacenamiento STANDARD_IA y ONEZONE_IA:

• Para almacenar copias de seguridad.

 
• Para datos más antiguos a los que se obtiene acceso con poca frecuencia, pero que todavía
necesitan acceso en milisegundos. Por ejemplo, cuando cargue datos, puede elegir la clase de
almacenamiento STANDARD y utilizar la configuración del ciclo de vida para indicar a Amazon S3
que realice la transición de los objetos a la clase STANDARD_IA u ONEZONE_IA. Para obtener más
información sobre la administración del ciclo de vida, consulte Administración del ciclo de vida de los
objetos (p. 127).

Note

Las clases de almacenamiento STANDARD_IA y ONEZONE_IA son adecuados para los objetos
de más de 128 KB que se desean almacenar durante al menos 30 días. Si un objeto tiene menos
de 128 KB, Amazon S3 cobra por 128 KB. Si se elimina un objeto antes de que termine el periodo
mínimo de almacenamiento de 30 días, se cobrará por 30 días. Para obtener información acerca
de los precios, consulte Precios de Amazon S3.

Estas clases de almacenamiento se diferencian en lo siguiente:

• STANDARD_IA: Amazon S3 almacena los datos de los objetos de forma redundante en varias
zonas de disponibilidad separadas geográficamente (de forma similar a la clase de almacenamiento
STANDARD). Los objetos STANDARD_IA resisten a la pérdida de una zona de disponibilidad. Esta
clase de almacenamiento ofrece mayor disponibilidad y resistencia que la clase ONEZONE_IA.

 
• ONEZONE_IA: Amazon S3 almacena los datos de los objetos en una sola zona de disponibilidad, lo
que resulta más económico que la clase STANDARD_IA. Sin embargo, los datos no son resistentes
a la pérdida física de la zona de disponibilidad como consecuencia de desastres, como terremotos
e inundaciones. La clase de almacenamiento ONEZONE_IA es tan duradera como la clase
STANDARD_IA, pero tiene menor disponibilidad y resistencia. Para ver una comparación de durabilidad
y disponibilidad entre las distintas clases de almacenamiento, consulte la tabla de durabilidad y
disponibilidad situada al final de esta sección. Para obtener información acerca de los precios, consulte
Precios de Amazon S3.

Le recomendamos lo siguiente:

• STANDARD_IA: utilice esta clase para su copia principal o única de los datos que no se puedan volver a
crear.
• ONEZONE_IA: utilice esta clase si puede volver a crear los datos si se produce un error en la zona de
disponibilidad, y para las réplicas de objetos al configurar la replicación entre regiones (CRR).

Clases de almacenamiento para el archivado de


objetos
Las clases de almacenamiento GLACIER y DEEP_ARCHIVE están diseñadas para archivar datos de
forma económica. Estas clases de almacenamiento ofrecen la misma durabilidad y resistencia que la
clase de almacenamiento STANDARD. Para ver una comparación de durabilidad y disponibilidad entre las
distintas clases de almacenamiento, consulte la tabla de durabilidad y disponibilidad situada al final de esta
sección.

Estas clases de almacenamiento se diferencian en lo siguiente:

Versión de API 2006-03-01


112
Amazon Simple Storage Service Guía del desarrollador
Comparación de las clases de
almacenamiento de Amazon S3

• GLACIER: se utiliza para archivos en los que puede ser necesario recuperar partes de los datos en
cuestión de minutos. Los datos almacenados en la clase GLACIER tienen un periodo mínimo de
almacenamiento de 90 días y se puede obtener acceso a ellos en un plazo comprendido entre 1 y
5 minutos mediante la recuperación rápida. Si ha eliminado, sobrescrito o movido a una clase de
almacenamiento diferente un objeto antes del periodo mínimo de 90 días, se le cobrarán los 90 días.
Para obtener información acerca de los precios, consulte Precios de Amazon S3.

 
• DEEP_ARCHIVE: se usa para archivar datos a los que en contadas ocasiones se necesita obtener
acceso. Los datos almacenados en la clase DEEP_ARCHIVE tienen un periodo mínimo de
almacenamiento de 180 días y un tiempo predeterminado de recuperación de 12 horas. Si ha eliminado,
sobrescrito o movido a una clase de almacenamiento diferente un objeto antes del periodo mínimo de
180 días, se le cobrarán los 180 días. Para obtener información acerca de los precios, consulte Precios
de Amazon S3.

DEEP_ARCHIVE es la opción de almacenamiento más económica de AWS. Los costos de


almacenamiento de DEEP_ARCHIVE son menores que los de la clase de almacenamiento GLACIER.
Se pueden reducir los costos de recuperación de DEEP_ARCHIVE si se utiliza la recuperación en
bloque, que devuelve los datos en menos de 48 horas.

Recuperación de objetos archivados


Puede establecer la clase de almacenamiento de un objeto en GLACIER o DEEP_ARCHIVE del mismo
modo que lo hace para otras clases de almacenamiento como se describe en la sección Establecimiento
de la clase de almacenamiento de un objeto (p. 114). Sin embargo, Los objetos archivados en GLACIER
y DEEP_ARCHIVE no están disponibles para su acceso en tiempo real. Para poder obtener acceso a
los objetos de GLACIER y DEEP_ARCHIVE primero debe restaurarlos (los objetos STANDARD, RRS,
STANDARD_IA, ONEZONE_IA e INTELLIGENT_TIERING están disponibles para obtener acceso a ellos
en cualquier momento). Para obtener más información acerca de la recuperación de objetos archivados,
consulte Restaurar objetos archivados (p. 258).
Important

Si elige la clase de almacenamiento GLACIER o DEEP_ARCHIVE, sus objetos permanecen en


Amazon S3. No puede obtener acceso a ellos directamente mediante el servicio Amazon S3
Glacier.

Para obtener más información acerca del servicio Amazon S3 Glacier, consulte la Guía para
desarrolladores de Amazon S3 Glacier.

Comparación de las clases de almacenamiento de


Amazon S3
En la tabla siguiente se comparan las clases de almacenamiento.

Versión de API 2006-03-01


113
Amazon Simple Storage Service Guía del desarrollador
Establecimiento de la clase de almacenamiento de un objeto

Todas las clases de almacenamiento, excepto ONEZONE_IA, están diseñadas para resistir
simultáneamente a la pérdida total de datos en una sola zona de disponibilidad y a una pérdida parcial en
otra zona de disponibilidad.

Además de los requisitos de desempeño del escenario de su aplicación, debe tener en cuenta el precio.
Para obtener información sobre el precio de las clases de almacenamiento, consulte Precios de Amazon
S3.

Establecimiento de la clase de almacenamiento de un


objeto
Las API de Amazon S3 permiten configurar (o actualizar) de la clase de almacenamiento de los objetos, tal
como se indica a continuación:

• Al crear un objeto, puede especificar su clase de almacenamiento. Por ejemplo, al crear objetos
utilizando las API PUT Object, POST Object e Initiate Multipart Upload, se debe añadir el encabezado de
solicitud x-amz-storage-class para especificar una clase de almacenamiento. Si no se añade este
encabezado, Amazon S3 utiliza STANDARD, la clase de almacenamiento predeterminada.

 
• También puede cambiar la clase de almacenamiento de un objeto que ya está almacenado en Amazon
S3 a cualquier otra clase de almacenamiento haciendo una copia del objeto mediante la API PUT Object
- Copy. Sin embargo, no puede usar PUT Object - Copy para copiar objetos que están almacenados en
las clases GLACIER o DEEP_ARCHIVE.

Debe copiar el objeto en el mismo bucket utilizando el mismo nombre de clave y especificando
encabezados de solicitud como se indica a continuación:
• Establezca el encabezado x-amz-metadata-directive en COPY.
• Establezca x-amz-storage-class en la clase de almacenamiento que desea utilizar.

En un bucket con control de versiones habilitado, no se puede modificar la clase de almacenamiento de


una versión específica de un objeto. Al copiarlo, Amazon S3 le da un nuevo ID de versión.

 
• Puede indicar a Amazon S3 que modifique la clase de almacenamiento de los objetos añadiendo una
configuración del ciclo de vida a un bucket. Para obtener más información, consulte Administración del
ciclo de vida de los objetos (p. 127).

Versión de API 2006-03-01


114
Amazon Simple Storage Service Guía del desarrollador
Subrecursos

• Cuando establezca una configuración de replicación, puede especificar la clase de almacenamiento


de los objetos replicados como cualquier otra clase de almacenamiento. Sin embargo, no puede
replicar objetos que están almacenados en las clases GLACIER o DEEP_ARCHIVE. Para obtener más
información, consulte Información general de la configuración de replicación (p. 579).

Para crear y actualizar clases de almacenamiento de objetos, puede utilizar la consola de Amazon S3, los
SDK de AWS o la AWS Command Line Interface (AWS CLI). Cada uno de estos métodos utiliza las API de
Amazon S3 para enviar solicitudes a Amazon S3.

Subrecursos de objeto
Amazon S3 define un conjunto de subrecursos asociados con buckets y objetos. Los subrecursos están
subordinados a objetos, es decir, los subrecursos no existen por sí mismos, siempre están asociados con
otras entidades, como objetos o buckets.

En la siguiente tabla se describen los subrecursos asociados objetos de Amazon S3.

Subrecurso Descripción

acl Contiene una lista de concesiones en la que se identifican los beneficiarios y los permisos
concedidos. Al crear un objeto, la acl identifica al propietario del objeto que tiene control
total sobre el mismo. Puede recuperar la ACL de un objeto o sustituirla por una lista
actualizada de concesiones. Cualquier actualización en una ACL exige que sustituya la
ACL existente. Para obtener más información acerca de las ACL, consulte Administración
de acceso con ACL (p. 418).

torrent Amazon S3 admite el protocolo BitTorrent. Amazon S3 usa el subrecurso< torrent para
devolver el archivo torrent asociado con el objeto específico. Para recuperar un archivo
torrent, especifique el subrecurso torrent en su solicitud GET. Amazon S3 crea un
archivo torrent y lo devuelve. Solo puede recuperar el subrecurso torrent, no puede
crear, actualizar ni eliminar el subrecurso torrent. Para obtener más información,
consulte Uso de BitTorrent con Amazon S3 (p. 663).
Note

Amazon S3 no es compatible con el protocolo BitTorrent en las regiones de AWS


en las que se ha lanzado después del 30 de mayo de 2016.

Control de versiones de objetos


Utilice el control de versiones para mantener varias versiones de un objeto en un bucket. Por ejemplo,
podría almacenar my-image.jpg (versión 111111) y my-image.jpg (versión 222222) en un solo bucket.
El control de versiones le protege de las consecuencias de las sobrescrituras y eliminaciones involuntarias.
También puede utilizar el control de versiones para archivar objetos de manera que tenga acceso a las
versiones anteriores.
Note

La API SOAP no admite control de versiones. La compatibilidad con SOAP por HTTP está
obsoleta, pero aún se encuentra disponible con HTTPS. Las características nuevas de Amazon
S3 no son compatibles con SOAP.

Para personalizar su enfoque de retención de datos y controlar los costos de almacenamiento, utilice el
control de versiones de los objetos con la Administración del ciclo de vida de los objetos (p. 127). Para

Versión de API 2006-03-01


115
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

obtener información acerca de cómo crear políticas de ciclo de vida con la Consola de administración de
AWS, consulte ¿Cómo creo una política de ciclo de vida para un bucket de S3? en la Guía del usuario de
la consola de Amazon Simple Storage Service.

Si cuenta con una política de ciclo de vida para la caducidad de un objeto en el bucket sin versiones y
quiere mantener el mismo comportamiento de eliminación cuando habilite el control de versiones, debe
agregar una política de vencimiento no actual. La política de vencimiento no actual administrará las
eliminaciones de las versiones de objetos no actuales en el bucket habilitado para el control de versiones.
(Un bucket con habilitación de versiones mantiene la versión actual y cero o más versiones objeto no
actuales).

Debe habilitar explícitamente el control de versiones en su bucket. El control de versiones está


deshabilitado de forma predeterminada. Independientemente de si ha habilitado el control de versiones,
todos los objetos de su bucket tendrán un ID de versión. Si no ha habilitado el control de versiones,
Amazon S3 configura el valor null para el ID de versión. Si ha habilitado el control de versiones, Amazon
S3 asignará un valor para el ID de versión exclusivo para el objeto. Cuando se habilita el control de
versiones en un bucket, los objetos que ya se encuentran en el bucket no se modifican. Los ID de versión
(null), el contenido y los permisos siguen siendo los mismos.

La habilitación y suspensión del control de versiones se realiza en el nivel del bucket. Al activar el control
de versiones en un bucket, todos los objetos agregados al mismo tendrán un ID de versión exclusivo. Los
ID de versión exclusivos son cadenas opacas Unicode, codificadas en UTF-8, preparadas para URL y
generadas de manera aleatoria con una longitud máxima de 1024 bytes. Un ejemplo de ID de versión es
3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo. Solo Amazon S3
genera ID de versión. No es posible editarlos.
Note

Para simplificar la información, usaremos ID mucho más cortos en todos nuestros ejemplos.

Cuando realiza una operación PUT para un objeto en un bucket con control de versiones habilitado, la
versión no actual no se sobrescribirá. En el siguiente gráfico se muestra que cuando una nueva versión
de photo.gif se somete a una operación PUT en un bucket que ya contiene un objeto con el mismo
nombre, el objeto original (ID = 111111) permanece en el bucket, Amazon S3 genera un nuevo ID de
versión (121212) y agrega la nueva versión al bucket.

Esta funcionalidad evita que sobrescriba o elimine accidentalmente objetos y le da la posibilidad de


recuperar una versión anterior de un objeto.

Cuando realiza una operación DELETE en un objeto, todas las versiones permanecen en el bucket y
Amazon S3 inserta un marcador de eliminación, como se muestra en el siguiente gráfico.

Versión de API 2006-03-01


116
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

El marcador de eliminación se convierte en la versión actual del objeto. De forma predeterminada,


las solicitudes GET recuperarán la versión almacenada más recientemente. Realizar una solicitud
GET Object simple cuando la versión actual es un marcador de eliminación devuelve un error 403
Forbidden, como se muestra en el siguiente gráfico.

Sin embargo, puede realizar una operación GET en una versión no actual de un objeto especificando su
ID de versión. En la siguiente figura, realizamos una operación GET sobre la versión de objeto específica,
111111. Amazon S3 devuelve la versión del objeto aunque no sea la versión actual.

Puede eliminar permanentemente un objeto especificando la versión que quiera eliminar. Solo el
propietario de un bucket de Amazon S3 puede eliminar permanentemente una versión. En el siguiente
gráfico se muestra cómo DELETE versionId elimina permanentemente un objeto de un bucket y que
Amazon S3 no inserta un marcador de eliminación.

Versión de API 2006-03-01


117
Amazon Simple Storage Service Guía del desarrollador
Etiquetado de objetos

Puede agregar factores adicionales de seguridad configurando un bucket para habilitar la eliminación
con MFA (autenticación multifactor). Si lo hace, el propietario del bucket debe incluir dos formas de
autenticación en cualquier solicitud para eliminar una versión o cambiar el estado de control de versiones
del bucket. Para obtener más información, consulte Eliminación MFA (p. 451).
Important

Si detecta un aumento significativo en el número de respuestas de ralentización HTTP 503


recibidas para solicitudes PUT o DELETE a objetos en un bucket de Amazon S3 con control
de versiones habilitado, puede que tenga uno o varios objetos en el bucket para los que habrá
millones de versiones. Para obtener más información, consulte Solución de problemas de Amazon
S3 (p. 670).

Para obtener más información, consulte Uso del control de versiones (p. 449).

Etiquetado de objetos
Utilice el etiquetado de objetos para categorizar el almacenamiento. Cada etiqueta es un par clave-valor.
Considere los siguientes ejemplos de etiquetado:

• Suponga que un objeto contiene datos de información sanitaria protegida (PHI). Podría etiquetar el
objeto con el siguiente par clave-valor.

PHI=True

o bien

Classification=PHI

• Supongamos que almacena archivos de proyecto en su bucket de S3. Podría etiquetar estos objetos con
una clave llamada Project y un valor, como se muestra a continuación:

Project=Blue

• Puede agregar varias etiquetas a un objeto, como se muestra a continuación.

Project=x
Classification=confidential

Puede agregar etiquetas a nuevos objetos al cargarlos o agregarlas a objetos existentes. Tenga en cuenta
lo siguiente:

Versión de API 2006-03-01


118
Amazon Simple Storage Service Guía del desarrollador
Operaciones de la API relacionadas
con el etiquetado de objetos

• Puede asociar hasta 10 etiquetas a un objeto. Las etiquetas que están asociadas con un objeto deben
tener claves de etiquetas exclusivas.
• Una clave de etiqueta puede tener una longitud de hasta 128 caracteres Unicode y los valores de
etiqueta pueden tener una longitud de hasta 256 caracteres Unicode.
• La clave y los valores distinguen entre mayúsculas y minúsculas.
• Para obtener más información sobre las restricciones de las etiquetas, consulte Restricciones de las
etiquetas definidas por el usuario.

Los prefijos de nombre de clave de objeto también le permiten clasificar el almacenamiento. Sin embargo,
la categorización basada en prefijos es unidimensional. Considere los siguientes nombres de claves de
objeto:

photos/photo1.jpg
project/projectx/document.pdf
project/projecty/document2.pdf

Estos nombres de claves tienen los prefijos photos/, project/projectx/ y project/projecty/.


Estos prefijos habilitan la categorización monodimensional. Es decir, todo lo que tenga un mismo prefijo es
una categoría. Por ejemplo, el prefijo project/projectx identifica a todos los documentos relacionados
con project x.

Con el etiquetado, ahora tendrá otra dimensión. Si quiere que la foto 1 esté en la categoría project x, puede
etiquetar el objeto correspondientemente. Además de la clasificación de datos, el etiquetado ofrece los
siguientes beneficios:

• Las etiquetas de objetos permiten el control de acceso pormenorizado para otorgar permisos. Por
ejemplo, podría conceder a un usuario de IAM permisos para leer solo objetos con determinadas
etiquetas.
• Las etiquetas de objetos permiten una administración precisa del ciclo de vida de un objeto, en la que
podrá especificar filtros basados en etiquetas, además de prefijos de nombres de clave, en una regla de
ciclo de vida.
• Cuando utilice los análisis de Amazon S3, puede configurar filtros para agrupar los objetos de modo que
se analicen por etiquetas de objetos, por prefijos de nombre de clave o por prefijos y etiquetas.
• También puede personalizar métricas de Amazon CloudWatch para mostrar información especificando
filtros de etiquetas. En las siguientes secciones presentamos más detalles.

Important

Es aceptable usar etiquetas para etiquetar objetos que contengan información confidencial (como
información personalmente identificable o información sanitaria protegida). No obstante, las
etiquetas en sí no deberían contener información confidencial.

Para añadir conjuntos de etiquetas de objetos á más de un objeto de Amazon S3 con una sola solicitud,
puede utilizar operaciones por lotes de Amazon S3.

Operaciones de la API relacionadas con el etiquetado


de objetos
Amazon S3 admite las siguientes operaciones de la API específicas al etiquetado de objetos:

Operaciones de la API para objetos

Versión de API 2006-03-01


119
Amazon Simple Storage Service Guía del desarrollador
Operaciones de la API relacionadas
con el etiquetado de objetos

• PUT Object tagging: sustituye las etiquetas en un objeto. Las etiquetas se especifican en el cuerpo de la
solicitud. Hay dos escenarios diferentes de administración de etiquetas de objetos con esta API.
• Si el objeto no tiene etiquetas: con esta API puede agregar un conjunto de etiquetas a un objeto (el
objeto no tiene etiquetas anteriores).
• Si el objeto tiene un conjunto de etiquetas existente: para modificar el conjunto de etiquetas existente,
en primer lugar debe recuperar el conjunto de etiquetas existente, modificarlo en el cliente y usar esta
API para sustituir el conjunto de etiquetas.
Note

Si envía esta solicitud con un conjunto de etiquetas vacío, Amazon S3 elimina el conjunto de
etiquetas existente en el objeto. Si utiliza este método, se le cobrará por una solicitud de nivel
1 (PUT). Para obtener más información, consulte Precios de Amazon S3.
La solicitud DELETE Object tagging es la preferida porque consigue el mismo resultado sin
incurrir en cargos.

 
• GET Object tagging: devuelve el conjunto de etiquetas asociado con un objeto. Amazon S3 devuelve las
etiquetas de objeto en el cuerpo de la respuesta.

 
• DELETE Object tagging: elimina el conjunto de etiquetas asociadas con un objeto.

Otras operaciones de la API que admiten etiquetado

• PUT Object e Initiate Multipart Upload: puede especificar etiquetas al crear los objetos. Las etiquetas se
especifican con el encabezado de solicitud x-amz-tagging.

 
• GET Object: en lugar de devolver el conjunto de etiquetas, Amazon S3; devuelve el recuento de
etiquetas de objeto en el encabezado x-amz-tag-count (solo si el solicitante tiene permiso para leer
las etiquetas) dado que el tamaño del encabezado de respuesta está limitado a 8 Kb. Si quiere ver las
etiquetas, realice otra solicitud para la operación de la API GET Object tagging.

 
• POST Object: puede especificar las etiquetas en su solicitud POST.

Siempre que las etiquetas de su solicitud no excedan el límite de tamaño de 8 Kb para los encabezados
de solicitud, puede usar la API PUT Object para crear objetos con etiquetas. Si las etiquetas que
especifique superan el límite de tamaño del encabezado, puede usar este método POST, en el que
incluiría las etiquetas en el cuerpo.

PUT Object - Copy: puede especificar el x-amz-tagging-directive en su solicitud para dar la


instrucción a Amazon S3 de que copie (comportamiento predeterminado) las etiquetas o sustituya por un
nuevo conjunto de etiquetas facilitadas en la solicitud.

Tenga en cuenta lo siguiente:

• El etiquetado sigue el modelo de consistencia final. Es decir, poco después de agregar etiquetas a
un objeto, si intenta recuperar las etiquetas, podría recibir etiquetas antiguas (si recibe alguna) en
los objetos. Sin embargo, si vuelve a realizar una llamada, probablemente obtendrá las etiquetas
actualizadas.

Versión de API 2006-03-01


120
Amazon Simple Storage Service Guía del desarrollador
Etiquetado de objetos e información adicional

Etiquetado de objetos e información adicional


En esta sección, se explica cómo el etiquetado de objetos se relaciona con otras configuraciones.

Etiquetado de objetos y administración del ciclo de vida


En la configuración del ciclo de vida del bucket, puede especificar un filtro para seleccionar un subconjunto
de objetos al que se aplica la regla. Puede especificar un filtro en función de los prefijos de nombres de
clave, etiquetas de objetos o ambos.

Supongamos que almacena fotos (en formato bruto y terminado) en su bucket de Amazon S3. Puede
etiquetar estos objetos como se muestra a continuación.

phototype=raw
or
phototype=finished

Podría plantearse archivar las fotos brutas en Glacier tiempo después de que se creen. Puede configurar
una regla de ciclo de vida con un filtro que identifique el subconjunto de objetos con el prefijo de nombre de
clave (photos/) que tiene una etiqueta específica (phototype=raw).

Para obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127).

Etiquetado y replicación sde objetos


Si configura la replicación en un bucket, Amazon S3 replica las etiquetas, siempre que conceda permisos
a Amazon S3 para leer las etiquetas. Para obtener más información, consulte Información general de
configuración de la replicación (p. 578).

Etiquetado de objetos y políticas de control de acceso


También puede usar políticas de permisos (políticas de bucket y usuario) para administrar los permisos
relacionados con el etiquetado de objetos. Para ver acciones de políticas, consulte los siguientes temas:

• Permisos para operaciones de objetos (p. 358)


• Permisos relacionados con operaciones de bucket (p. 359)

Las etiquetas de objetos permiten un control de acceso pormenorizado para administrar permisos. Puede
otorgar permisos condicionales en función de las etiquetas de objetos. Amazon S3 admite las siguientes
claves de condiciones que puede usar para conceder permisos condicionales basados en etiquetas de
objetos:

• s3:ExistingObjectTag/<tag-key>: use esta clave condicional para verificar que una etiqueta de
objeto existente tiene una clave y un valor específicos para la etiqueta.

 
Note

Al conceder permisos para las operaciones PUT Object y DELETE Object, esta clave
condicional no se admite. Es decir, no puede crear una política para conceder o denegar
permisos a un usuario para eliminar o sobrescribir un objeto en función de sus etiquetas
existentes.

Versión de API 2006-03-01


121
Amazon Simple Storage Service Guía del desarrollador
Etiquetado de objetos e información adicional

• s3:RequestObjectTagKeys: use esta clave condicional para restringir las claves de etiqueta que
quiera permitir en objetos. Esto resulta útil al agregar etiquetas a objetos con PutObjectTagging y
PutObject y con las solicitudes POST para objetos.

 
• s3:RequestObjectTag/<tag-key>: use esta clave condicional para restringir las claves y
valores de etiqueta que quiera permitir en objetos. Esto resulta útil al agregar etiquetas a objetos con
PutObjectTagging y PutObject y con las solicitudes POST para buckets.

Para obtener una lista completa de las claves condicionales específicas de servicio de Amazon S3,
consulte Claves de condición disponibles (p. 364). Las siguientes políticas de permisos ilustran cómo el
etiquetado de objetos facilita una administración de permisos de acceso pormenorizada.

Example 1: Permitir a un usuario solo leer los objetos que tienen una etiqueta específica
La siguiente política de permisos concede a un usuario permiso para leer objetos, pero la condición limita
el permiso de lectura a objetos que tengan los siguientes valor y clave específicos de la etiqueta.

security : public

Tenga en cuenta que la política usa la clave condicional de Amazon S3 s3:ExistingObjectTag/<tag-


key> para especificar la clave y el valor.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/security": "public"
}
}
}
]
}

Example 2: Permitir a un usuario agregar etiquetas de objetos con restricciones sobre las claves
de etiqueta permitidas
La siguiente política de permisos concede permisos a un usuario para realizar la acción
s3:PutObjectTagging, lo que permite al usuario agregar etiquetas a un objeto existente. La
condición limita las claves de etiqueta que puede usar el usuario. La condición usa la clave condicional
s3:RequestObjectTagKeys para especificar el conjunto de claves de etiqueta.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],

Versión de API 2006-03-01


122
Amazon Simple Storage Service Guía del desarrollador
Etiquetado de objetos e información adicional

"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"ForAllValues:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}

La política garantiza que el conjunto de etiquetas, si se especifica en la solicitud, tenga las claves
especificadas. Un usuario podría enviar un conjunto de etiquetas vacías en PutObjectTagging, lo
cual está permitido por esta política (un conjunto de etiquetas vacío en la solicitud elimina las etiquetas
existentes en el objeto). Si quiere evitar que un usuario elimine el conjunto de etiquetas, puede agregar
otra condición para garantizar que el usuario proporcione al menos un valor. El ForAnyValue de la
condición garantiza que al menos uno de los valores especificados estará presente en la solicitud.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"ForAllValues:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
},
"ForAnyValue:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}

Para obtener más información, consulte Creación de una condición que pruebe valores de varias claves
(operaciones de definición) en la Guía del usuario de IAM.

Example 3: Permitir a un usuario agregar etiquetas de objetos que incluyan una clave y un valor
de una etiqueta específica
La siguiente política de usuario concede permisos a un usuario para realizar la acción
s3:PutObjectTagging, lo que permite al usuario agregar etiquetas a un objeto existente. La condición
requiere que el usuario incluya una etiqueta específica (Project) con un valor X.

Versión de API 2006-03-01


123
Amazon Simple Storage Service Guía del desarrollador
Administración de etiquetas de objetos

"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:RequestObjectTag/Project": "X"
}
}
}
]
}

Temas relacionados

Administración de etiquetas de objetos (p. 124)

Administración de etiquetas de objetos


En esta sección se explica cómo puede agregar etiquetas de objetos mediante programación con el AWS
SDK para Java o la consola de Amazon S3.

Temas
• Administración de etiquetas de objetos mediante la consola (p. 124)
• Administración de etiquetas con el AWS SDK for Java (p. 124)
• Administración de etiquetas con el AWS SDK para .NET (p. 125)

Administración de etiquetas de objetos mediante la consola


Puede usar la consola de Amazon S3 para agregar etiquetas a nuevos objetos al cargarlos o agregarlas a
objetos existentes. Para obtener instrucciones acerca de cómo añadir etiquetas a objetos con la consola
de Amazon S3, consulte Adición de etiquetas a un objeto en la Guía del usuario de la consola de Amazon
Simple Storage Service.

Administración de etiquetas con el AWS SDK for Java


En la siguiente muestra se indica cómo utilizar el AWS SDK for Java para establecer etiquetas para un
nuevo objeto y recuperar o reemplazar etiquetas de un objeto ya existente. Para obtener más información
acerca de cómo etiquetar objetos, consulte Etiquetado de objetos (p. 118). Para obtener instrucciones
sobre la creación y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java
de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.*;

Versión de API 2006-03-01


124
Amazon Simple Storage Service Guía del desarrollador
Administración de etiquetas de objetos

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class ManagingObjectTags {

public static void main(String[] args) {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Object key ***";
String filePath = "*** File path ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Create an object, add two new tags, and upload the object to Amazon S3.
PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, new
File(filePath));
List<Tag> tags = new ArrayList<Tag>();
tags.add(new Tag("Tag 1", "This is tag 1"));
tags.add(new Tag("Tag 2", "This is tag 2"));
putRequest.setTagging(new ObjectTagging(tags));
PutObjectResult putResult = s3Client.putObject(putRequest);

// Retrieve the object's tags.


GetObjectTaggingRequest getTaggingRequest = new
GetObjectTaggingRequest(bucketName, keyName);
GetObjectTaggingResult getTagsResult =
s3Client.getObjectTagging(getTaggingRequest);

// Replace the object's tags with two new tags.


List<Tag> newTags = new ArrayList<Tag>();
newTags.add(new Tag("Tag 3", "This is tag 3"));
newTags.add(new Tag("Tag 4", "This is tag 4"));
s3Client.setObjectTagging(new SetObjectTaggingRequest(bucketName, keyName, new
ObjectTagging(newTags)));
} 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();
}
}
}

Administración de etiquetas con el AWS SDK para .NET


En la siguiente muestra se indica cómo utilizar el AWS SDK para .NET para establecer las etiquetas
para un nuevo objeto y recuperar o reemplazar las etiquetas de un objeto ya existente. Para obtener más
información acerca de cómo etiquetar objetos, consulte Etiquetado de objetos (p. 118).

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;

Versión de API 2006-03-01


125
Amazon Simple Storage Service Guía del desarrollador
Administración de etiquetas de objetos

using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
public class ObjectTagsTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** key name for the new object ***";
private const string filePath = @"*** file path ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
PutObjectWithTagsTestAsync().Wait();
}

static async Task PutObjectWithTagsTestAsync()


{
try
{
// 1. Put an object with tags.
var putRequest = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName,
FilePath = filePath,
TagSet = new List<Tag>{
new Tag { Key = "Keyx1", Value = "Value1"},
new Tag { Key = "Keyx2", Value = "Value2" }
}
};

PutObjectResponse response = await client.PutObjectAsync(putRequest);


// 2. Retrieve the object's tags.
GetObjectTaggingRequest getTagsRequest = new GetObjectTaggingRequest
{
BucketName = bucketName,
Key = keyName
};

GetObjectTaggingResponse objectTags = await


client.GetObjectTaggingAsync(getTagsRequest);
for (int i = 0; i < objectTags.Tagging.Count; i++)
Console.WriteLine("Key: {0}, Value: {1}", objectTags.Tagging[i].Key,
objectTags.Tagging[0].Value);

// 3. Replace the tagset.

Tagging newTagSet = new Tagging();


newTagSet.TagSet = new List<Tag>{
new Tag { Key = "Key3", Value = "Value3"},
new Tag { Key = "Key4", Value = "Value4" }
};

PutObjectTaggingRequest putObjTagsRequest = new PutObjectTaggingRequest()


{
BucketName = bucketName,
Key = keyName,

Versión de API 2006-03-01


126
Amazon Simple Storage Service Guía del desarrollador
Administración del ciclo de vida

Tagging = newTagSet
};
PutObjectTaggingResponse response2 = await
client.PutObjectTaggingAsync(putObjTagsRequest);

// 4. Retrieve the object's tags.


GetObjectTaggingRequest getTagsRequest2 = new GetObjectTaggingRequest();
getTagsRequest2.BucketName = bucketName;
getTagsRequest2.Key = keyName;
GetObjectTaggingResponse objectTags2 = await
client.GetObjectTaggingAsync(getTagsRequest2);
for (int i = 0; i < objectTags2.Tagging.Count; i++)
Console.WriteLine("Key: {0}, Value: {1}", objectTags2.Tagging[i].Key,
objectTags2.Tagging[0].Value);

}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object"
, e.Message);
}
catch (Exception e)
{
Console.WriteLine(
"Encountered an error. Message:'{0}' when writing an object"
, e.Message);
}
}
}
}

Administración del ciclo de vida de los objetos


Configure el ciclo de vida de los objetos para administrarlos de manera que se almacenen de manera
económica durante todo su ciclo de vida. Una configuración del ciclo de vida es un conjunto de reglas que
definen acciones que Amazon S3 aplica a un grupo de objetos. Existen dos tipos de acciones:

• Acciones de transición: definen el momento en que los objetos pasan a otra clase de almacenamiento.
Por ejemplo, podría decidir pasar objetos a la clase de almacenamiento STANDARD_IA 30 días después
de su creación o archivar objetos en la clase de almacenamiento GLACIER un año después de su
creación.

Hay costos asociados con las solicitudes de transición de ciclo de vida. Para obtener información acerca
de los precios, consulte Precios de Amazon S3.

 
• Acciones de vencimiento: definen el momento en que vencen los objetos. Amazon S3 elimina
automáticamente los objetos que han vencido.

Los costos de vencimiento del ciclo de vida dependen de si elige provocar el vencimiento de los objetos.
Para obtener más información, consulte Configuración del vencimiento de objetos (p. 135).

Para obtener más información sobre las reglas del ciclo de vida, consulte Elementos de configuración del
ciclo de vida (p. 136).

Versión de API 2006-03-01


127
Amazon Simple Storage Service Guía del desarrollador
¿Cuándo debo usar la configuración del ciclo de vida?

¿Cuándo debo usar la configuración del ciclo de vida?


Defina reglas de configuración del ciclo de vida para los objetos que tienen un ciclo de vida bien definido.
Por ejemplo:

• Si carga logs periódicos en un bucket, es posible que la aplicación los necesite durante una semana o
un mes. Una vez transcurrido ese tiempo, es posible que desee eliminarlos.
• Se obtiene acceso a algunos documentos con frecuencia durante un periodo limitado. Posteriormente,
se obtendrá acceso a ellos con poca frecuencia. En algún momento, es posible que no necesite acceso
en tiempo real a estos objetos, pero la organización o las normativas pueden requerir su archivado
durante un periodo específico. Transcurrido dicho periodo, podrá eliminarlos.
• Es posible que desee cargar algunos tipos de datos a Amazon S3 para su archivado. Por ejemplo,
podría archivar medios digitales, registros financieros y sanitarios, datos de secuencias genómicas
sin procesar, backups de bases de datos a largo plazo y datos que deben conservarse por motivos de
conformidad normativa.

Con las reglas de configuración del ciclo de vida, puede indicarle a Amazon S3 que pase los objetos a
otras clases de almacenamiento más económicas, que los archive o que los elimine.

¿Cómo puedo configurar un ciclo de vida?


Una configuración de ciclo de vida, que se guarda en un archivo XML, consta de un conjunto de reglas con
acciones predefinidas que desea que Amazon S3 realice en los objetos durante su vida útil.

Amazon S3 proporciona un conjunto de operaciones de la API para administrar la configuración del ciclo
de vida de un bucket. Amazon S3 almacena la configuración como un subrecurso del ciclo de vida que se
asocia a su bucket. Para obtener más información, consulte los siguientes temas:

Ciclo de vida de PUT Bucket

Ciclo de vida de GET Bucket

Ciclo de vida de DELETE Bucket

También puede configurar el ciclo de vida utilizando la consola de Amazon S3 o mediante programación
con las bibliotecas de encapsulamiento del SDK de AWS. Si lo necesita, también puede realizar las
llamadas a la API REST directamente. Para obtener más información, consulte Configuración del ciclo de
vida de un bucket (p. 154).

Para obtener más información, consulte los siguientes temas:

• Consideraciones adicionales para la configuración del ciclo de vida (p. 128)


• Elementos de configuración del ciclo de vida (p. 136)
• Ejemplos de configuración del ciclo de vida (p. 143)
• Configuración del ciclo de vida de un bucket (p. 154)

Consideraciones adicionales para la configuración del


ciclo de vida
Al configurar el ciclo de vida de los objetos, debe comprender las siguientes directrices para pasar objetos
a otra clase de almacenamiento, establecer fechas de vencimiento y otras configuraciones de objetos.

Versión de API 2006-03-01


128
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

Temas
• Transición de objetos con el ciclo de vida de Amazon S3 (p. 129)
• Configuración del vencimiento de objetos (p. 135)
• Configuraciones del ciclo de vida y otras configuraciones del bucket (p. 135)

Transición de objetos con el ciclo de vida de Amazon S3


Puede agregar reglas a una configuración del ciclo de vida para indicar a Amazon S3 que pase objetos a
otra clase de almacenamiento de Amazon S3. Por ejemplo:

• Si sabe que se obtiene acceso a determinados objetos con poca frecuencia, puede pasarlos a la clase
de almacenamiento STANDARD_IA.
• Se recomienda archivar los objetos a los que no necesita obtener acceso en tiempo real en la clase de
almacenamiento GLACIER.

En las siguientes secciones se describen las transiciones admitidas, las limitaciones relacionadas y la
transición a la clase de almacenamiento GLACIER.

Transiciones admitidas y limitaciones relacionadas


En una configuración del ciclo de vida, puede definir reglas para pasar objetos de una clase de
almacenamiento a otra para ahorrar costos de almacenamiento. Cuando desconoce los patrones de
acceso de sus objetos o los patrones de acceso cambian con el tiempo, es posible realizar la transición
de los objetos a la clase de almacenamiento INTELLIGENT_TIERING para un ahorro automático de
los costos. Para obtener más información acerca de las clases de almacenamiento, consulte Clases de
almacenamiento de Amazon S3 (p. 110).

Amazon S3 admite un modelo en cascada para las transiciones entre clases de almacenamiento, tal y
como se muestra en el siguiente diagrama.

Versión de API 2006-03-01


129
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

Amazon S3 admite las siguientes transiciones de ciclo de vida entre clases de almacenamiento con una
configuración del ciclo de vida:

• Puede pasar de la clase de almacenamiento STANDARD a cualquier otra clase de almacenamiento.


• Puede pasar de cualquier clase de almacenamiento a las clases de almacenamiento GLACIER o
DEEP_ARCHIVE.
• Puede pasar de la clase de almacenamiento STANDARD_IA a las clases de almacenamiento
INTELLIGENT_TIERING u ONEZONE_IA.
• Puede pasar de la clase de almacenamiento INTELLIGENT_TIERING a la clase de almacenamiento
ONEZONE_IA.
• Puede pasar de la clase de almacenamiento GLACIER a la clase de almacenamiento DEEP_ARCHIVE.

No se admiten las siguientes transiciones de ciclo de vida:

• No puede pasar de cualquier clase de almacenamiento a la clase de almacenamiento STANDARD.


• No se puede pasar de cualquier clase de almacenamiento a la clase de almacenamiento
REDUCED_REDUNDANCY.
• No se puede pasar de la clase de almacenamiento INTELLIGENT_TIERING a la clase de
almacenamiento STANDARD_IA.
• No se puede pasar de la clase de almacenamiento ONEZONE_IA a las clases de almacenamiento
STANDARD_IA o INTELLIGENT_TIERING.
• Puede pasar de la clase de almacenamiento GLACIER a la clase de almacenamiento DEEP_ARCHIVE
solamente.

Versión de API 2006-03-01


130
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

• No se puede pasar del almacenamiento DEEP_ARCHIVE a ninguna otra clase de almacenamiento.

Las transiciones de clases de almacenamiento de ciclo de vida tienen las siguientes limitaciones:

• De las clases de almacenamiento STANDARD o STANDARD_IA a INTELLIGENT_TIERING. Se aplican


las siguientes limitaciones:
• En los objetos más grandes se pueden obtener ventajas económicas de la transición a la clase de
almacenamientoINTELLIGENT_TIERING. Amazon S3 no pasa objetos que tengan un tamaño menor
que 128 KB a la clase de almacenamiento INTELLIGENT_TIERING, ya que no resulta rentable.

 
• De las clases de almacenamiento STANDARD a STANDARD_IA o ONEZONE_IA. Se aplican las
siguientes limitaciones:

 
• En los objetos más grandes se pueden obtener ventajas económicas de la transición a la clase de
almacenamiento STANDARD_IA u ONEZONE_IA. Amazon S3 no pasa objetos que tengan un tamaño
menor que 128 KB a las clases de almacenamiento STANDARD_IA u ONEZONE_IA, ya que no
resulta rentable.

 
• Los objetos se deben almacenar 30 días como mínimo en la clase de almacenamiento actual
antes de que se puedan pasar a la clase de almacenamiento STANDARD_IA o ONEZONE_IA. Por
ejemplo, no puede crear una regla de ciclo de vida para pasar objetos a la clase de almacenamiento
STANDARD_IA un día después de su creación.

Amazon S3 no pasa objetos durante los primeros 30 días porque se suele obtener acceso a los
objetos más nuevos con mayor frecuencia o estos se eliminan antes de lo que corresponde para las
clases de almacenamiento STANDARD_IA o ONEZONE_IA.

 
• Si pasa objetos no actuales (en los buckets con control de versiones), solo podrá pasarlos a las clases
de almacenamiento STANDARD_IA o ONEZONE_IA si cumplen la condición de ser no actuales
durante, al menos, 30 días.

 
• De la clase de almacenamiento STANDARD IA a ONEZONE_IA. Se aplican las siguientes limitaciones:
• Los objetos se deben almacenar 30 días como mínimo en la clase de almacenamiento STANDARD_IA
antes de que se puedan pasar a la clase de almacenamiento ONEZONE_IA.

Puede combinar estas acciones de ciclo de vida para administrar el ciclo de vida completo de un objeto.
Por ejemplo, supongamos que los objetos que crea tienen un ciclo de vida bien definido. Al principio, se
obtiene acceso a los objetos con frecuencia durante un periodo de 30 días. Posteriormente, se obtiene
acceso a los objetos con poca frecuencia durante un periodo máximo de 90 días. Transcurrido ese tiempo,
los objetos ya no son necesarios, por lo que podría archivarlo o eliminarlos.

En esta situación, puede crear una regla de ciclo de vida en la que especifique la acción de transición
inicial a la clase de almacenamiento INTELLIGENT_TIERING, STANDARD_IA u ONEZONE_IA, otra
acción de transición al almacenamiento GLACIER para el archivado y una acción de vencimiento. A
medida que se mueven los objetos de una clase de almacenamiento a otra, se ahorra en costos de
almacenamiento. Para obtener más información acerca de las consideraciones sobre costos, consulte
Precios de Amazon S3.

Versión de API 2006-03-01


131
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

Important

No se puede especificar una única regla de ciclo de vida para las transiciones a las clases de
almacenamiento INTELLIGENT_TIERING (o STANDARD_IA u ONEZONE_IA) y GLACIER o
DEEP_ARCHIVE cuando la transición al almacenamiento GLACIER o DEEP_ARCHIVE tiene
lugar antes de que transcurran 30 días desde la transición a las clases de almacenamiento
INTELLIGENT_TIERING, STANDARD_IA u ONEZONE_IA. Esto es debido a que hay un
cargo de almacenamiento mínimo de 30 días asociado a las clases de almacenamiento
INTELLIGENT_TIERING, STANDARD_IA y ONEZONE_IA.
Este mismo cargo mínimo de 30 días se aplica cuando se especifica una transición del
almacenamiento STANDARD_IA al almacenamiento ONEZONE_IA o INTELLIGENT_TIERING.
Puede especificar dos reglas para lograrlo, pero deberá pagar los cargos de almacenamiento
mínimos. Para obtener más información acerca de las consideraciones sobre costos, consulte
Precios de Amazon S3.

Transición a las clases de almacenamiento GLACIER y DEEP ARCHIVE


(archivado de objetos)
Con la configuración del ciclo de vida, puede pasar objetos a las clases de almacenamiento GLACIER o
DEEP_ARCHIVE para archivarlos. Si elige la clase de almacenamiento GLACIER o DEEP_ARCHIVE, sus
objetos permanecen en Amazon S3. No puede obtener acceso a ellos directamente mediante el servicio
Amazon S3 Glacier.

Antes de archivar objetos, lea las siguientes secciones, donde encontrará consideraciones pertinentes.

Consideraciones generales
A continuación, se proporcionan consideraciones generales para que tenga en cuenta antes de archivar
objetos:

• Los objetos cifrados siguen estando cifrados durante todo el proceso de transición de la clase de
almacenamiento.

 
• Los objetos que se almacenan en las clases GLACIER o DEEP_ARCHIVE no están disponibles en
tiempo real.

Los objetos archivados son objetos de Amazon S3, pero antes de poder obtener acceso a un objeto
archivado, debe primero restaurar una copia temporal de este. La copia del objeto restaurado solo está
disponible durante el tiempo que especifique en la solicitud de restauración. Después de ese periodo,
Amazon S3 elimina la copia temporal y el objeto permanece archivado en Amazon S3 Glacier.

Puede restaurar un objeto usando la consola de Amazon S3 o mediante programación con las
bibliotecas de encapsulamiento de los SDK de AWS o la API de REST de Amazon S3 en su código.
Para obtener más información, consulte Restaurar objetos archivados (p. 258).

 
• Los objetos almacenados en la clase GLACIER solo se pueden pasar a la clase de almacenamiento
DEEP_ARCHIVE.

Puede usar una regla de configuración del ciclo de vida para convertir la clase de almacenamiento de
un objeto de GLACIER a la clase de almacenamiento DEEP_ARCHIVE solamente. Si desea cambiar la
clase de almacenamiento de un objeto almacenado en GLACIER a otra clase de almacenamiento que

Versión de API 2006-03-01


132
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

no sea DEEP_ARCHIVE, debe usar primero la operación de restauración para hacer una copia temporal
del objeto. A continuación, utilice la operación de copia para sobrescribir el objeto especificando
STANDARD, INTELLIGENT_TIERING, STANDARD_IA, ONEZONE_IA o REDUCED_REDUNDANCY.

 
• La transición de objetos a la clase de almacenamiento DEEP_ARCHIVE es unidireccional.

No puede usar una regla de configuración del ciclo de vida para convertir la clase de almacenamiento de
un objeto de DEEP_ARCHIVE a cualquier otra clase de almacenamiento. Si desea cambiar la clase de
almacenamiento de un objeto archivado a otra clase de almacenamiento, debe usar primero la operación
de restauración para hacer una copia temporal del objeto. A continuación, utilice la operación de copia
para sobrescribir el objeto especificando STANDARD, INTELLIGENT_TIERING, STANDARD_IA,
ONEZONE_IA, GLACIER o REDUCED_REDUNDANCY como clase de almacenamiento.

 
• Los objetos que se almacenan en las clases GLACIER y DEEP_ARCHIVE solo son visibles y están
disponibles mediante Amazon S3. No están disponibles a través del servicio Amazon S3 Glacier.

Son objetos de Amazon S3 y solo puede obtener acceso a ellos por medio de la consola de Amazon S3
o la API de Amazon S3. No puede obtener acceso a los objetos archivados a través de la consola de
Amazon S3 Glacier ni de la API de Amazon S3 Glacier.

Consideraciones sobre costos

Si tiene previsto archivar datos a los cuales se obtiene acceso con poca frecuencia durante un período
de meses o años, las clases de almacenamiento GLACIER y DEEP_ARCHIVE pueden reducir los costos
de almacenamiento. Sin embargo, para asegurarse de que la clase de almacenamiento GLACIER o
DEEP_ARCHIVE es apropiada para usted, debe considerar lo siguiente:

• Cargos generales de almacenamiento: cuando pasa objetos a la clase de almacenamiento GLACIER


o DEEP_ARCHIVE, se añade una cantidad fija de almacenamiento a cada objeto para tener capacidad
para los metadatos de manera que se pueda administrar el objeto.

 
• Por cada objeto que se archiva en GLACIER o DEEP_ARCHIVE, Amazon S3 usa 8 KB de
almacenamiento para el nombre del objeto y otros metadatos. Amazon S3 almacena estos metadatos
para que pueda obtener una lista en tiempo real de los objetos archivados por medio de la API
de Amazon S3. Para obtener más información, consulte Get Bucket (List Objects). Por este
almacenamiento adicional se aplican las tarifas ESTÁNDAR de Amazon S3.

 
• Por cada objeto que se archiva en GLACIER o DEEP_ARCHIVE, Amazon S3 añade 32 KB de
almacenamiento para el índice y los metadatos relacionados. Estos datos adicionales son necesarios
para identificar y restaurar su objeto. Por este almacenamiento adicional se aplican las tarifas de
GLACIER o DEEP_ARCHIVE.

Si archiva objetos pequeños, tenga en cuenta estos cargos de almacenamiento. Asimismo, considere la
posibilidad de agregar muchos objetos pequeños a una cantidad más pequeña de objetos grandes para
reducir los costos generales.

 
Versión de API 2006-03-01
133
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

• Cantidad de días prevista para tener los objetos archivados: GLACIER y DEEP_ARCHIVE son
soluciones de archivado a largo plazo. El periodo mínimo de almacenamiento es de 90 días para la
clase de almacenamiento GLACIER y de 180 para DEEP_ARCHIVE. La eliminación de datos que están
archivados en Amazon S3 Glacier es gratis si los objetos que elimina se archivan durante más tiempo
que el periodo mínimo de almacenamiento. Si elimina o sobrescribe un objeto archivado antes de que
transcurra el periodo mínimo, Amazon S3 aplica una tarifa de eliminación anticipada prorrateada.

 
• Cargos de solicitud de archivado en GLACIER y DEEP_ARCHIVE de Amazon S3: cada objeto que pasa
a la clase de almacenamiento GLACIER o DEEP_ARCHIVE constituye una solicitud de transición. Se
aplica un costo para cada solicitud. Si tiene previsto pasar una cantidad grande de objetos, tenga en
cuenta los costos de solicitud. Si archiva objetos pequeños, considere la posibilidad de agregar muchos
objetos pequeños a menos objetos grandes para reducir los costos de las solicitudes de transición.

 
• Cargos de restauración de datos de GLACIER y DEEP_ARCHIVE de Amazon S3: GLACIER y
DEEP_ARCHIVE están diseñadas para el archivado a largo plazo de datos a los que se obtiene acceso
con poca frecuencia. Para obtener más información acerca de los cargos de restauración de datos,
consulte ¿Cuánto cuesta recuperar datos de Amazon S3 Glacier? en las preguntas frecuentes de
Amazon S3. Para obtener información acerca de cómo restaurar datos de Amazon S3 Glacier, consulte
Restaurar objetos archivados (p. 258).

Cuando archiva objetos en Amazon S3 Glacier por medio de la administración del ciclo de vida de un
objeto, Amazon S3 realiza la transición de estos objetos de manera asincrónica. Es posible que haya un
retraso entre la fecha de transición de la regla de configuración del ciclo de vida y la fecha de la transición
física. Se le aplican los precios de Amazon S3 Glacier según la fecha de transición especificada en la
regla.

En la página de detalles del producto Amazon S3 se proporciona información sobre precios y ejemplos de
cálculos para el archivo de objetos de Amazon S3. Para obtener más información, consulte los siguientes
temas:

• ¿Cómo se calcula mi costo de almacenamiento para los objetos de Amazon S3 archivados en Amazon
S3 Glacier?
• ¿Cómo se me cobrará por eliminar objetos de Amazon S3 Glacier que tengan menos de tres meses?
• ¿Cuánto cuesta recuperar datos de Amazon S3 Glacier?
• Precios de Amazon S3 para conocer los costos de almacenamiento de las diferentes clases de
almacenamiento.

Restaurar objetos archivados


No se puede obtener acceso a los objetos archivados en tiempo real. Debe primero iniciar una solicitud de
restauración y luego esperar hasta que haya una copia temporal del objeto disponible durante el período
que especifique en la solicitud. Después de recibir una copia temporal del objeto restaurado, la clase de
almacenamiento del objeto sigue siendo GLACIER o DEEP_ARCHIVE. (Una solicitud de la operación de
API HEAD Object o GET Object devolverá GLACIER o DEEP_ARCHIVE como clase de almacenamiento).
Note
Cuando restaura un archivo, paga tanto el archivado (la tarifa de GLACIER o DEEP_ARCHIVE)
como una copia que restauró de manera temporal (tarifa de almacenamiento de
REDUCED_REDUNDANCY). Para obtener información acerca de los precios, consulte Precios de
Amazon S3.

Puede restaurar una copia de objeto,mediante programación o utilizando la consola de Amazon S3.
Amazon S3 solo procesa una solicitud de restauración a la vez por objeto. Para obtener más información,
consulte Restaurar objetos archivados (p. 258).

Versión de API 2006-03-01


134
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

Configuración del vencimiento de objetos


Cuando un objeto llega al final de su vida útil, Amazon S3 lo coloca en una cola para eliminarlo de manera
asincrónica. Es posible que la fecha de vencimiento y la fecha en que Amazon S3 elimina un objeto estén
desfasadas. No se le cobrará por el tiempo de almacenamiento asociado con un objeto que ha vencido.

Para conocer cuándo está previsto el vencimiento de un objeto, utilice las operaciones HEAD Object o
GET Object de la API. Estas operaciones de la API devuelven encabezados de respuesta que facilitan esta
información.

Si crea una regla de vencimiento del ciclo de vida para provocar el vencimiento de objetos que han estado
en la clase de almacenamiento INTELLIGENT_TIERING, STANDARD_IA u ONEZONE_IA durante menos
de 30 días, se le cobrarán 30 días. Si crea una regla de vencimiento del ciclo de vida para provocar el
vencimiento de objetos que han estado en el almacenamiento GLACIER durante menos de 90 días, se
le cobrarán 90 días. Si crea una regla de vencimiento del ciclo de vida para provocar el vencimiento de
los objetos que han estado en el almacenamiento DEEP_ARCHIVE durante menos de 180 días, se le
cobrarán 180 días. Para obtener más información, consulte Precios de Amazon S3.

Configuraciones del ciclo de vida y otras configuraciones del


bucket
Además de las configuraciones del ciclo de vida, puede asociar otras configuraciones con el bucket. En
esta sección se explica cómo la configuración del ciclo de vida se relaciona con otras configuraciones del
bucket.

Ciclos de vida y control de versiones


Puede añadir configuraciones del ciclo de vida a buckets sin control de versiones y buckets con control de
versiones habilitado. Para obtener más información, consulte Control de versiones de objetos (p. 115).

Un bucket habilitado para el control de versiones mantiene una versión actual del objeto y cero o más
versiones no actuales del objeto. Puede definir diferentes reglas de ciclo de vida para las versiones
actuales y no actuales del objeto.

Para obtener más información, consulte Elementos de configuración del ciclo de vida (p. 136).
Para obtener más información acerca del control de versiones, consulte Control de versiones de
objetos (p. 115).

Configuración del ciclo de vida en buckets habilitados para la MFA


No se admite la configuración del ciclo de vida en los buckets habilitados para la Multi-Factor
Authentication (MFA).

Ciclos de vida y registro


Las acciones del ciclo de vida de Amazon S3 no se capturan por el registro de nivel del objeto de
CloudTrail ya que CloudTrail captura las solicitudes de API realizadas a puntos de enlace de Amazon S3
externos mientras que las acciones del ciclo de vida de Amazon S3 se desempeñan utilizando puntos
de enlace de Amazon S3 internos. Los registros de acceso del servidor de Amazon S3 se pueden
activar en un bucket de S3 para capturar las acciones relacionadas con el ciclo de vida de Amazon S3
como un objeto de transición a otra clase de almacenamiento y vencimiento de objetos que resulta en
una eliminación permanente o lógica. Para obtener más información, consulte Registros de acceso al
servidor (p. 674)

Si tiene el registro habilitado en su bucket, los registros de acceso del servidor de Amazon S3 notifican los
resultados de las siguientes operaciones:

Versión de API 2006-03-01


135
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

Registro de operaciones Descripción

S3.EXPIRE.OBJECT Amazon S3 elimina de forma permanente el objeto


debido a la acción de vencimiento de su ciclo de
vida.

S3.CREATE.DELETEMARKER Amazon S3 elimina de forma lógica la versión


actual y añade el marcador de eliminación en un
bucket que tenga el control de versiones habilitado.

S3.TRANSITION_SIA.OBJECT Amazon S3 pasa el objeto a la clase de


almacenamiento STANDARD_IA.

S3.TRANSITION_ZIA.OBJECT Amazon S3 pasa el objeto a la clase de


almacenamiento ONEZONE_IA.

S3.TRANSITION_INT.OBJECT Amazon S3 pasa el objeto a la clase de


almacenamiento Intelligent Tiering.

S3.TRANSITION.OBJECT Amazon S3 inicia la transición de un objeto a la


clase de almacenamiento GLACIER.

S3.TRANSITION_GDA.OBJECT Amazon S3 inicia la transición de un objeto


a la clase de almacenamiento GLACIER
DEEP_ARCHIVE.

S3.DELETE.UPLOAD Amazon S3 anula la carga multiparte incompleta.

Note

Los registros de acceso del servidor de Amazon S3 se entregan habitualmente en la medida de lo


posible y no se pueden utilizar para completar la contabilidad de todas las solicitudes de Amazon
S3.

Más información

• Elementos de configuración del ciclo de vida (p. 136)


• Transición a las clases de almacenamiento GLACIER y DEEP ARCHIVE (archivado de
objetos) (p. 132)
• Configuración del ciclo de vida de un bucket (p. 154)

Elementos de configuración del ciclo de vida


Temas
• Elemento ID (p. 137)
• Elemento Status (p. 137)
• Elemento Filter (p. 137)
• Elementos para describir las acciones del ciclo de vida (p. 139)

La configuración del ciclo de vida se especifica mediante un XML que consiste en una o varias reglas de
ciclo de vida.

<LifecycleConfiguration>

Versión de API 2006-03-01


136
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

<Rule>
...
</Rule>
<Rule>
...
</Rule>
</LifecycleConfiguration>

Cada regla consta de los elementos siguientes:

• Metadatos de la regla, que incluyen un ID de regla y un estado que indica si esta está activada
o desactivada. Si una regla está desactivada, Amazon S3 no realiza ninguna de las acciones
especificadas en ella.
• Un filtro que identifica los objetos sobre los que se aplica la regla. Puede especificar un filtro utilizando
un prefijo de clave de objeto, una o varias etiquetas de objeto, o ambos métodos.
• Una o varias acciones de transición o vencimiento con una fecha o un periodo de tiempo en la vida del
objeto en el que quiera que Amazon S3 realice la acción especificada.

En las siguientes secciones se describen los elementos XML de una configuración de ciclo de vida.
Para ver configuraciones de ciclo de vida de ejemplo, consulte Ejemplos de configuración del ciclo de
vida (p. 143).

Elemento ID
Una configuración de ciclo de vida puede tener hasta 1000 reglas. El elemento <ID> identifica
unívocamente una regla. La longitud del ID está limitada a 255 caracteres.

Elemento Status
El valor del elemento <Status> puede ser Enabled o Disabled. Si una regla está desactivada, Amazon S3
no realiza ninguna de las acciones definidas en ella.

Elemento Filter
Una regla de ciclo de vida se puede aplicar a todos los objetos o a un subconjunto de los objetos de un
bucket, en función del elemento <Filter> que especifique en la regla de ciclo de vida.

Puede filtrar los objetos por prefijo de clave, etiquetas de objeto o una combinación de ambos factores (en
cuyo caso, Amazon S3 utilizará un operador lógico AND para combinar los filtros). Considere los siguientes
ejemplos:

• Especificación de un filtro mediante prefijos de clave: en este ejemplo se muestra una regla de ciclo de
vida que se aplica a un subconjunto de objetos en función del prefijo del nombre de la clave (logs/).
Por ejemplo, la regla del ciclo de vida se aplica a los objetos logs/mylog.txt, logs/temp1.txt y
logs/test.txt. La regla no se aplica al objeto example.jpg.

<LifecycleConfiguration>
<Rule>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>
...
</LifecycleConfiguration>

Versión de API 2006-03-01


137
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

Si quiere aplicar una acción de ciclo de vida a un subconjunto de objetos en función de diferentes
prefijos de nombres de clave, especifique reglas por separado. En cada regla, especifique un filtro
basado en prefijos. Por ejemplo, para describir una acción de ciclo de vida para objetos con los prefijos
de clave projectA/ y projectB/, debe especificar dos reglas como se muestra a continuación:

<LifecycleConfiguration>
<Rule>
<Filter>
<Prefix>projectA/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>

<Rule>
<Filter>
<Prefix>projectB/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>

Para obtener más información sobre las claves de objetos, consulte Claves de objeto (p. 105).
• Especificación de un filtro mediante etiquetas de objetos: en el siguiente ejemplo, la regla del ciclo de
vida especifica un filtro basado en la etiqueta (clave) y el valor (valor). La regla se aplica solo a un
subconjunto de objetos que tengan la etiqueta específica.

<LifecycleConfiguration>
<Rule>
<Filter>
<Tag>
<Key>key</Key>
<Value>value</Value>
</Tag>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>

Puede especificar un filtro sobre la base de varias etiquetas. Debe envolver las etiquetas con el
elemento <AND> mostrado en el siguiente ejemplo. La regla indica a Amazon S3 que debe realizar
acciones de ciclo de vida en objetos con dos etiquetas (con la clave y el valor específicos de la etiqueta).

<LifecycleConfiguration>
<Rule>
<Filter>
<And>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</And>
</Filter>

Versión de API 2006-03-01


138
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

transition/expiration actions.
</Rule>
</Lifecycle>

La regla de ciclo de vida se aplica solo a objetos que tengan la etiqueta específica. Amazon S3 realiza
una operación lógica AND. Tenga en cuenta lo siguiente:
• Cada etiqueta debe coincidir exactamente tanto con la clave como con el valor.
• La regla se aplica al subconjunto formado por los objetos que tengan etiquetas especificadas en la
regla. No importa si un objeto tiene especificadas etiquetas adicionales.
Note
Al especificar varias etiquetas en un filtro, cada clave de etiqueta ha de ser exclusiva.
• Especificación de un filtro utilizando tanto prefijos como una o varias etiquetas de objetos: en una regla
de ciclo de vida, puede especificar un filtro basado tanto en el prefijo de clave como en una o varias
etiquetas. De nuevo, debe envolver todos estos elementos con el elemento <And> como se muestra en
el siguiente ejemplo:

<LifecycleConfiguration>
<Rule>
<Filter>
<And>
<Prefix>key-prefix</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</And>
</Filter>
<Status>Enabled</Status>
transition/expiration actions.
</Rule>
</LifecycleConfiguration>

Amazon S3 combina estos filtros con el operador lógico AND. Es decir, la regla se aplica a un
subconjunto de objetos con un prefijo de clave específico y etiquetas específicas. Un filtro solo puede
tener un prefijo y ninguna, una o varias etiquetas.
• Puede especificar un filtro vacío, en cuyo caso, la regla se aplicará a todos los objetos del bucket.

<LifecycleConfiguration>
<Rule>
<Filter>
</Filter>
<Status>Enabled</Status>
transition/expiration actions.
</Rule>
</LifecycleConfiguration>

Elementos para describir las acciones del ciclo de vida


Puede ordenar a Amazon S3 que realice acciones específicas durante la vida útil de un objeto
especificando una o varias de las siguientes acciones predefinidas en una regla de ciclo de vida. El efecto
de estas acciones depende del estado del control de versiones del bucket.

Versión de API 2006-03-01


139
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

• Elemento de acción Transition: puede especificar la acción Transition para pasar objetos de una
clase de almacenamiento a otra. Para obtener más información acerca de las transiciones de objetos,
consulte Transiciones admitidas y limitaciones relacionadas (p. 129). Cuando se llega a una fecha o
periodo de tiempo específico en la vida útil del objeto, Amazon S3 lleva a cabo la transición.

Para un bucket con control de versiones (un bucket con el control de versiones habilitado o suspendido),
la acción Transition se aplica a la versión del objeto actual. Para administrar las versiones no
actuales, Amazon S3 define la acción NoncurrentVersionTransition (que se describe a
continuación).

• Elemento de acción Expiration: la acción Expiration hace que caduquen objetos identificados por la
regla y se aplica a los objetos elegibles de cualquiera de las clases de almacenamiento de Amazon S3.
Para obtener más información sobre clases de almacenamiento, consulte Clases de almacenamiento
de Amazon S3 (p. 110). Amazon S3 hace que todos los objetos vencidos dejen de estar disponibles.
La eliminación permanente de los objetos dependerá del estado del bucket en relación con el control de
versiones.
Important

Las políticas de ciclo de vida de vencimiento de objetos no eliminan las cargas multiparte
incompletas. Para eliminar las cargas multiparte incompletas, deberá usar la acción de
configuración de ciclo de vida AbortIncompleteMultipartUpload que se describe más adelante en
esta sección.
• Bucket sin control de versiones: la acción Expiration da como resultado la eliminación permanente
del objeto por parte de Amazon S3.
• Bucket con control de versiones: para un bucket con control de versiones (un bucket con el control
de versiones habilitado o suspendido), hay varias consideraciones que se deben tener en cuenta en
relación con cómo administra Amazon S3 la acción expiration. Para obtener más información,
consulte Uso del control de versiones (p. 449). Independientemente del estado del control de
versiones, se ha de aplicar lo siguiente:
• La acción Expiration solo se aplica a la versión actual (no tiene ningún impacto sobre las
versiones del objeto no actuales).
• Amazon S3 no realiza ninguna acción si hay una o varias versiones del objeto y el marcador de
eliminación es la versión actual.
• Si la versión actual del objeto es la única versión del objeto y, además, es un marcador de
eliminación (también denominado marcador de eliminación de objeto vencido, en el que todas
las versiones del objeto se han eliminado y solo queda un marcador de eliminación), Amazon
S3 elimina el marcador de eliminación del objeto vencido. También puede usar la acción de
vencimiento para ordenar a Amazon S3 que elimine los marcadores de eliminación de objeto
vencidos. Para ver un ejemplo, consulte Ejemplo 7: eliminación de marcadores de eliminación de
objetos que vencieron (p. 151).

Tenga en cuenta también lo siguiente al configurar Amazon S3 para administrar el vencimiento:


• Bucket con control de versiones habilitado

Si la versión actual del objeto no es un marcador de eliminación, Amazon S3 añade un marcador


de eliminación con un ID de versión exclusivo. Esto convierte la versión actual en no actual, y el
marcador de eliminación en la versión actual.
• Bucket con control de versiones suspendido

En un bucket con el control de versiones suspendido, la acción de vencimiento provoca que


Amazon S3 cree un marcador de eliminación con un ID de versión null. Este marcador de
eliminación sustituye cualquier versión del objeto con un ID de versión null en la jerarquía de
versiones, lo que elimina el objeto de manera eficaz.

Versión de API 2006-03-01


140
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

Además, Amazon S3 facilita las siguientes acciones que puede utilizar para administrar las versiones de
objetos no actuales en un bucket con control de versiones (en buckets con control de versiones activado o
suspendido).

• Elemento de acción NoncurrentVersionTransition: use esta acción para especificar durante cuánto
tiempo (a partir del momento en el que los objetos dejan de ser actuales) quiere que los objetos
permanezcan en la clase de almacenamiento actual antes de que Amazon S3 los envíe a la clase de
almacenamiento especificada. Para obtener más información acerca de las transiciones de objetos,
consulte Transiciones admitidas y limitaciones relacionadas (p. 129).
• Elemento de acción NoncurrentVersionExpiration: use esta acción para especificar durante cuánto
tiempo (a partir del momento en el que los objetos dejan de ser actuales) quiere conservar las versiones
de objetos no actuales antes de que Amazon S3 las elimine permanentemente. El objeto eliminado no se
puede recuperar.

Esta eliminación retrasada de objetos no actuales puede resultar útil si necesita corregir eliminaciones
o sobrescrituras accidentales. Por ejemplo, puede configurar una regla de vencimiento para eliminar las
versiones no actuales después de cinco días desde que dejan de ser actuales. Por ejemplo, suponga
que el 01/01/2014 a las 10:30 h UTC creó un objeto denominado photo.gif (ID de versión 111111). El
02/01/2014 a las 11:30 h UTC, eliminó por accidente photo.gif (ID de versión 111111), lo que crea un
marcador de eliminación con un nuevo ID de versión (por ejemplo, ID de versión 4857693). A partir de
este momento tendrá cinco días para recuperar la versión original de photo.gif (ID de versión 111111)
antes de que la eliminación sea permanente. El 08/01/2014 a las 00:00 h UTC, se ejecutará la regla del
ciclo de vida para el vencimiento y se eliminará permanentemente photo.gif (ID de versión 111111),
cinco días después de que la versión dejase de ser actual.
Important

Las políticas de ciclo de vida de vencimiento de objetos no eliminan las cargas multiparte
incompletas. Para eliminar las cargas multiparte incompletas, deberá usar la acción de
configuración de ciclo de vida AbortIncompleteMultipartUpload que se describe más adelante en
esta sección.

Además de las acciones de transición y vencimiento, puede usar la siguiente acción de configuración del
ciclo de vida para ordenar a Amazon S3 que aborte las cargas multiparte incompletas.

• Elemento de acción AbortIncompleteMultipartUpload: use este elemento para establecer un tiempo


máximo (en días) que quiera permitir que las cargas multiparte sigan estando en curso. Si las cargas
multiparte aplicables (determinadas por el nombre de clave prefix especificado en la regla de ciclo
de vida) no se completan satisfactoriamente en el periodo de tiempo predefinido, Amazon S3 anula las
cargas multiparte incompletas. Para obtener más información, consulte Anulación de cargas multiparte
incompletas con la política de ciclo de vida de buckets (p. 189).
Note

No puede especificar esta acción de ciclo de vida en una regla que establezca un filtro basado
en etiquetas de objetos.
• Elemento de acción ExpiredObjectDeleteMarker: en un bucket con control de versiones habilitado, un
marcador de eliminación sin versiones no actuales se denomina marcador de eliminación del objeto
vencido. Puede usar esta acción del ciclo de vida para ordenar a S3 que elimine los marcadores de
eliminación del objetos vencidos. Para ver un ejemplo, consulte Ejemplo 7: eliminación de marcadores
de eliminación de objetos que vencieron (p. 151).
Note

No puede especificar esta acción de ciclo de vida en una regla que establezca un filtro basado
en etiquetas de objetos.

Versión de API 2006-03-01


141
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

Cómo calcula Amazon S3 el tiempo que un objeto lleva siendo no actual


En un bucket con control de versiones habilitado, puede tener varias versiones de un objeto, y siempre
habrá una versión actual y cero, una o varias versiones no actuales. Cada vez que carga un objeto, se
conserva la versión actual como versión no actual, y la versión nueva, su sucesora, será la nueva versión
actual. Para determinar el número de días que un objeto lleva siendo no actual, Amazon S3 analiza
el momento en el que se creó su sucesor. Amazon S3 usa el número de días desde la creación de su
sucesor como número de días durante los que un objeto no es actual.
Restauración de versiones anteriores de un objeto al utilizar configuraciones del ciclo de
vida
Como se explica en detalle en el tema Restauración de versiones anteriores (p. 467), puede
usar cualquiera de los siguientes dos métodos para recuperar versiones anteriores de un objeto:

1. Al copiar una versión no actual del objeto en el mismo bucket. El objeto copiado se convierte en
la versión actual del mismo, y se conservan todas las versiones del objeto.
2. Al eliminar permanentemente la versión actual del objeto. Al eliminar la versión actual del
objeto, en efecto, estará convirtiendo la versión no actual en la versión actual del mismo.

Al usar reglas de configuración del ciclo de vida en buckets con control de versiones, nuestra
recomendación es que use el primer método.
Dada la semántica de consistencia final de Amazon S3, una versión actual eliminada
permanentemente podría no desaparecer hasta que se propaguen los cambios (ya que
Amazon S3 podría no ser consciente de dicha eliminación). Mientras tanto, la regla del ciclo
de vida que haya configurado para hacer que venzan los objetos no actuales podría eliminar
permanentemente los objetos no actuales, incluido el que quiera restaurar. Por tanto, copiar la
versión antigua, como se recomienda en el primer método, es la alternativa más segura.

Reglas de ciclo de vida: basadas en la edad de un objeto


Puede especificar un periodo de tiempo, en número de días a partir de la creación (o modificación) de los
objetos, en el que Amazon S3 puede llevar a cabo la acción.

Al especificar el número de días en las acciones Transition y Expiration de una configuración de


ciclo de vida, tenga en cuenta lo siguiente:

• Es el número de días a partir de la creación del objeto tras los que ocurrirá la acción.
• Amazon S3 calcula el tiempo agregando el número de días especificados en la regla al crear el objeto y
redondear el tiempo resultante a la medianoche del día siguiente, UTC. Por ejemplo, si un objeto se creó
el 15/01/2014 a las 10:30 h, UTC, y la cantidad de días que especificó en una regla de transición es 3, la
fecha de transición del objeto se calculará como 19/01/2014 a las 00:00 h, UTC.

Note
Amazon S3 solo conserva la última fecha de modificación para cada objeto. Por ejemplo, la
consola de Amazon S3 muestra la fecha para Last Modified (Última modificación) en el panel
Properties (Propiedades) del objeto. Al crear inicialmente un nuevo objeto, esta fecha refleja el
momento de creación del mismo. Si se sustituye el objeto, la fecha cambia según sea necesario.
Por tanto, cuando usamos el término fecha de creación, es sinónimo del término fecha de última
modificación.

Al especificar el número de días en las acciones NoncurrentVersionTransition y


NoncurrentVersionExpiration de una configuración de ciclo de vida, tenga en cuenta lo siguiente:

• Es el número de días a partir del momento en el que la versión del objeto deja de ser actual (es decir,
desde que se sobrescribe o se elimina un objeto), tras los cuales Amazon S3 realizará la acción en el
objeto o los objetos especificados.

Versión de API 2006-03-01


142
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

• Amazon S3 calcula este momento agregando el número de días especificados en la regla a la hora en la
que se creó la nueva versión sucesora del objeto, y redondea la hora resultante a la medianoche del día
siguiente, UTC. Por ejemplo, supongamos que en su bucket tiene la versión actual de un objeto creado
el 01/01/2014 a las 10:30 a. m. UTC. Si la nueva versión del objeto que sustituye a la versión actual se
creó el 15/01/2014 a las 10:30 a. m. UTC y se especifican tres días en una regla de transición, la fecha
de transición del objeto calculada será 19/01/2014 a las 00:00 UTC.

Reglas de ciclo de vida: basadas en una fecha específica


Si especifica una acción en una regla de ciclo de vida, puede especificar la fecha en la que desea que
Amazon S3 realice la acción. Cuando llegue la fecha específica, S3 aplicará la acción a todos los objetos
cualificados (según los criterios de filtrado).

Si especifica una acción de ciclo de vida con una fecha en el pasado, todos los objetos cualificados serán
inmediatamente aptos para esa acción de ciclo de vida.
Important

La acción basada en la fecha no es una acción puntual. S3 seguirá aplicando la acción basada
en la fecha incluso después de que esta haya pasado, siempre que el estado de la regla sea
Enabled.
Por ejemplo, supongamos que especifica una acción de vencimiento basada en una fecha para
eliminar todos los objetos (y supongamos también que la regla no especifica filtro alguno). En
la fecha especificada, S3 hace que venzan todos los objetos del bucket. S3 también seguirá
haciendo que venzan los nuevos objetos creados en el bucket. Para detener la acción del ciclo de
vida, debe eliminar la acción de la configuración del ciclo de vida, deshabilitar la regla o eliminar la
regla de la configuración del ciclo de vida.

El valor de la fecha debe estar en formato ISO 8601. La hora siempre es medianoche UTC.
Note

No puede crear reglas de ciclo de vida basadas en una fecha con la consola de Amazon S3, pero
sí que puede usarla para ver, deshabilitar o eliminar dichas reglas.

Ejemplos de configuración del ciclo de vida


En esta sección se proporcionan ejemplos de configuración del ciclo de vida. Cada ejemplo muestra cómo
puede especificar el archivo XML en cada uno de los ejemplos de casos.

Temas
• Ejemplo 1: especificación de un filtro (p. 144)
• Ejemplo 2: deshabilitación de una regla de ciclo de vida (p. 145)
• Ejemplo 3: Transición entre clases de almacenamiento durante la vida útil de un objeto (p. 146)
• Ejemplo 4: Especificación de varias reglas (p. 147)
• Ejemplo 5: superposición de filtros, conflictos entre acciones de ciclo de vida y lo que Amazon S3 hace
(p. 148)
• Ejemplo 6: especificación de una regla de ciclo de vida para un bucket habilitado para el control de
versiones (p. 151)
• Ejemplo 7: eliminación de marcadores de eliminación de objetos que vencieron (p. 151)
• Ejemplo 8: configuración de ciclo de vida para anular cargas multipartes (p. 153)

Versión de API 2006-03-01


143
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

Ejemplo 1: especificación de un filtro


Cada regla de ciclo de vida incluye un filtro que puede usar para identificar un subconjunto de objetos en el
bucket al que se aplica la regla de ciclo de vida. Las siguientes configuraciones de ciclo de vida muestran
ejemplos de cómo puede especificar un filtro.

• En esta regla de configuración del ciclo de vida, el filtro especifica un prefijo de clave (tax/). Por lo
tanto, la regla se aplica a objetos con el prefijo de nombre de clave tax/, como tax/doc1.txt y tax/
doc2.txt.

La regla especifica dos acciones que indican a Amazon S3 realizar lo siguiente:


• Pasar objetos a la clase de almacenamiento GLACIER 365 días (un año) después de su creación.
• Eliminar objetos (la acción Expiration) 3650 días (10 años) después de su creación.

<LifecycleConfiguration>
<Rule>
<ID>Transition and Expiration Rule</ID>
<Filter>
<Prefix>tax/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

En lugar de especificar la antigüedad del objeto en términos de días después de su creación, puede
especificar una fecha para cada acción. Sin embargo, no puede usar Date y Days en la misma regla.
• Si desea que la regla de ciclo de vida se aplique a todos los objetos en el bucket, especifique un prefijo
vacío. En la siguiente configuración, la regla especifica una acción Transition que indica a Amazon
S3 que pase objetos a la clase de almacenamiento GLACIER 0 días después de su creación; en este
caso, los objetos reúnen los requisitos para archivarse en Amazon S3 Glacier a la medianoche UTC
después de su creación.

<LifecycleConfiguration>
<Rule>
<ID>Archive all object same-day upon creation</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>

• Puede especificar cero o un prefijo de nombre de clave y cero o más etiquetas de objetos en un filtro.
El siguiente ejemplo de código aplica la regla de ciclo de vida a un subconjunto de objetos con el prefijo
de clave tax/ y a objetos que tienen dos etiquetas con clave y valor específicos. Tenga en cuenta que
cuando especifica más de un filtro, debe incluir AND como se muestra (Amazon S3 aplica un AND lógico
para combinar las condiciones del filtro especificadas).

Versión de API 2006-03-01


144
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

...
<Filter>
<And>
<Prefix>tax/</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
</And>
</Filter>
...

• Puede filtrar objetos solo según etiquetas. Por ejemplo, la siguiente regla de ciclo de vida se aplica a
objetos que tienen dos etiquetas especificadas (no especifica ningún prefijo):

...
<Filter>
<And>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
</And>
</Filter>
...

Important

Cuando tiene varias reglas en una configuración de ciclo de vida, un objeto puede reunir los
requisitos para varias acciones de ciclo de vida. Las reglas generales que Amazon S3 sigue en
tales casos son las siguientes:

• La eliminación permanente prevalece sobre la transición.


• La transición prevalece sobre la creación de marcadores de eliminación.
• Cuando un objeto reúne los requisitos para una transición a la clase de almacenamiento
GLACIER y STANDARD_IA (o ONEZONE_IA), Amazon S3 elige la transición a la clase
GLACIER.

Para ver ejemplos, consulte Ejemplo 5: superposición de filtros, conflictos entre acciones de ciclo
de vida y lo que Amazon S3 hace (p. 148)

Ejemplo 2: deshabilitación de una regla de ciclo de vida


Puede deshabilitar una regla de ciclo de vida de manera temporal. La siguiente configuración de ciclo de
vida especifica dos reglas:

• La regla 1 indica a Amazon S3 que pase los objetos con el prefijo logs/ a la clase de almacenamiento
GLACIER inmediatamente después de su creación.

Versión de API 2006-03-01


145
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

• La regla 2 indica a Amazon S3 que pase los objetos con el prefijo documents/ a la clase de
almacenamiento GLACIER inmediatamente después de su creación.

En la política, la regla 1 está habilitada y la regla 2 está deshabilitada. Amazon S3 no realizará ninguna
acción con reglas deshabilitadas.

<LifecycleConfiguration>
<Rule>
<ID>Rule1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
<Rule>
<ID>Rule2</ID>
<Prefix>documents/</Prefix>
<Status>Disabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>

Ejemplo 3: Transición entre clases de almacenamiento durante la


vida útil de un objeto
En este ejemplo, hace uso de la configuración del ciclo de vida para pasar objetos a otras clases de
almacenamiento durante su vida útil. La transición entre clases de almacenamiento puede ayudar a reducir
los costos de almacenamiento. Para obtener más información sobre los precios, consulte Precios de
Amazon S3.

La siguiente configuración de ciclo de vida especifica una regla que se aplica a objetos con el prefijo de
nombre de clave logs/. La regla especifica las siguientes acciones:

• Dos acciones de transición:


• Pasar objetos a la clase de almacenamiento STANDARD_IA 30 días después de su creación
• Pasar objetos a la clase de almacenamiento GLACIER 90 días después de su creación
• Una acción de vencimiento que le indica a Amazon S3 que elimine los objetos un año después de su
creación

<LifecycleConfiguration>
<Rule>
<ID>example-id</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>30</Days>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>

Versión de API 2006-03-01


146
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

<Transition>
<Days>90</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

Note

Puede usar una regla para describir todas las acciones de ciclo de vida si todas las acciones se
aplican al mismo conjunto de objetos (identificado por un filtro). Por otro lado, puede añadir varias
reglas que especifiquen de manera individual un filtro diferente.

Ejemplo 4: Especificación de varias reglas


Puede especificar varias reglas si desea que se realicen diferentes acciones de ciclo de vida en diferentes
objetos. La siguiente configuración de ciclo de vida tiene dos reglas:

• La regla 1 se aplica a objetos con el prefijo de nombre de clave classA/. Le indica a Amazon S3
que pase los objetos a la clase de almacenamiento GLACIER un año después de su creación y que
provoque el vencimiento de estos objetos 10 años después de su creación.
• La regla 2 se aplica a objetos con el prefijo de nombre de clave classB/. Le indica a Amazon S3 que
pase los objetos a la clase de almacenamiento STANDARD_IA 90 días después de su creación y que los
elimine un año después de su creación.

<LifecycleConfiguration>
<Rule>
<ID>ClassADocRule</ID>
<Filter>
<Prefix>classA/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>      
<Days>365</Days>      
<StorageClass>GLACIER</StorageClass>    
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
<Rule>
<ID>ClassBDocRule</ID>
<Filter>
<Prefix>classB/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>      
<Days>90</Days>      
<StorageClass>STANDARD_IA</StorageClass>    
</Transition>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

Versión de API 2006-03-01


147
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

Ejemplo 5: superposición de filtros, conflictos entre acciones de


ciclo de vida y lo que Amazon S3 hace
Es posible que especifique una configuración de ciclo de vida en la que especifique prefijos o acciones
superpuestos.

Por lo general, el ciclo de vida optimizará los costos. Por ejemplo, si dos políticas de vencimiento se
superponen, se respetará la política con una fecha de vencimiento anterior para que los datos no
permanezcan almacenados más tiempo de lo previsto.

Del mismo modo, si dos políticas de transición se superponen, el ciclo de vida pasará los objetos a
la clase de almacenamiento con costos inferiores. En ambos casos, el ciclo de vida intenta elegir la
opción que le resulte menos costosa. Una excepción a esta regla general es la clase de almacenamiento
INTELLIGENT_TIERING. El ciclo de vida preferirá INTELLIGENT_TIERING frente a cualquier otra clase de
almacenamiento, aparte de las clases de almacenamiento GLACIER y DEEP_ARCHIVE.

En los siguientes ejemplos se muestra cómo Amazon S3 elige resolver posibles conflictos.

Example 1: superposición de prefijos (sin conflicto)

El siguiente ejemplo de configuración tiene dos reglas que especifican prefijos superpuestos de la
siguiente manera:

• La primera regla especifica un filtro vacío que denota todos los objetos en el bucket.
• La segunda regla especifica un prefijo de nombre de clave logs/ que solo denota un subconjunto de
objetos.

La regla 1 le solicita a Amazon S3 que elimine todos los objetos un año después de su creación y la regla 2
le solicita a Amazon S3 que pase un subconjunto de objetos a la clase de almacenamiento STANDARD_IA
30 días después de su creación.

<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>30</Days>
</Transition>
</Rule>
</LifecycleConfiguration>

Example 2: conflictos entre acciones de ciclo de vida

En este ejemplo de configuración, existen dos reglas que le indican a Amazon S3 que realice dos acciones
diferentes en el mismo conjunto de objetos al mismo tiempo durante la vida útil de los objetos:

Versión de API 2006-03-01


148
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

• Ambas reglas especifican el mismo prefijo de nombre de clave, por lo que ambas reglas se aplican al
mismo conjunto de objetos.
• Ambas reglas especifican el mismo momento de aplicación de las reglas, es decir, 365 días después de
la creación de los objetos.
• Una regla le indica a Amazon S3 que pase objetos a la clase de almacenamiento STANDARD_IA y la
otra regla desea que Amazon S3 provoque el vencimiento de los objetos al mismo tiempo.

<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>365</Days>
</Transition>
</Rule>
</LifecycleConfiguration>

En este caso, como usted desea que los objetos venzan (se eliminen), no tiene sentido cambiar la clase de
almacenamiento, por lo que Amazon S3 simplemente opta por realizar la acción de vencimiento en estos
objetos.

Example 3: superposición de prefijos que causa conflictos entre acciones de ciclo de vida

En este ejemplo, la configuración tiene dos reglas que especifican prefijos superpuestos de la siguiente
manera:

• La regla 1 especifica un prefijo vacío (que denota todos los objetos).


• La regla 2 especifica un prefijo de nombre de clave (logs/) que identifica un subconjunto de todos los
objetos.

Para el subconjunto de objetos con el prefijo de nombre de clave logs/, se aplican las acciones de ciclo
de vida de ambas reglas. Una regla le indica a Amazon S3 que pase los objetos 10 días después de su
creación y otra regla le indica a Amazon S3 que pase los objetos 365 días después de su creación.

<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>10</Days>

Versión de API 2006-03-01


149
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

</Transition>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>365</Days>
</Transition>
</Rule>
</LifecycleConfiguration>

En este caso, Amazon S3 opta por pasarlos 10 días después de su creación.

Example 4: filtros basados en etiquetas y conflictos entre acciones de ciclo de vida resultantes

Suponga que tiene la siguiente política de ciclo de vida que tiene dos reglas, cada una de las cuales
especifica un filtro de etiquetas:

• La regla 1 especifica un filtro basado en etiquetas (tag1/value1). Esta regla le indica a Amazon S3
que pase los objetos a la clase de almacenamiento GLACIER 365 días después de su creación.
• La regla 2 especifica un filtro basado en etiquetas (tag2/value2). Esta regla le indica a Amazon S3
que provoque el vencimiento de los objetos 14 días después de su creación.

La configuración del ciclo de vida se muestra a continuación:

<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
<Tag>
<Key>tag1</Key>
<Value>value1</Value>
</Tag>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>GLACIER<StorageClass>
<Days>365</Days>
</Transition>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Tag>
<Key>tag2</Key>
<Value>value1</Value>
</Tag>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>14</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

La política está bien, pero si hay un objeto con ambas etiquetas, S3 tiene que decidir qué hacer. Es decir,
ambas reglas se aplican a un objeto y, en realidad, lo que le indica a Amazon S3 supone un conflicto entre

Versión de API 2006-03-01


150
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

acciones diferentes. En este caso, Amazon S3 provoca el vencimiento del objeto 14 días después de su
creación. El objeto se elimina y, por lo tanto, la acción de transición no tiene lugar.

Ejemplo 6: especificación de una regla de ciclo de vida para un


bucket habilitado para el control de versiones
Suponga que tiene un bucket habilitado para el control de versiones, lo cual significa que para cada objeto,
tiene una versión actual y cero o más versiones no actuales. Desea mantener el valioso historial de un año
y luego eliminar las versiones no actuales. Para obtener más información sobre el control de versiones,
consulte Control de versiones de objetos (p. 115).

Además, desea reducir los costos de almacenamiento mediante la transición de las versiones no actuales
a la clase de almacenamiento GLACIER 30 días después de que adquieren la condición de ser no actuales
(sobre la base de la suposición de que hay datos inactivos a los que no necesita obtener acceso en tiempo
real). Asimismo, también espera que disminuya la frecuencia de acceso de las versiones actuales a los
90 días después de su creación, por lo que puede elegir pasar estos objetos a la clase de almacenamiento
STANDARD_IA.

<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>90</Days>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>
<NoncurrentVersionTransition>
<NoncurrentDays>30</NoncurrentDays>
<StorageClass>GLACIER</StorageClass>
</NoncurrentVersionTransition>
<NoncurrentVersionExpiration>
<NoncurrentDays>365</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>

Ejemplo 7: eliminación de marcadores de eliminación de objetos


que vencieron
Un bucket habilitado para el control de versiones tiene una versión actual y cero o más versiones no
actuales para cada objeto. Cuando elimina un objeto, tenga en cuenta lo siguiente:

• Si no especifica una ID de versión en la solicitud de eliminación, Amazon S3 añade un marcador de


eliminación en lugar de eliminar el objeto. La versión actual del objeto se convierte en no actual y luego
el marcador de eliminación se convierte en la versión actual.
• Si especifica una ID de versión en la solicitud de eliminación, Amazon S3 elimina la versión del objeto de
manera permanente (no se crea un marcador de eliminación).
• Al marcador de eliminación con cero versiones no actuales se lo denomina marcador de eliminación de
objetos que vencieron.

En este ejemplo se muestra un caso en el que se pueden crear marcadores de eliminación de objetos que
vencieron en el bucket y cómo puede usar la configuración del ciclo de vida para indicarle a Amazon S3
que elimine los marcadores de eliminación de objetos que vencieron.

Versión de API 2006-03-01


151
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

Suponga que establece una política de ciclo de vida que especifica la acción
NoncurrentVersionExpiration para eliminar las versiones no actuales 30 días después de que se
conviertan en no actuales como se muestra a continuación:

<LifecycleConfiguration>
<Rule>
...
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>

La acción NoncurrentVersionExpiration no se aplica a las versiones actuales del objeto. Solo


elimina las versiones no actuales.

En el caso de las versiones actuales de los objetos, tiene las siguientes opciones para administrar su vida
útil según si las versiones actuales de los objetos siguen o no un ciclo de vida bien definido:

• Las versiones actuales de los objetos siguen un ciclo de vida bien definido.

En este caso, puede usar una política de ciclo de vida con la acción de Expiration para indicarle a
Amazon S3 que elimine las versiones actuales como se muestra en el siguiente ejemplo:

<LifecycleConfiguration>
<Rule>
...
<Expiration>
<Days>60</Days>
</Expiration>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>

Amazon S3 elimina las versiones actuales 60 días después de que se crearon añadiendo un marcador
de eliminación para cada versión actual del objeto. Esto convierte la versión actual en no actual y el
marcador de eliminación se convierte en la versión actual. Para obtener más información, consulte Uso
del control de versiones (p. 449).

La acción de NoncurrentVersionExpiration en la misma configuración de ciclo de vida elimina


los objetos no actuales 30 días después de que adquieren la condición de ser no actuales. Por lo tanto,
todas las versiones de los objetos se eliminan y usted tiene marcadores de eliminación de objetos que
vencieron, pero Amazon S3 detecta y elimina los marcadores de eliminación de objetos que vencieron
por usted.
• Las versiones actuales de los objetos no tienen un ciclo de vida bien definido.

En este caso, puede eliminar los objetos manualmente cuando no los necesita y así crear un marcador
de eliminación con una o más versiones no actuales. Si la configuración del ciclo de vida con la acción
de NoncurrentVersionExpiration elimina todas las versiones no actuales, ahora tiene marcadores
de eliminación de objetos que vencieron.

Específicamente para este caso, la configuración de ciclo de vida de Amazon S3 proporciona una acción
de Expiration en la que puede solicitarle a Amazon S3 que elimine los marcadores de eliminación de
objetos que vencieron:

<LifecycleConfiguration>
<Rule>

Versión de API 2006-03-01


152
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

<ID>Rule 1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<ExpiredObjectDeleteMarker>true</ExpiredObjectDeleteMarker>
</Expiration>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>

Al establecer el elemento ExpiredObjectDeleteMarker como válido en la acción de Expiration, le


indica a Amazon S3 que elimine los marcadores de eliminación de objetos que vencieron.
Note

Cuando especifica la acción de ciclo de vida de ExpiredObjectDeleteMarker, la regla no


puede especificar un filtro basado en etiquetas.

Ejemplo 8: configuración de ciclo de vida para anular cargas


multipartes
Puede usar la interfaz de programa de aplicación (API, Application Program Interface) de carga multiparte
para cargar objetos grandes en partes. Para obtener más información acerca de las cargas multipartes,
consulte Información general de carga multiparte (p. 187).

Por medio de la configuración de ciclo de vida, puede indicarle a Amazon S3 que anule las cargas
multipartes incompletas (identificadas por el prefijo de nombre de clave especificado en la regla) si no
se completan en una cantidad de días especificada después de iniciarse. Cuando Amazon S3 anula una
carga multiparte, elimina todas las partes asociadas con la carga multiparte. Esto garantiza que no tenga
cargas multipartes incompletas con partes que se almacenan en Amazon S3 y, por lo tanto, que no tenga
que pagar costos de almacenamiento por estas partes.
Note

Cuando especifica la acción de ciclo de vida de AbortIncompleteMultipartUpload, la regla


no puede especificar un filtro basado en etiquetas.

El siguiente es un ejemplo de configuración de ciclo de vida que especifica una regla con la acción
AbortIncompleteMultipartUpload. Esta acción le solicita a Amazon S3 que anule las cargas
multipartes incompletas siete días después de iniciarse.

<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Filter>
<Prefix>SomeKeyPrefix/</Prefix>
</Filter>
<Status>rule-status</Status>
<AbortIncompleteMultipartUpload>
<DaysAfterInitiation>7</DaysAfterInitiation>
</AbortIncompleteMultipartUpload>
</Rule>
</LifecycleConfiguration>

Versión de API 2006-03-01


153
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

Configuración del ciclo de vida de un bucket


Temas
• Administración del ciclo de vida de un objeto con la consola de Amazon S3 (p. 154)
• Establecimiento de configuraciones de ciclo de vida con la AWS CLI (p. 155)
• Administración del ciclo de vida de los objetos con AWS SDK for Java (p. 157)
• Administración del ciclo de vida de un objeto con AWS SDK para .NET (p. 159)
• Administración del ciclo de vida de un objeto con AWS SDK parar Ruby (p. 162)
• Administración del ciclo de vida de un objeto con la API de REST (p. 162)

En esta sección se explica cómo puede establecer configuraciones de ciclo de vida en un bucket mediante
programación con los SDK de AWS o con la consola de Amazon S3 o la AWS CLI. Tenga en cuenta lo
siguiente:

• Cuando añade una configuración de ciclo de vida a un bucket, por lo general se produce un cierto
desfase antes de que una configuración de ciclo de vida nueva o actualizada se propague totalmente a
todos los sistemas de Amazon S3. Habrá un retraso de algunos minutos antes de que la configuración
de ciclo de vida entre en vigor completamente. Este retraso también se puede producir cuando elimina
una configuración de ciclo de vida.
• Cuando deshabilita o elimina una regla de ciclo de vida, después de cierto retraso, Amazon S3 deja de
programar nuevos objetos para eliminación o transición. Cualquier objeto que ya haya sido programado
será desprogramado y no se eliminará ni trasladará.
• Cuando añade una configuración de ciclo de vida a un bucket, las reglas de configuración se aplican a
los objetos existentes y a los objetos que añade posteriormente. Por ejemplo, si hoy añade una regla
de configuración de ciclo de vida con una acción de vencimiento que causa que objetos con un prefijo
específico expiren 30 días después de la creación, Amazon S3 pondrá en cola de eliminación cualquier
objeto existente con más de 30 días de antigüedad.
• Es posible que haya un desfase entre la fecha en que se cumplen las reglas de configuración de ciclo
de vida y la fecha en que se realiza la acción para cumplir la regla. Sin embargo, los cambios en la
facturación se producen ni bien se cumple la regla de configuración de ciclo de vida, incluso aunque
la acción todavía no se haya realizado. Un ejemplo es cuando no se le cobra por el almacenamiento
después del tiempo de vencimiento del objeto, incluso aunque el objeto no se elimine inmediatamente.
Otro ejemplo es cuando se le cobran las tarifas de almacenamiento de Amazon S3 Glacier en cuanto
transcurre el tiempo de transición del objeto, incluso aunque el objeto no se traslade de inmediato a la
clase de almacenamiento GLACIER. Las transiciones del ciclo de vida a la clase de almacenamiento
INTELLIGENT_TIERING son la excepción y los cambios en la facturación no se producen hasta que el
objeto pasa a la clase de almacenamiento INTELLIGENT_TIERING.

Para obtener información acerca de la configuración del ciclo de vida, consulte Administración del ciclo de
vida de los objetos (p. 127).

Administración del ciclo de vida de un objeto con la consola de


Amazon S3
Puede especificar las reglas de ciclo de vida en un bucket con la consola de Amazon S3.

Para obtener instrucciones acerca de cómo configurar reglas de ciclo de vida con la Consola de
administración de AWS, consulte ¿Cómo creo una política de ciclo de vida para un bucket de S3? en la
Guía del usuario de la consola de Amazon Simple Storage Service

Versión de API 2006-03-01


154
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

Establecimiento de configuraciones de ciclo de vida con la AWS


CLI
Puede utilizar los siguientes comandos de AWS CLI para administrar configuraciones de ciclo de vida:

• put-bucket-lifecycle-configuration
• get-bucket-lifecycle-configuration
• delete-bucket-lifecycle

Para obtener instrucciones para configurar la AWS CLI consulte Configuración de la CLI de
AWS (p. 704).

Tenga en cuenta que la configuración de ciclo de vida de Amazon S3 es un archivo XML. Pero cuando
utiliza la interfaz de línea de comandos (CLI), no puede especificar el XML, en lugar de eso, debe
especificar JSON. A continuación se describen ejemplos de configuraciones de ciclo de vida de XML y
JSON equivalentes que puede especificar en el comando de la CLI de AWS:

• Considere la siguiente configuración del ciclo de vida de ejemplo:

<LifecycleConfiguration>
<Rule>
<ID>ExampleRule</ID>
<Filter>
<Prefix>documents/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>

Se muestra el JSON equivalente:

{
"Rules": [
{
"Filter": {
"Prefix": "documents/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 365,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 3650
},
"ID": "ExampleRule"
}
]
}

Versión de API 2006-03-01


155
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

• Considere la siguiente configuración del ciclo de vida de ejemplo:

<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Rule>
<ID>id-1</ID>
<Expiration>
<Days>1</Days>
</Expiration>
<Filter>
<And>
<Prefix>myprefix</Prefix>
<Tag>
<Key>mytagkey1</Key>
<Value>mytagvalue1</Value>
</Tag>
<Tag>
<Key>mytagkey2</Key>
<Value>mytagvalue2</Value>
</Tag>
</And>
</Filter>
<Status>Enabled</Status>
</Rule>
</LifecycleConfiguration>

Se muestra el JSON equivalente:

{
"Rules": [
{
"ID": "id-1",
"Filter": {
"And": {
"Prefix": "myprefix",
"Tags": [
{
"Value": "mytagvalue1",
"Key": "mytagkey1"
},
{
"Value": "mytagvalue2",
"Key": "mytagkey2"
}
]
}
},
"Status": "Enabled",
"Expiration": {
"Days": 1
}
}
]
}

Puede probar put-bucket-lifecycle-configuration de la siguiente manera:

1. Guarde la configuración del ciclo de vida de JSON en un archivo (lifecycle.json).


2. Ejecute el siguiente comando de AWS CLI para establecer la configuración del ciclo de vida en su
bucket:

$ aws s3api put-bucket-lifecycle-configuration  \

Versión de API 2006-03-01


156
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

--bucket bucketname  \
--lifecycle-configuration file://lifecycle.json

3. Para verificar, recupere la configuración del ciclo de vida con el comando get-bucket-lifecycle-
configuration de AWS CLI de la siguiente manera:

$ aws s3api get-bucket-lifecycle-configuration  \


--bucket bucketname

4. Para eliminar la configuración del ciclo de vida, utilice el comando delete-bucket-lifecycle de


AWS CLI de la siguiente manera:

aws s3api delete-bucket-lifecycle \


--bucket bucketname

Administración del ciclo de vida de los objetos con AWS SDK for
Java
Puede utilizar AWS SDK for Java para administrar la configuración del ciclo de vida de un bucket.
Para obtener más información acerca de cómo administrar la configuración del ciclo de vida, consulte
Administración del ciclo de vida de los objetos (p. 127).
Note

Cuando añade una configuración de ciclo de vida a un bucket, Amazon S3 reemplaza la


configuración de ciclo de vida actual, si la hubiera. Para actualizar una configuración, debe
recuperarla, hacer los cambios deseados y luego añadir la configuración de ciclo de vida revisada
al bucket.

Example

El siguiente ejemplo muestra cómo usar AWS SDK for Java para añadir, actualizar y eliminar una
configuración de ciclo de vida de un bucket. En el ejemplo se realiza lo siguiente:

• Añade una configuración de ciclo de vida a un bucket.


• Recupera la configuración de ciclo de vida y la actualiza añadiendo otra regla.
• Añade la configuración de ciclo de vida modificada al bucket. Amazon S3 reemplaza la configuración de
ciclo de vida existente en el bucket especificado.
• Recupera la configuración de nuevo y verifica que tiene el número correcto de reglas a partir del número
impreso de reglas.
• Elimina la configuración de nuevo y verifica que se ha eliminado intentando volver a recuperarla.

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.BucketLifecycleConfiguration;
import com.amazonaws.services.s3.model.BucketLifecycleConfiguration.Transition;

Versión de API 2006-03-01


157
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

import com.amazonaws.services.s3.model.StorageClass;
import com.amazonaws.services.s3.model.Tag;
import com.amazonaws.services.s3.model.lifecycle.LifecycleAndOperator;
import com.amazonaws.services.s3.model.lifecycle.LifecycleFilter;
import com.amazonaws.services.s3.model.lifecycle.LifecyclePrefixPredicate;
import com.amazonaws.services.s3.model.lifecycle.LifecycleTagPredicate;

import java.io.IOException;
import java.util.Arrays;

public class LifecycleConfiguration {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

// Create a rule to archive objects with the "glacierobjects/" prefix to Glacier


immediately.
BucketLifecycleConfiguration.Rule rule1 = new BucketLifecycleConfiguration.Rule()
.withId("Archive immediately rule")
.withFilter(new LifecycleFilter(new
LifecyclePrefixPredicate("glacierobjects/")))
.addTransition(new
Transition().withDays(0).withStorageClass(StorageClass.Glacier))
.withStatus(BucketLifecycleConfiguration.ENABLED);

// Create a rule to transition objects to the Standard-Infrequent Access storage


class
// after 30 days, then to Glacier after 365 days. Amazon S3 will delete the objects
after 3650 days.
// The rule applies to all objects with the tag "archive" set to "true".
BucketLifecycleConfiguration.Rule rule2 = new BucketLifecycleConfiguration.Rule()
.withId("Archive and then delete rule")
.withFilter(new LifecycleFilter(new LifecycleTagPredicate(new
Tag("archive", "true"))))
.addTransition(new
Transition().withDays(30).withStorageClass(StorageClass.StandardInfrequentAccess))
.addTransition(new
Transition().withDays(365).withStorageClass(StorageClass.Glacier))
.withExpirationInDays(3650)
.withStatus(BucketLifecycleConfiguration.ENABLED);

// Add the rules to a new BucketLifecycleConfiguration.


BucketLifecycleConfiguration configuration = new BucketLifecycleConfiguration()
.withRules(Arrays.asList(rule1, rule2));

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Save the configuration.


s3Client.setBucketLifecycleConfiguration(bucketName, configuration);

// Retrieve the configuration.


configuration = s3Client.getBucketLifecycleConfiguration(bucketName);

// Add a new rule with both a prefix predicate and a tag predicate.
configuration.getRules().add(new
BucketLifecycleConfiguration.Rule().withId("NewRule")
.withFilter(new LifecycleFilter(new LifecycleAndOperator(
Arrays.asList(new LifecyclePrefixPredicate("YearlyDocuments/"),
new LifecycleTagPredicate(new Tag("expire_after",
"ten_years"))))))
.withExpirationInDays(3650)

Versión de API 2006-03-01


158
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

.withStatus(BucketLifecycleConfiguration.ENABLED));

// Save the configuration.


s3Client.setBucketLifecycleConfiguration(bucketName, configuration);

// Retrieve the configuration.


configuration = s3Client.getBucketLifecycleConfiguration(bucketName);

// Verify that the configuration now has three rules.


configuration = s3Client.getBucketLifecycleConfiguration(bucketName);
System.out.println("Expected # of rules = 3; found: " +
configuration.getRules().size());

// Delete the configuration.


s3Client.deleteBucketLifecycleConfiguration(bucketName);

// Verify that the configuration has been deleted by attempting to retrieve it.
configuration = s3Client.getBucketLifecycleConfiguration(bucketName);
String s = (configuration == null) ? "No configuration found." : "Configuration
found.";
System.out.println(s);
} 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();
}
}
}

Administración del ciclo de vida de un objeto con AWS SDK


para .NET
Puede utilizar AWS SDK para .NET para administrar la configuración del ciclo de vida en un bucket.
Para obtener más información acerca de cómo administrar la configuración del ciclo de vida, consulte
Administración del ciclo de vida de los objetos (p. 127).
Note

Cuando añade una configuración de ciclo de vida, Amazon S3 reemplaza la configuración de


ciclo de vida existente en el bucket especificado. Para actualizar una configuración, primero
debe recuperar la configuración de ciclo de vida existente, hacer los cambios y luego añadir la
configuración de ciclo de vida revisada al bucket.

Example Ejemplo de código .NET

El siguiente ejemplo muestra cómo usar AWS SDK para .NET para añadir, actualizar y eliminar una
configuración de ciclo de vida de un bucket. Este ejemplo de código hace lo siguiente:

• Añade una configuración de ciclo de vida a un bucket.


• Recupera la configuración de ciclo de vida y la actualiza añadiendo otra regla.
• Añade la configuración de ciclo de vida modificada al bucket. Amazon S3 reemplaza la configuración de
ciclo de vida existente en el bucket especificado.
• Recupera la configuración de nuevo y la verifica imprimiendo el número de reglas en la configuración.
• Elimina la configuración del ciclo de vida y verifica la eliminación.

Versión de API 2006-03-01


159
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class LifecycleTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
AddUpdateDeleteLifecycleConfigAsync().Wait();
}

private static async Task AddUpdateDeleteLifecycleConfigAsync()


{
try
{
var lifeCycleConfiguration = new LifecycleConfiguration()
{
Rules = new List<LifecycleRule>
{
new LifecycleRule
{
Id = "Archive immediately rule",
Filter = new LifecycleFilter()
{
LifecycleFilterPredicate = new
LifecyclePrefixPredicate()
{
Prefix = "glacierobjects/"
}
},
Status = LifecycleRuleStatus.Enabled,
Transitions = new List<LifecycleTransition>
{
new LifecycleTransition
{
Days = 0,
StorageClass = S3StorageClass.Glacier
}
},
},
new LifecycleRule
{
Id = "Archive and then delete rule",
Filter = new LifecycleFilter()
{
LifecycleFilterPredicate = new
LifecyclePrefixPredicate()
{
Prefix = "projectdocs/"
}
},
Status = LifecycleRuleStatus.Enabled,

Versión de API 2006-03-01


160
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

Transitions = new List<LifecycleTransition>


{
new LifecycleTransition
{
Days = 30,
StorageClass =
S3StorageClass.StandardInfrequentAccess
},
new LifecycleTransition
{
Days = 365,
StorageClass = S3StorageClass.Glacier
}
},
Expiration = new LifecycleRuleExpiration()
{
Days = 3650
}
}
}
};

// Add the configuration to the bucket.


await AddExampleLifecycleConfigAsync(client, lifeCycleConfiguration);

// Retrieve an existing configuration.


lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);

// Add a new rule.


lifeCycleConfiguration.Rules.Add(new LifecycleRule
{
Id = "NewRule",
Filter = new LifecycleFilter()
{
LifecycleFilterPredicate = new LifecyclePrefixPredicate()
{
Prefix = "YearlyDocuments/"
}
},
Expiration = new LifecycleRuleExpiration()
{
Days = 3650
}
});

// Add the configuration to the bucket.


await AddExampleLifecycleConfigAsync(client, lifeCycleConfiguration);

// Verify that there are now three rules.


lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);
Console.WriteLine("Expected # of rulest=3; found:{0}",
lifeCycleConfiguration.Rules.Count);

// Delete the configuration.


await RemoveLifecycleConfigAsync(client);

// Retrieve a nonexistent configuration.


lifeCycleConfiguration = await RetrieveLifecycleConfigAsync(client);

}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered ***. Message:'{0}' when writing an
object", e.Message);
}
catch (Exception e)

Versión de API 2006-03-01


161
Amazon Simple Storage Service Guía del desarrollador
Configuración del ciclo de vida

{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}

static async Task AddExampleLifecycleConfigAsync(IAmazonS3 client,


LifecycleConfiguration configuration)
{

PutLifecycleConfigurationRequest request = new PutLifecycleConfigurationRequest


{
BucketName = bucketName,
Configuration = configuration
};
var response = await client.PutLifecycleConfigurationAsync(request);
}

static async Task<LifecycleConfiguration> RetrieveLifecycleConfigAsync(IAmazonS3


client)
{
GetLifecycleConfigurationRequest request = new GetLifecycleConfigurationRequest
{
BucketName = bucketName
};
var response = await client.GetLifecycleConfigurationAsync(request);
var configuration = response.Configuration;
return configuration;
}

static async Task RemoveLifecycleConfigAsync(IAmazonS3 client)


{
DeleteLifecycleConfigurationRequest request = new
DeleteLifecycleConfigurationRequest
{
BucketName = bucketName
};
await client.DeleteLifecycleConfigurationAsync(request);
}
}
}

Administración del ciclo de vida de un objeto con AWS SDK parar


Ruby
Puede utilizar AWS SDK parar Ruby para administrar la configuración de ciclo de vida en un bucket con
la clase AWS::S3::BucketLifecycleConfiguration. Para obtener más información sobre cómo usar AWS
SDK parar Ruby con Amazon S3, consulte Uso de la versión 3 de AWS SDK parar Ruby (p. 709).
Para obtener más información acerca de cómo administrar la configuración del ciclo de vida, consulte
Administración del ciclo de vida de los objetos (p. 127).

Administración del ciclo de vida de un objeto con la API de REST


Puede usar la Consola de administración de AWS para establecer la configuración del ciclo de vida en su
bucket. Si la aplicación lo requiere, puede también enviar solicitudes REST directamente. En las siguientes
secciones de la Amazon Simple Storage Service API Reference, se describe la API de REST relacionada
con la configuración del ciclo de vida.

• Ciclo de vida de PUT Bucket


• Ciclo de vida de GET Bucket
• Ciclo de vida de DELETE Bucket

Versión de API 2006-03-01


162
Amazon Simple Storage Service Guía del desarrollador
Cross-Origin Resource Sharing (CORS,
Uso compartido de recursos entre orígenes)

Cross-Origin Resource Sharing (CORS, Uso


compartido de recursos entre orígenes)
El uso compartido de recursos entre orígenes (CORS) define una manera para que las aplicaciones web
de los clientes cargadas en un dominio interactúen con los recursos de un dominio diferente. Gracias a que
admite el CORS, es posible desarrollar aplicaciones web del lado del cliente completas con Amazon S3 y
permitir un acceso entre orígenes a los recursos de Amazon S3 de manera selectiva.

En esta sección, se proporciona información general acerca del CORS. En los subtemas, se describe
cómo se puede habilitar el CORS con la consola de Amazon S3 o, mediante programación, con los SDK
de AWS y la API de REST de Amazon S3.

Temas
• Uso compartido de recursos entre orígenes: casos de uso (p. 163)
• ¿Cómo configuro el CORS en mi bucket? (p. 163)
• ¿Cómo Amazon S3 evalúa la configuración CORS en un bucket? (p. 166)
• Habilitación del uso compartido de recursos entre orígenes (CORS) (p. 166)
• Solución de problemas del uso compartido de recursos entre orígenes (CORS) (p. 172)

Uso compartido de recursos entre orígenes: casos de


uso
A continuación, se muestran ejemplos de casos para el uso del CORS:

• Escenario 1: Suponga que aloja un sitio web en un bucket de Amazon S3 denominado website como
se describe en Alojamiento de un sitio web estático en Amazon S3 (p. 523). Sus usuarios cargan el
punto de enlace de sitio web http://website.s3-website-us-east-1.amazonaws.com. Ahora
desea usar el código JavaScript en la páginas web que se almacenan en este bucket para poder realizar
solicitudes GET y PUT autenticadas con el mismo bucket mediante el punto de enlace de la API de
Amazon S3 para el bucket, website.s3.amazonaws.com. Un navegador, por lo general, bloquearía el
código JavaScript y no permitiría realizar esas solicitudes, pero con el CORS puede configurar el bucket
para que se habiliten de manera explícita las solicitudes entre orígenes de website.s3-website-us-
east-1.amazonaws.com.
• Escenario 2: Suponga que desea alojar una fuente web en un bucket de S3. Nuevamente, los
navegadores requieren una comprobación del CORS (también conocida como comprobación preliminar)
para la carga de fuentes web, por lo que configuraría el bucket que aloja la fuente web para que permita
que cualquier origen realice estas solicitudes

¿Cómo configuro el CORS en mi bucket?


Para configurar su bucket de manera que permita solicitudes entre orígenes, se crea una configuración
CORS, que es un documento XML con reglas que identifican los orígenes que permitirá que obtengan
acceso a su bucket, las operaciones (métodos HTTP) que se admitirán para cada origen y otra información
de cada operación específica.

Puede añadir hasta 100 reglas a la configuración. Puede añadir el documento XML como subrecurso cors
al bucket mediante programación o mediante la consola de Amazon S3. Para obtener más información,
consulte Habilitación del uso compartido de recursos entre orígenes (CORS) (p. 166).

En lugar de obtener acceso a un sitio web con el punto de enlace del sitio web de Amazon S3, puede
usar su propio dominio, como example1.com, para alojar su contenido. Para obtener información

Versión de API 2006-03-01


163
Amazon Simple Storage Service Guía del desarrollador
¿Cómo configuro el CORS en mi bucket?

acerca de su propio dominio, consulte Ejemplo: configuración de un sitio web estático con un dominio
personalizado (p. 540). En el siguiente ejemplo, la configuración cors tiene tres reglas, que se
especifican como elementos CORSRule:

• La primera regla permite solicitudes PUT, POST y DELETE entre orígenes del origen http://
www.example1.com. La regla también permite todos los encabezados en una solicitud OPTIONS
de comprobación preliminar a través del encabezado Access-Control-Request-Headers. Como
respuesta a solicitudes OPTIONS de comprobación preliminar, Amazon S3 devuelve los encabezados
solicitados.
• La segunda regla permite las mismas solicitudes entre orígenes que la primera, pero se aplica a otro
origen, http://www.example2.com.
• La tercera regla permite solicitudes GET entre orígenes de todos los orígenes. El carácter comodín *
hace referencia a todos los orígenes.

<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://www.example1.com</AllowedOrigin>

<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>

<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>http://www.example2.com</AllowedOrigin>

<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>

<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>

La configuración CORS también permite parámetros de configuración opcionales, como se muestra en la


siguiente configuración CORS. En este ejemplo, la configuración CORS permite las solicitudes PUT, POST
y DELETE entre orígenes desde el origen http://www.example.com.

<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://www.example.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>x-amz-server-side-encryption</
ExposeHeader>
<ExposeHeader>x-amz-request-id</
ExposeHeader>
<ExposeHeader>x-amz-id-2</ExposeHeader>
</CORSRule>
</CORSConfiguration>

El elemento CORSRule en la configuración anterior incluye los siguientes elementos opcionales:

Versión de API 2006-03-01


164
Amazon Simple Storage Service Guía del desarrollador
¿Cómo configuro el CORS en mi bucket?

• MaxAgeSeconds: especifica la cantidad de tiempo en segundos (en este ejemplo, 3000) que el
navegador almacena en caché una respuesta de Amazon S3 a una solicitud OPTIONS de comprobación
preliminar para el recurso especificado. Mediante el almacenamiento en caché de la respuesta, el
navegador no tiene que enviar solicitudes de comprobación preliminar a Amazon S3 si se repetirá la
solicitud original.
• ExposeHeader: identifica los encabezados de respuesta (en este ejemplo, x-amz-server-side-
encryption, x-amz-request-id y x-amz-id-2) a los que los clientes pueden obtener acceso
desde sus aplicaciones (por ejemplo, desde un objeto XMLHttpRequest con código JavaScript).

Elemento AllowedMethod
En la configuración CORS, puede especificar los siguientes valores para el elemento AllowedMethod:

• GET
• PUT
• POST
• ELIMINAR
• HEAD

Elemento AllowedOrigin
En el elemento AllowedOrigin, se especifican los orígenes desde los cuales desea permitir solicitudes
entre dominios, por ejemplo, http://www.example.com. La cadena de origen solo puede contener un
carácter comodín *, como http://*.example.com. Como alternativa, se puede especificar el carácter
* como el origen para habilitar el envío de solicitudes entre orígenes de todos los orígenes. Se puede
también especificar el método https para solo habilitar orígenes seguros.

Elemento AllowedHeader
El elemento AllowedHeader especifica qué encabezados se permiten en una solicitud de comprobación
preliminar a través del encabezado Access-Control-Request-Headers. Cada nombre de encabezado
en el encabezado Access-Control-Request-Headers debe coincidir con una entrada correspondiente
en la regla. Amazon S3 solo enviará los encabezados permitidos en una respuesta solicitados. Para ver
una lista de muestra de los encabezados que se pueden usar en las solicitudes que se envían a Amazon
S3, consulte la sección de encabezados de respuesta habituales en la guía Amazon Simple Storage
Service API Reference.

Cada cadena con el elemento AllowedHeader en la regla puede contener como máximo un carácter
comodín *. Por ejemplo, el elemento <AllowedHeader>x-amz-*</AllowedHeader> habilita los
encabezados exclusivos de Amazon.

Elemento ExposeHeader
Cada elemento ExposeHeader identifica un encabezado en la respuesta al que desea que los clientes
puedan obtener acceso desde sus aplicaciones (por ejemplo, desde un objeto XMLHttpRequest con
código JavaScript). Para ver una lista de encabezados de respuesta de Amazon S3 comunes, consulte
la sección de encabezados de respuesta habituales en la guía Amazon Simple Storage Service API
Reference.

Elemento MaxAgeSeconds
El elemento MaxAgeSeconds especifica el tiempo en segundos que el navegador puede almacenar en
caché la respuesta de una solicitud de comprobación preliminar según la identifica el recurso, el método
HTTP y el origen.

Versión de API 2006-03-01


165
Amazon Simple Storage Service Guía del desarrollador
¿Cómo Amazon S3 evalúa la
configuración CORS en un bucket?

¿Cómo Amazon S3 evalúa la configuración CORS en


un bucket?
Cuando Amazon S3 recibe una solicitud de comprobación preliminar de un navegador, evalúa la
configuración CORS para el bucket y usa la primera regla CORSRule que coincide con la solicitud del
navegador entrante para habilitar una solicitud entre orígenes. Para que una regla coincida, se deben
cumplir las siguientes condiciones:

• El encabezado Origin de la solicitud debe coincidir con un elemento AllowedOrigin.


• El método de solicitud (por ejemplo, GET o PUT) o el encabezado Access-Control-Request-
Method en el caso de una solicitud OPTIONS de comprobación preliminar debe ser uno de los
elementos AllowedMethod.
• Cada encabezado que se incluye en el encabezado Access-Control-Request-Headers de la
solicitud en la solicitud de comprobación preliminar debe coincidir con un elemento AllowedHeader.

Note

Las ACL y políticas siguen aplicándose cuando habilita el CORS en un bucket.

Habilitación del uso compartido de recursos entre


orígenes (CORS)
Habilite el uso compartido de recursos entre orígenes mediante el establecimiento de una configuración
CORS en su bucket con la Consola de administración de AWS, la Application Programming Interface
(API, Interfaz de programación de aplicaciones) de REST o los Software Development Kits (SDK, Kits de
desarrollo de software) de AWS.

Temas
• Habilitación del uso compartido de recursos entre orígenes (CORS) con la Consola de administración
de AWS (p. 166)
• Habilitación del uso compartido de recursos entre orígenes (CORS) con la AWS SDK for
Java (p. 166)
• Habilitación del uso compartido de recursos entre orígenes (CORS) con la AWS SDK
para .NET (p. 169)
• Habilitación del uso compartido de recursos entre orígenes (CORS) con la API de REST (p. 171)

Habilitación del uso compartido de recursos entre orígenes


(CORS) con la Consola de administración de AWS
Puede usar la Consola de administración de AWS para establecer una configuración CORS en su bucket.
Para obtener instrucciones, consulte ¿Cómo permito que se compartan recursos entre dominios con
CORS? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Habilitación del uso compartido de recursos entre orígenes


(CORS) con la AWS SDK for Java
Puede usar el AWS SDK for Java para administrar el Cross-Origin Resource Sharing (CORS, Uso
compartido de recursos entre orígenes) para un bucket. Para obtener más información acerca de CORS,
consulte Cross-Origin Resource Sharing (CORS, Uso compartido de recursos entre orígenes) (p. 163).

Versión de API 2006-03-01


166
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

Example

El siguiente ejemplo:

• Crea una configuración CORS y establece la configuración en un bucket


• Recupera la configuración y la modifica añadiendo una regla
• Añade la configuración modificada al bucket
• Elimina configuración

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Prueba de
ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.BucketCrossOriginConfiguration;
import com.amazonaws.services.s3.model.CORSRule;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CORS {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

// Create two CORS rules.


List<CORSRule.AllowedMethods> rule1AM = new ArrayList<CORSRule.AllowedMethods>();
rule1AM.add(CORSRule.AllowedMethods.PUT);
rule1AM.add(CORSRule.AllowedMethods.POST);
rule1AM.add(CORSRule.AllowedMethods.DELETE);
CORSRule rule1 = new CORSRule().withId("CORSRule1").withAllowedMethods(rule1AM)
.withAllowedOrigins(Arrays.asList("http://*.example.com"));

List<CORSRule.AllowedMethods> rule2AM = new ArrayList<CORSRule.AllowedMethods>();


rule2AM.add(CORSRule.AllowedMethods.GET);
CORSRule rule2 = new CORSRule().withId("CORSRule2").withAllowedMethods(rule2AM)
.withAllowedOrigins(Arrays.asList("*")).withMaxAgeSeconds(3000)
.withExposedHeaders(Arrays.asList("x-amz-server-side-encryption"));

List<CORSRule> rules = new ArrayList<CORSRule>();


rules.add(rule1);
rules.add(rule2);

// Add the rules to a new CORS configuration.


BucketCrossOriginConfiguration configuration = new
BucketCrossOriginConfiguration();
configuration.setRules(rules);

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

Versión de API 2006-03-01


167
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

// Add the configuration to the bucket.


s3Client.setBucketCrossOriginConfiguration(bucketName, configuration);

// Retrieve and display the configuration.


configuration = s3Client.getBucketCrossOriginConfiguration(bucketName);
printCORSConfiguration(configuration);

// Add another new rule.


List<CORSRule.AllowedMethods> rule3AM = new
ArrayList<CORSRule.AllowedMethods>();
rule3AM.add(CORSRule.AllowedMethods.HEAD);
CORSRule rule3 = new CORSRule().withId("CORSRule3").withAllowedMethods(rule3AM)
.withAllowedOrigins(Arrays.asList("http://www.example.com"));

rules = configuration.getRules();
rules.add(rule3);
configuration.setRules(rules);
s3Client.setBucketCrossOriginConfiguration(bucketName, configuration);

// Verify that the new rule was added by checking the number of rules in the
configuration.
configuration = s3Client.getBucketCrossOriginConfiguration(bucketName);
System.out.println("Expected # of rules = 3, found " +
configuration.getRules().size());

// Delete the configuration.


s3Client.deleteBucketCrossOriginConfiguration(bucketName);
System.out.println("Removed CORS configuration.");

// Retrieve and display the configuration to verify that it was


// successfully deleted.
configuration = s3Client.getBucketCrossOriginConfiguration(bucketName);
printCORSConfiguration(configuration);
} 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();
}
}

private static void printCORSConfiguration(BucketCrossOriginConfiguration


configuration) {
if (configuration == null) {
System.out.println("Configuration is null.");
} else {
System.out.println("Configuration has " + configuration.getRules().size() + "
rules\n");

for (CORSRule rule : configuration.getRules()) {


System.out.println("Rule ID: " + rule.getId());
System.out.println("MaxAgeSeconds: " + rule.getMaxAgeSeconds());
System.out.println("AllowedMethod: " + rule.getAllowedMethods());
System.out.println("AllowedOrigins: " + rule.getAllowedOrigins());
System.out.println("AllowedHeaders: " + rule.getAllowedHeaders());
System.out.println("ExposeHeader: " + rule.getExposedHeaders());
System.out.println();
}
}
}
}

Versión de API 2006-03-01


168
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

Habilitación del uso compartido de recursos entre orígenes


(CORS) con la AWS SDK para .NET
Para administrar el uso compartido de recursos entre orígenes (CORS) para un bucket. puede utilizar AWS
SDK para .NET. Para obtener más información acerca de CORS, consulte Cross-Origin Resource Sharing
(CORS, Uso compartido de recursos entre orígenes) (p. 163).

Example

El código de C# siguiente:

• Crea una configuración CORS y establece la configuración en un bucket


• Recupera la configuración y la modifica añadiendo una regla
• Añade la configuración modificada al bucket
• Elimina configuración

Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class CORSTest
{
private const string bucketName = "*** bucket name ***";
// 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);
CORSConfigTestAsync().Wait();
}
private static async Task CORSConfigTestAsync()
{
try
{
// Create a new configuration request and add two rules
CORSConfiguration configuration = new CORSConfiguration
{
Rules = new System.Collections.Generic.List<CORSRule>
{
new CORSRule
{
Id = "CORSRule1",
AllowedMethods = new List<string> {"PUT", "POST", "DELETE"},
AllowedOrigins = new List<string> {"http://*.example.com"}
},
new CORSRule
{
Id = "CORSRule2",
AllowedMethods = new List<string> {"GET"},

Versión de API 2006-03-01


169
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

AllowedOrigins = new List<string> {"*"},


MaxAgeSeconds = 3000,
ExposeHeaders = new List<string> {"x-amz-server-side-
encryption"}
}
}
};

// Add the configuration to the bucket.


await PutCORSConfigurationAsync(configuration);

// Retrieve an existing configuration.


configuration = await RetrieveCORSConfigurationAsync();

// Add a new rule.


configuration.Rules.Add(new CORSRule
{
Id = "CORSRule3",
AllowedMethods = new List<string> { "HEAD" },
AllowedOrigins = new List<string> { "http://www.example.com" }
});

// Add the configuration to the bucket.


await PutCORSConfigurationAsync(configuration);

// Verify that there are now three rules.


configuration = await RetrieveCORSConfigurationAsync();
Console.WriteLine();
Console.WriteLine("Expected # of rulest=3; found:{0}",
configuration.Rules.Count);
Console.WriteLine();
Console.WriteLine("Pause before configuration delete. To continue, click
Enter...");
Console.ReadKey();

// Delete the configuration.


await DeleteCORSConfigurationAsync();

// Retrieve a nonexistent configuration.


configuration = await RetrieveCORSConfigurationAsync();
}
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);
}
}

static async Task PutCORSConfigurationAsync(CORSConfiguration configuration)


{

PutCORSConfigurationRequest request = new PutCORSConfigurationRequest


{
BucketName = bucketName,
Configuration = configuration
};

var response = await s3Client.PutCORSConfigurationAsync(request);


}

static async Task<CORSConfiguration> RetrieveCORSConfigurationAsync()

Versión de API 2006-03-01


170
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

{
GetCORSConfigurationRequest request = new GetCORSConfigurationRequest
{
BucketName = bucketName

};
var response = await s3Client.GetCORSConfigurationAsync(request);
var configuration = response.Configuration;
PrintCORSRules(configuration);
return configuration;
}

static async Task DeleteCORSConfigurationAsync()


{
DeleteCORSConfigurationRequest request = new DeleteCORSConfigurationRequest
{
BucketName = bucketName
};
await s3Client.DeleteCORSConfigurationAsync(request);
}

static void PrintCORSRules(CORSConfiguration configuration)


{
Console.WriteLine();

if (configuration == null)
{
Console.WriteLine("\nConfiguration is null");
return;
}

Console.WriteLine("Configuration has {0} rules:", configuration.Rules.Count);


foreach (CORSRule rule in configuration.Rules)
{
Console.WriteLine("Rule ID: {0}", rule.Id);
Console.WriteLine("MaxAgeSeconds: {0}", rule.MaxAgeSeconds);
Console.WriteLine("AllowedMethod: {0}", string.Join(", ",
rule.AllowedMethods.ToArray()));
Console.WriteLine("AllowedOrigins: {0}", string.Join(", ",
rule.AllowedOrigins.ToArray()));
Console.WriteLine("AllowedHeaders: {0}", string.Join(", ",
rule.AllowedHeaders.ToArray()));
Console.WriteLine("ExposeHeader: {0}", string.Join(", ",
rule.ExposeHeaders.ToArray()));
}
}
}
}

Habilitación del uso compartido de recursos entre orígenes


(CORS) con la API de REST
Para establecer una configuración CORS en su bucket, puede usar la Consola de administración de
AWS. Si la aplicación lo requiere, puede también enviar solicitudes REST directamente. En las siguientes
secciones de la Amazon Simple Storage Service API Reference, se describen las acciones de la API de
REST relacionadas con la configuración CORS:

• PUT Bucket cors


• GET Bucket cors
• DELETE Bucket cors
• OPTIONS object

Versión de API 2006-03-01


171
Amazon Simple Storage Service Guía del desarrollador
Solución de problemas de CORS

Solución de problemas del uso compartido de


recursos entre orígenes (CORS)
Si detecta un comportamiento imprevisto al acceder a buckets con la configuración CORS, intente los
siguientes pasos para solucionar los problemas:

1. Verifique que la configuración CORS se haya establecido en el bucket.

Para obtener instrucciones, consulte Edición de permisos de bucket en la Guía del usuario de la consola
de Amazon Simple Storage Service. Si se ha establecido la configuración CORS, la consola muestra un
enlace Edit CORS Configuration (Editar configuración de CORS) en la sección Permissions (Permisos)
del bucket Properties (Propiedades).
2. Capture la solicitud y respuesta completas con la herramienta que elija. Para cada solicitud que Amazon
S3 reciba, debe haber una regla CORS que coincida con los datos de la solicitud, de la siguiente
manera:
a. Verifique que la solicitud tenga el encabezado Origin.

Si falta el encabezado, Amazon S3 no considera la solicitud como una solicitud entre orígenes y no
envía los encabezados de respuesta CORS en la respuesta.
b. Verifique que el encabezado Origin de la solicitud coincida con al menos uno de los elementos
AllowedOrigin en la regla CORSRule especificada.

Los valores de esquema, host y puerto del encabezado de la solicitud Origin deben coincidir con los
elementos AllowedOrigin en la regla CORSRule. Por ejemplo, si establece que la regla CORSRule
permita el origen http://www.example.com, los orígenes https://www.example.com
y http://www.example.com:80 de la solicitud no coinciden con el origen permitido en su
configuración.
c. Verifique que el método de la solicitud (o en la solicitud de comprobación preliminar especificado en
el Access-Control-Request-Method) sea uno de los elementos AllowedMethod en la misma
regla CORSRule.
d. En el caso de una solicitud de comprobación preliminar, si la solicitud incluye un encabezado
Access-Control-Request-Headers, verifique que la regla CORSRule incluya las entradas
AllowedHeader para cada valor en el encabezado Access-Control-Request-Headers.

Operaciones en objetos
Amazon S3 le permite almacenar, recuperar y eliminar objetos. Puede recuperar un objeto en su totalidad
o solo parte del mismo. Si ha habilitado el control de versiones en su bucket, puede recuperar una versión
específica del objeto. También puede recuperar un subrecurso asociado con su objeto y actualizarlo donde
sea conveniente. Puede realizar una copia de su objeto existente. En función del tamaño del objeto, se
deben tener en cuenta las siguientes consideraciones relacionadas con la carga y la copia:

• Subida de objetos: puede cargar objetos de hasta 5 GB de tamaño en una única operación. Para objetos
mayores de 5 GB, debe usar la API de carga multiparte.

Con la API de carga multiparte podrá cargar objetos de hasta 5 TB cada uno. Para obtener más
información, consulte Carga de objetos con la API de carga multiparte (p. 186).
• Copia de objetos: la operación de copia crea una copia de un objeto que ya esté almacenado en
Amazon S3.

Puede crear una copia de su objeto de hasta 5 GB de tamaño en una única operación atómica. Sin
embargo, para copiar un objeto mayor de 5 GB, debe usar la API de carga multiparte. Para obtener más
información, consulte Copia de objetos (p. 219).

Versión de API 2006-03-01


172
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

Puede utilizar la API REST (consulte Realización de solicitudes con la API de REST (p. 45)) para trabajar
con objetos o usar una de las siguientes bibliotecas del SDK de AWS:

• AWS SDK for Java


• AWS SDK para .NET
• AWS SDK para PHP

Estas bibliotecas proporcionan una abstracción de alto nivel que facilita el trabajo con objetos. Sin
embargo, si la aplicación lo requiere, puede utilizar directamente la API REST.

Obtención de objetos
Temas
• Recursos relacionados (p. 173)
• Obtención de un objeto con AWS SDK for Java (p. 174)
• Obtención de un objeto con AWS SDK para .NET (p. 176)
• Obtención de un objeto con AWS SDK para PHP (p. 177)
• Obtención de un objeto con la API REST (p. 179)
• Compartir un objeto con otros (p. 179)

Puede recuperar objetos directamente desde Amazon S3. Tiene las siguientes opciones al recuperar un
objeto:

• Recuperar un objeto completo: con una única operación GET puede recuperar la totalidad del objeto
almacenado en Amazon S3.
• Recuperar un objeto en partes: si usa el encabezado HTTP Range en una solicitud GET, puede
recuperar un rango específico de bytes en un objeto almacenado en Amazon S3.

Puede reanudar la obtención de otras partes del objeto cuando su aplicación esté lista. La función de
descarga reanudable resulta útil cuando solo necesite porciones de los datos de su objeto. También
resulta útil cuando la conectividad de red es deficiente y necesita reaccionar ante los errores.
Note

Amazon S3 no admite la recuperación de varios rangos de datos por solicitud GET.

Al recuperar un objeto, sus metadatos se devuelven en los encabezados de respuesta. Podría haber veces
en las que quiera sobrescribir determinados valores de encabezados de respuesta que se devuelvan en
una respuesta GET. Por ejemplo, podría sobrescribir el valor del encabezado de respuesta Content-
Disposition en su solicitud GET. La API REST GET Object (consulte GET Object) le permite especificar
parámetros de la cadena de búsqueda en su solicitud GET para sobrescribir estos valores.

Los AWS SDK para Java, .NET y PHP también proporcionan los objetos necesarios para especificar
valores para estos encabezados de respuesta en su solicitud GET.

Al recuperar objetos almacenados con cifrado en el servidor, tendrá que proporcionar los encabezados
de solicitud apropiados. Para obtener más información, consulte Protección de datos mediante
cifrado (p. 274).

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Versión de API 2006-03-01


173
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

Obtención de un objeto con AWS SDK for Java


Al descargar un objeto a través de AWS SDK for Java, Amazon S3 devuelve todos los metadatos del
objeto y una secuencia de entrada desde la que leer los contenidos del objeto.

Para recuperar un objeto, haga lo siguiente:

• Ejecute el método AmazonS3Client.getObject() con un nombre de bucket y una clave de objeto en


una solicitud.
• Ejecute uno de los métodos de instancia de S3Object para procesar la secuencia de entrada.

Note
Su conexión de red permanece abierta hasta lea todos los datos o cierre la secuencia de entrada.
Se recomienda leer el contenido de la secuencia lo más rápido posible.

A continuación se muestran algunas variaciones que podría utilizar:

• En lugar de leer el objeto completo, puede leer solo una parte de los datos del objeto especificando el
rango de bytes que desea en la solicitud.
• Puede sobrescribir opcionalmente los valores de encabezado de respuesta (consulte Obtención de
objetos (p. 173)) usando un objeto ResponseHeaderOverrides y estableciendo la propiedad de
solicitud correspondiente. Por ejemplo, puede usar esta característica para indicar que el objeto se debe
descargar en un archivo con un nombre de archivo distinto al nombre de clave del objeto.

En el siguiente ejemplo se recupera un objeto de un bucket de Amazon S3 de tres formas: en primer


lugar, como un objeto completo, luego como un intervalo de bits desde el objeto, después como un objeto
completo con valores de cabecera anulados. Para obtener más información sobre la obtención de objetos
desde Amazon S3, consulte GET Object. Para obtener instrucciones sobre la creación y comprobación de
una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.GetObjectRequest;
import com.amazonaws.services.s3.model.ResponseHeaderOverrides;
import com.amazonaws.services.s3.model.S3Object;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class GetObject {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String key = "*** Object key ***";

S3Object fullObject = null, objectPortion = null, headerOverrideObject = null;


try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();

Versión de API 2006-03-01


174
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

// Get an object and print its contents.


System.out.println("Downloading an object");
fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
System.out.println("Content-Type: " +
fullObject.getObjectMetadata().getContentType());
System.out.println("Content: ");
displayTextInputStream(fullObject.getObjectContent());

// Get a range of bytes from an object and print the bytes.


GetObjectRequest rangeObjectRequest = new GetObjectRequest(bucketName, key)
.withRange(0, 9);
objectPortion = s3Client.getObject(rangeObjectRequest);
System.out.println("Printing bytes retrieved.");
displayTextInputStream(objectPortion.getObjectContent());

// Get an entire object, overriding the specified response headers, and print
the object's content.
ResponseHeaderOverrides headerOverrides = new ResponseHeaderOverrides()
.withCacheControl("No-cache")
.withContentDisposition("attachment; filename=example.txt");
GetObjectRequest getObjectRequestHeaderOverride = new
GetObjectRequest(bucketName, key)
.withResponseHeaders(headerOverrides);
headerOverrideObject = s3Client.getObject(getObjectRequestHeaderOverride);
displayTextInputStream(headerOverrideObject.getObjectContent());
} 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();
} finally {
// To ensure that the network connection doesn't remain open, close any open
input streams.
if (fullObject != null) {
fullObject.close();
}
if (objectPortion != null) {
objectPortion.close();
}
if (headerOverrideObject != null) {
headerOverrideObject.close();
}
}
}

private static void displayTextInputStream(InputStream input) throws IOException {


// Read the text input stream one line at a time and display each line.
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println();
}
}

Versión de API 2006-03-01


175
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

Obtención de un objeto con AWS SDK para .NET


Al descargar un objeto, obtiene todos los metadatos del objeto y una secuencia desde la que leer los
contenidos. Debe leer el contenido de la secuencia con la mayor rapidez posible, ya que los datos se
transmiten directamente desde Amazon S3 y su conexión de red permanecerá abierta hasta que lea todos
los datos o cierre la secuencia de entrada. Haga lo siguiente para obtener un objeto:

• Ejecute el método getObject proporcionando un nombre de bucket y una clave de objeto en una
solicitud.
• Ejecute uno de los métodos de GetObjectResponse para procesar la secuencia.

A continuación se muestran algunas variaciones que podría utilizar:

• En lugar de leer el objeto completo, puede leer solo una parte de los datos del objeto especificando el
rango de bytes en la solicitud, como se muestra en el siguiente ejemplo de C#.

Example

GetObjectRequest request = new GetObjectRequest


{
BucketName = bucketName,
Key = keyName,
ByteRange = new ByteRange(0, 10)
};

• Al recuperar un objeto, puede sobrescribir opcionalmente los valores de encabezado de respuesta


(consulte Obtención de objetos (p. 173)) usando un objeto ResponseHeaderOverrides y
estableciendo la propiedad de solicitud correspondiente. El siguiente código de C# muestra cómo hacer
esto. Por ejemplo, puede usar esta característica para indicar que el objeto se debe descargar en un
archivo con un nombre de archivo distinto al nombre de clave del objeto.

Example

GetObjectRequest request = new GetObjectRequest


{
BucketName = bucketName,
Key = keyName
};

ResponseHeaderOverrides responseHeaders = new ResponseHeaderOverrides();


responseHeaders.CacheControl = "No-cache";
responseHeaders.ContentDisposition = "attachment; filename=testing.txt";

request.ResponseHeaderOverrides = responseHeaders;

Example

En la siguiente muestra de código C# se recupera un objeto de un bucket de Amazon S3. A partir de la


respuesta, el ejemplo lee los datos del objeto con la propiedad GetObjectResponse.ResponseStream.
El ejemplo muestra también cómo puede usar la colección GetObjectResponse.Metadata para leer
los metadatos del objeto. Si el objeto que recupere tiene los metadatos x-amz-meta-title, el código
imprime el valor de los metadatos.

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

Versión de API 2006-03-01


176
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class GetObjectTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** object key ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
ReadObjectDataAsync().Wait();
}

static async Task ReadObjectDataAsync()


{
string responseBody = "";
try
{
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName
};
using (GetObjectResponse response = await client.GetObjectAsync(request))
using (Stream responseStream = response.ResponseStream)
using (StreamReader reader = new StreamReader(responseStream))
{
string title = response.Metadata["x-amz-meta-title"]; // Assume you
have "title" as medata added to the object.
string contentType = response.Headers["Content-Type"];
Console.WriteLine("Object metadata, Title: {0}", title);
Console.WriteLine("Content type: {0}", contentType);

responseBody = reader.ReadToEnd(); // Now you process the response


body.
}
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered ***. 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);
}
}
}
}

Obtención de un objeto con AWS SDK para PHP


En este tema se explica cómo utilizar una clase desde AWS SDK para PHP para recuperar un objeto de
Amazon S3. Puede recuperar un objeto en su totalidad o un rango de bytes desde el objeto. Se da por

Versión de API 2006-03-01


177
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

sentado que está familiarizado con las instrucciones para Uso del AWS SDK para PHP y ejecución de
ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.

Al recuperar un objeto, puede sobrescribir opcionalmente los valores de encabezado de respuesta


(consulte ) agregando las claves de respuesta del parámetro de la matriz, ResponseContentType,
ResponseContentLanguage, ResponseContentDisposition, ResponseCacheControl y
ResponseExpires, al método getObject(), como se muestra en el siguiente ejemplo de código PHP:

Example

$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname,
'ResponseContentType' => 'text/plain',
'ResponseContentLanguage' => 'en-US',
'ResponseContentDisposition' => 'attachment; filename=testing.txt',
'ResponseCacheControl' => 'No-cache',
'ResponseExpires' => gmdate(DATE_RFC2822, time() + 3600),
]);

Para obtener más información acerca de la recuperación de objetos, consulte Obtención de


objetos (p. 173).

El siguiente ejemplo de PHP recupera un objeto y muestra el contenido del objeto en el navegador. En
el ejemplo se muestra cómo utilizar el método getObject(). Para obtener información acerca de la
ejecución de ejemplos de PHP en esta guía, consulte Ejecución de ejemplos de PHP (p. 709).

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

try {
// Get the object.
$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname
]);

// Display the object in the browser.


header("Content-Type: {$result['ContentType']}");
echo $result['Body'];
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}

Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Documentación de AWS SDK para PHP

Versión de API 2006-03-01


178
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

Obtención de un objeto con la API REST


Puede utilizar el SDK de AWS para recuperar claves de objeto de un bucket. Sin embargo, si su aplicación
lo requiere, puede enviar solicitudes REST directamente. Puede enviar una solicitud GET para recuperar
claves de objeto. Para obtener más información sobre el formato de solicitud y respuesta, consulte Get
Object.

Compartir un objeto con otros


Temas
• Generar una URL de objeto prefirmada con AWS Explorer para Visual Studio (p. 179)
• Generar una URL de objeto prefirmada con AWS SDK for Java (p. 179)
• Generar una URL de objeto prefirmada con AWS SDK para .NET (p. 180)

• Generar una URL prefirmada de objeto con AWS CLI

De forma predeterminada, todos los objetos son privados. Solo el propietario del objeto tiene permiso
para obtener acceso a los objetos. Sin embargo, el propietario del objeto puede compartir opcionalmente
objetos con otros creando una URL prefirmada y usando sus propias credenciales de seguridad para
otorgar permisos con restricción temporal para descargar los objetos.

Al crear una dirección URL prefirmada para su objeto, debe facilitar sus credenciales de seguridad,
especificar un nombre para el bucket, una clave de objeto, especificar un método HTTP (GET para
descargar el objeto) y una fecha y hora de vencimiento. Las URL prefirmadas son solo válidas para la
duración especificada.

Cualquiera que reciba la URL prefirmada puede obtener acceso al objeto. Por ejemplo, si tiene un vídeo en
su bucket y tanto el bucket como el objeto son privados, puede compartir el vídeo con otros generando una
URL prefirmada.
Note
Cualquiera que tenga credenciales de seguridad válidas puede crear una URL prefirmada. Sin
embargo, para poder obtener acceso a un objeto correctamente, la URL prefirmada debe haber
sido creada por alguien que tenga permiso para realizar la operación en la que se basa la URL
prefirmada.

Puede generar una URL prefirmada mediante programación utilizando AWS SDK for Java y .NET.

Generar una URL de objeto prefirmada con AWS Explorer para Visual Studio
Si utiliza Visual Studio, también puede generar una URL prefirmada para un objeto sin escribir código
usando AWS Explorer para Visual Studio. Cualquiera que tenga esta URL puede descargar el objeto. Para
obtener más información, consulte Uso de Amazon S3 desde AWS Explorer.

Para obtener instrucciones acerca de cómo instalar AWS Explorer, consulte Uso de los SDK, la CLI y los
exploradores de AWS (p. 697).

Generar una URL de objeto prefirmada con AWS SDK for Java
Example
El siguiente ejemplo genera una URL prefirmada que puede dar a terceros de modo que puedan recuperar
un objeto desde un bucket de S3. Para obtener más información, consulte Compartir un objeto con
otros (p. 179).

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

Versión de API 2006-03-01


179
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

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;

public class GeneratePresignedURL {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
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 = expiration.getTime();
expTimeMillis += 1000 * 60 * 60;
expiration.setTime(expTimeMillis);

// Generate the presigned URL.


System.out.println("Generating pre-signed URL.");
GeneratePresignedUrlRequest generatePresignedUrlRequest =
new GeneratePresignedUrlRequest(bucketName, 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();
}
}
}

Generar una URL de objeto prefirmada con AWS SDK para .NET
Example

El siguiente ejemplo genera una URL prefirmada que puede dar a terceros de modo que puedan recuperar
un objeto. Para obtener más información, consulte Compartir un objeto con otros (p. 179).

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

Versión de API 2006-03-01


180
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

using Amazon.S3;
using Amazon.S3.Model;
using System;

namespace Amazon.DocSamples.S3
{
class GenPresignedURLTest
{
private const string bucketName = "*** bucket name ***";
private const string objectKey = "*** object key ***";
// 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();
}
static string GeneratePreSignedURL()
{
string urlString = "";
try
{
GetPreSignedUrlRequest request1 = new GetPreSignedUrlRequest
{
BucketName = bucketName,
Key = objectKey,
Expires = DateTime.Now.AddMinutes(5)
};
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;
}
}
}

Carga de objetos
En función del tamaño de los datos que suba, Amazon S3 ofrece las siguientes opciones:

• Cargar objetos en una única operación: puede cargar objetos de hasta 5 GB de tamaño en una única
operación PUT.

Para obtener más información, consulte Carga de objetos en una operación única (p. 182).
• Cargar objetos en partes: con la API de carga multiparte podrá cargar objetos grandes de hasta 5 TB.

La API de carga multiparte está diseñada para mejorar la experiencia de subida para objetos
más grandes. Puede cargar objetos en partes. Estas partes de objetos se pueden cargar
independientemente, en cualquier orden y en paralelo. Puede usar la carga multiparte para objetos que

Versión de API 2006-03-01


181
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

ocupen de 5 MB a 5 TB. Para obtener más información, consulte Carga de objetos con la API de carga
multiparte (p. 186).

Le recomendamos que use la carga multiparte de las siguientes maneras:

• Si carga objetos grandes en una red estable de banda ancha, use la carga multiparte para aumentar al
máximo el uso de su ancho de banda disponible cargando los objetos en partes y en paralelo para un
desempeño en varios subprocesos.
• Si está realizando la carga en una red irregular, use la carga multiparte para aumentar la resistencia ante
errores de red, evitando los reinicios de la carga. Al usar la carga multiparte, debe reintentar las carga
exclusivamente de las partes que se hayan interrumpido durante la carga. No necesita reiniciar la carga
de su objeto desde el principio.

Para obtener más información acerca de las cargas multipartes, consulte Información general de carga
multiparte (p. 187).

Temas
• Carga de objetos en una operación única (p. 182)
• Carga de objetos con la API de carga multiparte (p. 186)
• Carga de objetos con URL prefirmadas (p. 215)

Al cargar un objeto, puede solicitar que Amazon S3 lo cifre antes de guardarlo en disco y lo descifre al
descargarlo. Para obtener más información, consulte Protección de datos mediante cifrado (p. 274).

Temas relacionados

Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Carga de objetos en una operación única


Temas
• Cargar un objeto con AWS SDK for Java (p. 182)
• Cargar un objeto con AWS SDK para .NET (p. 183)
• Cargar un objeto con AWS SDK para PHP (p. 185)
• Cargar un objeto con AWS SDK parar Ruby (p. 186)
• Carga de un objeto con la API REST (p. 186)

Puede utilizar el SDK de AWS para cargar objetos. El SDK proporciona bibliotecas de encapsulamiento
para que pueda cargar datos fácilmente. Sin embargo, si la aplicación lo requiere, puede utilizar
directamente la API REST en su aplicación.

Cargar un objeto con AWS SDK for Java


Example
En el siguiente ejemplo se crean dos objetos. El primer objeto tiene una cadena de texto como datos y
el segundo objeto es un archivo. El ejemplo crea el primer objeto especificando el nombre de bucket, la
clave de objeto y los datos de texto directamente en una llamada a AmazonS3Client.putObject(). El
ejemplo crea el segundo objeto utilizando un PutObjectRequest que especifica el nombre de bucket,
la clave de objeto y la ruta del archivo. El PutObjectRequest también especifica el encabezado de
ContentType y los metadatos del título.

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

Versión de API 2006-03-01


182
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;

import java.io.File;
import java.io.IOException;

public class UploadObject {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String stringObjKeyName = "*** String object key name ***";
String fileObjKeyName = "*** File object key name ***";
String fileName = "*** Path to file to upload ***";

try {
//This code expects that you have AWS credentials set up per:
// https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-
credentials.html
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.build();

// Upload a text string as a new object.


s3Client.putObject(bucketName, stringObjKeyName, "Uploaded String Object");

// Upload a file as a new object with ContentType and title specified.


PutObjectRequest request = new PutObjectRequest(bucketName, fileObjKeyName, new
File(fileName));
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("plain/text");
metadata.addUserMetadata("x-amz-meta-title", "someTitle");
request.setMetadata(metadata);
s3Client.putObject(request);
} 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();
}
}
}

Cargar un objeto con AWS SDK para .NET

Example

El siguiente código de C# crea dos objetos con dos solicitudes de PutObjectRequest:

• La primera solicitud de PutObjectRequest guarda una cadena de texto como muestra de datos del
objeto. También especifica los nombres del bucket y de la clave del objeto.

Versión de API 2006-03-01


183
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

• La segunda solicitud de PutObjectRequest carga un archivo especificando el nombre del archivo.


Esto requiere también especificar el encabezado de ContentType y los metadatos opcionales del
objeto (un título).

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class UploadObjectTest
{
private const string bucketName = "*** bucket name ***";
// For simplicity the example creates two objects from the same file.
// You specify key names for these objects.
private const string keyName1 = "*** key name for first object created ***";
private const string keyName2 = "*** key name for second object created ***";
private const string filePath = @"*** file path ***";
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.EUWest1;

private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
WritingAnObjectAsync().Wait();
}

static async Task WritingAnObjectAsync()


{
try
{
// 1. Put object-specify only key name for the new object.
var putRequest1 = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName1,
ContentBody = "sample text"
};

PutObjectResponse response1 = await client.PutObjectAsync(putRequest1);

// 2. Put the object-set ContentType and add metadata.


var putRequest2 = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName2,
FilePath = filePath,
ContentType = "text/plain"
};
putRequest2.Metadata.Add("x-amz-meta-title", "someTitle");
}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object"
, e.Message);
}

Versión de API 2006-03-01


184
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

catch (Exception e)
{
Console.WriteLine(
"Unknown encountered on server. Message:'{0}' when writing an object"
, e.Message);
}
}
}
}

Cargar un objeto con AWS SDK para PHP


En este tema se detallará el proceso de uso de las clases de AWS SDK para PHP para cargar un objeto
de hasta 5 GB de tamaño. Para archivos más grandes, debe usar la API de carga multiparte. Para obtener
más información, consulte Carga de objetos con la API de carga multiparte (p. 186).

En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.

Example Creación de un objeto en un bucket de Amazon S3 cargando datos

En el siguiente ejemplo en PHP se crea un objeto en un bucket específico cargando datos con el método
putObject(). Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, visite
Ejecución de ejemplos de PHP (p. 709).

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

try {
// Upload data.
$result = $s3->putObject([
'Bucket' => $bucket,
'Key' => $keyname,
'Body' => 'Hello, world!',
'ACL' => 'public-read'
]);

// Print the URL to the object.


echo $result['ObjectURL'] . PHP_EOL;
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Documentación de AWS SDK para PHP

Versión de API 2006-03-01


185
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Cargar un objeto con AWS SDK parar Ruby


La versión 3 de AWS SDK parar Ruby tiene dos formas de cargar un objeto a Amazon S3. La primera usa
un cargador de archivos administrado, que facilita la carga de archivos de cualquier tamaño desde el disco.
Para utilizar el método del cargador de archivos administrado:

1. Cree una instancia de la clase Aws::S3::Resource.


2. Haga referencia al objeto objetivo con el nombre del bucket y la clave. Los objetos residen en un bucket
y tienen claves únicas que identifica cada objeto.
3. Llame a #upload_file en el objeto.

Example

require 'aws-sdk-s3'

s3 = Aws::S3::Resource.new(region:'us-west-2')
obj = s3.bucket('bucket-name').object('key')
obj.upload_file('/path/to/source/file')

La segunda manera en la que la versión 3 de AWS SDK parar Ruby puede cargar un objeto es usar el
método #put de Aws::S3::Object. Esto resulta útil si el objeto es una cadena o un objeto I/O que no
sea un archivo en el disco. Para usar este método:

1. Cree una instancia de la clase Aws::S3::Resource.


2. Haga referencia al objeto objetivo con el nombre del bucket y la clave.
3. Llame a #put, pasando la cadena o el objeto I/O.

Example

require 'aws-sdk-s3'

s3 = Aws::S3::Resource.new(region:'us-west-2')
obj = s3.bucket('bucket-name').object('key')

# I/O object
File.open('/path/to/source.file', 'rb') do |file|
obj.put(body: file)
end

Carga de un objeto con la API REST


Puede utilizar el SDK de AWS para cargar un objeto. Sin embargo, si su aplicación lo requiere, puede
enviar solicitudes REST directamente. Puede enviar una solicitud PUT para cargar datos en una única
operación. Para obtener más información, consulte PUT Object.

Carga de objetos con la API de carga multiparte


Temas
• Información general de carga multiparte (p. 187)
• Uso de AWS Java SDK para carga multiparte (API de nivel alto) (p. 193)
• Uso de AWS Java SDK para una carga multiparte (API de bajo nivel) (p. 196)
• Utilización de AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 200)
• Uso de AWS SDK para .NET para cargas multiparte (API de bajo nivel) (p. 207)
• Uso del AWS PHP SDK para carga multiparte (p. 211)

Versión de API 2006-03-01


186
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

• Uso de AWS SDK para PHP para cargas multiparte (API de bajo nivel) (p. 212)
• Uso de AWS SDK parar Ruby para carga multiparte (p. 214)
• Uso de la API de REST para carga multiparte (p. 215)

La carga multiparte permite cargar un solo objeto como un conjunto de partes. Cada parte es una parte
contigua de los datos del objeto. Puede cargar estas partes del objeto de forma independiente y en
cualquier orden. Si la transmisión de cualquier parte falla, puede retransmitir esta parte sin que las demás
partes se vean afectadas. Después de cargar todas las partes del objeto, Amazon S3 las combina y crea el
objeto. Por lo general, cuando el tamaño del objeto alcanza los 100 MB, deberá usar las cargas multipartes
en lugar de cargar el objeto en una única operación.

El uso de la carga multiparte proporciona las siguientes ventajas:

• Mayor velocidad: puede cargar las partes al mismo tiempo para aumentar la velocidad.
• Recuperación rápida ante cualquier problema de red: una parte de tamaño más pequeño reduce el
impacto de tener que reiniciar una carga fallida debido a un error de red.
• Detención y reanudación de cargas de objetos: puede cargar las partes del objeto con el paso del
tiempo. Una vez que inicia una carga multiparte, no existe fecha de expiración, por lo tanto, debe
completar o anular de forma explícita la carga multiparte.
• Inicio de una carga antes de conocer el tamaño final del objeto: puede cargar un objeto a medida que lo
crea.

Para obtener más información, consulte Información general de carga multiparte (p. 187).

Información general de carga multiparte


Temas
• Operaciones simultáneas de carga multiparte (p. 188)
• Carga multiparte y precios (p. 189)
• Anulación de cargas multiparte incompletas con la política de ciclo de vida de buckets (p. 189)
• Límites de carga multiparte de Amazon S3 (p. 190)
• Compatibilidad de API para carga multiparte (p. 191)
• API de carga multiparte y permisos (p. 191)

La API de carga multiparte permite cargar objetos grandes en partes. Puede utilizar esta API para
cargar nuevos objetos grandes o realizar una copia de un objeto existente (consulte Operaciones en
objetos (p. 172)).

La carga multiparte es un proceso de tres pasos: debe iniciar la carga, cargar las partes del objeto y, luego
de haber cargado todas las partes, debe completar la carga multiparte. Al recibir la solicitud de carga
multiparte completa, Amazon S3 crea el objeto a partir de las partes cargadas para que pueda obtener
acceso al objeto como lo haría con cualquier otro objeto de su bucket.

Puede mostrar todas las cargas multipartes en curso u obtener una lista de las partes que ha cargado en
una carga multiparte específica. En esta sección, se explicarán cada una de estas operaciones.

Inicio de carga multiparte

Al enviar una solicitud para iniciar una carga multiparte, Amazon S3 devuelve una respuesta con un ID de
carga, que es un identificador único para su carga multiparte. Debe incluir este ID de carga siempre que
cargue las partes, enumera las partes, completa una carga o la anula. Si desea proporcionar metadatos
que describen el objeto que está cargando, debe proporcionarlos en la solicitud para iniciar la carga
multiparte.

Versión de API 2006-03-01


187
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Carga de partes

Al cargar una parte, además del ID de carga, debe especificar un número de parte. Puede seleccionar
cualquier número de parte comprendido entre 1 y 10 000. Un número de parte identifica exclusivamente
una parte y su posición en el objeto que se está cargando. El número de parte que elija no tiene que ser
necesariamente una secuencia consecutiva (por ejemplo, puede ser 1, 5 y 14). Si carga una parte nueva
con el mismo número que una parte ya cargada, se sobrescribirá la parte existente. Siempre que cargue
una parte, Amazon S3 devolverá un encabezado ETag en la respuesta. Para cada carga de parte, debe
anotar el número de parte y el valor de ETag. Debe incluir estos valores en la solicitud posterior para
completar la carga multiparte.
Note

Luego de iniciar una carga multiparte y cargar una o más partes, debe completar o anular la carga
multiparte para que no le cobren por el almacenamiento de las partes cargadas. Amazon S3
liberará el espacio de almacenamiento de las partes y dejará de cobrar el almacenamiento de
partes únicamente después de completar o anular una carga multiparte.

Finalización de la carga multiparte (o anulación)

Al completar una carga multiparte, Amazon S3 crea un objeto al concatenar las partes en orden
ascendente según el número de parte. Si se proporcionaron los metadatos de algún objeto en la solicitud
de inicio de carga multiparte, Amazon S3 asocia estos metadatos al objeto. Después de una solicitud de
completar realizada correctamente, las partes ya no existirán. La solicitud de completar carga multiparte
debe incluir el ID de carga y una lista de tanto los números de parte como los valores correspondientes
de ETag. La respuesta de Amazon S3 incluye una ETag que identifica exclusivamente los datos del
objeto combinado. Esta ETag no será necesariamente un hash de MD5 de los datos del objeto. Puede
optar por anular la carga multiparte. Luego de anular una carga multiparte, no puede volver a cargar
cualquier parte con ese ID de carga. Luego, se liberará todo el espacio de almacenamiento que consuma
cualquier parte de la carga multiparte anulada. Si las cargas de cualquier parte estaban en curso, aún
podrán completarse correctamente o fallar, incluso luego de anularlas. Para liberar todo el espacio de
almacenamiento consumido por las partes, debe anular una carga multiparte solo después de haber
completado las cargas de todas las partes.

Lista de carga multiparte

Puede enumerar las partes de una carga multiparte específica o todas las cargas multipartes en curso.
La operación de lista de partes devuelve la información de las partes que ha cargado para una carga
multiparte específica. Para cada solicitud de lista de partes, Amazon S3 devuelve la información de las
partes para la carga multiparte específica, hasta un máximo de 1 000 partes. Si hay más de 1 000 partes
en la carga multiparte, debe enviar una serie de solicitudes de lista de partes para recuperar todas las
partes. Tenga en cuenta que la lista de partes que se devuelve no incluye las partes con carga incompleta.
Con la operación lista de cargas multiparte, puede obtener una lista de las cargas multiparte en curso.
Una carga multiparte en curso es una carga iniciada pero que aún no se ha completado ni anulado. Cada
solicitud devuelve 1 000 cargas multipartes como máximo. Si hay más de 1 000 cargas multipartes en
curso, debe enviar otras solicitudes para recuperar las cargas multipartes restantes. Solo utilice la lista
devuelta para verificación. No debe utilizar el resultado de esta lista al enviar una solicitud de completar
carga multiparte. En cambio, mantenga su propia lista de números de parte que especificó al cargarlas y
los valores correspondientes de ETag que devuelve Amazon S3.

Operaciones simultáneas de carga multiparte

En un entorno de desarrollo distribuido, es posible que la aplicación inicie varias actualizaciones en el


mismo objeto simultáneamente. La aplicación puede iniciar varias cargas multipartes con la misma clave
de objeto. Para cada una de estas cargas, la aplicación puede cargar las partes y enviar una solicitud
de carga completa a Amazon S3 para crear el objeto. Cuando los buckets tienen el control de versiones
habilitado, siempre se creará una nueva versión cuando se complete una carga multiparte. Para buckets
que no tienen el control de versiones habilitado, es posible que tenga prioridad alguna otra solicitud
recibida entre el momento en que se inicia y cuando se completa una carga multiparte.

Versión de API 2006-03-01


188
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Note

Es posible que tenga prioridad alguna otra solicitud recibida entre el momento en que inició y
completó la carga multiparte. Por ejemplo, si otra operación elimina una clave luego de que usted
inicia una carga multiparte con esa clave antes de completarla, la respuesta de carga multiparte
completa podría indicar una creación correcta del objeto sin que usted vea el objeto.

Carga multiparte y precios

Una vez que inicia una carga multiparte, Amazon S3 conserva todas las partes hasta que complete o anule
la carga. Durante la vida útil, se le cobrará por todo el almacenamiento, el ancho de banda y las solicitudes
para esta carga multiparte y sus partes asociadas. No se le cobrará por estos elementos, si anula la carga
multiparte, ya que Amazon S3 elimina los elementos cargados y cualquier parte que haya cargado. Para
obtener más información acerca de los precios, consulte Precios de Amazon S3.

Anulación de cargas multiparte incompletas con la política de ciclo de vida de buckets

Comience a cargar las partes luego de iniciar una carga multiparte. Amazon S3 almacena estas partes,
pero crea el objeto de las partes solo después de que usted las carga y envía una solicitud successful
para completar la carga multiparte (debe comprobar si la solicitud para completar una carga multiparte
es correcta). Al recibir la solicitud de carga multiparte completa, Amazon S3 combina las partes y crea un
objeto.

Si no envía la solicitud de completar carga multiparte correctamente, Amazon S3 no combinará las partes
ni creará un objeto. Por lo tanto, las partes permanecen en Amazon S3 y usted deberá pagar las partes
almacenadas en Amazon S3. Como práctica recomendada, configure una regla de ciclo de vida (con la
acción AbortIncompleteMultipartUpload) para reducir los costos de almacenamiento.

Amazon S3 admite una regla de ciclo de vida del bucket que puede utilizar para que Amazon S3 anule
las cargas multiparte que no se completan dentro de un período especificado de días luego de iniciarse.
Se podrá aplicar una operación de anulación cuando una carga multiparte no se completa dentro de un
período de tiempo y Amazon S3 anulará la carga multiparte (y eliminará las partes asociadas a la carga
multiparte).

El siguiente es un ejemplo de configuración de ciclo de vida que especifica una regla con la acción
AbortIncompleteMultipartUpload.

<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Prefix></Prefix>
<Status>Enabled</Status>
<AbortIncompleteMultipartUpload>
<DaysAfterInitiation>7</DaysAfterInitiation>
</AbortIncompleteMultipartUpload>
</Rule>
</LifecycleConfiguration>

En el ejemplo, la regla no especifica un valor para el elemento Prefix (prefijo de nombre de clave de


objeto) y, por lo tanto, se aplica a todos los objetos del bucket para el que inició las cargas multipartes. Se
podrá aplicar una operación de anulación para cualquier carga multiparte que se inició y no se completó
dentro de siete días (la acción no modifica las cargas multipartes completadas).

Para obtener más información acerca de la configuración del ciclo de vida del bucket, consulte
Administración del ciclo de vida de los objetos (p. 127).
Note

Si la carga multiparte se completa dentro de un número de días especificado en la regla, la acción


de ciclo de vida AbortIncompleteMultipartUpload no se aplica (es decir, Amazon S3 no

Versión de API 2006-03-01


189
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

realizará ninguna acción). Además, esta acción del ciclo de vida no se aplica a objetos y, por lo
tanto, no se eliminará ningún objeto.

El siguiente comando put-bucket-lifecycle de la Command Line Interface (CLI, Interfaz de línea de


comandos) añade la configuración del ciclo de vida para el bucket especificado.

$ aws s3api put-bucket-lifecycle  \


--bucket bucketname  \
--lifecycle-configuration filename-containing-lifecycle-configuration

Para probar el comando de CLI, siga estos pasos:

1. Configure la CLI de AWS. Para obtener instrucciones, consulte Configuración de la CLI de


AWS (p. 704).
2. Guarde la siguiente configuración del ciclo de vida de ejemplo en un archivo (lifecycle.json). La
siguiente configuración de ejemplo especifica un prefijo vacío y, por lo tanto, se aplica a todos objetos
del bucket. Puede especificar un prefijo para restringir la política a un subconjunto de objetos.

{
"Rules": [
{
"ID": "Test Rule",
"Status": "Enabled",
"Prefix": "",
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
}
}
]
}

3. Ejecute el siguiente comando de CLI para establecer la configuración del ciclo de vida de su bucket.

aws s3api put-bucket-lifecycle   \


--bucket bucketname  \
--lifecycle-configuration file://lifecycle.json

4. Para comprobar, recupere la configuración del ciclo de vida con el comando de CLI get-bucket-
lifecycle.

aws s3api get-bucket-lifecycle  \


--bucket bucketname

5. Para eliminar la configuración del ciclo de vida, utilice el comando de CLI delete-bucket-
lifecycle.

aws s3api delete-bucket-lifecycle \


--bucket bucketname

Límites de carga multiparte de Amazon S3


En la siguiente tabla se proporcionan las especificaciones principales de la carga multiparte. Para obtener
más información, consulte Información general de carga multiparte (p. 187).

Elemento Especificación

Tamaño máximo de objeto 5 TB

Versión de API 2006-03-01


190
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Elemento Especificación

Cantidad máxima de partes por carga 10 000

Números de parte De 1 a 10 000 (inclusive)

Tamaño de parte De 5 MB a 5 GB, la última parte puede ser inferior a 5 MB

Cantidad máxima de partes devueltas 1000


para una solicitud de lista de partes

Cantidad máxima de cargas multipartes 1 000


devueltas en una solicitud de lista de
cargas multipartes

Compatibilidad de API para carga multiparte

Puede utilizar un SDK de AWS para cargar un objeto en partes. Las siguientes bibliotecas de SDK de AWS
admiten la carga multiparte:

• AWS SDK for Java


• AWS SDK para .NET
• AWS SDK para PHP

Estas bibliotecas proporcionan una abstracción de alto nivel que facilita la carga multiparte de objetos. Sin
embargo, si la aplicación lo requiere, puede utilizar directamente la API REST. En las siguientes secciones
de la Amazon Simple Storage Service API Reference se describe la API de REST para carga multiparte.

• Initiate Multipart Upload


• Upload Part
• Upload Part (Copy)
• Complete Multipart Upload
• Abort Multipart Upload
• List Parts
• List Multipart Uploads

API de carga multiparte y permisos

Una persona debe tener los permisos necesarios para utilizar las operaciones de carga multiparte. Puede
utilizar las ACL, la política de bucket o la política de usuario para conceder permisos para realizar estas
operaciones. En la siguiente tabla se muestran los permisos requeridos para varias operaciones de carga
multiparte al utilizar las ACL, la política de bucket o la política de usuario.

Acción Permisos necesarios

Initiate Debe tener permiso para realizar la acción s3:PutObject en un objeto para iniciar la
Multipart carga multiparte.
Upload
El propietario del bucket puede permitir a otros clientes realizar la acción
s3:PutObject.

Initiator Elemento contenedor que identifica quién inició la carga multiparte. Si el iniciador
es una cuenta de AWS, este elemento proporcionará la misma información que el

Versión de API 2006-03-01


191
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Acción Permisos necesarios


elemento Propietario. Si el iniciador es un usuario de IAM, este elemento proporcionará
el ARN de usuario y el nombre para mostrar.

Upload Part Debe tener permiso para realizar la acción s3:PutObject en un objeto para cargar
una parte.

Solo el iniciador de una carga multiparte puede cargar las partes. El propietario del
bucket debe permitir al iniciador realizar la acción s3:PutObject en un objeto para
que cargue una parte de ese objeto.

Upload Part Debe tener permiso para realizar la acción s3:PutObject en un objeto para cargar
(Copy) una parte. Dado que está cargando una parte de un objeto existente, debe tener
permiso para realizar la acción s3:GetObject en el objeto de origen.

Solo el iniciador de una carga multiparte puede cargar las partes. Para que el iniciador
cargue una parte del objeto, el propietario del bucket debe permitir al iniciador realizar
la acción s3:PutObject en un objeto.

Complete Debe tener permiso para realizar la acción s3:PutObject en un objeto para
Multipart completar una carga multiparte.
Upload
Solo el iniciador de una carga multiparte puede completar la carga multiparte. El
propietario del bucket debe permitir al iniciador realizar la acción s3:PutObject en un
objeto para que complete una carga multiparte para ese objeto.

Abort Multipart Debe tener permiso para realizar la acción s3:AbortMultipartUpload para anular
Upload una carga multiparte.

De forma predeterminada, el propietario del bucket y el iniciador de la carga multiparte


deben tener permiso para realizar esta acción. Si el iniciador es un usuario de IAM, la
cuenta de AWS de ese usuario también tendrá permiso para anular la carga multiparte.

Además de estas opciones predeterminadas, el propietario del bucket puede permitir


a otras entidades principales realizar la acción s3:AbortMultipartUpload en un
objeto. El propietario del bucket puede denegar la posibilidad de realizar la acción
s3:AbortMultipartUpload a cualquier entidad principal.

List Parts Debe tener permiso para realizar la acción s3:ListMultipartUploadParts para
mostrar las partes de una carga multiparte.

De forma predeterminada, el propietario del bucket tiene permiso para mostrar las
partes de cualquier carga multiparte en el bucket. El iniciador de la carga multiparte
tiene permiso para mostrar las partes de la carga multiparte específica. Si el iniciador
de la carga multiparte es un usuario de IAM, la cuenta de AWS que controla ese
usuario de IAM tiene permiso para mostrar las partes de esa carga.

Además de estas opciones predeterminadas, el propietario del bucket puede permitir


a otras entidades principales realizar la acción s3:ListMultipartUploadParts en
un objeto. El propietario del bucket también puede denegar la posibilidad de realizar la
acción s3:ListMultipartUploadParts a cualquier entidad principal.

List Multipart Debe tener permiso para realizar la acción s3:ListBucketMultipartUploads en


Uploads un bucket para mostrar las cargas multipartes en curso de ese bucket.

Además de esta opción predeterminada, el propietario del bucket puede permitir a


otras entidades principales realizar la acción s3:ListBucketMultipartUploads en
el bucket.

Versión de API 2006-03-01


192
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Acción Permisos necesarios

Permisos Para realizar una carga multiparte con el cifrado mediante una clave de AWS
relacionados KMS, el solicitante debe tener permiso para realizar las acciones kms:Encrypt,
con el cifrado kms:Decrypt, kms:ReEncrypt*, kms:GenerateDataKey* y kms:DescribeKey
y el descifrado en la clave. Estos permisos son necesarios, ya que Amazon S3 debe descifrar y leer
de KMS datos de las partes de archivos cifrados antes de finalizar la carga multiparte.

Si el usuario o rol de IAM se encuentran en la misma cuenta de AWS que la clave de


AWS KMS, debe tener estos permisos en la política de claves. Si el usuario o rol de
IAM pertenecen a una cuenta distinta de la que se encuentra la clave, debe tener los
permisos tanto en la política de claves como en el usuario o rol de IAM.
>

Para obtener información acerca de la relación entre los permisos de la Access Control List (ACL, Lista
de control de acceso) y los permisos de las políticas de acceso, consulte Mapeo de permisos de ACL
y permisos de política de acceso (p. 422). Para obtener información acerca de los usuarios de IAM,
consulte Trabajo con usuarios y grupos.

Uso de AWS Java SDK para carga multiparte (API de nivel alto)
Temas
• Cargar un archivo (p. 193)
• Anulación de cargas multiparte (p. 194)
• Seguimiento del progreso de las cargas multiparte (p. 195)

En AWS SDK for Java se presenta una API de alto nivel, llamada TransferManager que simplifica
cargas multiparte (consulte Carga de objetos con la API de carga multiparte (p. 186)). Puede
cargar datos desde un archivo o una secuencia. También puede configurar opciones avanzadas,
como el tamaño de la parte que desea utilizar para la carga multiparte o el número de subprocesos
simultáneos que desea utilizar al cargar las partes. También puede establecer propiedades opcionales
para un objeto, la clase de almacenamiento o la ACL. Puede usar las clases PutObjectRequest y
TransferManagerConfiguration para establecer estas opciones avanzadas.

De ser posible, TransferManager intenta utilizar varios subprocesos para cargar varias partes de una
carga a la vez. Esto puede aumentar de forma importante el rendimiento, cuando se utiliza contenido de
gran tamaño y un ancho de banda grande.

Además de la funcionalidad de carga de archivos, la clase TransferManager permite anular una carga
multiparte en curso. Una carga se considera en proceso después de que la inicia y hasta que la completa
o anula. El TransferManager anula todas las cargas multiparte en curso en un bucket especificado
iniciado antes de una fecha y hora especificados.

Para obtener más información sobre cargas multiparte, incluida información sobre la funcionalidad
adicional ofrecida por los métodos de API de bajo nivel, consulte Carga de objetos con la API de carga
multiparte (p. 186).

Cargar un archivo

Example
En el siguiente ejemplo se muestra cómo cargar un objeto utilizando la API de Java de carga multiparte de
alto nivel (la clase TransferManager). Para obtener instrucciones sobre la creación y comprobación de
una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).

Versión de API 2006-03-01


193
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

import com.amazonaws.AmazonServiceException;
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.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import java.io.File;

public class HighLevelMultipartUpload {

public static void main(String[] args) throws Exception {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Object key ***";
String filePath = "*** Path for file to upload ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();

// TransferManager processes all transfers asynchronously,


// so this call returns immediately.
Upload upload = tm.upload(bucketName, keyName, new File(filePath));
System.out.println("Object upload started");

// Optionally, wait for the upload to finish before continuing.


upload.waitForCompletion();
System.out.println("Object upload complete");
} 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();
}
}
}

Anulación de cargas multiparte

Example
El siguiente ejemplo la API de Java de alto nivel (la clase TransferManager) para anular todas las
cargas multiparte en curso que se iniciaron en un bucket específico hace más de una semana. Para
obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de
ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;

Versión de API 2006-03-01


194
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

import java.util.Date;

public class HighLevelAbortMultipartUpload {

public static void main(String[] args) {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();

// sevenDays is the duration of seven days in milliseconds.


long sevenDays = 1000 * 60 * 60 * 24 * 7;
Date oneWeekAgo = new Date(System.currentTimeMillis() - sevenDays);
tm.abortMultipartUploads(bucketName, oneWeekAgo);
} 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();
}
}
}

Seguimiento del progreso de las cargas multiparte

La API de carga multiparte de Lava de nivel alto proporciona una interfaz de escucha,
ProgressListener, para hacer el seguimiento del progreso de la carga de un objeto en Amazon S3. Los
eventos de progreso notifican periódicamente la transferencia de bytes al agente de escucha.

El siguiente ejemplo demuestra cómo suscribirse a un evento ProgressEvent y escribir un controlador:

Example

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.event.ProgressEvent;
import com.amazonaws.event.ProgressListener;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

Versión de API 2006-03-01


195
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

import java.io.File;

public class HighLevelTrackMultipartUpload {

public static void main(String[] args) throws Exception {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Object key ***";
String filePath = "*** Path to file to upload ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();
PutObjectRequest request = new PutObjectRequest(bucketName, keyName, new
File(filePath));

// To receive notifications when bytes are transferred, add a


// ProgressListener to your request.
request.setGeneralProgressListener(new ProgressListener() {
public void progressChanged(ProgressEvent progressEvent) {
System.out.println("Transferred bytes: " +
progressEvent.getBytesTransferred());
}
});
// TransferManager processes all transfers asynchronously,
// so this call returns immediately.
Upload upload = tm.upload(request);

// Optionally, you can wait for the upload to finish before continuing.
upload.waitForCompletion();
} 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();
}
}
}

Uso de AWS Java SDK para una carga multiparte (API de bajo nivel)
Temas
• Cargar un archivo (p. 197)
• List Multipart Uploads (p. 198)
• Anulación de una carga multiparte (p. 199)

AWS SDK for Java presenta una API de bajo nivel que se parece bastante a la API REST de Amazon
S3 para cargas multiparte (consulte Carga de objetos con la API de carga multiparte (p. 186)). Use
la API de bajo nivel si necesita detener y reanudar cargas multiparte, variar los tamaños de las partes
durante la carga o si no conoce de antemano el tamaño de los datos de carga. Cuando no tenga estas
necesidades, utilice la API de alto nivel (consulte Uso de AWS Java SDK para carga multiparte (API de
nivel alto) (p. 193))

Versión de API 2006-03-01


196
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Cargar un archivo

En el siguiente ejemplo se demuestra cómo usar las clases de Java de bajo nivel para cargar un archivo.
Realiza los siguientes pasos:

• Inicia una carga multiparte usando el método AmazonS3Client.initiateMultipartUpload() y


transmite un objeto InitiateMultipartUploadRequest.
• Guarda el ID de carga que devuelve el método AmazonS3Client.initiateMultipartUpload().
Facilite este ID de carga para cada operación de carga multiparte subsiguiente.
• Carga las partes del objeto. Para cada parte, llame al método AmazonS3Client.uploadPart(). La
información de carga de partes debe proporcionarse usando un objeto UploadPartRequest.
• Para cada parte, guarda la ETag desde respuesta del método AmazonS3Client.uploadPart() en
una lista. Utilice los valores de ETag para completar la carga multiparte.
• Llama al método AmazonS3Client.completeMultipartUpload() para completar la carga
multiparte.

Example

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.*;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class LowLevelMultipartUpload {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Key name ***";
String filePath = "*** Path to file to upload ***";

File file = new File(filePath);


long contentLength = file.length();
long partSize = 5 * 1024 * 1024; // Set part size to 5 MB.

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();

// Create a list of ETag objects. You retrieve ETags for each object part
uploaded,
// then, after each individual part has been uploaded, pass the list of ETags
to
// the request to complete the upload.
List<PartETag> partETags = new ArrayList<PartETag>();

// Initiate the multipart upload.

Versión de API 2006-03-01


197
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

InitiateMultipartUploadRequest initRequest = new


InitiateMultipartUploadRequest(bucketName, keyName);
InitiateMultipartUploadResult initResponse =
s3Client.initiateMultipartUpload(initRequest);

// Upload the file parts.


long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++) {
// Because the last part could be less than 5 MB, adjust the part size as
needed.
partSize = Math.min(partSize, (contentLength - filePosition));

// Create the request to upload a part.


UploadPartRequest uploadRequest = new UploadPartRequest()
.withBucketName(bucketName)
.withKey(keyName)
.withUploadId(initResponse.getUploadId())
.withPartNumber(i)
.withFileOffset(filePosition)
.withFile(file)
.withPartSize(partSize);

// Upload the part and add the response's ETag to our list.
UploadPartResult uploadResult = s3Client.uploadPart(uploadRequest);
partETags.add(uploadResult.getPartETag());

filePosition += partSize;
}

// Complete the multipart upload.


CompleteMultipartUploadRequest compRequest = new
CompleteMultipartUploadRequest(bucketName, keyName,
initResponse.getUploadId(), partETags);
s3Client.completeMultipartUpload(compRequest);
} 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();
}
}
}

List Multipart Uploads

Example

En el siguiente ejemplo se muestra cómo recuperar una lista de cargas multiparte en curso usando la API
de Java de nivel bajo:

import com.amazonaws.AmazonServiceException;
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.ListMultipartUploadsRequest;
import com.amazonaws.services.s3.model.MultipartUpload;
import com.amazonaws.services.s3.model.MultipartUploadListing;

Versión de API 2006-03-01


198
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

import java.util.List;

public class ListMultipartUploads {

public static void main(String[] args) {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Retrieve a list of all in-progress multipart uploads.


ListMultipartUploadsRequest allMultipartUploadsRequest = new
ListMultipartUploadsRequest(bucketName);
MultipartUploadListing multipartUploadListing =
s3Client.listMultipartUploads(allMultipartUploadsRequest);
List<MultipartUpload> uploads = multipartUploadListing.getMultipartUploads();

// Display information about all in-progress multipart uploads.


System.out.println(uploads.size() + " multipart upload(s) in progress.");
for (MultipartUpload u : uploads) {
System.out.println("Upload in progress: Key = \"" + u.getKey() + "\", id =
" + u.getUploadId());
}
} 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();
}
}
}

Anulación de una carga multiparte


Puede anular una carga multiparte en proceso con el método
AmazonS3Client.abortMultipartUpload(). Este método elimina todas las partes cargadas a
Amazon S3 y libera los recursos. Proporcione la ID de carga, el nombre del bucket y el nombre de clave.

Example
En el siguiente ejemplo se muestra cómo cancelar cargas multiparte en curso usando la API de Java de
nivel bajo:

import com.amazonaws.AmazonServiceException;
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.AbortMultipartUploadRequest;
import com.amazonaws.services.s3.model.ListMultipartUploadsRequest;
import com.amazonaws.services.s3.model.MultipartUpload;
import com.amazonaws.services.s3.model.MultipartUploadListing;

Versión de API 2006-03-01


199
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

import java.util.List;

public class LowLevelAbortMultipartUpload {

public static void main(String[] args) {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();

// Find all in-progress multipart uploads.


ListMultipartUploadsRequest allMultipartUploadsRequest = new
ListMultipartUploadsRequest(bucketName);
MultipartUploadListing multipartUploadListing =
s3Client.listMultipartUploads(allMultipartUploadsRequest);

List<MultipartUpload> uploads = multipartUploadListing.getMultipartUploads();


System.out.println("Before deletions, " + uploads.size() + " multipart uploads
in progress.");

// Abort each upload.


for (MultipartUpload u : uploads) {
System.out.println("Upload in progress: Key = \"" + u.getKey() + "\", id =
" + u.getUploadId());
s3Client.abortMultipartUpload(new AbortMultipartUploadRequest(bucketName,
u.getKey(), u.getUploadId()));
System.out.println("Upload deleted: Key = \"" + u.getKey() + "\", id = " +
u.getUploadId());
}

// Verify that all in-progress multipart uploads have been aborted.


multipartUploadListing =
s3Client.listMultipartUploads(allMultipartUploadsRequest);
uploads = multipartUploadListing.getMultipartUploads();
System.out.println("After aborting uploads, " + uploads.size() + " multipart
uploads in progress.");
} 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();
}
}
}

Note
En lugar de anular cargas multiparte individualmente, puede anular todas las cargas multiparte
en curso iniciadas antes de un periodo de tiempo específico. Esta operación de limpieza resulta
útil para anular cargas multiparte iniciadas pero que no se finalizaron o que fueron anuladas. Para
obtener más información, consulte Anulación de cargas multiparte (p. 194).

Utilización de AWS SDK para .NET para carga multiparte (API de alto nivel)
Temas
• Carga de un archivo en un bucket de S3 con AWS SDK para .NET (API de alto nivel) (p. 201)

Versión de API 2006-03-01


200
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

• Carga de un directorio (p. 202)


• Anulación de cargas multiparte a un bucket de S3 con AWS SDK para .NET (API de alto
nivel) (p. 204)
• Seguimiento del progreso de una carga multiparte a un bucket de S3 con AWS SDK para .NET (API de
alto nivel) (p. 205)

AWS SDK para .NET presenta una API de alto nivel que simplifica las cargas multiparte (consulte Carga
de objetos con la API de carga multiparte (p. 186)). Puede cargar datos desde un archivo, un directorio
o una secuencia. Para obtener más información acerca de las cargas multiparte de Amazon S3, consulte
Información general de carga multiparte (p. 187).

La clase TransferUtility proporciona métodos para cargar archivos y directorios, el seguimiento del
progreso de la carga y la anulación de cargas multiparte.

Carga de un archivo en un bucket de S3 con AWS SDK para .NET (API de alto nivel)

Para cargar un archivo a un bucket de S3, utilice la clase TransferUtility. Al cargar los datos de un
archivo, debe proporcionar el nombre de clave del objeto. Si no lo hace, la API utiliza el nombre del archivo
como nombre de clave. Al cargar los datos de una secuencia, debe proporcionar el nombre de clave del
objeto.

Para configurar opciones de carga avanzadas, como el tamaño de la parte, el número de subprocesos al
cargar las partes simultáneamente, los metadatos, la clase de almacenamiento o la ACL, utilice la clase
TransferUtilityUploadRequest.

En el siguiente ejemplo de código C# se carga un archivo en un bucket de Amazon S3 en varias partes.


Muestra cómo utilizar varias sobrecargas TransferUtility.Upload para cargar un archivo. Cada
llamada sucesiva de carga reemplaza la carga anterior. Para obtener información sobre la compatibilidad
del ejemplo con una versión específica de AWS SDK para .NET e instrucciones sobre cómo crear y probar
una muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.IO;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class UploadFileMPUHighLevelAPITest
{
private const string bucketName = "*** provide bucket name ***";
private const string keyName = "*** provide a name for the uploaded object ***";
private const string filePath = "*** provide the full path name of the file to
upload ***";
// 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);
UploadFileAsync().Wait();
}

private static async Task UploadFileAsync()


{
try
{

Versión de API 2006-03-01


201
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

var fileTransferUtility =
new TransferUtility(s3Client);

// Option 1. Upload a file. The file name is used as the object key name.
await fileTransferUtility.UploadAsync(filePath, bucketName);
Console.WriteLine("Upload 1 completed");

// Option 2. Specify object key name explicitly.


await fileTransferUtility.UploadAsync(filePath, bucketName, keyName);
Console.WriteLine("Upload 2 completed");

// Option 3. Upload data from a type of System.IO.Stream.


using (var fileToUpload =
new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
await fileTransferUtility.UploadAsync(fileToUpload,
bucketName, keyName);
}
Console.WriteLine("Upload 3 completed");

// Option 4. Specify advanced settings.


var fileTransferUtilityRequest = new TransferUtilityUploadRequest
{
BucketName = bucketName,
FilePath = filePath,
StorageClass = S3StorageClass.StandardInfrequentAccess,
PartSize = 6291456, // 6 MB.
Key = keyName,
CannedACL = S3CannedACL.PublicRead
};
fileTransferUtilityRequest.Metadata.Add("param1", "Value1");
fileTransferUtilityRequest.Metadata.Add("param2", "Value2");

await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
Console.WriteLine("Upload 4 completed");
}
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);
}

}
}
}

Más información

AWS SDK para .NET

Carga de un directorio

Puede utilizar la clase TransferUtility para cargar todo un directorio. De forma predeterminada, la
API solo carga los archivos en la raíz del directorio especificado. Sin embargo, puede especificar que se
carguen los archivos de forma recursiva en todos los subdirectorios.

Puede especificar expresiones de filtrado para seleccionar archivos en el directorio especificado según
algunos criterios de filtrado. Por ejemplo, para cargar solo archivos .pdf desde un directorio, especifique la
expresión de filtrado "*.pdf".

Versión de API 2006-03-01


202
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Cuando carga archivos desde un directorio, no puede especificar los nombres de clave de los objetos
resultantes. Amazon S3 construye los nombres de clave usando la ruta del archivo original. Por ejemplo,
suponga que tiene un directorio llamado c:\myfolder con la siguiente estructura:

Example

C:\myfolder
\a.txt
\b.pdf
\media\
An.mp3

Cuando carga este directorio, Amazon S3 utiliza los siguientes nombres de clave:

Example

a.txt
b.pdf
media/An.mp3

Example
En el siguiente ejemplo de código C# se carga un directorio a un bucket de Amazon S3. Muestra cómo
utilizar varias sobrecargas TransferUtility.UploadDirectory para cargar el directorio. Cada
llamada sucesiva de carga reemplaza la carga anterior. Para obtener instrucciones acerca de cómo crear y
probar una muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.IO;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class UploadDirMPUHighLevelAPITest
{
private const string existingBucketName = "*** bucket name ***";
private const string directoryPath = @"*** directory path ***";
// The example uploads only .txt files.
private const string wildCard = "*.txt";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
UploadDirAsync().Wait();
}

private static async Task UploadDirAsync()


{
try
{
var directoryTransferUtility =
new TransferUtility(s3Client);

// 1. Upload a directory.
await directoryTransferUtility.UploadDirectoryAsync(directoryPath,
existingBucketName);
Console.WriteLine("Upload statement 1 completed");

Versión de API 2006-03-01


203
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

// 2. Upload only the .txt files from a directory


// and search recursively.
await directoryTransferUtility.UploadDirectoryAsync(
directoryPath,
existingBucketName,
wildCard,
SearchOption.AllDirectories);
Console.WriteLine("Upload statement 2 completed");

// 3. The same as Step 2 and some optional configuration.


// Search recursively for .txt files to upload.
var request = new TransferUtilityUploadDirectoryRequest
{
BucketName = existingBucketName,
Directory = directoryPath,
SearchOption = SearchOption.AllDirectories,
SearchPattern = wildCard
};

await directoryTransferUtility.UploadDirectoryAsync(request);
Console.WriteLine("Upload statement 3 completed");
}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. 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);
}
}
}
}

Anulación de cargas multiparte a un bucket de S3 con AWS SDK para .NET (API de alto nivel)

Para anular las cargas multiparte en curso, use la clase TransferUtility de AWS SDK para .NET.
Proporcione un valor para DateTime. A continuación, la API anula todas las cargas multiparte que se
iniciaron antes de la fecha y la hora especificadas y elimina las partes cargadas. Una carga se considera
en curso después de que la inicia y hasta que la completa o anule.

Dado que usted debe pagar por todo el almacenamiento relacionado con las partes cargadas, es
importante que complete la carga multiparte para finalizar la creación del objeto o anule la carga multiparte
para eliminar las partes cargadas. Para obtener más información acerca de las cargas multiparte de
Amazon S3, consulte Información general de carga multiparte (p. 187). Para obtener información sobre
los precios, consulte Carga multiparte y precios (p. 189).

En el siguiente ejemplo de código C# se anulan todas las cargas multiparte en curso que se iniciaron en
un bucket específico hace una semana. Para obtener información sobre la compatibilidad del ejemplo con
una versión específica de AWS SDK para .NET e instrucciones sobre cómo crear y probar una muestra
funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;

Versión de API 2006-03-01


204
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

namespace Amazon.DocSamples.S3
{
class AbortMPUUsingHighLevelAPITest
{
private const string bucketName = "*** provide bucket name ***";
// 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);
AbortMPUAsync().Wait();
}

private static async Task AbortMPUAsync()


{
try
{
var transferUtility = new TransferUtility(s3Client);

// Abort all in-progress uploads initiated before the specified date.


await transferUtility.AbortMultipartUploadsAsync(
bucketName, DateTime.Now.AddDays(-7));
}
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);
}
}
}
}

Note

También puede anular una carga multiparte específica. Para obtener más información, consulte
Lista de cargas multiparte a un Bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 209).

Más información

AWS SDK para .NET

Seguimiento del progreso de una carga multiparte a un bucket de S3 con AWS SDK para .NET
(API de alto nivel)

En el siguiente ejemplo de código C# se carga un archivo a un bucket de S3 mediante la clase


TransferUtility y se sigue el progreso de la carga. Para obtener información sobre la compatibilidad
del ejemplo con una versión específica de AWS SDK para .NET e instrucciones sobre cómo crear y probar
una muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3

Versión de API 2006-03-01


205
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

{
class TrackMPUUsingHighLevelAPITest
{
private const string bucketName = "*** provide the bucket name ***";
private const string keyName = "*** provide the name for the uploaded object ***";
private const string filePath = " *** provide the full path name of the file to
upload **";
// 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);
TrackMPUAsync().Wait();
}

private static async Task TrackMPUAsync()


{
try
{
var fileTransferUtility = new TransferUtility(s3Client);

// Use TransferUtilityUploadRequest to configure options.


// In this example we subscribe to an event.
var uploadRequest =
new TransferUtilityUploadRequest
{
BucketName = bucketName,
FilePath = filePath,
Key = keyName
};

uploadRequest.UploadProgressEvent +=
new EventHandler<UploadProgressArgs>
(uploadRequest_UploadPartProgressEvent);

await fileTransferUtility.UploadAsync(uploadRequest);
Console.WriteLine("Upload completed");
}
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);
}
}

static void uploadRequest_UploadPartProgressEvent(object sender, UploadProgressArgs


e)
{
// Process event.
Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
}
}
}

Más información

AWS SDK para .NET

Versión de API 2006-03-01


206
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Uso de AWS SDK para .NET para cargas multiparte (API de bajo nivel)
AWS SDK para .NET presenta una API de bajo nivel que se parece bastante a la API REST de Amazon
S3 para carga multiparte (consulte Uso de la API de REST para carga multiparte (p. 215)). Use la API de
bajo nivel si necesita detenerse y reanudar cargas multiparte, variar los tamaños de las partes durante la
carga o si no conoce de antemano el tamaño de los datos. Utilice la API de alto nivel (consulte Utilización
de AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 200)) cuando no tenga estas
necesidades.

Temas
• Carga de un archivo en un bucket de S3 con AWS SDK para .NET (API de bajo nivel) (p. 207)
• Lista de cargas multiparte a un Bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 209)
• Seguimiento del progreso de la carga multiparte a un bucket de S3 con AWS SDK para .NET (bajo
nivel) (p. 209)
• Anulación de cargas multiparte a un bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 210)

Carga de un archivo en un bucket de S3 con AWS SDK para .NET (API de bajo nivel)

En el siguiente ejemplo de código C# se muestra cómo usar la API de carga multiparte AWS SDK
para .NET de bajo nivel para cargar un archivo a un bucket de S3. Para obtener información sobre cargas
multiparte de Amazon S3, consulte Información general de carga multiparte (p. 187).
Note

Cuando usa la API de AWS SDK para .NET para cargar objetos grandes, puede presentarse un
tiempo de espera mientras los datos se escriben en la secuencia de la solicitud. Puede establecer
un tiempo de espera explícitamente con UploadPartRequest.

En el siguiente ejemplo de código C# se carga un archivo a un bucket de S3 con la API de bajo nivel
para la carga multiparte. Para obtener información sobre la compatibilidad del ejemplo con una versión
específica de AWS SDK para .NET e instrucciones sobre cómo crear y probar una muestra funcional,
consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class UploadFileMPULowLevelAPITest
{
private const string bucketName = "*** provide bucket name ***";
private const string keyName = "*** provide a name for the uploaded object ***";
private const string filePath = "*** provide the full path name of the file to
upload ***";
// 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);
Console.WriteLine("Uploading an object");
UploadObjectAsync().Wait();
}

Versión de API 2006-03-01


207
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

private static async Task UploadObjectAsync()


{
// Create list to store upload part responses.
List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();

// Setup information required to initiate the multipart upload.


InitiateMultipartUploadRequest initiateRequest = new
InitiateMultipartUploadRequest
{
BucketName = bucketName,
Key = keyName
};

// Initiate the upload.


InitiateMultipartUploadResponse initResponse =
await s3Client.InitiateMultipartUploadAsync(initiateRequest);

// Upload parts.
long contentLength = new FileInfo(filePath).Length;
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB

try
{
Console.WriteLine("Uploading parts");

long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++)
{
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = bucketName,
Key = keyName,
UploadId = initResponse.UploadId,
PartNumber = i,
PartSize = partSize,
FilePosition = filePosition,
FilePath = filePath
};

// Track upload progress.


uploadRequest.StreamTransferProgress +=
new
EventHandler<StreamTransferProgressArgs>(UploadPartProgressEventCallback);

// Upload a part and add the response to our list.


uploadResponses.Add(await s3Client.UploadPartAsync(uploadRequest));

filePosition += partSize;
}

// Setup to complete the upload.


CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest
{
BucketName = bucketName,
Key = keyName,
UploadId = initResponse.UploadId
};
completeRequest.AddPartETags(uploadResponses);

// Complete the upload.


CompleteMultipartUploadResponse completeUploadResponse =
await s3Client.CompleteMultipartUploadAsync(completeRequest);
}
catch (Exception exception)

Versión de API 2006-03-01


208
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

{
Console.WriteLine("An AmazonS3Exception was thrown: { 0}",
exception.Message);

// Abort the upload.


AbortMultipartUploadRequest abortMPURequest = new
AbortMultipartUploadRequest
{
BucketName = bucketName,
Key = keyName,
UploadId = initResponse.UploadId
};
await s3Client.AbortMultipartUploadAsync(abortMPURequest);
}
}
public static void UploadPartProgressEventCallback(object sender,
StreamTransferProgressArgs e)
{
// Process event.
Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
}
}
}

Más información

AWS SDK para .NET

Lista de cargas multiparte a un Bucket de S3 con AWS SDK para .NET (bajo nivel)

Para enumerar todas las cargas multiparte en curso en un bucket concreto, use la clase
ListMultipartUploadsRequest de la API de carga multiparte de bajo nivel de AWS SDK
para .NET. El método AmazonS3Client.ListMultipartUploads devuelve una instancia de la clase
ListMultipartUploadsResponse que ofrece información sobre las cargas multiparte en curso.

Una carga multiparte en curso es una carga multiparte que se ha iniciado mediante una solicitud de inicio
de carga multiparte pero que aún no se ha completado o anulado. Para obtener más información acerca de
las cargas multiparte de Amazon S3, consulte Información general de carga multiparte (p. 187).

En el siguiente ejemplo de código C# se muestra cómo usar AWS SDK para .NET para enumerar todas las
cargas multiparte en curso en un bucket. Para obtener información sobre la compatibilidad del ejemplo con
una versión específica de AWS SDK para .NET e instrucciones sobre cómo crear y probar una muestra
funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

ListMultipartUploadsRequest request = new ListMultipartUploadsRequest


{
BucketName = bucketName // Bucket receiving the uploads.
};

ListMultipartUploadsResponse response = await


AmazonS3Client.ListMultipartUploadsAsync(request);

Más información

AWS SDK para .NET

Seguimiento del progreso de la carga multiparte a un bucket de S3 con AWS SDK para .NET (bajo
nivel)

Para seguir el progreso de una carga multiparte, use el evento


UploadPartRequest.StreamTransferProgress proporcionado por la API de carga multiparte de

Versión de API 2006-03-01


209
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

bajo nivel de AWS SDK para .NET. El evento se produce periódicamente. Devuelve información como el
número total de bytes que hay que transferir y el número de bytes transferidos.

En el siguiente ejemplo de código C# se muestra cómo seguir el progreso de cargas multiparte. Para ver
una muestra completa de código C# que incluye el código siguiente, consulte Carga de un archivo en un
bucket de S3 con AWS SDK para .NET (API de bajo nivel) (p. 207).

UploadPartRequest uploadRequest = new UploadPartRequest


{
// Provide the request data.
};

uploadRequest.StreamTransferProgress +=
new EventHandler<StreamTransferProgressArgs>(UploadPartProgressEventCallback);

...
public static void UploadPartProgressEventCallback(object sender,
StreamTransferProgressArgs e)
{
// Process the event.
Console.WriteLine("{0}/{1}", e.TransferredBytes, e.TotalBytes);
}

Más información

AWS SDK para .NET

Anulación de cargas multiparte a un bucket de S3 con AWS SDK para .NET (bajo nivel)

Puede anular una carga multiparte en proceso con el método


AmazonS3Client.AbortMultipartUploadAsync. Además de anular la carga, este método elimina
todas las partes que se cargaron a Amazon S3.

Para anular una carga multiparte, debe proporcionar el ID de carga y los nombres de clave y bucket que
se usaron en la carga. Luego de haber anulado una carga multiparte, no puede usar el ID de carga para
cargar partes adicionales. Para obtener más información acerca de las cargas multiparte de Amazon S3,
consulte Información general de carga multiparte (p. 187).

En el siguiente ejemplo de código C# se muestra cómo anular una carga multiparte. Para ver una muestra
completa de código C# que incluye el código siguiente, consulte Carga de un archivo en un bucket de S3
con AWS SDK para .NET (API de bajo nivel) (p. 207).

AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest


{
BucketName = existingBucketName,
Key = keyName,
UploadId = initResponse.UploadId
};
await AmazonS3Client.AbortMultipartUploadAsync(abortMPURequest);

También puede anular todas las cargas multiparte en curso que se iniciaron antes de un periodo de tiempo
específico. Esta operación de limpieza resulta útil para anular cargas multiparte que no se finalizaron o que
se anularon. Para obtener más información, consulte Anulación de cargas multiparte a un bucket de S3
con AWS SDK para .NET (API de alto nivel) (p. 204).

Más información

AWS SDK para .NET

Versión de API 2006-03-01


210
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Uso del AWS PHP SDK para carga multiparte


Puede cargar archivos grandes a Amazon S3 en varias partes. Debe utilizar una carga multiparte para
archivos superiores a 5 GB. AWS SDK para PHP presenta la clase MultipartUploader que simplifica las
cargas multiparte.

El método upload de la clase MultipartUploader es más adecuado para una carga multiparte simple.
Si tiene que detenerse y reanudar cargas multiparte, variar los tamaños de las partes durante la carga o
si no conoce de antemano el tamaño de los datos, use la API de PHP de bajo nivel. Para obtener más
información, consulte Uso de AWS SDK para PHP para cargas multiparte (API de bajo nivel) (p. 212).

Para obtener más información acerca de las cargas multipartes, consulte Carga de objetos con la API
de carga multiparte (p. 186). Para obtener información acerca de cómo cargar archivos con un tamaño
inferior a 5 GB, consulte Cargar un objeto con AWS SDK para PHP (p. 185).

Carga de un archivo con la carga multiparte de alto nivel.


Este tema explica cómo usar la clase Aws\S3\Model\MultipartUpload\UploadBuilder de alto nivel
de AWS SDK para PHP para cargas de archivos multiparte. Se parte de la base de que usted ya sigue las
instrucciones para Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado
AWS SDK para PHP correctamente.

En el siguiente ejemplo de PHP se carga un archivo a un bucket de Amazon S3. El ejemplo muestra cómo
configurar parámetros para el objeto MultipartUploader.

Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución de
ejemplos de PHP (p. 709).

require 'vendor/autoload.php';

use Aws\Common\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Prepare the upload parameters.


$uploader = new MultipartUploader($s3, '/path/to/large/file.zip', [
'bucket' => $bucket,
'key' => $keyname
]);

// Perform the upload.


try {
$result = $uploader->upload();
echo "Upload complete: {$result['ObjectURL']}" . PHP_EOL;
} catch (MultipartUploadException $e) {
echo $e->getMessage() . PHP_EOL;
}

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Cargas multiparte de Amazon S3
• Documentación de AWS SDK para PHP

Versión de API 2006-03-01


211
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Uso de AWS SDK para PHP para cargas multiparte (API de bajo nivel)
Temas
• Cargue un archivo en varias partes con la API de bajo nivel del Software Development Kit (SDK, Kit de
desarrollo de software) para PHP (p. 212)
• Lista de cargas multiparte con la API de AWS SDK para PHP de bajo nivel (p. 213)
• Anulación de una carga multiparte (p. 214)

AWS SDK para PHP presenta una API de bajo nivel que se parece bastante a la API REST de Amazon
S3 para carga multiparte (consulte Uso de la API de REST para carga multiparte (p. 215)). Use la
API de bajo nivel si necesita detenerse y reanudar cargas multiparte, variar los tamaños de las partes
durante la carga o si no conoce de antemano el tamaño de los datos. Si no tiene estos requisitos, utilice
las abstracciones de alto nivel de AWS SDK para PHP (consulte Uso del AWS PHP SDK para carga
multiparte (p. 211)).

Cargue un archivo en varias partes con la API de bajo nivel del Software Development Kit (SDK,
Kit de desarrollo de software) para PHP

Este tema muestra cómo usar el método uploadPart de bajo nivel de la versión 3 de AWS SDK para
PHP para cargar un archivo en varias partes. Se parte de la base de que usted ya sigue las instrucciones
para Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK
para PHP correctamente.

En el siguiente ejemplo de PHP se carga un archivo a un bucket de Amazon S3 con la API de PHP de bajo
nivel para la carga multiparte. Para obtener información acerca de la ejecución de ejemplos de PHP en
esta guía, consulte Ejecución de ejemplos de PHP (p. 709).

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';
$filename = '*** Path to and Name of the File to Upload ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

$result = $s3->createMultipartUpload([
'Bucket' => $bucket,
'Key' => $keyname,
'StorageClass' => 'REDUCED_REDUNDANCY',
'ACL' => 'public-read',
'Metadata' => [
'param1' => 'value 1',
'param2' => 'value 2',
'param3' => 'value 3'
]
]);
$uploadId = $result['UploadId'];

// Upload the file in parts.


try {
$file = fopen($filename, 'r');
$partNumber = 1;
while (!feof($file)) {
$result = $s3->uploadPart([
'Bucket' => $bucket,

Versión de API 2006-03-01


212
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

'Key' => $keyname,


'UploadId' => $uploadId,
'PartNumber' => $partNumber,
'Body' => fread($file, 5 * 1024 * 1024),
]);
$parts['Parts'][$partNumber] = [
'PartNumber' => $partNumber,
'ETag' => $result['ETag'],
];
$partNumber++;

echo "Uploading part {$partNumber} of {$filename}." . PHP_EOL;


}
fclose($file);
} catch (S3Exception $e) {
$result = $s3->abortMultipartUpload([
'Bucket' => $bucket,
'Key' => $keyname,
'UploadId' => $uploadId
]);

echo "Upload of {$filename} failed." . PHP_EOL;


}

// Complete the multipart upload.


$result = $s3->completeMultipartUpload([
'Bucket' => $bucket,
'Key' => $keyname,
'UploadId' => $uploadId,
'MultipartUpload' => $parts,
]);
$url = $result['Location'];

echo "Uploaded {$filename} to {$url}." . PHP_EOL;

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Cargas multiparte de Amazon S3
• Documentación de AWS SDK para PHP

Lista de cargas multiparte con la API de AWS SDK para PHP de bajo nivel
Este tema muestra cómo usar las clases de API de bajo nivel de la versión 3 de AWS SDK para PHP para
crear una lista de todas las cargas multiparte en curso en un bucket. Se parte de la base de que usted ya
sigue las instrucciones para Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708) y ha
instalado AWS SDK para PHP correctamente.

El siguiente ejemplo de PHP demuestra cómo enumerar todas las cargas multiparte en curso en un bucket.

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Retrieve a list of the current multipart uploads.

Versión de API 2006-03-01


213
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

$result = $s3->listMultipartUploads([
'Bucket' => $bucket
]);

// Write the list of uploads to the page.


print_r($result->toArray());

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Cargas multiparte de Amazon S3
• Documentación de AWS SDK para PHP

Anulación de una carga multiparte


En este tema se describe cómo utilizar una clase de la versión 3 de AWS SDK para PHP para anular
una carga multiparte en curso. Se parte de la base de que usted ya sigue las instrucciones para Uso
del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP
correctamente.

En el siguiente ejemplo de PHP se muestra cómo anular cargas multiparte en curso usando el método
abortMultipartUpload(). Para obtener información acerca de la ejecución de ejemplos de PHP en
esta guía, consulte Ejecución de ejemplos de PHP (p. 709).

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';
$uploadId = '*** Upload ID of upload to Abort ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Abort the multipart upload.


$s3->abortMultipartUpload([
'Bucket' => $bucket,
'Key' => $keyname,
'UploadId' => $uploadId,
]);

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Cargas multiparte de Amazon S3
• Documentación de AWS SDK para PHP

Uso de AWS SDK parar Ruby para carga multiparte


La versión 3 de AWS SDK parar Ruby admite cargas multiparte de Amazon S3 de dos formas. Para
la primera opción, puede utilizar una aplicación auxiliar de carga de archivos administrados. Este es el
método recomendado para cargar archivos a un bucket, que proporciona los siguientes beneficios:

• Administra las cargas multipartes para objetos superiores a 15 MB.


• Abre correctamente los archivos en modo binario para evitar problemas de codificación.

Versión de API 2006-03-01


214
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

• Utiliza varios subprocesos para cargar las partes de objetos grandes simultáneamente.

Para obtener más información, consulte Uploading Files to Amazon S3 en el blog para desarrolladores de
AWS.

Como alternativa, puede utilizar directamente las siguientes operaciones de cliente de carga multiparte:

• create_multipart_upload: inicia una carga multiparte y devuelve un ID de carga.


• upload_part: carga una parte en una carga multiparte.
• upload_part_copy: carga una parte al copiar los datos de un objeto existente como origen de datos.
• complete_multipart_upload: completa una carga multiparte al combinar las partes cargadas previamente.
• abort_multipart_upload: anula una carga multiparte.

Para obtener más información, consulte Uso de la versión 3 de AWS SDK parar Ruby (p. 709).

Uso de la API de REST para carga multiparte


En las siguientes secciones de la Amazon Simple Storage Service API Reference se describe la API de
REST para carga multiparte.

• Initiate Multipart Upload


• Upload Part
• Complete Multipart Upload
• Abort Multipart Upload
• List Parts
• List Multipart Uploads

Puede utilizar estas API para realizar sus propias solicitudes REST o puede utilizar uno de los SDK
que ofrecemos. Para obtener más información sobre SDKs, consulte Compatibilidad de API para carga
multiparte (p. 191).

Carga de objetos con URL prefirmadas


Temas
• Carga de un objeto mediante una URL prefirmada (AWS SDK for Java) (p. 216)
• Carga de un objeto a un bucket de S3 mediante una URL prefirmada (AWS SDK para .NET) (p. 217)
• Carga de un objeto mediante una URL prefirmada (AWS SDK parar Ruby) (p. 219)

Una dirección URL prefirmada le permite acceder al objeto identificado en la misma, siempre que el
creador de la URL prefirmada tenga permiso para obtener acceso al objeto. Es decir, si recibe una URL
prefirmada para cargar un objeto, podrá cargar el objeto solamente si el creador de la URL prefirmada
cuenta con los permisos necesarios para ello.

De forma predeterminada, todos los objetos y buckets son privados. Las direcciones URL prefirmadas
resultan útiles si quiere que su cliente o usuario pueda cargar un objeto específico en su bucket, pero no
quiere que tenga credenciales o permisos de seguridad de AWS. Al crear una dirección URL prefirmada,
debe facilitar sus credenciales de seguridad y, a continuación, especificar un nombre para el bucket, una
clave de objeto, un método HTTP (PUT para cargar objetos) y una fecha y hora de vencimiento. Las URL
prefirmadas son solo válidas para la duración especificada.

Puede generar una URL prefirmada mediante programación utilizando AWS SDK for Java o AWS SDK
para .NET. Si utiliza Microsoft Visual Studio, también puede usar AWS Explorer para generar una URL de

Versión de API 2006-03-01


215
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

objeto prefirmada sin escribir código. Cualquiera que reciba una URL prefirmada válida puede cargar un
objeto mediante programación.

Para obtener más información, consulte Uso de Amazon S3 desde AWS Explorer.

Para obtener instrucciones acerca de cómo instalar AWS Explorer, consulte Uso de los SDK, la CLI y los
exploradores de AWS (p. 697).
Note

Cualquiera que tenga credenciales de seguridad válidas puede crear una URL prefirmada. Sin
embargo, para que pueda cargar un objeto correctamente, 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.

Carga de un objeto mediante una URL prefirmada (AWS SDK for Java)
Puede utilizar AWS SDK for Java para generar una URL prefirmada que usted, o cualquiera a quien le
dé la URL, puede usar para cargar un objeto en Amazon S3. Cuando 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. Para completar la carga correctamente, siga estos pasos:

• Especifique el verbo HTTP PUT al crear los objetos GeneratePresignedUrlRequest y


HttpURLConnection.
• Interactúe con el objeto HttpURLConnection de alguna manera tras finalizar la carga. El siguiente
ejemplo hace esto usando el objeto HttpURLConnection para comprobar el código de respuesta
HTTP.

Example

Este ejemplo genera una URL prefirmada y la utiliza para cargar datos de muestra como un objeto. Para
obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de
ejemplos de código Java de Amazon S3 (p. 706).

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 com.amazonaws.services.s3.model.S3Object;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

public class GeneratePresignedUrlAndUploadObject {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String objectKey = "*** Object key ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()

Versión de API 2006-03-01


216
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Set the pre-signed URL to expire after one hour.


java.util.Date expiration = new java.util.Date();
long expTimeMillis = expiration.getTime();
expTimeMillis += 1000 * 60 * 60;
expiration.setTime(expTimeMillis);

// Generate the pre-signed URL.


System.out.println("Generating pre-signed URL.");
GeneratePresignedUrlRequest generatePresignedUrlRequest = new
GeneratePresignedUrlRequest(bucketName, objectKey)
.withMethod(HttpMethod.PUT)
.withExpiration(expiration);
URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);

// Create the connection and use it to upload the new object using the pre-
signed URL.
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
out.write("This text uploaded as an object via presigned URL.");
out.close();

// Check the HTTP response code. To complete the upload and make the object
available,
// you must interact with the connection object in some way.
connection.getResponseCode();
System.out.println("HTTP response code: " + connection.getResponseCode());

// Check to make sure that the object was uploaded successfully.


S3Object object = s3Client.getObject(bucketName, objectKey);
System.out.println("Object " + object.getKey() + " created in bucket " +
object.getBucketName());
} 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();
}
}
}

Carga de un objeto a un bucket de S3 mediante una URL prefirmada (AWS SDK


para .NET)
El siguiente ejemplo de código C# muestra cómo usar AWS SDK para .NET para cargar un objeto a un
bucket de S3 mediante una URL prefirmada. Para obtener más información acerca de URL prefirmadas,
consulte Carga de objetos con URL prefirmadas (p. 215).

Este ejemplo genera una URL prefirmada para un objeto específico y la usa para cargar un archivo.
Para obtener información sobre la compatibilidad del ejemplo con una versión específica de AWS SDK
para .NET e instrucciones sobre cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

Versión de API 2006-03-01


217
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Net;

namespace Amazon.DocSamples.S3
{
class UploadObjectUsingPresignedURLTest
{
private const string bucketName = "*** provide bucket name ***";
private const string objectKey = "*** provide the name for the uploaded object
***";
private const string filePath = "*** provide the full path name of the file to
upload ***";
// 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);
var url = GeneratePreSignedURL();
UploadObject(url);
}

private static void UploadObject(string url)


{
HttpWebRequest httpRequest = WebRequest.Create(url) as HttpWebRequest;
httpRequest.Method = "PUT";
using (Stream dataStream = httpRequest.GetRequestStream())
{
var buffer = new byte[8000];
using (FileStream fileStream = new FileStream(filePath, FileMode.Open,
FileAccess.Read))
{
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
dataStream.Write(buffer, 0, bytesRead);
}
}
}
HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse;
}

private static string GeneratePreSignedURL()


{
var request = new GetPreSignedUrlRequest
{
BucketName = bucketName,
Key = objectKey,
Verb = HttpVerb.PUT,
Expires = DateTime.Now.AddMinutes(5)
};

string url = s3Client.GetPreSignedURL(request);


return url;
}
}
}

Más información

AWS SDK para .NET

Versión de API 2006-03-01


218
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

Carga de un objeto mediante una URL prefirmada (AWS SDK parar Ruby)
Las siguientes tareas le guiarán a través del proceso de uso de un script de Ruby para cargar un objeto
mediante una URL prefirmada en SDK para Ruby - Versión 3.

Carga de objetos - SDK para Ruby - Versión 3

1 Cree una instancia de la clase Aws::S3::Resource.

2 Proporcione un nombre del bucket y una clave de objeto llamando a los métodos
#bucket[] y #object[] de su instancia de la clase Aws::S3::Resource.

Genere una URL prefirmada creando una instancia de la clase URI y usándola para analizar
el método .presigned_url de su instancia de la clase Aws::S3::Resource. Debe
especificar :put como argumento de .presigned_url, y debe especificar PUT en
Net::HTTP::Session#send_request si quiere cargar un objeto.

3 Cualquiera que tenga la URL prefirmada puede cargar un objeto.

Al realizar la carga, se crea un objeto o se sustituye uno existente con la misma clave que
está especificada en la URL prefirmada.

En el siguiente ejemplo de código Ruby se muestran las tareas anteriores para SDK para Ruby - Versión 3.

Example

#Uploading an object using a presigned URL for SDK for Ruby - Version 3.

require 'aws-sdk-s3'
require 'net/http'

s3 = Aws::S3::Resource.new(region:'us-west-2')

obj = s3.bucket('BucketName').object('KeyName')
# Replace BucketName with the name of your bucket.
# Replace KeyName with the name of the object you are creating or replacing.

url = URI.parse(obj.presigned_url(:put))

body = "Hello World!"


# This is the contents of your object. In this case, it's a simple string.

Net::HTTP.start(url.host) do |http|
http.send_request("PUT", url.request_uri, body, {
# This is required, or Net::HTTP will add a default unsigned content-type.
"content-type" => "",
})
end

puts obj.get.body.read
# This will print out the contents of your object to the terminal window.

Copia de objetos
La operación de copia crea una copia de un objeto que ya esté almacenado en Amazon S3. Puede crear
una copia de su objeto de hasta 5 GB en una única operación atómica. Sin embargo, para copiar un objeto
mayor de 5 GB, debe usar la API de carga multiparte. Con la operación copy, puede:

• Crear copias adicionales de objetos

Versión de API 2006-03-01


219
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

• Cambiar el nombre de objetos copiándolos y eliminando los originales


• Mover objetos por ubicaciones de Amazon S3 (p. ej., us-west-1 y UE)
• Cambiar metadatos de objetos

Todos los objetos de Amazon S3 tienen metadatos. Son un conjunto de pares nombre-valor. Puede
establecer los metadatos de un objeto en el momento en el que lo sube. Tras cargar el objeto, no puede
modificar sus metadatos. La única manera de modificar los metadatos de un objeto es realizar una copia
del mismo y configurar sus metadatos. En la operación de copia, verá el mismo objeto en el origen y el
destino.

Todos los objetos tienen metadatos. Algunos de ellos son metadatos del sistema y otros definidos por el
usuario. Los usuarios controlan algunos de los metadatos del sistema, como la configuración de la clase de
almacenamiento que se ha de usar para el objeto y la del cifrado en el servidor. Cuando copia un objeto,
los metadatos del sistema controlados por el usuario y los metadatos definidos por el usuario también se
copian. Amazon S3 reinicia los metadatos controlados por el sistema. Por ejemplo, cuando se copia un
objeto, Amazon S3 restablece la fecha de creación del objeto copiado. No necesita establecer ninguno de
estos valores en su solicitud de copia.

Al copiar un objeto, puede decidir actualizar algunos de los valores de los metadatos. Por ejemplo, si su
objeto de origen está configurado para usar almacenamiento estándar, podría elegir usar almacenamiento
de redundancia reducida para la copia del objeto. También podría decidir alterar algunos de los valores
de metadatos definidos por el usuario presentes en el objeto de origen. Tenga en cuenta que si decide
actualizar cualquiera de los metadatos del objeto configurables por el usuario (definidos por el sistema o
por el usuario) durante la copia, debe especificar explícitamente todos los metadatos configurables por el
usuario presentes en el objeto de origen de la solicitud, incluso aunque solo cambie uno de los valores de
metadatos.

Para obtener más información acerca de los metadatos del objeto, consulte Clave y metadatos de
objetos (p. 105).
Note

• La copia de objetos entre ubicaciones genera cargos por uso de ancho de banda.
• Si el objeto de origen se archiva en GLACIER o DEEP_ARCHIVE, primero debe restaurar una
copia temporal antes de poder copiar el objeto en otro bucket. Para obtener información acerca
del archivado de objetos, consulte Transición a las clases de almacenamiento GLACIER y
DEEP ARCHIVE (archivado de objetos) (p. 132).

Al copiar objetos, puede solicitar a Amazon S3 que guarde el objeto de destino cifrado con una clave de
cifrado de AWS Key Management Service (AWS KMS), una clave de cifrado administrada por Amazon
S3 o una clave de cifrado facilitada por el cliente. También debe especificar la información de cifrado
correspondiente en la solicitud. Si el origen de la copia es un objeto almacenado en Amazon S3 con
cifrado del lado del servidor y una clave proporcionada por el cliente, tendrá que facilitar la información de
cifrado en la solicitud, de modo que Amazon S3 pueda descifrar el objeto para copiarlo. Para obtener más
información, consulte Protección de datos mediante cifrado (p. 274).

Para copiar más de un objeto de Amazon S3 con una sola solicitud, puede utilizar operaciones por lotes de
Amazon S3.

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Versión de API 2006-03-01


220
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

Copiar objetos en una operación única


Los ejemplos de esta sección demuestran cómo copiar objetos de hasta 5 GB en una única operación.
Para copiar objetos mayores de 5 GB, debe usar la API de carga multiparte. Para obtener más
información, consulte Copia de objetos con la API de carga multiparte (p. 225).

Temas
• Copiar un objeto con AWS SDK for Java (p. 221)
• Copiar un objeto de Amazon S3 en una única operación con AWS SDK para .NET (p. 222)
• Copiar un objeto con AWS SDK para PHP (p. 223)
• Copiar un objeto con AWS SDK parar Ruby (p. 224)
• Copia de un objeto con la API REST (p. 225)

Copiar un objeto con AWS SDK for Java


Example

En el siguiente ejemplo se muestra cómo copiar un objeto en Amazon S3 mediante AWS SDK for Java.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.CopyObjectRequest;

import java.io.IOException;

public class CopyObjectSingleOperation {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String sourceKey = "*** Source object key *** ";
String destinationKey = "*** Destination object key ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Copy the object into a new object in the same bucket.


CopyObjectRequest copyObjRequest = new CopyObjectRequest(bucketName, sourceKey,
bucketName, destinationKey);
s3Client.copyObject(copyObjRequest);
} 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();
}
}

Versión de API 2006-03-01


221
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

Copiar un objeto de Amazon S3 en una única operación con AWS SDK para .NET
Un siguiente ejemplo de C# que muestra cómo usar AWS SDK para .NET de alto nivel para copiar objetos
con un tamaño de hasta 5 GB en una única operación. Para objetos que sean mayores de 5 GB, use el
ejemplo de copia de carga multiparte que se describe en Copie un objeto de Amazon S3 con la API de
carga multiparte de AWS SDK para .NET (p. 228).

En este ejemplo se realiza una copia de un objeto que tiene un máximo de 5 GB. Para obtener información
sobre la compatibilidad del ejemplo con una versión específica del AWS SDK para .NET e instrucciones
sobre cómo crear y probar un ejemplo funcional, consulte Ejecución de ejemplos de código .NET de
Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class CopyObjectTest
{
private const string sourceBucket = "*** provide the name of the bucket with source
object ***";
private const string destinationBucket = "*** provide the name of the bucket to
copy the object to ***";
private const string objectKey = "*** provide the name of object to copy ***";
private const string destObjectKey = "*** provide the destination object key name
***";
// 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);
Console.WriteLine("Copying an object");
CopyingObjectAsync().Wait();
}

private static async Task CopyingObjectAsync()


{
try
{
CopyObjectRequest request = new CopyObjectRequest
{
SourceBucket = sourceBucket,
SourceKey = objectKey,
DestinationBucket = destinationBucket,
DestinationKey = destObjectKey
};
CopyObjectResponse response = await s3Client.CopyObjectAsync(request);
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when writing
an object", e.Message);
}
catch (Exception e)
{

Versión de API 2006-03-01


222
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

Console.WriteLine("Unknown encountered on server. Message:'{0}' when


writing an object", e.Message);
}
}
}
}

Más información

AWS SDK para .NET

Copiar un objeto con AWS SDK para PHP


Este tema le guía a través del uso de las clases de la versión 3 de AWS SDK para PHP para copiar un
único objeto y varios objetos en Amazon S3 de un bucket a otro o dentro del mismo bucket.

En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.

En las siguientes tareas se mostrará el proceso de uso de las clases del SDK en PHP para copiar un
objeto que ya está almacenado en Amazon S3.

En las siguientes tareas se mostrará el proceso de uso de las clases de PHP para copiar un objeto en
Amazon S3.

Copia de objetos

1 Cree una instancia de un cliente de Amazon S3 con el constructor de clase Aws


\S3\S3Client.

2 Para realizar varias copias de un objeto, ejecute un lote de llamadas al método del cliente
de Amazon S3 getCommand(), heredado de la clase Aws\CommandInterface. Debe
proporcionar el comando CopyObject como primer argumento y una matriz que contenga
el bucket de origen, el nombre de la clave de origen, el bucket de destino y el nombre de la
clave de destino como segundo argumento.

Example Copia de objetos en Amazon S3

El siguiente ejemplo de código PHP ilustra el uso del método copyObject() para copiar un único objeto
en Amazon S3 y usar un lote de llamadas a CopyObject usando el método getcommand() para realizar
varias copias de un objeto.

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$sourceBucket = '*** Your Source Bucket Name ***';


$sourceKeyname = '*** Your Source Object Key ***';
$targetBucket = '*** Your Target Bucket Name ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Copy an object.
$s3->copyObject([
'Bucket' => $targetBucket,
'Key' => "{$sourceKeyname}-copy",
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",

Versión de API 2006-03-01


223
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

]);

// Perform a batch of CopyObject operations.


$batch = array();
for ($i = 1; $i <= 3; $i++) {
$batch[] = $s3->getCommand('CopyObject', [
'Bucket' => $targetBucket,
'Key' => "{targetKeyname}-{$i}",
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
]);
}
try {
$results = CommandPool::batch($s3, $batch);
foreach($results as $result) {
if ($result instanceof ResultInterface) {
// Result handling here
}
if ($result instanceof AwsException) {
// AwsException handling here
}
}
} catch (\Exception $e) {
// General error handling here
}

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Documentación de AWS SDK para PHP

Copiar un objeto con AWS SDK parar Ruby


Las siguientes tareas le guían a través del uso de las clases de Ruby para copiar un objeto en Amazon S3,
de un bucket a otro, o para copiar un objeto dentro del mismo bucket.

Copia de objetos

1 Utilice la gema modularizada de Amazon S3 para la versión 3 de AWS SDK parar Ruby,
solicite 'aws-sdk-s3' y proporcione sus credenciales de AWS. Para obtener más información
acerca de cómo proporcionar sus credenciales, consulte Realización de solicitudes con las
credenciales de usuario de IAM o de una cuenta de AWS (p. 19).

2 Brinde la información de solicitud, como el nombre del bucket de origen, el nombre de la


clave de origen y la clave de destino.

En el siguiente ejemplo de código Ruby se muestran las tareas anteriores utilizando el método
#copy_object para copiar un objeto de un bucket a otro.

Example

require 'aws-sdk-s3'

source_bucket_name = '*** Provide bucket name ***'


target_bucket_name = '*** Provide bucket name ***'
source_key = '*** Provide source key ***'
target_key = '*** Provide target key ***'

begin
s3 = Aws::S3::Client.new(region: 'us-west-2')

Versión de API 2006-03-01


224
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

s3.copy_object(bucket: target_bucket_name, copy_source: source_bucket_name + '/' +


source_key, key: target_key)
rescue StandardError => ex
puts 'Caught exception copying object ' + source_key + ' from bucket ' +
source_bucket_name + ' to bucket ' + target_bucket_name + ' as ' + target_key + ':'
puts ex.message
end

puts 'Copied ' + source_key + ' from bucket ' + source_bucket_name + ' to bucket ' +
target_bucket_name + ' as ' + target_key

Copia de un objeto con la API REST


En este ejemplo se describe cómo copiar un objeto con REST. Para obtener más información acerca de la
API REST, consulte PUT Object (Copy).

En este ejemplo se copia el objeto flotsam desde el bucket pacific al objeto jetsam del bucket
atlantic, conservando sus metadatos.

PUT /jetsam HTTP/1.1


Host: atlantic.s3.amazonaws.com
x-amz-copy-source: /pacific/flotsam
Authorization: AWS AKIAIOSFODNN7EXAMPLE:ENoSbxYByFA0UGLZUqJN5EUnLDg=
Date: Wed, 20 Feb 2008 22:12:21 +0000

La firma se generó a partir de la siguiente información.

PUT\r\n
\r\n
\r\n
Wed, 20 Feb 2008 22:12:21 +0000\r\n

x-amz-copy-source:/pacific/flotsam\r\n
/atlantic/jetsam

Amazon S3 devuelve la siguiente respuesta, que especifica el ETag del objeto y cuándo se modificó por
última vez.

HTTP/1.1 200 OK
x-amz-id-2: Vyaxt7qEbzv34BnSu5hctyyNSlHTYZFMWK4FtzO+iX8JQNyaLdTshL0KxatbaOZt
x-amz-request-id: 6B13C3C5B34AF333
Date: Wed, 20 Feb 2008 22:13:01 +0000

Content-Type: application/xml
Transfer-Encoding: chunked
Connection: close
Server: AmazonS3
<?xml version="1.0" encoding="UTF-8"?>

<CopyObjectResult>
<LastModified>2008-02-20T22:13:01</LastModified>
<ETag>"7e9c608af58950deeb370c98608ed097"</ETag>
</CopyObjectResult>

Copia de objetos con la API de carga multiparte


En esta sección se muestran ejemplos sobre cómo copiar objetos superiores a 5 GB con la Application
Programming Interface (API, Interfaz de programación de aplicaciones) de carga multiparte. Puede copiar
objetos inferiores a 5 GB con una sola operación. Para obtener más información, consulte Copiar objetos
en una operación única (p. 221).

Versión de API 2006-03-01


225
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

Temas
• Copie un objeto con la API de carga multiparte de AWS SDK for Java (p. 226)
• Copie un objeto de Amazon S3 con la API de carga multiparte de AWS SDK para .NET (p. 228)
• Copia de un objeto con la API de carga multiparte de REST (p. 230)

Copie un objeto con la API de carga multiparte de AWS SDK for Java
Para copiar un objeto de Amazon S3 superior a 5 GB con AWS SDK for Java, use la API de Java de bajo
nivel. Para objetos inferiores a 5 GB, utilice la copia con una única operación que se describe en Copiar un
objeto con AWS SDK for Java (p. 221).

Para copiar un objeto mediante la API de Java de bajo nivel, siga estos pasos:

• Inicie una carga multiparte ejecutando el método AmazonS3Client.initiateMultipartUpload().


• Guarde el ID de carga del objeto de respuesta que devuelve el método
AmazonS3Client.initiateMultipartUpload(). Facilite este ID de carga para cada operación de
carga de parte.
• Copie todas las partes. Para cada parte que necesite copiar, cree una nueva instancia de la clase
CopyPartRequest. Proporcione la información de parte, incluidos los nombres de los bucket de origen
y destino, las claves de los objetos de origen y de destino, los ID de carga, las ubicaciones del primer y
último byte de la parte y el número de parte.
• Guarde las respuestas de las llamadas del método AmazonS3Client.copyPart(). Cada respuesta
incluye el valor de ETag y el número de parte de la parte cargada. Necesitará esta información para
completar la carga multiparte:
• Llame al método AmazonS3Client.completeMultipartUpload() para completar la operación de
copia.

Example

En el siguiente ejemplo se muestra cómo usar la API de Java de bajo nivel de Amazon S3 para realizar
una copia multiparte. Para obtener instrucciones sobre la creación y comprobación de una muestra
funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.*;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class LowLevelMultipartCopy {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String sourceBucketName = "*** Source bucket name ***";
String sourceObjectKey = "*** Source object key ***";
String destBucketName = "*** Target bucket name ***";
String destObjectKey = "*** Target object key ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()

Versión de API 2006-03-01


226
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Initiate the multipart upload.


InitiateMultipartUploadRequest initRequest = new
InitiateMultipartUploadRequest(destBucketName, destObjectKey);
InitiateMultipartUploadResult initResult =
s3Client.initiateMultipartUpload(initRequest);

// Get the object size to track the end of the copy operation.
GetObjectMetadataRequest metadataRequest = new
GetObjectMetadataRequest(sourceBucketName, sourceObjectKey);
ObjectMetadata metadataResult = s3Client.getObjectMetadata(metadataRequest);
long objectSize = metadataResult.getContentLength();

// Copy the object using 5 MB parts.


long partSize = 5 * 1024 * 1024;
long bytePosition = 0;
int partNum = 1;
List<CopyPartResult> copyResponses = new ArrayList<CopyPartResult>();
while (bytePosition < objectSize) {
// The last part might be smaller than partSize, so check to make sure
// that lastByte isn't beyond the end of the object.
long lastByte = Math.min(bytePosition + partSize - 1, objectSize - 1);

// Copy this part.


CopyPartRequest copyRequest = new CopyPartRequest()
.withSourceBucketName(sourceBucketName)
.withSourceKey(sourceObjectKey)
.withDestinationBucketName(destBucketName)
.withDestinationKey(destObjectKey)
.withUploadId(initResult.getUploadId())
.withFirstByte(bytePosition)
.withLastByte(lastByte)
.withPartNumber(partNum++);
copyResponses.add(s3Client.copyPart(copyRequest));
bytePosition += partSize;
}

// Complete the upload request to concatenate all uploaded parts and make the
copied object available.
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest(
destBucketName,
destObjectKey,
initResult.getUploadId(),
getETags(copyResponses));
s3Client.completeMultipartUpload(completeRequest);
System.out.println("Multipart copy complete.");
} 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();
}
}

// This is a helper function to construct a list of ETags.


private static List<PartETag> getETags(List<CopyPartResult> responses) {
List<PartETag> etags = new ArrayList<PartETag>();
for (CopyPartResult response : responses) {
etags.add(new PartETag(response.getPartNumber(), response.getETag()));

Versión de API 2006-03-01


227
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

}
return etags;
}
}

Copie un objeto de Amazon S3 con la API de carga multiparte de AWS SDK


para .NET
El siguiente ejemplo de código C# muestra cómo usar AWS SDK para .NET para copiar un objeto de
Amazon S3 mayor de 5 GB de una ubicación de origen a otra, como, por ejemplo, de un bucket a otro.
Para copiar objetos menores de 5 GB, use el procedimiento de copia de una sola operación descrito en
Copiar un objeto de Amazon S3 en una única operación con AWS SDK para .NET (p. 222). Para obtener
más información acerca de las cargas multiparte de Amazon S3, consulte Información general de carga
multiparte (p. 187).

Este ejemplo muestra cómo copiar un objeto de Amazon S3 mayor de 5 GB de un bucket de S3 a otro con
la API de carga multiparte de AWS SDK para .NET. Para obtener información acerca de la compatibilidad
de SDK e instrucciones para crear y probar una muestra funcional, consulte Ejecución de ejemplos de
código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class CopyObjectUsingMPUapiTest
{
private const string sourceBucket = "*** provide the name of the bucket with source
object ***";
private const string targetBucket = "*** provide the name of the bucket to copy the
object to ***";
private const string sourceObjectKey = "*** provide the name of object to copy
***";
private const string targetObjectKey = "*** provide the name of the object copy
***";
// 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);
Console.WriteLine("Copying an object");
MPUCopyObjectAsync().Wait();
}
private static async Task MPUCopyObjectAsync()
{
// Create a list to store the upload part responses.
List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();
List<CopyPartResponse> copyResponses = new List<CopyPartResponse>();

// Setup information required to initiate the multipart upload.


InitiateMultipartUploadRequest initiateRequest =
new InitiateMultipartUploadRequest
{
BucketName = targetBucket,
Key = targetObjectKey

Versión de API 2006-03-01


228
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

};

// Initiate the upload.


InitiateMultipartUploadResponse initResponse =
await s3Client.InitiateMultipartUploadAsync(initiateRequest);

// Save the upload ID.


String uploadId = initResponse.UploadId;

try
{
// Get the size of the object.
GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
{
BucketName = sourceBucket,
Key = sourceObjectKey
};

GetObjectMetadataResponse metadataResponse =
await s3Client.GetObjectMetadataAsync(metadataRequest);
long objectSize = metadataResponse.ContentLength; // Length in bytes.

// Copy the parts.


long partSize = 5 * (long)Math.Pow(2, 20); // Part size is 5 MB.

long bytePosition = 0;
for (int i = 1; bytePosition < objectSize; i++)
{
CopyPartRequest copyRequest = new CopyPartRequest
{
DestinationBucket = targetBucket,
DestinationKey = targetObjectKey,
SourceBucket = sourceBucket,
SourceKey = sourceObjectKey,
UploadId = uploadId,
FirstByte = bytePosition,
LastByte = bytePosition + partSize - 1 >= objectSize ? objectSize -
1 : bytePosition + partSize - 1,
PartNumber = i
};

copyResponses.Add(await s3Client.CopyPartAsync(copyRequest));

bytePosition += partSize;
}

// Set up to complete the copy.


CompleteMultipartUploadRequest completeRequest =
new CompleteMultipartUploadRequest
{
BucketName = targetBucket,
Key = targetObjectKey,
UploadId = initResponse.UploadId
};
completeRequest.AddPartETags(copyResponses);

// Complete the copy.


CompleteMultipartUploadResponse completeUploadResponse =
await s3Client.CompleteMultipartUploadAsync(completeRequest);
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when writing
an object", e.Message);
}
catch (Exception e)

Versión de API 2006-03-01


229
Amazon Simple Storage Service Guía del desarrollador
Listas de claves de objetos

{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
}
}

Más información
AWS SDK para .NET

Copia de un objeto con la API de carga multiparte de REST


En las siguientes secciones de la Amazon Simple Storage Service API Reference se describe la API
REST para carga multiparte. Para copiar un objeto existente, utilice la API Upload Part (Copy) y añada el
encabezado de solicitud x-amz-copy-source a su solicitud para especificar el objeto de origen.

• Initiate Multipart Upload


• Upload Part
• Upload Part (Copy)
• Complete Multipart Upload
• Abort Multipart Upload
• List Parts
• List Multipart Uploads

Puede utilizar estas API para realizar sus propias solicitudes REST o puede utilizar uno de los SDK
que ofrecemos. Para obtener más información sobre SDKs, consulte Compatibilidad de API para carga
multiparte (p. 191).

Listas de claves de objetos


Las claves se pueden enumerar por prefijo. Si selecciona un prefijo común para los nombres de claves
relacionadas y marca estas claves con un carácter especial que delimite la jerarquía, puede usar la
operación de lista para seleccionar y explorar las claves jerárquicamente. La operación es similar a cómo
se almacenan los archivos en directorios de un sistema de archivos.

Amazon S3 expone una operación de lista que le permite enumerar las claves que contiene un bucket.
Las claves se seleccionan para la lista por bucket y prefijo. Por ejemplo, piense en un bucket llamado
"dictionary" que contenga una clave para cada palabra en inglés. Podría realizar una llamada para
enumerar todas las claves en ese bucket que comiencen por la letra "q". Los resultados de listas siempre
se devuelven en orden binario UTF-8.

Tanto las operaciones de lista SOAP como REST devuelven un documento XML que contiene los nombres
de las claves coincidentes e información sobre el objeto identificado por cada clave.
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Los grupos de claves que comparten un prefijo que termina con un delimitador especial se pueden
acumular por el prefijo común para realizar las listas. Esto permite que las aplicaciones organicen y
exploren sus claves jerárquicamente, del mismo modo que se organizarían los archivos en directorios
en un sistema de archivos. Por ejemplo, para ampliar el bucket dictionary de modo que contenga más
palabras, además de las que están en inglés, podría formar claves poniendo un prefijo a cada palabra

Versión de API 2006-03-01


230
Amazon Simple Storage Service Guía del desarrollador
Listas de claves de objetos

con su idioma y un delimitador, como "French/logical". Con este esquema de nomenclatura y la función
de listado jerárquico, podría recuperar una lista de palabras solo en francés. También podría explorar
la lista de nivel superior de idiomas disponibles sin tener que iterar por todas las claves que intervienen
lexicográficamente.

Para obtener más información sobre este aspecto de las listas, consulte Listado de claves jerárquicamente
con un prefijo y un delimitador (p. 231).

Eficacia de implementación de listas

El rendimiento de las listas no se ve sustancialmente afectado por el número total de claves en su


bucket, ni por la presencia ni ausencia del prefijo, el marcador, las claves máximas ni los argumentos
delimitadores.

Iteración en resultados de varias páginas


Dado que los buckets pueden contener un número virtualmente ilimitado de claves, los resultados
completos de una consulta de lista pueden ser extremadamente grandes. Para administrar los conjuntos
de resultados grandes, la API de Amazon S3 admite la paginación, de modo que los divide en varias
respuestas. Cada respuesta de lista de claves devuelve una página con hasta 1000 claves y un indicador
que identifica si la respuesta está incompleta. Enviará una serie de solicitudes de listas de claves hasta
que haya recibido todas las claves. Las bibliotecas de encapsulamiento de los SDK de AWS facilitan la
misma paginación.

En los siguientes ejemplos de los SDK de Java y .NET se demuestra cómo usar la paginación al enumerar
las claves de un bucket:

• Lista de claves con AWS SDK for Java (p. 232)


• Lista de claves con AWS SDK para .NET (p. 234)

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Listado de claves jerárquicamente con un prefijo y un delimitador


Los parámetros de prefijo y delimitador restringen el tipo de resultados que devuelve una operación de
lista. El prefijo limita los resultados solo a aquellas claves que comienzan por el prefijo especificado. El
delimitador hace que una operación de lista acumule todas las claves que comparten un prefijo común en
un solo resultado de lista de resumen.

El objetivo de los parámetros de prefijo y delimitador es ayudarle a organizar sus claves jerárquicamente y
explorarlas. Para hacerlo, escoja un delimitador para su bucket, como una barra inclinada (/), que no esté
presente en ninguno de sus nombres de clave esperados. A continuación, cree sus nombres de claves
concatenando todos los niveles que contenga la jerarquía, separando cada nivel con el delimitador.

Por ejemplo, si estuviera almacenando información sobre ciudades, puede que quiera organizadla de
forma natural por continente, país y provincia o estado. Dado que estos nombres no suelen contener
puntuación, podría seleccionar la barra inclinada (/) como delimitador. En el siguiente ejemplo se usa la
barra inclinada (/) como delimitador:

• Europa/Francia/Aquitania/Burdeos
• Norteamérica/Canadá/Quebec/Montreal
• Norteamérica/EE. UU./Washintgon/Bellevue
• Norteamérica/EE. UU./Washintgon/Seattle

Versión de API 2006-03-01


231
Amazon Simple Storage Service Guía del desarrollador
Listas de claves de objetos

Si almacena datos para todas las ciudades del mundo siguiendo este esquema, sería extraño administrar
un espacio de nombres plano para las claves. Al utilizar Prefix y Delimiter en la operación de lista,
puede aprovechar la jerarquía que ha creado para enumerar los datos. Por ejemplo, para enumerar
todas las ciudades de EE. UU., establezca Delimiter="/" y Prefix="Norteamérica/EE. UU./". Para
enumerar todas las provincias de Canadá para las que tenga datos, establezca Delimiter="/" y
Prefix="Norteamérica/Canadá/".

Una solicitud de lista con un delimitador le permite explorar su jerarquía solo en un nivel, omitiendo y
resumiendo las claves (posiblemente millones de ellas) anidadas en niveles más profundos. Por ejemplo,
supongamos que tiene un bucket (ExampleBucket) con las siguientes claves.

sample.jpg

photos/2006/January/sample.jpg

photos/2006/February/sample2.jpg

photos/2006/February/sample3.jpg

photos/2006/February/sample4.jpg

El bucket de ejemplo solo tiene el objeto sample.jpg en el nivel raíz. Para enumerar solo los objetos en
el nivel raíz del bucket, envíe una solicitud GET al bucket con el carácter delimitador "/". En respuesta,
Amazon S3 devuelve la clave de objeto sample.jpg porque no contiene el carácter delimitador "/". Todas
las demás claves contienen el carácter delimitador. Amazon S3 agrupa estas claves y devuelve un único
elemento CommonPrefixes con un valor de prefijo photos/, que es una subcadena desde el comienzo
de estas claves hasta la primera instancia del delimitador especificado.

Example

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>ExampleBucket</Name>
<Prefix></Prefix>
<Marker></Marker>
<MaxKeys>1000</MaxKeys>
<Delimiter>/</Delimiter>
<IsTruncated>false</IsTruncated>
<Contents>
<Key>sample.jpg</Key>
<LastModified>2011-07-24T19:39:30.000Z</LastModified>
<ETag>&quot;d1a7fb5eab1c16cb4f7cf341cf188c3d&quot;</ETag>
<Size>6</Size>
<Owner>
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>displayname</DisplayName>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
<CommonPrefixes>
<Prefix>photos/</Prefix>
</CommonPrefixes>
</ListBucketResult>

Lista de claves con AWS SDK for Java


Example

En el siguiente ejemplo se enumeran las claves de objeto en un bucket. El ejemplo usa paginación para
recuperar un conjunto de claves de objeto. Si hay más claves que devolver después de la primera página,

Versión de API 2006-03-01


232
Amazon Simple Storage Service Guía del desarrollador
Listas de claves de objetos

Amazon S3 incluye un token de continuación en la respuesta. El ejemplo utiliza el token de continuación en


la solicitud subsiguiente para obtener el siguiente conjunto de claves del objeto.

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.ListObjectsV2Request;
import com.amazonaws.services.s3.model.ListObjectsV2Result;
import com.amazonaws.services.s3.model.S3ObjectSummary;

import java.io.IOException;

public class ListKeys {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

System.out.println("Listing objects");

// maxKeys is set to 2 to demonstrate the use of


// ListObjectsV2Result.getNextContinuationToken()
ListObjectsV2Request req = new
ListObjectsV2Request().withBucketName(bucketName).withMaxKeys(2);
ListObjectsV2Result result;

do {
result = s3Client.listObjectsV2(req);

for (S3ObjectSummary objectSummary : result.getObjectSummaries()) {


System.out.printf(" - %s (size: %d)\n", objectSummary.getKey(),
objectSummary.getSize());
}
// If there are more than maxKeys keys in the bucket, get a continuation
token
// and list the next objects.
String token = result.getNextContinuationToken();
System.out.println("Next Continuation Token: " + token);
req.setContinuationToken(token);
} while (result.isTruncated());
} 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();
}
}
}

Versión de API 2006-03-01


233
Amazon Simple Storage Service Guía del desarrollador
Listas de claves de objetos

Lista de claves con AWS SDK para .NET


Example

En el siguiente ejemplo de C# se enumeran las claves de objeto para un bucket. En el ejemplo, usamos
paginación para recuperar un conjunto de claves de objeto. Si hay más claves que devolver, Amazon S3
incluye un token de continuación en la respuesta. El código utiliza el token de continuación en la solicitud
subsiguiente para obtener el siguiente conjunto de claves del objeto.

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class ListObjectsTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;

private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
ListingObjectsAsync().Wait();
}

static async Task ListingObjectsAsync()


{
try
{
ListObjectsV2Request request = new ListObjectsV2Request
{
BucketName = bucketName,
MaxKeys = 10
};
ListObjectsV2Response response;
do
{
response = await client.ListObjectsV2Async(request);

// Process the response.


foreach (S3Object entry in response.S3Objects)
{
Console.WriteLine("key = {0} size = {1}",
entry.Key, entry.Size);
}
Console.WriteLine("Next Continuation Token: {0}",
response.NextContinuationToken);
request.ContinuationToken = response.NextContinuationToken;
} while (response.IsTruncated);
}
catch (AmazonS3Exception amazonS3Exception)
{

Versión de API 2006-03-01


234
Amazon Simple Storage Service Guía del desarrollador
Listas de claves de objetos

Console.WriteLine("S3 error occurred. Exception: " +


amazonS3Exception.ToString());
Console.ReadKey();
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
Console.ReadKey();
}
}
}
}

Lista de claves con AWS SDK para PHP


En este tema se detallará el proceso de uso de clases de la versión 3 de AWS SDK para PHP para
enumerar las claves de objeto que contiene un bucket de Amazon S3.

En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.

Para enumerar las claves de objeto que contiene un bucket usando AWS SDK para PHP, primero
debe enumerar los objetos que contiene el bucket y extraer la clave desde cada uno de los objetos
enumerados. Al enumerar los objetos en un bucket, tiene la opción de usar el método de bajo nivel Aws
\S3\S3Client::listObjects() o la clase de alto nivel Aws\ResultPaginator.

El método de bajo nivel listObjects() se asigna a la API REST subyacente de Amazon S3. Cada
solicitud listObjects() devuelve una página de hasta 1000 objetos. Si tiene más de 1000 objetos en
el bucket, su respuesta aparecerá incompleta y tendrá que enviar otra solicitud listObjects() para
recuperar el siguiente conjunto de 1000 objetos.

Puede usar el paginador de alto nivel ListObjects para que la tarea de enumerar los objetos que
contiene un bucket sea un poco más sencilla. Para usar el paginador ListObjects para crear una lista
de objetos, ejecute el método de cliente de Amazon S3 getPaginator() que se hereda desde la clase Aws/
AwsClientInterface con el comando ListObjects como primer argumento y una matriz que contenga
los objetos devueltos desde el bucket especificado como segundo argumento. Cuando se usa como
paginador ListObjects, el método getPaginator() devuelve todos los objetos que contiene el bucket
especificado. No hay límite de 1000 objetos, por lo que no ha de preocuparse de si la respuesta está o no
incompleta.

Las siguientes tareas le guían a través del proceso de uso de los métodos de cliente PHP de Amazon S3
para enumerar los objetos que contiene un bucket desde el que puede enumerar las claves de objetos.

Example Listas de claves de objetos

El siguiente ejemplo en PHP muestra cómo enumerar las claves desde un bucket específico. Demuestra
cómo usar el método getIterator() de alto nivel para enumerar los objetos de un bucket y cómo
extraer la clave de cada uno de los objetos en la lista. También demuestra cómo usar el método
listObjects() de bajo nivel para enumerar los objetos de un bucket y cómo extraer la clave de cada
uno de los objetos en la lista devuelta. Para obtener información acerca de la ejecución de ejemplos de
PHP en esta guía, visite Ejecución de ejemplos de PHP (p. 709).

require 'vendor/autoload.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = '*** Your Bucket Name ***';

Versión de API 2006-03-01


235
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

// Instantiate the client.


$s3 = new S3Client([
'version' => 'latest',
'region' => 'us-east-1'
]);

// Use the high-level iterators (returns ALL of your objects).


try {
$results = $s3->getPaginator('ListObjects', [
'Bucket' => $bucket
]);

foreach ($results as $result) {


foreach ($result['Contents'] as $object) {
echo $object['Key'] . PHP_EOL;
}
}
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}

// Use the plain API (returns ONLY up to 1000 of your objects).


try {
$objects = $s3->listObjects([
'Bucket' => $bucket
]);
foreach ($objects['Contents'] as $object) {
echo $object['Key'] . PHP_EOL;
}
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}

Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Paginadores
• Documentación de AWS SDK para PHP

Lista de claves con la API REST


Puede utilizar el SDK de AWS para enumerar las claves de objeto de un bucket. Sin embargo, si su
aplicación lo requiere, puede enviar solicitudes REST directamente. Puede enviar una solicitud GET para
devolver algunos o todos los objetos de un bucket, o puede usar criterios de selección para devolver
un subconjunto de los objetos en un bucket. Para obtener más información, consulte GET Bucket (List
Objects) Versión 2.

Eliminación de objetos
Temas
• Eliminación de objetos de un bucket habilitado para el control de versiones (p. 237)
• Eliminación de objetos de un bucket habilitado para la Multi Factor Authentication (MFA, Autenticación
multifactor) (p. 237)
• Recursos relacionados (p. 238)
• Eliminación de un objeto por solicitud (p. 238)
• Eliminación de varios objetos por solicitud (p. 243)

Versión de API 2006-03-01


236
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

Puede eliminar uno o más objetos directamente de Amazon S3. Tiene las siguientes opciones al eliminar
un objeto:

• Eliminar un solo objeto: Amazon S3 proporciona una API de eliminación DELETE que puede usar para
eliminar un objeto en una sola solicitud HTTP.
• Eliminar varios objetos: Amazon S3 también proporciona la API de eliminación de varios objetos que
puede usar para eliminar hasta 1000 objetos en una sola solicitud HTTP.

Cuando elimina objetos de un bucket que no está habilitado para el control de versiones, solo proporciona
el nombre de la clave del objeto; sin embargo, cuando elimina objetos de un bucket que está habilitado
para el control de versiones, como alternativa, puede proporcionar el ID de versión del objeto para eliminar
una versión específica del objeto.

Eliminación de objetos de un bucket habilitado para el control de


versiones
Si su bucket está habilitado para el control de versiones, pueden existir varias versiones del mismo objeto
en el bucket. Cuando trabaja con buckets habilitados para el control de versiones, la API de eliminación
permite las siguientes opciones:

• Especificar una solicitud de eliminación de objetos de buckets sin control de versiones: es decir,
especifica solo la clave del objeto, no el ID de versión. En este caso, Amazon S3 crea un marcador
de eliminación y devuelve su ID de versión en la respuesta. Esto hace que el objeto desaparezca
del bucket. Para obtener información acerca del control de versiones de los objetos y el concepto de
marcador de eliminación, consulte Control de versiones de objetos (p. 115).
• Especificar una solicitud de eliminación con control de versiones: es decir, especifica la clave y el ID de
versión. En este caso, se obtienen los siguientes dos resultados posibles:
• Si el ID de versión se asigna a una versión de objeto específica, Amazon S3 elimina la versión
específica del objeto.
• Si el ID de versión se asigna al marcador de eliminación de ese objeto, Amazon S3 elimina el
marcador de eliminación. Esto hace que el objeto aparezca nuevamente en su bucket.

Eliminación de objetos de un bucket habilitado para la Multi


Factor Authentication (MFA, Autenticación multifactor)
Cuando elimine objetos de un bucket habilitado para la autenticación multifactor (MFA), tenga en cuenta lo
siguiente:

• Si proporciona un token de MFA no válido, siempre se devuelve un error en la solicitud.


• Si tiene un bucket habilitado para la MFA y realiza una solicitud de eliminación de objetos de buckets con
control de versiones (proporciona una clave y un ID de versión del objeto), habrá un error en la solicitud
si no proporciona un token de MFA válido. Además, al usar la API de eliminación de varios objetos en un
bucket habilitado para la MFA, si alguna de las eliminaciones es una solicitud de eliminación de objetos
de buckets con control de versiones (es decir, especifica una clave y un ID de versión del objeto), habrá
un error en toda la solicitud si no proporciona un token de MFA.

Por otro lado, la solicitud se realiza correctamente en los siguientes casos:

• Si tiene un bucket habilitado para la MFA y realiza una solicitud de eliminación sin control de versiones
(no elimina un objeto con control de versiones), y no proporciona un token de MFA, la eliminación se
realiza con éxito.

Versión de API 2006-03-01


237
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

• Si tiene una solicitud de eliminación de varios objetos en la que solo se especifica eliminar objetos
sin control de versiones de un bucket habilitado para la MFA, y no proporciona un token de MFA, las
eliminaciones se realizan correctamente.

Para obtener información acerca de la eliminación de MFA, consulte Eliminación MFA (p. 451).

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Eliminación de un objeto por solicitud


Temas
• Eliminación de un objeto con AWS SDK for Java (p. 238)
• Eliminación de un objeto con AWS SDK para .NET (p. 240)
• Eliminación de un objeto con AWS SDK para PHP (p. 243)
• Eliminación de un objeto con la API de REST (p. 243)

Para eliminar un objeto por solicitud, use la API DELETE (consulte DELETE Object). Para obtener más
información acerca de la eliminación de objetos, consulte Eliminación de objetos (p. 236).

Puede usar la API REST directamente o las bibliotecas de encapsulamiento que proporcionan los SDK de
AWS que permiten simplificar el desarrollo de su aplicación.

Eliminación de un objeto con AWS SDK for Java


Puede eliminar un objeto de un bucket. Si el bucket tiene habilitado el control de versiones, tiene las
siguientes opciones:

• Eliminar una versión específica del objeto especificando un ID de versión.


• Eliminar un objeto sin especificar un ID de versión. En ese caso, S3 añade un marcador de eliminación
al objeto.

Para obtener más información sobre el control de versiones, consulte Control de versiones de
objetos (p. 115).

Example Ejemplo 1: Eliminación de un objeto (bucket sin control de versiones)

En el siguiente ejemplo de se elimina un objeto de un bucket. En el ejemplo se supone que el bucket no


tiene habilitado el control de versiones y que el objeto no tiene ningún ID de versión. En la solicitud de
eliminación, especificará solo la clave del objeto y no el ID de versión. Para obtener instrucciones sobre
la creación y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java de
Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.DeleteObjectRequest;

import java.io.IOException;

Versión de API 2006-03-01


238
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

public class DeleteObjectNonVersionedBucket {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Key name ****";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

s3Client.deleteObject(new DeleteObjectRequest(bucketName, keyName));


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

Example Ejemplo 2: Eliminación de un objeto (bucket con control de versiones)

En el siguiente ejemplo se elimina un objeto de un bucket con control de versiones. En el ejemplo se


elimina una versión del objeto concreta especificando el nombre de clave y el ID de versión del objeto. En
el ejemplo se realiza lo siguiente:

1. Añadir un objeto de muestra al bucket. Como respuesta, Amazon S3 devuelve un ID de versión del
nuevo objeto añadido. El ejemplo utiliza este ID de versión en la solicitud de eliminación.
2. Eliminar la versión del objeto especificando tanto el nombre de clave como el ID de versión del objeto.
Si no hay otras versiones de ese objeto, Amazon S3 elimina el objeto en su totalidad. De lo contrario,
Amazon S3 solo elimina la versión especificada.
Note

Puede obtener ID de versiones de un objeto con la solicitud ListVersions.

import com.amazonaws.AmazonServiceException;
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.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.DeleteVersionRequest;
import com.amazonaws.services.s3.model.PutObjectResult;

import java.io.IOException;

public class DeleteObjectVersionEnabledBucket {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

Versión de API 2006-03-01


239
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

String keyName = "*** Key name ****";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Check to ensure that the bucket is versioning-enabled.


String bucketVersionStatus =
s3Client.getBucketVersioningConfiguration(bucketName).getStatus();
if (!bucketVersionStatus.equals(BucketVersioningConfiguration.ENABLED)) {
System.out.printf("Bucket %s is not versioning-enabled.", bucketName);
} else {
// Add an object.
PutObjectResult putResult = s3Client.putObject(bucketName, keyName, "Sample
content for deletion example.");
System.out.printf("Object %s added to bucket %s\n", keyName, bucketName);

// Delete the version of the object that we just created.


System.out.println("Deleting versioned object " + keyName);
s3Client.deleteVersion(new DeleteVersionRequest(bucketName, keyName,
putResult.getVersionId()));
System.out.printf("Object %s, version %s deleted\n", keyName,
putResult.getVersionId());
}
} 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();
}
}
}

Eliminación de un objeto con AWS SDK para .NET


Al eliminar un objeto en un bucket sin control de versiones, se elimina el objeto. Si el bucket tiene
habilitado el control de versiones, tiene las siguientes opciones:

• Eliminar una versión específica de un objeto especificando un ID de versión.


• Eliminar un objeto sin especificar un ID de versión. Amazon S3 añade un marcador de eliminación. Para
obtener más información acerca de los marcadores de eliminación, consulte Control de versiones de
objetos (p. 115).

En el siguiente ejemplo se muestra cómo eliminar un objeto tanto de un bucket con control de versiones
como de un bucket sin control versiones. Para obtener más información sobre el control de versiones,
consulte Control de versiones de objetos (p. 115).

Example Eliminación de un objeto de un bucket sin control de versiones

En el siguiente ejemplo de código C# se elimina un objeto de un bucket sin control de versiones. En el


ejemplo se supone que los objetos no tienen ID de versión, por lo que no tiene que especificar los ID de
versión. Especifique solo la clave del objeto. Para obtener información acerca de cómo crear y probar una
muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

Versión de API 2006-03-01


240
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class DeleteObjectNonVersionedBucketTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** object key ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
DeleteObjectNonVersionedBucketAsync().Wait();
}
private static async Task DeleteObjectNonVersionedBucketAsync()
{
try
{
var deleteObjectRequest = new DeleteObjectRequest
{
BucketName = bucketName,
Key = keyName
};

Console.WriteLine("Deleting an object");
await client.DeleteObjectAsync(deleteObjectRequest);
}
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);
}
}
}
}

Example Eliminación de un objeto de un bucket con control de versiones

En el siguiente ejemplo de código C# se elimina un objeto de un bucket con control de versiones. Se


elimina una versión de objeto concreta especificando el nombre de clave y el ID de versión del objeto.

El código realiza las siguientes tareas:

1. Habilita el control de versiones en un bucket que especifique (si el control de versiones ya está
habilitado, esto no tiene ningún efecto).
2. Añadir un objeto de muestra al bucket. Como respuesta, Amazon S3 devuelve un ID de versión del
nuevo objeto añadido. El ejemplo utiliza este ID de versión en la solicitud de eliminación.
3. Elimina el objeto de muestra especificando tanto el nombre de clave como el ID de versión del objeto.
Note

También puede obtener el ID de versión de un objeto con la solicitud ListVersions:

Versión de API 2006-03-01


241
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

var listResponse = client.ListVersions(new ListVersionsRequest { BucketName =


bucketName, Prefix = keyName });

Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class DeleteObjectVersion
{
private const string bucketName = "*** versioning-enabled bucket name ***";
private const string keyName = "*** Object Key Name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
CreateAndDeleteObjectVersionAsync().Wait();
}

private static async Task CreateAndDeleteObjectVersionAsync()


{
try
{
// Add a sample object.
string versionID = await PutAnObject(keyName);

// Delete the object by specifying an object key and a version ID.


DeleteObjectRequest request = new DeleteObjectRequest
{
BucketName = bucketName,
Key = keyName,
VersionId = versionID
};
Console.WriteLine("Deleting an object");
await client.DeleteObjectAsync(request);
}
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);
}
}

static async Task<string> PutAnObject(string objectKey)


{
PutObjectRequest request = new PutObjectRequest
{
BucketName = bucketName,

Versión de API 2006-03-01


242
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

Key = objectKey,
ContentBody = "This is the content body!"
};
PutObjectResponse response = await client.PutObjectAsync(request);
return response.VersionId;
}
}
}

Eliminación de un objeto con AWS SDK para PHP


Este tema muestra cómo utilizar las clases de la versión 3 de AWS SDK para PHP para eliminar un
objeto de un bucket sin control de versiones. Para obtener información acerca de la eliminación de un
objeto de un bucket con control de versiones habilitado, consulte Eliminación de un objeto con la API de
REST (p. 243).

En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.

En el siguiente ejemplo de PHP se elimina un objeto de un bucket. Como este ejemplo muestra cómo
eliminar objetos de buckets sin control de versiones, proporciona solo el nombre del bucket y la clave del
objeto (no un ID de versión) en la solicitud de eliminación. Para obtener información acerca de la ejecución
de ejemplos de PHP en esta guía, consulte Ejecución de ejemplos de PHP (p. 709).

<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Delete an object from the bucket.


$s3->deleteObject([
'Bucket' => $bucket,
'Key' => $keyname
]);

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Documentación de AWS SDK para PHP

Eliminación de un objeto con la API de REST


Puede utilizar los SDK de AWS para eliminar un objeto. Sin embargo, si su aplicación lo requiere, puede
enviar solicitudes REST directamente. Para obtener más información, consulte DELETE Object en la
Amazon Simple Storage Service API Reference.

Eliminación de varios objetos por solicitud


Temas
• Eliminación de varios objetos con AWS SDK for Java (p. 244)

Versión de API 2006-03-01


243
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

• Eliminación de varios objetos con AWS SDK para .NET (p. 247)
• Eliminación de varios objetos con AWS SDK para PHP (p. 252)
• Eliminación de varios objetos con la API de REST (p. 254)

Amazon S3 proporciona la API de Multi-Object Delete (consulte Delete - Multi-Object Delete) que le
permite eliminar varios objetos en una sola solicitud. La API admite dos modos para la respuesta: detallado
y silencioso. De forma predeterminada, la operación utiliza el modo detallado. En modo detallado la
respuesta incluye el resultado de la eliminación de cada clave que se especifica en su solicitud. En el modo
silencioso, la respuesta incluye solo claves para las que la operación de eliminación detectó un error. Si
se eliminan con éxito todas las claves cuando se utiliza el modo silencioso, Amazon S3 devuelve una
respuesta vacía.

Para obtener más información acerca de la eliminación de objetos, consulte Eliminación de


objetos (p. 236).

Puede utilizar directamente la API de REST o los SDK de AWS.

Eliminación de varios objetos con AWS SDK for Java


AWS SDK for Java proporciona el método AmazonS3Client.deleteObjects() para eliminar varios
objetos. Por cada objeto que desee eliminar, especifique el nombre de clave. Si el bucket tiene habilitado el
control de versiones, tiene las siguientes opciones:

• Especifique solo el nombre de clave del objeto. Amazon S3 añadirá un marcador de eliminación al
objeto.
• Especifique el nombre de clave del objeto y la ID de versión que se va a eliminar. Amazon S3 eliminará
la versión especificada del objeto.

Example

En el siguiente ejemplo se utiliza la API de Multi-Object Delete para eliminar objetos de un bucket sin
control de versiones habilitado. En el ejemplo, se cargan objetos de muestra al bucket y luego se utiliza
el método AmazonS3Client.deleteObjects() para eliminar los objetos en una sola solicitud. En
DeleteObjectsRequest, el ejemplo especifica solo los nombres de clave del objeto, ya que los objetos
no tienen ID de versión.

Para obtener más información sobre la eliminación de objetos, consulte Eliminación de objetos (p. 236).
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.DeleteObjectRequest;

import java.io.IOException;

public class DeleteObjectNonVersionedBucket {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Key name ****";

Versión de API 2006-03-01


244
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

s3Client.deleteObject(new DeleteObjectRequest(bucketName, keyName));


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

Example

En el siguiente ejemplo se utiliza la API de Multi-Object Delete para eliminar objetos de un bucket con
control de versiones habilitado. Hace lo siguiente:

1. Crea objetos de muestra y, a continuación, los elimina, especificando el nombre de clave y el ID de


versión de cada objeto que se vaya a eliminar. La operación solo elimina las versiones especificadas del
objeto.
2. Crea objetos de muestra y, a continuación, los elimina, especificando solo los nombres de clave. Debido
a que el ejemplo no especifica los ID de versión, la operación añade un marcador de eliminación a cada
objeto son eliminar ninguna versión de objeto específica. Tras añadir los marcadores de eliminación,
estos objetos no aparecerán en la Consola de administración de AWS.
3. Elimine los marcadores de eliminación especificando las claves de objeto y los ID de versión de los
marcadores de eliminación. Esta operación elimina los marcadores de eliminación, lo que hace que los
objetos reaparezcan en la Consola de administración de AWS.

import com.amazonaws.AmazonServiceException;
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.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.DeleteObjectsRequest;
import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion;
import com.amazonaws.services.s3.model.DeleteObjectsResult;
import com.amazonaws.services.s3.model.DeleteObjectsResult.DeletedObject;
import com.amazonaws.services.s3.model.PutObjectResult;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class DeleteMultipleObjectsVersionEnabledBucket {


private static AmazonS3 S3_CLIENT;
private static String VERSIONED_BUCKET_NAME;

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
VERSIONED_BUCKET_NAME = "*** Bucket name ***";

Versión de API 2006-03-01


245
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

try {
S3_CLIENT = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Check to make sure that the bucket is versioning-enabled.


String bucketVersionStatus =
S3_CLIENT.getBucketVersioningConfiguration(VERSIONED_BUCKET_NAME).getStatus();
if (!bucketVersionStatus.equals(BucketVersioningConfiguration.ENABLED)) {
System.out.printf("Bucket %s is not versioning-enabled.",
VERSIONED_BUCKET_NAME);
} else {
// Upload and delete sample objects, using specific object versions.
uploadAndDeleteObjectsWithVersions();

// Upload and delete sample objects without specifying version IDs.


// Amazon S3 creates a delete marker for each object rather than deleting
// specific versions.
DeleteObjectsResult unversionedDeleteResult =
uploadAndDeleteObjectsWithoutVersions();

// Remove the delete markers placed on objects in the non-versioned create/


delete method.
multiObjectVersionedDeleteRemoveDeleteMarkers(unversionedDeleteResult);
}
} 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();
}
}

private static void uploadAndDeleteObjectsWithVersions() {


System.out.println("Uploading and deleting objects with versions specified.");

// Upload three sample objects.


ArrayList<KeyVersion> keys = new ArrayList<KeyVersion>();
for (int i = 0; i < 3; i++) {
String keyName = "delete object without version ID example " + i;
PutObjectResult putResult = S3_CLIENT.putObject(VERSIONED_BUCKET_NAME, keyName,
"Object number " + i + " to be deleted.");
// Gather the new object keys with version IDs.
keys.add(new KeyVersion(keyName, putResult.getVersionId()));
}

// Delete the specified versions of the sample objects.


DeleteObjectsRequest multiObjectDeleteRequest = new
DeleteObjectsRequest(VERSIONED_BUCKET_NAME)
.withKeys(keys)
.withQuiet(false);

// Verify that the object versions were successfully deleted.


DeleteObjectsResult delObjRes = S3_CLIENT.deleteObjects(multiObjectDeleteRequest);
int successfulDeletes = delObjRes.getDeletedObjects().size();
System.out.println(successfulDeletes + " objects successfully deleted");
}

private static DeleteObjectsResult uploadAndDeleteObjectsWithoutVersions() {


System.out.println("Uploading and deleting objects with no versions specified.");

Versión de API 2006-03-01


246
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

// Upload three sample objects.


ArrayList<KeyVersion> keys = new ArrayList<KeyVersion>();
for (int i = 0; i < 3; i++) {
String keyName = "delete object with version ID example " + i;
S3_CLIENT.putObject(VERSIONED_BUCKET_NAME, keyName, "Object number " + i + " to
be deleted.");
// Gather the new object keys without version IDs.
keys.add(new KeyVersion(keyName));
}

// Delete the sample objects without specifying versions.


DeleteObjectsRequest multiObjectDeleteRequest = new
DeleteObjectsRequest(VERSIONED_BUCKET_NAME).withKeys(keys)
.withQuiet(false);

// Verify that delete markers were successfully added to the objects.


DeleteObjectsResult delObjRes = S3_CLIENT.deleteObjects(multiObjectDeleteRequest);
int successfulDeletes = delObjRes.getDeletedObjects().size();
System.out.println(successfulDeletes + " objects successfully marked for deletion
without versions.");
return delObjRes;
}

private static void multiObjectVersionedDeleteRemoveDeleteMarkers(DeleteObjectsResult


response) {
List<KeyVersion> keyList = new ArrayList<KeyVersion>();
for (DeletedObject deletedObject : response.getDeletedObjects()) {
// Note that the specified version ID is the version ID for the delete marker.
keyList.add(new KeyVersion(deletedObject.getKey(),
deletedObject.getDeleteMarkerVersionId()));
}
// Create a request to delete the delete markers.
DeleteObjectsRequest deleteRequest = new
DeleteObjectsRequest(VERSIONED_BUCKET_NAME).withKeys(keyList);

// Delete the delete markers, leaving the objects intact in the bucket.
DeleteObjectsResult delObjRes = S3_CLIENT.deleteObjects(deleteRequest);
int successfulDeletes = delObjRes.getDeletedObjects().size();
System.out.println(successfulDeletes + " delete markers successfully deleted");
}
}

Eliminación de varios objetos con AWS SDK para .NET


AWS SDK para .NET proporciona un método conveniente para eliminar varios objetos: DeleteObjects.
Por cada objeto que desee eliminar, especifique el nombre de clave y la versión del objeto. So el bucket
no tiene habilitado el control de versiones, especifique null para el ID de versión. Si se produce una
excepción, revise la respuesta de DeleteObjectsException para determinar qué objetos no se han
eliminado y por qué.

Example Eliminación de varios objetos de un bucket sin control de versiones


En el siguiente ejemplo de C# se utiliza la API de Multi-Object Delete para eliminar objetos de un
bucket sin control de versiones habilitado. En el ejemplo, se cargan los objetos de muestra al bucket
y luego se utiliza el método DeleteObjects para eliminar los objetos en una sola solicitud. En
DeleteObjectsRequest, el ejemplo especifica solo los nombres de clave del objeto, ya que los ID de
versión son nulos.

Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

Versión de API 2006-03-01


247
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class DeleteMultipleObjectsNonVersionedBucketTest
{
private const string bucketName = "*** versioning-enabled bucket name ***";
// 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);
MultiObjectDeleteAsync().Wait();
}

static async Task MultiObjectDeleteAsync()


{
// Create sample objects (for subsequent deletion).
var keysAndVersions = await PutObjectsAsync(3);

// a. multi-object delete by specifying the key names and version IDs.


DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest
{
BucketName = bucketName,
Objects = keysAndVersions // This includes the object keys and null version
IDs.
};
// You can add specific object key to the delete request using the .AddKey.
// multiObjectDeleteRequest.AddKey("TickerReference.csv", null);
try
{
DeleteObjectsResponse response = await
s3Client.DeleteObjectsAsync(multiObjectDeleteRequest);
Console.WriteLine("Successfully deleted all the {0} items",
response.DeletedObjects.Count);
}
catch (DeleteObjectsException e)
{
PrintDeletionErrorStatus(e);
}
}

private static void PrintDeletionErrorStatus(DeleteObjectsException e)


{
// var errorResponse = e.ErrorResponse;
DeleteObjectsResponse errorResponse = e.Response;
Console.WriteLine("x {0}", errorResponse.DeletedObjects.Count);

Console.WriteLine("No. of objects successfully deleted = {0}",


errorResponse.DeletedObjects.Count);
Console.WriteLine("No. of objects failed to delete = {0}",
errorResponse.DeleteErrors.Count);

Console.WriteLine("Printing error data...");


foreach (DeleteError deleteError in errorResponse.DeleteErrors)
{
Console.WriteLine("Object Key: {0}\t{1}\t{2}", deleteError.Key,
deleteError.Code, deleteError.Message);
}
}

Versión de API 2006-03-01


248
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

static async Task<List<KeyVersion>> PutObjectsAsync(int number)


{
List<KeyVersion> keys = new List<KeyVersion>();
for (int i = 0; i < number; i++)
{
string key = "ExampleObject-" + new System.Random().Next();
PutObjectRequest request = new PutObjectRequest
{
BucketName = bucketName,
Key = key,
ContentBody = "This is the content body!",
};

PutObjectResponse response = await s3Client.PutObjectAsync(request);


KeyVersion keyVersion = new KeyVersion
{
Key = key,
// For non-versioned bucket operations, we only need object key.
// VersionId = response.VersionId
};
keys.Add(keyVersion);
}
return keys;
}
}
}

Example Eliminación de varios objetos para un bucket con control de versiones habilitado

En el siguiente ejemplo de C# se utiliza la API de Multi-Object Delete para eliminar objetos de un bucket
con control de versiones habilitado. En el ejemplo se realizan las siguientes acciones:

1. Crea objetos de muestra y los elimina especificando el nombre de clave y el ID de versión de cada
objeto. La operación elimina versiones específicas de los objetos.
2. Crea objetos de muestra y los elimina especificando solo los nombres de clave. Debido a que el ejemplo
no especifica los ID de versión, la operación solo añade marcadores de eliminación. Ni elimina ninguna
versión específica de los objetos. Tras la eliminación, estos objetos no aparecerán en la consola de
Amazon S3.
3. Elimina los marcadores de eliminación especificando las claves de objeto y los ID de versión de los
marcadores de eliminación. Cuando esta operación elimina los marcadores de eliminación, los objetos
reaparecen en la consola.

Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class DeleteMultipleObjVersionedBucketTest
{
private const string bucketName = "*** versioning-enabled bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;

Versión de API 2006-03-01


249
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

public static void Main()


{
s3Client = new AmazonS3Client(bucketRegion);
DeleteMultipleObjectsFromVersionedBucketAsync().Wait();
}

private static async Task DeleteMultipleObjectsFromVersionedBucketAsync()


{

// Delete objects (specifying object version in the request).


await DeleteObjectVersionsAsync();

// Delete objects (without specifying object version in the request).


var deletedObjects = await DeleteObjectsAsync();

// Additional exercise - remove the delete markers S3 returned in the preceding


response.
// This results in the objects reappearing in the bucket (you can
// verify the appearance/disappearance of objects in the console).
await RemoveDeleteMarkersAsync(deletedObjects);
}

private static async Task<List<DeletedObject>> DeleteObjectsAsync()


{
// Upload the sample objects.
var keysAndVersions2 = await PutObjectsAsync(3);

// Delete objects using only keys. Amazon S3 creates a delete marker and
// returns its version ID in the response.
List<DeletedObject> deletedObjects = await
NonVersionedDeleteAsync(keysAndVersions2);
return deletedObjects;
}

private static async Task DeleteObjectVersionsAsync()


{
// Upload the sample objects.
var keysAndVersions1 = await PutObjectsAsync(3);

// Delete the specific object versions.


await VersionedDeleteAsync(keysAndVersions1);
}

private static void PrintDeletionReport(DeleteObjectsException e)


{
var errorResponse = e.Response;
Console.WriteLine("No. of objects successfully deleted = {0}",
errorResponse.DeletedObjects.Count);
Console.WriteLine("No. of objects failed to delete = {0}",
errorResponse.DeleteErrors.Count);
Console.WriteLine("Printing error data...");
foreach (var deleteError in errorResponse.DeleteErrors)
{
Console.WriteLine("Object Key: {0}\t{1}\t{2}", deleteError.Key,
deleteError.Code, deleteError.Message);
}
}

static async Task VersionedDeleteAsync(List<KeyVersion> keys)


{
// a. Perform a multi-object delete by specifying the key names and version
IDs.
var multiObjectDeleteRequest = new DeleteObjectsRequest
{
BucketName = bucketName,

Versión de API 2006-03-01


250
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

Objects = keys // This includes the object keys and specific version IDs.
};
try
{
Console.WriteLine("Executing VersionedDelete...");
DeleteObjectsResponse response = await
s3Client.DeleteObjectsAsync(multiObjectDeleteRequest);
Console.WriteLine("Successfully deleted all the {0} items",
response.DeletedObjects.Count);
}
catch (DeleteObjectsException e)
{
PrintDeletionReport(e);
}
}

static async Task<List<DeletedObject>> NonVersionedDeleteAsync(List<KeyVersion>


keys)
{
// Create a request that includes only the object key names.
DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest();
multiObjectDeleteRequest.BucketName = bucketName;

foreach (var key in keys)


{
multiObjectDeleteRequest.AddKey(key.Key);
}
// Execute DeleteObjects - Amazon S3 add delete marker for each object
// deletion. The objects disappear from your bucket.
// You can verify that using the Amazon S3 console.
DeleteObjectsResponse response;
try
{
Console.WriteLine("Executing NonVersionedDelete...");
response = await s3Client.DeleteObjectsAsync(multiObjectDeleteRequest);
Console.WriteLine("Successfully deleted all the {0} items",
response.DeletedObjects.Count);
}
catch (DeleteObjectsException e)
{
PrintDeletionReport(e);
throw; // Some deletes failed. Investigate before continuing.
}
// This response contains the DeletedObjects list which we use to delete the
delete markers.
return response.DeletedObjects;
}

private static async Task RemoveDeleteMarkersAsync(List<DeletedObject>


deletedObjects)
{
var keyVersionList = new List<KeyVersion>();

foreach (var deletedObject in deletedObjects)


{
KeyVersion keyVersion = new KeyVersion
{
Key = deletedObject.Key,
VersionId = deletedObject.DeleteMarkerVersionId
};
keyVersionList.Add(keyVersion);
}
// Create another request to delete the delete markers.
var multiObjectDeleteRequest = new DeleteObjectsRequest
{
BucketName = bucketName,

Versión de API 2006-03-01


251
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

Objects = keyVersionList
};

// Now, delete the delete marker to bring your objects back to the bucket.
try
{
Console.WriteLine("Removing the delete markers .....");
var deleteObjectResponse = await
s3Client.DeleteObjectsAsync(multiObjectDeleteRequest);
Console.WriteLine("Successfully deleted all the {0} delete markers",
deleteObjectResponse.DeletedObjects.Count);
}
catch (DeleteObjectsException e)
{
PrintDeletionReport(e);
}
}

static async Task<List<KeyVersion>> PutObjectsAsync(int number)


{
var keys = new List<KeyVersion>();

for (var i = 0; i < number; i++)


{
string key = "ObjectToDelete-" + new System.Random().Next();
PutObjectRequest request = new PutObjectRequest
{
BucketName = bucketName,
Key = key,
ContentBody = "This is the content body!",

};

var response = await s3Client.PutObjectAsync(request);


KeyVersion keyVersion = new KeyVersion
{
Key = key,
VersionId = response.VersionId
};

keys.Add(keyVersion);
}
return keys;
}
}
}

Eliminación de varios objetos con AWS SDK para PHP


Este tema muestra cómo utilizar las clases de la versión 3 de AWS SDK para PHP para eliminar varios
objetos de buckets de Amazon S3 con control de versiones y sin control de versiones. Para obtener más
información sobre el control de versiones, consulte Uso del control de versiones (p. 449).

En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.

Example Eliminación de varios objetos de un bucket sin control de versiones

En el siguiente ejemplo de PHP se utiliza el método deleteObjects() para eliminar varios objetos de un
bucket sin control de versiones habilitado.

Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución de
ejemplos de PHP (p. 709).

Versión de API 2006-03-01


252
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// 1. Create a few objects.


for ($i = 1; $i <= 3; $i++) {
$s3->putObject([
'Bucket' => $bucket,
'Key' => "key{$i}",
'Body' => "content {$i}",
]);
}

// 2. List the objects and get the keys.


$keys = $s3->listObjects([
'Bucket' => $bucket
]) ->getPath('Contents/*/Key');

// 3. Delete the objects.


$s3->deleteObjects([
'Bucket' => $bucket,
'Delete' => [
'Objects' => array_map(function ($key) {
return ['Key' => $key];
}, $keys)
],
]);

Example Eliminación de varios objetos de un bucket habilitado para el control de versiones

En el siguiente ejemplo de PHP se utiliza el método deleteObjects() para eliminar varios objetos de un
bucket con control de versiones habilitado.

Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución de
ejemplos de PHP (p. 709).

<?php

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// 1. Enable object versioning for the bucket.


$s3->putBucketVersioning([
'Bucket' => $bucket,
'Status' => 'Enabled',

Versión de API 2006-03-01


253
Amazon Simple Storage Service Guía del desarrollador
Selección de contenido de los objetos

]);

// 2. Create a few versions of an object.


for ($i = 1; $i <= 3; $i++) {
$s3->putObject([
'Bucket' => $bucket,
'Key' => $keyname,
'Body' => "content {$i}",
]);
}

// 3. List the objects versions and get the keys and version IDs.
$versions = $s3->listObjectVersions(['Bucket' => $bucket])
->getPath('Versions');

// 4. Delete the object versions.


$s3->deleteObjects([
'Bucket' => $bucket,
'Delete' => [
'Objects' => array_map(function ($version) {
return [
'Key' => $version['Key'],
'VersionId' => $version['VersionId']
}, $versions),
],
]);

echo "The following objects were deleted successfully:". PHP_EOL;


foreach ($result['Deleted'] as $object) {
echo "Key: {$object['Key']}, VersionId: {$object['VersionId']}" . PHP_EOL;
}

echo PHP_EOL . "The following objects could not be deleted:" . PHP_EOL;


foreach ($result['Errors'] as $object) {
echo "Key: {$object['Key']}, VersionId: {$object['VersionId']}" . PHP_EOL;
}

// 5. Suspend object versioning for the bucket.


$s3->putBucketVersioning([
'Bucket' => $bucket,
'Status' => 'Suspended',
]);

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Documentación de AWS SDK para PHP

Eliminación de varios objetos con la API de REST


Puede utilizar los SDK de AWS para eliminar varios objetos con la API de Multi-Object Delete. Sin
embargo, si su aplicación lo requiere, puede enviar solicitudes REST directamente. Para obtener más
información, consulte Eliminación de varios objetos a la vez en la Amazon Simple Storage Service API
Reference.

Selección de contenido de los objetos


Amazon S3 Select le permite utilizar sencillas instrucciones de lenguaje de consulta estructurada (SQL)
para filtrar el contenido de los objetos de Amazon S3 y recuperar exactamente el subconjunto de datos
que necesita. Si utiliza Amazon S3 Select para filtrar estos datos, puede reducir la cantidad de datos que
Amazon S3 transfiere, lo que reduce también los costos y la latencia para recuperarlos.

Versión de API 2006-03-01


254
Amazon Simple Storage Service Guía del desarrollador
Selección de contenido de los objetos

Amazon S3 Select funciona con objetos almacenados en formato CSV, JSON o Apache Parquet. También
funciona con objetos comprimidos con GZIP o BZIP2 (solo para objetos CSV y JSON), así como con
objetos cifrados del lado del servidor. Puede especificar el formato de los resultados como CSV o JSON, y
también puede determinar cómo se delimitan los registros en los resultados.

Las expresiones SQL se pasan a Amazon S3 en la solicitud. Amazon S3 Select es compatible con un
subconjunto de SQL. Para obtener más información sobre los elementos SQL compatibles con Amazon S3
Select, consulte Referencia de SQL para Select de Amazon S3 y Select de Glacier (p. 745).

Puede realizar consultas SQL con los SDK de AWS, la API REST SELECT Object Content, la AWS
Command Line Interface (AWS CLI) o la consola de Amazon S3. La consola de Amazon S3 limita la
cantidad de datos devueltos a 40 MB. Para recuperar más datos, utilice la AWS CLI o la API.

Requisitos y límites
A continuación, se describen los requisitos para utilizar Amazon S3 Select:

• Debe tener el permiso s3:GetObject para el objeto que está consultando.


• Si el objeto que está consultando está cifrado con una clave de cifrado proporcionada por el cliente
(SSE-C), debe utilizar https y proporcionar la clave de cifrado en la solicitud.

Cuando se usa Amazon S3 Select, se aplican los siguientes límites:

• La longitud máxima de las expresiones SQL es de 256 KB.


• La longitud máxima de los registros del resultado es de 1 MB.

Se aplican limitaciones adicionales al utilizar Amazon S3 Select con objetos Parquet:

• Amazon S3 Select solo admite compresión en columnas usando GZIP o Snappy. Amazon S3 Select no
admite la compresión de todo el objeto para objetos Parquet.
• Amazon S3 Select no admite salida Parquet. Debe especificar el formato de salida como CSV o JSON.
• El tamaño de bloque sin comprimir máximo es de 256 MB.
• El número máximo de columnas es 100.
• Debe utilizar los tipos de datos especificados en el esquema del objeto.
• Seleccionar en un campo repetido devuelve solo el último valor.

Creación de una solicitud


Cuando se crea una solicitud, se debe proporcionar detalles del objeto que se está consultando mediante
un objeto InputSerialization. También utilizará un objeto OutputSerialization para proporcionar
información sobre cómo se deben devolver los resultados. Asimismo, deberá incluir la expresión SQL que
Amazon S3 utiliza para filtrar la solicitud.

Para obtener más información sobre la creación de una solicitud de Amazon S3 Select, consulte SELECT
Object Content en la Amazon Simple Storage Service API Reference. También puede consultar uno de los
ejemplos de código de SDK en las secciones siguientes.

Errores
Amazon S3 Select devuelve un código de error y un mensaje de error asociado cuando se produce un
problema al intentar ejecutar una consulta. Para ver una lista de los códigos de error y las descripciones,
consulte la sección sobre errores especiales de la página SELECT Object Content en la Amazon Simple
Storage Service API Reference.

Versión de API 2006-03-01


255
Amazon Simple Storage Service Guía del desarrollador
Selección de contenido de los objetos

Temas
• Recursos relacionados (p. 256)
• Selección de contenido de los objetos mediante el SDK para Java (p. 256)
• Selección de contenido de los objetos mediante la API de REST (p. 258)
• Selección de contenido de los objetos mediante otros SDK (p. 258)

Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)

Selección de contenido de los objetos mediante el SDK para


Java
Utilice Amazon S3 Select para seleccionar el contenido de un objeto con Java mediante el método
selectObjectContent, que devuelve el resultado de la expresión SQL si se ejecuta correctamente. El
bucket y la clave de objeto especificados deben existir o se producirá un error.

Example Ejemplo
En el siguiente ejemplo de código Java se devuelve el valor de la primera columna de cada uno de los
registros almacenados en un objeto que contiene datos en formato CSV. También se solicita la devolución
de mensajes Progress y Stats. Se debe proporcionar un nombre de bucket válido y un objeto que
contenga datos en formato CSV.

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

package com.amazonaws;

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CSVInput;
import com.amazonaws.services.s3.model.CSVOutput;
import com.amazonaws.services.s3.model.CompressionType;
import com.amazonaws.services.s3.model.ExpressionType;
import com.amazonaws.services.s3.model.InputSerialization;
import com.amazonaws.services.s3.model.OutputSerialization;
import com.amazonaws.services.s3.model.SelectObjectContentEvent;
import com.amazonaws.services.s3.model.SelectObjectContentEventVisitor;
import com.amazonaws.services.s3.model.SelectObjectContentRequest;
import com.amazonaws.services.s3.model.SelectObjectContentResult;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.atomic.AtomicBoolean;

import static com.amazonaws.util.IOUtils.copy;

/**
* This example shows how to query data from S3Select and consume the response in the form
of an
* InputStream of records and write it to a file.
*/

public class RecordInputStreamExample {

Versión de API 2006-03-01


256
Amazon Simple Storage Service Guía del desarrollador
Selección de contenido de los objetos

private static final String BUCKET_NAME = "${my-s3-bucket}";


private static final String CSV_OBJECT_KEY = "${my-csv-object-key}";
private static final String S3_SELECT_RESULTS_PATH = "${my-s3-select-results-path}";
private static final String QUERY = "select s._1 from S3Object s";

public static void main(String[] args) throws Exception {


final AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();

SelectObjectContentRequest request = generateBaseCSVRequest(BUCKET_NAME,


CSV_OBJECT_KEY, QUERY);
final AtomicBoolean isResultComplete = new AtomicBoolean(false);

try (OutputStream fileOutputStream = new FileOutputStream(new File


(S3_SELECT_RESULTS_PATH));
SelectObjectContentResult result = s3Client.selectObjectContent(request)) {
InputStream resultInputStream = result.getPayload().getRecordsInputStream(
new SelectObjectContentEventVisitor() {
@Override
public void visit(SelectObjectContentEvent.StatsEvent event)
{
System.out.println(
"Received Stats, Bytes Scanned: " +
event.getDetails().getBytesScanned()
+ " Bytes Processed: " +
event.getDetails().getBytesProcessed());
}

/*
* An End Event informs that the request has finished successfully.
*/
@Override
public void visit(SelectObjectContentEvent.EndEvent event)
{
isResultComplete.set(true);
System.out.println("Received End Event. Result is complete.");
}
}
);

copy(resultInputStream, fileOutputStream);
}

/*
* The End Event indicates all matching records have been transmitted.
* If the End Event is not received, the results may be incomplete.
*/
if (!isResultComplete.get()) {
throw new Exception("S3 Select request was incomplete as End Event was not
received.");
}
}

private static SelectObjectContentRequest generateBaseCSVRequest(String bucket, String


key, String query) {
SelectObjectContentRequest request = new SelectObjectContentRequest();
request.setBucketName(bucket);
request.setKey(key);
request.setExpression(query);
request.setExpressionType(ExpressionType.SQL);

InputSerialization inputSerialization = new InputSerialization();


inputSerialization.setCsv(new CSVInput());
inputSerialization.setCompressionType(CompressionType.NONE);
request.setInputSerialization(inputSerialization);

OutputSerialization outputSerialization = new OutputSerialization();

Versión de API 2006-03-01


257
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

outputSerialization.setCsv(new CSVOutput());
request.setOutputSerialization(outputSerialization);

return request;
}
}

Selección de contenido de los objetos mediante la API de REST


Puede utilizar el SDK de AWS para seleccionar contenido de los objetos. Sin embargo, si su aplicación lo
requiere, puede enviar solicitudes REST directamente. Para obtener más información sobre el formato de
solicitud y respuesta, consulte SELECT Object Content.

Selección de contenido de los objetos mediante otros SDK


Puede seleccionar el contenido de un objeto en Amazon S3 Select utilizando otros SDK. Para obtener más
información, consulte los siguientes temas:

• Python: Uso del AWS SDK for Python (Boto) (p. 710).

Restaurar objetos archivados


No se puede obtener acceso en tiempo real a los objetos que se archivan en las clases de
almacenamiento GLACIER o DEEP_ARCHIVE. Primero debe iniciar una solicitud de restauración y
después debe esperar hasta que haya una copia temporal del objeto disponible en el periodo (cantidad
de días) especificado en la solicitud. Para obtener más información acerca de las diferencias entre las
clases de almacenamiento GLACIER, DEEP_ARCHIVE y otras clases de almacenamiento de Amazon S3,
consulte Clases de almacenamiento de Amazon S3 (p. 110).

Amazon S3 restaura una copia temporal del objeto solo durante el periodo especificado. Después, elimina
la copia del objeto restaurada. Puede modificar el periodo de vencimiento de una copia restaurada
mediante la reemisión de una restauración. En este caso, Amazon S3 actualiza el periodo de vencimiento
en relación con el momento actual.

Amazon S3 calcula la hora de vencimiento de la copia del objeto restaurada añadiendo el número de días
especificados en la solicitud de restauración a la hora actual. Después redondea el tiempo resultante a
la medianoche del día siguiente en hora universal coordinada (UTC). Por ejemplo, supongamos que un
objeto se ha creado el 15 de octubre de 2012 a las 10:30 UTC, y el periodo de restauración se fijó en tres
días. En este caso, la copia restaurada tiene como fecha de vencimiento el 19 de octubre de 2012 a las
00:00 UTC, momento en el que Amazon S3 elimina la copia del objeto.

Después de recibir una copia temporal del objeto restaurado, la clase de almacenamiento del objeto sigue
siendo GLACIER o DEEP_ARCHIVE. (Una solicitud de las operaciones de API HEAD Object o GET Object
devuelve GLACIER o DEEP_ARCHIVE como clase de almacenamiento).

El tiempo que un trabajo de restauración tarda en terminar depende de la clase de almacenamiento


de archivado que se utilice y de la opción de recuperación especificada: Expedited, Standard
(solo disponible para GLACIER) o Bulk. Puede recibir una notificación cuando se ha completado la
restauración mediante las notificaciones de eventos de Amazon S3 Para obtener más información,
consulte Configuración de notificaciones de eventos de Amazon S3 (p. 551).

Puede restaurar una copia de un objeto durante cualquier número de días. Sin embargo, debería
restaurar los objetos exclusivamente durante el tiempo necesario, debido a los costos de almacenamiento
asociados con la copia del objeto. Cuando se restaura un archivo, se paga tanto el archivado (según
la tarifa de GLACIER o DEEP_ARCHIVE) como una copia que se restaura de manera temporal (tarifa
de almacenamiento de redundancia reducida (RRS)). Para obtener información acerca de los precios,
consulte Precios de Amazon S3.

Versión de API 2006-03-01


258
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

Siempre que sea necesario, puede restaurar segmentos de gran tamaño de los datos almacenados en
las clases de almacenamiento GLACIER y DEEP_ARCHIVE. Por ejemplo, es posible que desee restaurar
los datos para una copia secundaria. Sin embargo, si tiene que restaurar una cantidad de datos de
gran tamaño, tenga en cuenta que las clases de almacenamiento GLACIER y DEEP_ARCHIVE se han
diseñado para 35 solicitudes de restauración aleatorias por pebibyte (PiB) almacenado al día.

Para obtener información acerca del uso de transiciones de ciclo de vida para mover objetos a las clases
de almacenamiento GLACIER o DEEP_ARCHIVE, consulte Transición a las clases de almacenamiento
GLACIER y DEEP ARCHIVE (archivado de objetos) (p. 132).

Para restaurar más de un objeto de Amazon S3 con una sola solicitud, puede utilizar operaciones por lotes
de Amazon S3.

En las siguientes secciones, se ofrece más información acerca de la restauración de objetos.

Temas
• Opciones de recuperación de archivos (p. 259)
• Actualizar la velocidad de una restauración en curso (p. 260)
• Restaurar un objeto archivado con la consola de Amazon S3 (p. 260)
• Restaurar un objeto archivado con AWS SDK for Java (p. 260)
• Restaurar un objeto archivado con AWS SDK para .NET (p. 261)
• Restaurar un objeto archivado con la API REST (p. 263)

Opciones de recuperación de archivos


A continuación, se muestran las opciones de recuperación disponibles al restaurar un objeto archivado:

• Expedited: las recuperaciones rápidas le permiten obtener acceso rápidamente a sus datos
almacenados en la clase de almacenamiento GLACIER cuando son necesarias solicitudes urgentes
ocasionales para un subconjunto de archivos. En todos los casos excepto para los objetos archivados
de mayor tamaño (más de 250 MB), los datos a los que se obtiene acceso con solicitudes rápidas
suelen estar disponibles en un plazo de entre 1 y 5 minutos. La capacidad aprovisionada garantiza
que la capacidad que necesitan las recuperaciones Expedited estará disponible cuando lo necesite.
Para obtener más información, consulte Capacidad aprovisionada (p. 260). Las recuperaciones
rápidas y la capacidad aprovisionada no están disponibles para los objetos almacenados en la clase
DEEP_ARCHIVE.
• Standard: las recuperaciones estándares le permiten acceder a sus objetos archivados en un plazo
de varias horas. Esta es la opción predeterminada para las solicitudes de recuperación de GLACIER
y DEEP_ARCHIVE que no especifican la opción de recuperación. Las recuperaciones estándar
finalizan en un plazo de entre 3 y 5 horas para los objetos que están almacenados en la clase de
almacenamiento GLACIER. Suelen finalizar en un plazo de 12 horas para los objetos que están
almacenados en la clase de almacenamiento DEEP_ARCHIVE.
• Bulk: las recuperaciones en bloque son la opción de recuperación menos costosa de Amazon
S3 Glacier, lo que le permite recuperar grandes cantidades de datos, incluso petabytes, de forma
económica. Las recuperaciones en bloque suelen finalizar en un plazo de entre 5 y 12 horas para los
objetos que están almacenados en la clase de almacenamiento GLACIER. Suelen finalizar en un plazo
de 48 horas para los objetos que están almacenados en la clase de almacenamiento DEEP_ARCHIVE.

En la tabla siguiente se resumen las opciones de recuperación de archivos.

Para llevar a cabo una recuperación Expedited, Standard o Bulk, establezca el elemento de la
solicitud Tier en la solicitud a la API REST POST Object restore según la opción que desee o su
equivalente en la AWS CLI o los SDK de AWS. Si ha adquirido capacidad aprovisionada, todas las
recuperaciones rápidas se realizarán automáticamente con su capacidad aprovisionada.

Versión de API 2006-03-01


259
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

Puede restaurar un objeto archivado, mediante programación o utilizando la consola de Amazon S3.
Amazon S3 solo procesa una solicitud de restauración a la vez por objeto. Puede usar tanto la consola
como la API de Amazon S3 para comprobar el estado de la restauración y para averiguar cuándo Amazon
S3 eliminará la copia restaurada.

Capacidad aprovisionada
La capacidad aprovisionada garantiza que la capacidad de recuperación para las recuperaciones rápidas
esté disponible cuando la necesite. Cada unidad de capacidad permite que se puedan realizar al menos
tres recuperaciones rápidas cada 5 minutos y proporciona un rendimiento de recuperación de hasta 5 MB/
s.

Si su carga de trabajo requiere un acceso de confianza y predecible a un subconjunto de sus datos


en cuestión de minutos, debería adquirir capacidad de recuperación aprovisionada. Sin la capacidad
aprovisionada, puede que no se acepten las recuperaciones rápidas durante los períodos de alta
demanda. Si necesita obtener acceso a recuperaciones rápidas incondicionalmente, le recomendamos que
adquiera capacidad de recuperación aprovisionada.

Puede adquirir capacidad aprovisionada con la consola de Amazon S3, la consola de Amazon S3 Glacier,
la API REST de Purchase Provisioned Capacity, los SDK de AWS o la AWS CLI. Para obtener información
acerca de los precios de la capacidad aprovisionada, consulte Precios de Amazon S3.

Las recuperaciones rápidas en las que se utiliza capacidad aprovisionada se siguen cobrando
según las solicitudes y las recuperaciones, y no están disponibles para la clase de almacenamiento
DEEP_ARCHIVE.

Actualizar la velocidad de una restauración en curso


Con la actualización de la velocidad de restauración de Amazon S3, puede cambiar a una velocidad de
restauración más rápida mientras la restauración está en curso. Una actualización de la velocidad de
restauración reemplaza una restauración en curso con una capa de restauración más rápida. No se puede
ralentizar una restauración en curso.

Para actualizar la velocidad de una restauración en curso, emita otra solicitud de restauración para el
mismo objeto que establezca un nuevo elemento de solicitud Tier en la API REST POST Object restore
o su equivalente en la AWS CLI o los SDK de AWS. Al emitir una solicitud para actualizar la capa de
restauración, debe elegir una capa más rápida que la capa de la restauración en curso que está usando.
No debe cambiar ningún otro parámetro (por ejemplo, el elemento de solicitud Days).

Puede recibir una notificación de la finalización de la restauración mediante las notificaciones de eventos
de Amazon S3 Las restauraciones se cobran según el precio de la capa actualizada. Para obtener
información acerca de los precios de restauración, consulte Precios de Amazon S3.

Restaurar un objeto archivado con la consola de Amazon S3


Puede utilizar la consola de Amazon S3 para restaurar una copia de objeto que se haya archivado en
Amazon S3 Glacier. Para ver cómo restaurar un archivo con la Consola de administración de AWS,
consulte ¿Cómo se recupera un objeto de S3 que se archivó en Amazon S3 Glacier? en la Guía del
usuario de la consola de Amazon Simple Storage Service

Cuando restaura un archivo, paga tanto por el archivo como por una copia que haya restaurado de manera
temporal. Para obtener información acerca de los precios, consulte Precios de Amazon S3.

Restaurar un objeto archivado con AWS SDK for Java


Example
En el siguiente ejemplo se muestra cómo restaurar un objeto archivado en Amazon S3 Glacier mediante
AWS SDK for Java. El ejemplo inicia una solicitud de restauración para el objeto archivado especificado y

Versión de API 2006-03-01


260
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

comprueba su estado de restauración. Para obtener más información acerca de la restauración de objetos
archivados, consulte Restaurar objetos archivados (p. 258). Para obtener instrucciones sobre la creación
y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon
S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.ObjectMetadata;
import com.amazonaws.services.s3.model.RestoreObjectRequest;

import java.io.IOException;

public class RestoreArchivedObject {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Object key ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Create and submit a request to restore an object from Glacier for two days.
RestoreObjectRequest requestRestore = new RestoreObjectRequest(bucketName,
keyName, 2);
s3Client.restoreObjectV2(requestRestore);

// Check the restoration status of the object.


ObjectMetadata response = s3Client.getObjectMetadata(bucketName, keyName);
Boolean restoreFlag = response.getOngoingRestore();
System.out.format("Restoration status: %s.\n",
restoreFlag ? "in progress" : "not in progress (finished or failed)");
} 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();
}
}
}

Restaurar un objeto archivado con AWS SDK para .NET


Example

El siguiente ejemplo de código C# inicia una solicitud de restauración de un objeto archivado durante 2
días. Amazon S3 mantiene el estado de restauración en los metadatos del objeto. Tras iniciar la solicitud,
el ejemplo recupera los metadatos del objeto y comprueba el valor de la propiedad RestoreInProgress.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Ejecución
de ejemplos de código .NET de Amazon S3 (p. 708).

Versión de API 2006-03-01


261
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class RestoreArchivedObjectTest
{
private const string bucketName = "*** bucket name ***";
private const string objectKey = "** archived object key name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
RestoreObjectAsync(client, bucketName, objectKey).Wait();
}

static async Task RestoreObjectAsync(IAmazonS3 client, string bucketName, string


objectKey)
{
try
{
var restoreRequest = new RestoreObjectRequest
{
BucketName = bucketName,
Key = objectKey,
Days = 2
};
RestoreObjectResponse response = await
client.RestoreObjectAsync(restoreRequest);

// Check the status of the restoration.


await CheckRestorationStatusAsync(client, bucketName, objectKey);
}
catch (AmazonS3Exception amazonS3Exception)
{
Console.WriteLine("An AmazonS3Exception was thrown. Exception: " +
amazonS3Exception.ToString());
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
}
}

static async Task CheckRestorationStatusAsync(IAmazonS3 client, string bucketName,


string objectKey)
{
GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
{
BucketName = bucketName,
Key = objectKey
};
GetObjectMetadataResponse response = await
client.GetObjectMetadataAsync(metadataRequest);
Console.WriteLine("restoration status: {0}", response.RestoreInProgress ? "in-
progress" : "finished or failed");
}
}

Versión de API 2006-03-01


262
Amazon Simple Storage Service Guía del desarrollador
Consultar objetos archivados

Restaurar un objeto archivado con la API REST


Amazon S3 le proporciona una API para que inicie la restauración de un archivo. Para obtener más
información, consulte POST Object restore en la Amazon Simple Storage Service API Reference.

Consultar objetos archivados


Con el tipo Select de POST Object restore, puede realizar operaciones de filtrado utilizando sencillas
instrucciones de lenguaje de consulta estructurada (SQL) directamente en los datos que ha archivado
Amazon S3 en Glacier. Cuando se proporciona una consulta SQL para un objeto archivado, Select ejecuta
la consulta y escribe los resultados de salida en un bucket de S3. Puede ejecutar consultas y análisis
personalizados de los datos guardados en Glacier sin necesidad de restaurar todo el objeto en Amazon
S3.

Cuando realiza consultas Select, Glacier proporciona tres niveles de acceso a los datos— Expedited,
Standard y Bulk. Todos estos niveles tienen tiempos y costos de acceso diferentes, por lo que, a la hora
de seleccionar cualquiera de ellos, debe tener en cuenta la rapidez con la que desea que los datos estén
disponibles. Para obtener más información, consulte Niveles de acceso a los datos (p. 265).

Puede utilizar el tipo de restauración Select con los SDK de AWS, la API REST de Glacier y la AWS
Command Line Interface (AWS CLI).

Temas
• Requisitos y límites de Select (p. 263)
• ¿Cómo consulto los datos con el trabajo Select? (p. 264)
• Control de errores (p. 265)
• Niveles de acceso a los datos (p. 265)
• Más información (p. 266)

Requisitos y límites de Select


A continuación, se describen los requisitos para utilizar Select:

• Los objetos de archivos que se consultan utilizando el trabajo Select deben tener un formato de valores
separados por comas (CSV).
• Un bucket de S3 para salida. La cuenta de AWS que utilice para iniciar los trabajos de Glacier Select
debe tener permisos de escritura en el bucket de S3. El bucket de Amazon S3 debe estar en la misma
región de AWS que el bucket que contiene el objeto archivado que se está consultando.
• La cuenta de AWS solicitante debe tener permisos para realizar las acciones s3:RestoreObject
y s3:GetObject. Para obtener más información acerca de estos permisos, consulte Permisos
relacionados con operaciones de subrecursos de bucket (p. 360).
• El archivo no debe estar cifrado con SSE-C o cifrado del lado del cliente.

Cuando se usa Select se aplican los siguientes límites:

• No existe ningún límite en el número de registros que la consulta Select puede procesar. Los registros
de entrada o salida no pueden ser superiores a 1 MB; de lo contrario, se producirá un error en la
consulta. Existe un límite de 1 048 576 columnas por registro.
• No existe límite en el tamaño del resultado final. Sin embargo, los resultados se dividirán en varias
partes.

Versión de API 2006-03-01


263
Amazon Simple Storage Service Guía del desarrollador
Consultar objetos archivados

• Las expresiones SQL tienen un límite de 128 KB.

¿Cómo consulto los datos con el trabajo Select?


Si utiliza el trabajo Select, puede utilizar comandos SQL para consultar objetos de archivo de Glacier que
tengan un formato CSV cifrado sin comprimir. Debido a esta limitación, puede realizar operaciones de
consulta sencillas sobre datos de texto de Glacier. Por ejemplo, puede buscar un nombre o ID específico
en un conjunto de documentos de texto archivados.

Para consultar los datos de Glacier, cree una solicitud Select utilizando la operación POST Object restore.
Cuando se realiza una solicitud Select, debe proporcionar la expresión SQL, el archivo que se va a
consultar y la ubicación para almacenar los resultados.

La siguiente expresión de ejemplo devuelve todos los registros del objeto archivado especificado en POST
Object restore.

SELECT * FROM object

Glacier Select es compatible con un subconjunto del lenguaje ANSI SQL. Admite las cláusulas SQL
de filtrado más comunes, como SELECT, FROM y WHERE. No admite SUM, COUNT, GROUP BY, JOINS,
DISTINCT, UNION, ORDER BY y LIMIT. Para obtener más información sobre la compatibilidad con SQL,
consulte Referencia de SQL para Amazon S3 Select y Glacier Select en la Guía para desarrolladores de
Amazon Simple Storage Service.

Salida del trabajo Select


Cuando inicia una solicitud Select, debe definir la ubicación de salida de los resultados de la consulta. Esta
ubicación debe ser un bucket de Amazon S3 que se encuentre en la misma región de AWS que el bucket
que contiene el objeto archivado que se está consultando. La cuenta de AWS que inicia el trabajo debe
tener permisos para escribir en el bucket de S3.

Puede especificar el cifrado y la clase de almacenamiento Amazon S3 de los objetos de salida


almacenados en Amazon S3. El trabajo Select admite el cifrado SSE-KMS y SSE-S3. El trabajo Select no
es compatible con SSE-C ni con el cifrado del cliente. Para obtener más información acerca de las clases
de almacenamiento y cifrado de Amazon S3, consulte Clases de almacenamiento de Amazon S3 (p. 110)
y Protección de datos con el cifrado del lado del servidor (p. 275).

Los resultados de Glacier Select se guardan en el bucket de S3 utilizando el prefijo proporcionado en la


ubicación de salida especificada en POST Object restore. A partir de esta información, el trabajo Select
crea un prefijo único que hace referencia al ID de trabajo. (Los prefijos se utilizan para agrupar objetos de
Amazon S3 utilizando nombres de objeto que comienzan con la misma cadena). Bajo este prefijo único,
se crean dos nuevos prefijos: results para los resultados y errors para los registros y errores. Una
vez completado el trabajo, se escribe un manifiesto de resultados que contiene la ubicación de todos los
resultados.

También hay un archivo de referencia llamado job.txt que se escribe en la ubicación de salida. Una
vez que se escribe este archivo, nunca vuelve a actualizarse. El archivo de referencia se utiliza para lo
siguiente:

• Permite validar sincrónicamente el permiso de escritura y la mayoría de los errores de sintaxis SQL.
• Proporcionando una salida estática sobre la solicitud Select a la que puede hacer referencia fácilmente
siempre que quiera.

Por ejemplo, supongamos que realiza una solicitud Select con la ubicación de salida de resultados
s3://example-bucket/my-prefix y la respuesta del trabajo devuelve el ID de trabajo

Versión de API 2006-03-01


264
Amazon Simple Storage Service Guía del desarrollador
Consultar objetos archivados

examplekne1209ualkdjh812elkassdu9012e. Una vez que finalice el trabajo Select, podrá ver los
siguientes objetos de Amazon S3 en el bucket:

s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/job.txt
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/abc
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/def
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/ghi
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/result_manifest.txt

Los resultados de la consulta Select se dividen en varias partes. En el ejemplo, el trabajo Select utiliza
el prefijo especificado al configurar la ubicación de salida y agrega el ID de trabajo y el prefijo results.
A continuación, escribe los resultados en tres partes, con los nombres de objetos que terminan en abc,
def y ghi. El manifiesto de resultados contiene los tres archivos para permitir la recuperación mediante
programación. Si se produce un error en el trabajo, el archivo aparece con el prefijo de error y se genera
un archivo error_manifest.txt.

La presencia de un archivo result_manifest.txt y la ausencia de un archivo error_manifest.txt


indican que el trabajo finalizó correctamente. Sin embargo, el orden de los resultados no puede
garantizarse.
Note

La longitud de un nombre de objeto de Amazon S3, lo que también se conoce como clave, no
puede ser superior a 1024 bytes. Glacier Select reserva 128 bytes para los prefijos. Además, la
longitud de la ruta de ubicación de Amazon S3 no puede ser mayor de 512 bytes. Si una solicitud
tiene una longitud superior a 512 bytes, devuelve una excepción y no se acepta.

Control de errores
El trabajo Select notifica dos tipos de errores. El primer conjunto de errores se envía de forma sincrónica
al ejecutar la consulta en POST Object restore. Estos errores se envían como parte de la respuesta HTTP.
Sin embargo, hay otro conjunto de errores que puede producirse durante la ejecución de la consulta, una
vez que se ha aceptado correctamente. En este caso, los errores se escriben en la ubicación de salida
especificada con el prefijo errors.

El trabajo Select deja de ejecutar la consulta cuando encuentra un error. Para ejecutar la consulta
correctamente, debe resolver todos los errores. Puede consultar los registros para identificar qué registros
provocaron los errores.

Como las consultas se ejecutan simultáneamente en varios nodos informáticos, los errores que se
obtienen no aparecen en orden. Por ejemplo, si la consulta experimenta un error en la fila 6234, eso no
significa que todas las filas anteriores se hayan procesado correctamente. Si se ejecutara de nuevo la
consulta, podría aparecer un error en otra fila.

Niveles de acceso a los datos


Puede especificar uno de los siguientes niveles de acceso a los datos al consultar un objeto archivado:

• Expedited: le permite obtener acceso rápidamente a sus datos cuando es necesario utilizar solicitudes
urgentes ocasionales en un subconjunto de archivos. En todos los casos excepto para el objeto
archivado de mayor tamaño (más de 250 MB), los datos a los que se accede con solicitudes Expedited
suelen estar disponibles en entre 1 y 5 minutos. Existen dos tipos de acceso a datos Expedited:
bajo demanda y aprovisionadas. Las solicitudes bajo demanda son similares a las instancias bajo
demanda de EC2 y están disponibles la mayoría del tiempo. Las solicitudes aprovisionadas ofrecen la
garantía de estar disponibles cuando se las necesita. Para obtener más información, consulte Capacidad
aprovisionada (p. 266).
• Standard: le permite obtener acceso a los objetos archivados en un plazo de varias horas. Las
recuperaciones estándares finaliza en un plazo de entre 3 y 5 horas. Este es el nivel predeterminado.

Versión de API 2006-03-01


265
Amazon Simple Storage Service Guía del desarrollador
Consultar objetos archivados

• Bulk: la opción de acceso a datos de menor costo en Glacier, le permite recuperar grandes cantidades
de datos, incluso petabytes, de forma económica y en un mismo día. El acceso Bulk termina
habitualmente en un plazo de entre 5 y 12 horas.

Para realizar una solicitud Expedited, Standard o Bulk, establezca el elemento de la solicitud Tier
en la solicitud a la API REST POST Object restore según la opción que desee o su equivalente en la AWS
CLI o los SDK de AWS. Para el acceso, Expedited, no es necesario determinar si una recuperación
Expedited debería ser bajo demanda o aprovisionada. Si ha adquirido capacidad aprovisionada, todas las
recuperaciones Expedited se realizarán automáticamente con su capacidad aprovisionada. Para obtener
información acerca de los precios de los niveles, consulte Precios de Glacier.

Capacidad aprovisionada
La capacidad aprovisionada garantiza que su capacidad de recuperación para las recuperaciones rápidas
esté disponible cuando la necesite. Cada unidad de capacidad garantiza que se podrán realizar al menos
tres recuperaciones rápidas cada cinco minutos, y proporciona un desempeño de recuperación de hasta
150 MB/s.

Debería adquirir capacidad de recuperación aprovisionada si su carga de trabajo requiere un acceso


de confianza y predecible a un subconjunto de sus datos en cuestión de minutos. Sin la capacidad
aprovisionada, se suelen aceptar las solicitudes de recuperación Expedited, salvo en situaciones
extraordinarias en las que la demanda sea inusualmente alta. Sin embargo, si necesita obtener
acceso a recuperaciones Expedited incondicionalmente, deberá adquirir capacidad de recuperación
aprovisionada. Puede adquirir capacidad aprovisionada con la consola de Amazon S3, la consola de
Glacier, la API REST de Purchase Provisioned Capacity, los SDK de AWS o la AWS CLI. Para obtener
información sobre los precios de la capacidad aprovisionada, consulte Precios de Glacier.

Más información
• POST Object restore en la Amazon Simple Storage Service API Reference
• Referencia de SQL para Amazon S3 Select y Glacier Select en la Guía para desarrolladores de Amazon
Simple Storage Service

Versión de API 2006-03-01


266
Amazon Simple Storage Service Guía del desarrollador
Cómo configurar el análisis de clases de almacenamiento

Análisis de Amazon S3: análisis de


clases de almacenamiento
Al usar la herramienta de análisis de clases de almacenamiento de Amazon S3, podrá analizar los
patrones de acceso al almacenamiento para poder determinar cuándo trasladar los datos apropiados a
la clase de almacenamiento apropiada. Esta nueva función de análisis de las clases de almacenamiento
de Amazon S3 observa los patrones de acceso a los datos para ayudarle a determinar cuándo trasladar
el almacenamiento STANDARD al que se acceda con menos frecuencia a la clase de almacenamiento
STANDARD_IA (IA quiere decir acceso poco frecuente). Para obtener más información acerca de las
clases de almacenamiento, consulte Clases de almacenamiento de Amazon S3 (p. 110).

Después de que el análisis de clase de almacenamiento observa estos patrones de acceso poco
frecuentes a un conjunto de datos filtrados durante un periodo determinado de tiempo, podrá usar los
resultados del análisis para ayudar a mejorar sus políticas de ciclo de vida. Puede configurar el análisis
de clases de almacenamiento para analizar todos los objetos de un bucket. También puede configurar
filtros para agrupar objetos de modo que se analicen según un prefijo común (es decir, objetos que tengan
nombres que comiencen por una cadena común), por etiquetas de objetos o por prefijos y etiquetas.
Seguramente descubrirá que el filtrado por grupos de objetos es la mejor manera de beneficiarse del
análisis de clases de almacenamiento.
Important
El análisis de clases de almacenamiento no ofrece recomendaciones para las transiciones a las
clases de almacenamiento ONEZONE_IA o GLACIER.

Puede tener varios análisis de clases de almacenamiento por bucket, hasta 1000, y recibirá un análisis
separado para cada filtro. Las configuraciones de filtro múltiples le permiten analizar grupos específicos de
objetos para mejorar sus políticas de ciclo de vida que pasen objetos a STANDARD IA.

El análisis de clases de almacenamiento muestra visualizaciones del uso en la consola de Amazon S3


que se actualizan a diario. Los datos de uso del almacenamiento también se pueden exportar a diario a
un archivo en un bucket de S3. Puede abrir el archivo de informe de uso exportado en una aplicación de
hoja de cálculo o usarlo con las herramientas de inteligencia empresarial de su elección, como Amazon
QuickSight.

Temas
• ¿Cómo configuro el análisis de clases de almacenamiento? (p. 267)
• ¿Cómo uso el análisis de clases de almacenamiento? (p. 268)
• ¿Cómo puedo exportar los datos del análisis de clases de almacenamiento? (p. 271)
• API REST de análisis de Amazon S3 (p. 272)

¿Cómo configuro el análisis de clases de


almacenamiento?
Puede configurar el análisis de clases de almacenamiento configurando qué datos de objetos quiere
analizar. Puede configurar el análisis de clases de almacenamiento para hacer lo siguiente:

• Analizar la totalidad de los contenidos de un bucket.

Recibirá el análisis de todos los objetos del bucket.


• Analizar objetos agrupados por prefijos y etiquetas.

Versión de API 2006-03-01


267
Amazon Simple Storage Service Guía del desarrollador
Análisis de clases de almacenamiento

Puede configurar filtros para agrupar objetos de modo que se analicen según un prefijo común, por
etiquetas de objetos o por prefijos y etiquetas. Recibirá un análisis separado para cada filtro que
configure. Puede tener varias configuraciones de filtro por bucket, hasta 1000.
• Exportar análisis de datos

Al configurar el análisis de clases de almacenamiento para un bucket o un filtro, puede decidir que los
datos del análisis se exporten a un archivo a diario. El análisis diario se agrega al archivo para formar
un registro de análisis histórico para el filtro configurado. El archivo se actualiza a diario en el destino de
su elección. Al seleccionar qué datos exportar, especifique un bucket de destino y un prefijo de destino
opcional donde se escribirá el archivo.

Puede usar la consola de Amazon S3 la API REST, la AWS CLI o los SDK de AWS para configurar el
análisis de clases de almacenamiento.

• Para obtener información sobre cómo configurar el análisis de clases de almacenamiento en la consola
de Amazon S3, consulte ¿Cómo configuro el análisis de clases de almacenamiento?
• Para usar la API de Amazon S3, use la API REST PutBucketAnalyticsConfiguration o su equivalente
desde la AWS CLI o los SDK de AWS.

¿Cómo uso el análisis de clases de


almacenamiento?
Puede usar el análisis de clases de almacenamiento para observar los patrones de acceso a los datos a
lo largo del tiempo para reunir información que le ayude a mejorar la administración del ciclo de vida de su
almacenamiento STANDARD_IA. Tras configurar un filtro, empezará a ver un análisis de datos en función
del filtro en la consola de Amazon S3 en un plazo de 24 a 48 horas. Sin embargo, el análisis de clases
de almacenamiento observa los patrones de acceso de un conjunto de datos filtrado durante 30 o más
días para reunir información y analizarla antes de dar un resultado. El análisis sigue ejecutándose tras el
resultado inicial y actualiza el resultado a medida que cambian los patrones de acceso.

Cuando configura por primera vez un filtro, la consola de Amazon S3 muestra un mensaje similar al
siguiente:

El análisis de clases de almacenamiento observa los patrones de acceso de un conjunto de datos de


objetos filtrado durante 30 o más días para reunir información suficiente para el análisis. Después de que
el análisis de clases de almacenamiento haya reunido la información suficiente, verá un mensaje en la
consola de Amazon S3 similar al siguiente:

Al realizar un análisis de clase de almacenamiento para objetos a los que se accede con poca frecuencia,
el análisis se dirige a un conjunto filtrado de objetos agrupados según su edad desde que se cargaron en

Versión de API 2006-03-01


268
Amazon Simple Storage Service Guía del desarrollador
Análisis de clases de almacenamiento

Amazon S3. El análisis de clases de almacenamiento determina si se obtiene acceso al grupo de edad con
poca frecuencia analizando los siguientes factores para el conjunto de datos filtrado:

• Los objetos en la clase de almacenamiento STANDARD son mayores de 128 K.


• Cuánto almacenamiento total medio tiene por grupo de edad.
• Número medio de bytes transferidos (sin frecuencia) por grupo de edad.
• Los datos de análisis exportados solo incluyen solicitudes que contengan datos relevantes para el
análisis de clases de almacenamiento. Esto podría provocar que surjan diferencias en el número
de solicitudes, y en el total de bytes de carga y solicitudes comparado con lo que se muestra en las
métricas de almacenamiento o con el seguimiento de sus propios sistemas internos.
• Las solicitudes GET y PUT que den error no se cuentan para el análisis. Sin embargo, sí que se ven
estas solicitudes erróneas en las métricas de almacenamiento.

¿Qué cantidad de almacenamiento he recuperado?

La consola de Amazon S3 ilustra la cantidad de almacenamiento del conjunto de datos filtrado se ha


recuperado para el periodo de observación, según se muestra en el siguiente ejemplo.

¿Qué porcentaje de almacenamiento he recuperado?

La consola de Amazon S3 también ilustra el porcentaje de almacenamiento del conjunto de datos filtrado
se ha recuperado para el periodo de observación, según se muestra en el siguiente ejemplo.

Versión de API 2006-03-01


269
Amazon Simple Storage Service Guía del desarrollador
Análisis de clases de almacenamiento

Como ya hemos afirmado antes en este tema, al realizar un análisis de clase de almacenamiento para
objetos a los que se accede con poca frecuencia, el análisis se dirige a un conjunto filtrado de objetos
agrupados según su edad desde que se cargaron en Amazon S3. El análisis de clases de almacenamiento
emplea los siguientes grupos de edad de objetos predefinidos:

• Objetos de Amazon S3 de menos de 15 días


• Objetos de Amazon S3 de entre 15 y 29 días
• Objetos de Amazon S3 de entre 30 y 44 días
• Objetos de Amazon S3 de entre 45 y 59 días
• Objetos de Amazon S3 de entre 60 y 74 días
• Objetos de Amazon S3 de entre 75 y 89 días
• Objetos de Amazon S3 de entre 90 y 119 días
• Objetos de Amazon S3 de entre 120 y 149 días
• Objetos de Amazon S3 de entre 150 y 179 días
• Objetos de Amazon S3 de entre 180 y 364 días
• Objetos de Amazon S3 de entre 365 y 729 días
• Objetos de Amazon S3 de más de 730 días

Normalmente, se necesita observar los patrones de acceso durante unos 30 días para reunir la información
suficiente para el resultado de un análisis. Podría llevar más de 30 días, en función del patrón de acceso
exclusivo de sus datos. Sin embargo, tras configurar un filtro, empezará a ver un análisis de datos en
función del filtro en la consola de Amazon S3 en un plazo de 24 a 48 horas. Puede ver el análisis de una
base diaria de acceso a los objetos desglosados por grupos de edad del objeto en la consola de Amazon
S3.

¿A qué cantidad de mi almacenamiento se obtiene acceso con poca frecuencia?

La consola de Amazon S3 muestra los patrones de acceso agrupados por los grupos de edad predefinidos
de los objetos como se muestra en el siguiente ejemplo.

El texto Frequently accessed (De acceso frecuente) o Infrequently accessed (De acceso poco
frecuente) que se muestra en la parte inferior de cada grupo de edad se basa en la misma lógica que la

Versión de API 2006-03-01


270
Amazon Simple Storage Service Guía del desarrollador
¿Cómo puedo exportar los datos del
análisis de clases de almacenamiento?

recomendación de política de ciclo de vida que se prepara. Después de que se prepare la recomendación
de una política de ciclo de vida (RecommendedObjectAge), todos los niveles de edad por debajo de
la edad recomendada se marcan como acceso infrecuente, independientemente de la ratio de acceso
acumulativo actual. La intención de este texto es servir como apoyo visual para ayudarle en el proceso de
creación del ciclo de vida.

¿Cómo puedo exportar los datos del análisis de


clases de almacenamiento?
Puede decidir que el análisis de clases de almacenamiento exporte los informes de análisis en un archivo
plano con formato de valores separados por comas (CSV). Los informes se actualizan a diario y se basan
en los filtros de grupos de edad de los objetos que configure. Al usar la consola de Amazon S3 puede
seleccionar la opción de exportar informes al crear un filtro. Al seleccionar qué datos exportar, especifique
un bucket de destino y un prefijo de destino opcional donde se escribirá el archivo. Puede exportar los
datos en un bucket de destino en una cuenta diferente. El bucket de destino debe estar en la misma región
que el bucket que configure para el análisis.

Debe crear una política de bucket en el bucket de destino para conceder permisos para que Amazon S3
compruebe qué cuenta de AWS es propietaria del bucket y escriba objetos en el bucket, en la ubicación
definida. Para ver una política de ejemplo, consulte Concesión de permisos para el inventario de Amazon
S3 y el análisis de Amazon S3 (p. 393).

Tras configurar los informes de análisis de las clases de almacenamiento, empezará a recibir el informe
exportado a diario tras 24 horas. Después de ese momento, Amazon S3 seguirá monitorizando y
proporcionando exportaciones diarias.

Puede abrir el archivo CSV en una aplicación de hoja de cálculo o importar el archivo en otras
aplicaciones, como Amazon Quicksight. Para obtener información sobre cómo usar archivos Amazon S3
con Amazon QuickSight, consulte Creación de un conjunto de datos utilizando los archivos de Amazon S3
en la Guía de usuario de Amazon QuickSight.

Los datos en el archivo exportado se ordenan por fecha en los grupos de edad de objetos,
como se muestra en los siguientes ejemplos. Si la clase de almacenamiento es STANDARD,
la fila contendrá también datos para las columnas ObjectAgeForSIATransition y
RecommendedObjectAgeForSIATransition.

Al final del informe, el grupo de edad de objetos es ALL. Las filas ALL contienen totales acumulados para
todos los grupos de edad y para ese día como se muestra en el ejemplo siguiente.

Versión de API 2006-03-01


271
Amazon Simple Storage Service Guía del desarrollador
Diseño del archivo de exportación del
análisis de clases de almacenamiento

En la siguiente sección se describen las columnas que se usan en el informe.

Diseño del archivo exportado


En la siguiente tabla se describe el diseño del archivo exportado.

API REST de análisis de Amazon S3


Las siguientes operaciones son las operaciones REST que se usan para el inventario del almacenamiento.

• DELETE Bucket analytics configuration


• GET Bucket analytics configuration
• List Bucket Analytics Configuration
• PUT Bucket analytics configuration

Versión de API 2006-03-01


272
Amazon Simple Storage Service Guía del desarrollador
Protección de los datos

Seguridad de Amazon S3
La seguridad en la nube de AWS es la mayor prioridad. Como cliente de AWS, se beneficiará de una
arquitectura de red y un centro de datos que están diseñados para satisfacer los requisitos de seguridad de
las organizaciones más exigentes.

La seguridad es una responsabilidad compartida entre AWS y usted. El modelo de responsabilidad


compartida la describe como seguridad de la nube y seguridad en la nube:

• Seguridad de la nube: AWS es responsable de proteger la infraestructura que ejecuta servicios de


AWS en la nube de AWS. AWS también proporciona servicios que puede utilizar de forma segura.
Auditores externos prueban y verifican periódicamente la eficacia de nuestra seguridad en el marco
de los programas de conformidad de AWS. Para obtener más información acerca de los programas de
conformidad que se aplican a Amazon S3, consulte Servicios de AWS en el ámbito del programa de
conformidad.
• Seguridad en la nube: su responsabilidad viene determinada por el servicio de AWS que utilice. Usted
también es responsable de otros factores incluida la confidencialidad de los datos, los requisitos de la
empresa y la legislación y los reglamentos aplicables.

Esta documentación lo ayudará a comprender cómo aplicar el modelo de responsabilidad compartida


cuando se utiliza Amazon S3. En los siguientes temas, se le mostrará cómo configurar Amazon S3 para
satisfacer sus objetivos de seguridad y conformidad. También puede aprender a utilizar otros servicios de
AWS que le ayudan a monitorizar y proteger sus recursos de Amazon S3.

Temas
• Protección de datos en Amazon S3 (p. 273)
• Administración de identidad y acceso en Amazon S3 (p. 312)
• Registro y monitorización en Amazon S3 (p. 438)
• Validación de la conformidad en Amazon S3 (p. 439)
• Resiliencia en Amazon S3 (p. 448)
• Seguridad de la infraestructura en Amazon S3 (p. 479)
• Configuración y análisis de vulnerabilidades en Amazon S3 (p. 480)
• Prácticas recomendadas de seguridad para Amazon S3 (p. 480)

Protección de datos en Amazon S3


Amazon S3 proporciona una infraestructura de almacenamiento de alta durabilidad diseñada para el
almacenamiento de datos principales y críticos. Los objetos se almacenan de forma redundante en varios
dispositivos de diversas instalaciones dentro de una región de Amazon S3. Para ayudar a garantizar mejor
la durabilidad de los datos, las operaciones PUT y PUT Object copy de Amazon S3 almacenan de forma
síncrona sus datos en varias ubicaciones. Después de almacenarlos, Amazon S3 mantiene la durabilidad
de los objetos detectando y reparando rápidamente cualquier pérdida de redundancia.

El almacenamiento estándar de Amazon S3 ofrece las siguientes características:

• Respaldado por el Acuerdo de nivel de servicios de Amazon S3


• Diseñado para ofrecer una durabilidad del 99,999999999% y una disponibilidad de los objetos del
99,99% durante un año concreto.
• Diseñado para aguantar una pérdida simultánea de datos en dos ubicaciones.

Versión de API 2006-03-01


273
Amazon Simple Storage Service Guía del desarrollador
Privacidad entre redes

Amazon S3 protege sus datos adicionalmente con el control de versiones. Puede utilizar el control de
versiones para conservar, recuperar y restaurar todas las versiones de los objetos que se almacenan
en su bucket de Amazon S3. Con el control de versiones, puede recuperarse fácilmente de acciones no
deseadas del usuario y de errores de la aplicación. De forma predeterminada, las solicitudes recuperan la
versión escrita más recientemente. Puede recuperar versiones más antiguas de un objeto especificando
una versión del objeto en la solicitud.

Las siguientes prácticas recomendadas sobre seguridad también evalúan la protección de datos en
Amazon S3:

• Implementar el cifrado en el servidor


• Aplicar el cifrado de datos en tránsito
• Considerar el uso de Amazon Macie con Amazon S3
• Identificar u auditar todos sus buckets de Amazon S3
• Monitorizar Security Advisories de AWS

Privacidad del tráfico entre redes


Este tema describe cómo Amazon S3 protege las conexiones desde el servicio a otras ubicaciones.

Tráfico entre el servicio y aplicaciones y clientes locales


Tiene dos opciones de conectividad entre su red privada y AWS:

• Una conexión de Site-to-Site VPN de AWS. Para obtener más información, consulte ¿Qué es AWS Site-
to-Site VPN?
• Una conexión de AWS Direct Connect. Para obtener más información, consulte ¿Qué es AWS Direct
Connect?

El acceso a Amazon S3 a través de la red se realiza mediante las API publicadas por AWS. Los clientes
deben admitir Transport Layer Security (TLS) 1.0. Nosotros recomendamos TLS 1.2 o una versión
posterior. Los clientes también deben admitir conjuntos de cifrado con confidencialidad directa total
(PFS) tales como Ephemeral Diffie-Hellman (DHE) o Elliptic Curve Diffie-Hellman Ephemeral (ECDHE).
La mayoría de los sistemas modernos como Java 7 y posteriores son compatibles con estos modos.
Además, debe firmar las solicitudes con un ID de clave de acceso y una clave de acceso secreta que estén
asociados a una entidad principal de IAM, o bien puede utilizar AWS Security Token Service (STS) para
generar credenciales de seguridad temporales para firmar solicitudes.

Tráfico entre recursos de AWS en la misma región


Un punto de enlace de Amazon Virtual Private Cloud (Amazon VPC) para Amazon S3 es una entidad
lógica dentro de una VPC que únicamente permite la conectividad a Amazon S3. La Amazon VPC
direcciona las solicitudes a Amazon S3 y vuelve a direccionar las respuestas a la VPC. Para obtener más
información, consulte Puntos de enlace de la VPC en la Guía del usuario de Amazon VPC. Para consultar
ejemplos de políticas de bucket que puede utilizar para controlar el acceso al bucket de S3 desde los
puntos de enlace de la VPC, consulte Ejemplo de políticas de bucket para puntos de enlace de la VPC
para Amazon S3 (p. 394).

Protección de datos mediante cifrado


La protección de datos se refiere a salvaguardarlos en tránsito (al desplazarse desde y hacia Amazon S3)
y en reposo (almacenado en discos en centros de datos Amazon S3). Puede proteger los datos en tránsito

Versión de API 2006-03-01


274
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

con una Capa de sockets seguros (SSL, Secure Sockets Layer) o con el cifrado del lado del cliente.
Dispone de las siguientes opciones para proteger datos en reposo en Amazon S3:

• Cifrado en el servidor: solicite que Amazon S3 cifre su objeto antes de guardarlo en discos de sus
centros de datos y, a continuación, lo descifre al descargarlo.
• Cifrado en el cliente: puede cifrar datos en el cliente y cargar los datos cifrados en Amazon S3. En este
caso, administra el proceso de cifrado, las claves de cifrado y las herramientas relacionadas.

Protección de datos con el cifrado del lado del servidor


El cifrado del lado del servidor se aplica a los datos en reposo, es decir: Amazon S3 cifra sus datos en el
nivel de objeto; los escribe en los discos de sus centros de datos y los descifra para usted cuando obtiene
acceso a estos. Siempre que autentique su solicitud y tenga permiso de acceso, no existe diferencia
alguna en la forma de obtener acceso a objetos cifrados o sin cifrar. Por ejemplo, si comparte objetos con
una URL prefirmada, esa URL funcionará igual para objetos cifrados y sin cifrar.
Note

No es posible aplicar tipos diferentes de cifrado en el servidor al mismo objeto simultáneamente.

Tiene tres opciones mutuamente exclusivas en función de cómo seleccione administrar las claves de
cifrado:

• Cifrado del lado del servidor con claves de cifrado administradas por Amazon S3 (SSE-S3): cada objeto
se cifra con una clave exclusiva. Como medida de seguridad adicional, cifra la propia clave con una
clave maestra que rota periódicamente. El cifrado del lado del servidor de Amazon S3 utiliza uno de los
cifrados de bloques más seguros disponibles, Advanced Encryption Standard de 256 bits (AES-256),
para cifras sus datos. Para obtener más información, consulte Protección de los datos con el cifrado del
lado del servidor con claves de cifrado administradas por Amazon S3 (SSE-S3) (p. 281).
• Cifrado en el servidor con claves almacenadas en AWS KMS (SSE-KMS): similar a SSE-S3, pero
con algunos beneficios adicionales y cargos adicionales por el uso de este servicio. Hay permisos
separados para usar una clave sobre (una clave que protege la clave de cifrado de sus datos), que
proporciona protección adicional frente al acceso no autorizado a sus objetos en Amazon S3. SSE-KMS
le proporciona también un seguimiento de auditoría de cuándo se usaron sus claves y quién las usó.
Además, tendrá la opción de crear y administrar las claves de cifrado usted mismo o emplear una clave
predeterminada exclusiva para usted, el servicio que usa y la región en la que trabaja. Para obtener más
información, consulte Protección de datos con el cifrado en el servidor mediante claves almacenadas en
AWS KMS (SSE-KMS) (p. 275).
• Cifrado del lado del servidor con claves facilitadas por el cliente (SSE-C): usted administra las claves de
cifrado y Amazon S3 administra tanto el cifrado, al escribir en los discos, como el descifrado, al obtener
acceso a los objetos. Para obtener más información, consulte Protección de los datos con el cifrado del
lado del servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 290).

Note

Al enumerar los objetos en su bucket, la API de listado devuelve una lista de todos los objetos,
independientemente de si están cifrados.

Protección de datos con el cifrado en el servidor mediante claves almacenadas en


AWS KMS (SSE-KMS)
El cifrado del lado del servidor consiste en proteger los datos en reposo. AWS Key Management Service
(AWS KMS) es un servicio que combina hardware y software seguro, y con una elevada disponibilidad
para proporcionar un sistema de administración de claves adaptado a la nube. AWS KMS usa claves
maestras de cliente (CMK) para cifrar sus objetos de Amazon S3. Puede usar AWS KMS con la Consola
de administración de AWS o las API de AWS KMS para crear claves de cifrado de forma centralizada,

Versión de API 2006-03-01


275
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

definir las políticas que controlan cómo se pueden utilizar las claves y controlar el uso de las claves para
demostrar que se emplean correctamente. Puede usar estas claves para proteger sus datos en buckets de
Amazon S3.

La primera vez que añada un objeto cifrado con SSE-KMS a un bucket en una región, se crea una CMK
predeterminada automáticamente. Esta clave se utiliza para el cifrado SSE-KMS, a menos que seleccione
una CMK que haya creado por separado con AWS Key Management Service. Crear su propia CMK le
ofrece una mayor flexibilidad, incluida la opción de crear, rotar, desactivar y definir los controles de acceso
y auditar las claves de cifrado utilizadas para proteger los datos.

Para obtener más información, consulte ¿Qué es AWS Key Management Service? en la AWS Key
Management Service Developer Guide. Si utiliza AWS KMS, se aplican cargos adicionales por usar claves
de AWS KMS. Para obtener más información, consulte Precios de AWS Key Management Service.
Note
• Si carga o accede a objetos cifrados con SSE-KMS, tiene que usar AWS Signature Version 4
para reforzar la seguridad. Para obtener más información sobre cómo hacer esto con un SDK
de AWS, consulte Especificación de Signature Version en una autenticación de solicitud.
• Al utilizar el cifrado SSE-KMS con un bucket de S3, la clave de KMS debe estar en la misma
región que el bucket.

Las características principales del SSE-KMS son:

• Puede decidir crear y administrar las claves de cifrado usted mismo o usar su clave de servicio
predeterminada generada exclusivamente en un cliente por servicio y nivel de región.
• La ETag de la respuesta no es el MD5 de los datos del objeto.
• Las claves de datos usadas para cifrar sus datos también están cifradas, y se almacenan junto a los
datos que protegen.
• Las claves maestras auditables se pueden crear, rotar y deshabilitar desde la consola de AWS KMS.
• Los controles de seguridad de AWS KMS pueden ayudarle a cumplir los requisitos de conformidad
relacionados con el cifrado.

Amazon S3 admite políticas de bucket que podrá usar si requiere cifrado en el servidor para todos los
objetos almacenados en su bucket. Por ejemplo, la siguiente política de bucket deniega el permiso de
carga de objeto (s3:PutObject) para todos, si la solicitud no incluye el encabezado x-amz-server-
side-encryption, que solicita el cifrado del lado del servidor con SSE-KMS.

{
"Version":"2012-10-17",
"Id":"PutObjPolicy",
"Statement":[{
"Sid":"DenyUnEncryptedObjectUploads",
"Effect":"Deny",
"Principal":"*",
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::YourBucket/*",
"Condition":{
"StringNotEquals":{
"s3:x-amz-server-side-encryption":"aws:kms"
}
}
}
]
}

Amazon S3 también admite la clave condicional s3:x-amz-server-side-encryption-aws-kms-


key-id, que podrá usar para solicitar una clave KMS específica para el cifrado de objetos. La clave de

Versión de API 2006-03-01


276
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

KMS que especifique en la política debe tener el formato "arn:aws:kms:region:acct-id:key/key-


id" .
Note

Al cargar un objeto, puede especificar la clave de KMS con el encabezado x-amz-server-


side-encryption-aws-kms-key-id. Si el encabezado no está presente en la solicitud,
Amazon S3 asume la clave KMS predeterminada. Independientemente de esto, el ID de la clave
KMS que usa Amazon S3 para el cifrado de objetos debe coincidir con el ID de la clave KMS en la
política. De lo contrario, Amazon S3 denegará la solicitud.
Important

Todas las solicitudes GET y PUT para un objeto protegido por AWS KMS producirán un error si no
se realizan mediante SSL o no se realizan con SigV4.

SSE-KMS solo cifra los datos de objetos. Los metadatos de los objetos no se cifran.

Uso de AWS Key Management Service en la consola de Amazon S3

Para obtener más información acerca del uso de la consola de Amazon S3 con claves de cifrado
almacenadas en AWS KMS, consulte ¿Cómo puedo cargar archivos y carpetas en un bucket de S3? en la
Guía del usuario de la consola de Amazon Simple Storage Service.

Compatibilidad de API con AWS Key Management Service en Amazon S3

La API REST para crear objetos (consulte Especificación de AWS Key Management Service en Amazon
S3 con la API REST (p. 280)) proporciona un encabezado de solicitud, x-amz-server-side-
encryption, que puede utilizar para solicitar SSE-KMS con el valor aws:kms. También existe x-amz-
server-side-encryption-aws-kms-key-id, que especifica el ID de la clave de cifrado maestra de
AWS KMS; utilizada para el objeto. La API de Amazon S3 también admite el contexto de cifrado, con el
encabezado x-amz-server-side-encryption-context.

El contexto de cifrado puede ser cualquier valor que quiera, siempre que el encabezado se ajuste al
formato JSON cifrado en Base64. Sin embargo, como el contexto de cifrado no está cifrado y se guarda si
se activa el registro de AWS CloudTrail, el contexto de cifrado no debe incluir información confidencial. Es
recomendable que el contexto describa los datos que se cifran o descifran para poder entender mejor los
eventos de CloudTrail que genera AWS KMS. Para obtener más información, consulte Contexto de cifrado
en la AWS Key Management Service Developer Guide.

Además, Amazon S3 podría adjuntar una clave predefinida de aws:s3:arn con un valor igual al ARN del
objeto para el contexto de cifrado proporcionado. Esto solo ocurre si la clave aws:s3:arn no está aún en
el contexto de cifrado proporcionado, en cuyo caso esta clave predefinida se adjunta cuando Amazon S3
procesa las solicitudes PUT. Si esta clave aws:s3:arn ya está presente en su contexto de cifrado, la clave
no se adjunta una segunda vez al contexto de cifrado.

Si tiene esta clave predefinida como parte de su contexto de cifrado, podrá realizar un seguimiento de
las solicitudes pertinentes en CloudTrail, de modo que siempre podrá comprobar qué ARN de objeto
de Amazon S3 se ha usado con cada clave de cifrado. Además, esta clave predefinida como parte de
su contexto de cifrado garantiza que el contexto de cifrado no sea idéntico entre los distintos objetos de
Amazon S3, lo que refuerza la seguridad para sus objetos. La totalidad de su contexto de cifrado será
validada de modo que el valor sea igual al ARN del objeto.

Las siguientes API de Amazon S3 admiten estos encabezados de solicitud.

• Operación PUT: cuando carga datos con la API PUT (consulte PUT Object), puede especificar estos
encabezados de solicitud.
• Iniciar carga multiparte: al cargar objetos grandes mediante la API de carga multiparte, puede especificar
estos encabezados. Debe especificar estos encabezados en la solicitud inicial (consulte la sección sobre
Iniciar carga multiparte).

Versión de API 2006-03-01


277
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Operación POST: cuando utiliza una operación POST para cargar un objeto (consulte POST Object),
en vez de proporcionar los encabezados de solicitud, debe proporcionar la misma información en los
campos del formulario.
• Operación COPY: cuando copia un objeto (consulte PUT Object - Copy), tiene un objeto de origen y
uno de destino. Al pasar encabezados SSE-KMS con la operación COPY, se aplicarán solo al objeto de
destino.

Los SDK de AWS también proporcionan API de encapsulamiento para que solicite SSE-KMS con Amazon
S3.

Especificación de AWS Key Management Service en Amazon S3 con los SDK de AWS

Al utilizar los SDK de AWS, puede solicitar a Amazon S3 que use claves de cifrado administradas por AWS
Key Management Service (AWS KMS). En esta sección se brindan ejemplos en los que se utilizan los SDK
de AWS para Java y .NET. Para obtener información acerca de otros SDK, consulte Código de muestra y
bibliotecas.

AWS SDK para Java

En esta sección se explican varias operaciones de Amazon S3 en las que se usa el AWS SDK para Java y
cómo usar las claves de cifrado administradas por AWS KMS.

Operación PUT

Al cargar un objeto con el AWS SDK para Java, puede solicitar a Amazon S3 que use una clave de cifrado
administrada por AWS KMS agregando la propiedad SSEAwsKeyManagementParams como se muestra
en la siguiente solicitud:

PutObjectRequest putRequest = new PutObjectRequest(bucketName,


keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());

En este caso, Amazon S3 usa la clave maestra predeterminada (consulte Protección de datos con el
cifrado en el servidor mediante claves almacenadas en AWS KMS (SSE-KMS) (p. 275)). Opcionalmente,
puede crear su propia clave y especificarla en la solicitud.

PutObjectRequest putRequest = new PutObjectRequest(bucketName,


keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));

Para obtener más información acerca de creación de claves, consulte Programming the AWS KMS API en
la AWS Key Management Service Developer Guide.

Para ver ejemplos de código funcional sobre cómo cargar un objeto, consulte los temas siguientes.
Tendrá que actualizar esos ejemplos de código y facilitar la información de cifrado como se muestra en el
fragmento de código anterior.

• Para cargar un objeto en una única operación, consulte Cargar un objeto con AWS SDK for
Java (p. 182).
• Para una carga multiparte, consulte los siguientes temas:
• Para utilizar la API de carga multiparte de alto nivel, consulte Cargar un archivo (p. 193).
• Si utiliza la API de carga multiparte de bajo nivel, consulte Cargar un archivo (p. 197).

Operación de copia

Al copiar objetos, agrega las mismas propiedades de la solicitud (ServerSideEncryptionMethod y


ServerSideEncryptionKeyManagementServiceKeyId) para solicitar a Amazon S3 que use una

Versión de API 2006-03-01


278
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

clave de cifrado administrada por AWS KMS. Para obtener más información acerca de la copia de objetos,
consulte Copia de objetos (p. 219).

URL prefirmadas

Al crear una URL prefirmada para un objeto cifrado con una clave de cifrado administrada por AWS KMS
debe especificar explícitamente Signature Version 4:

ClientConfiguration clientConfiguration = new ClientConfiguration();


clientConfiguration.setSignerOverride("AWSS3V4SignerType");
AmazonS3Client s3client = new AmazonS3Client(
new ProfileCredentialsProvider(), clientConfiguration);
...

Para ver un ejemplo del código, consulte Generar una URL de objeto prefirmada con AWS SDK for
Java (p. 179).

AWS SDK para .NET

En esta sección se explican varias operaciones de Amazon S3 en las que se usa el AWS SDK para .NET y
cómo usar las claves de cifrado administradas por AWS KMS.

Operación PUT

Al cargar un objeto con el AWS SDK para .NET, puede solicitar a Amazon S3 que utilice una clave de
cifrado administrada por AWS KMS añadiendo la propiedad ServerSideEncryptionMethod como se
muestra en la siguiente solicitud.

PutObjectRequest putRequest = new PutObjectRequest


{
BucketName = bucketName,
Key = keyName,
// other properties.
ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS
};

En este caso, Amazon S3 usa la clave maestra predeterminada (consulte Protección de datos con el
cifrado en el servidor mediante claves almacenadas en AWS KMS (SSE-KMS) (p. 275)). Opcionalmente,
puede crear su propia clave y especificarla en la solicitud.

PutObjectRequest putRequest1 = new PutObjectRequest


{
BucketName = bucketName,
Key = keyName,
// other properties.
ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS,
ServerSideEncryptionKeyManagementServiceKeyId = keyId
};

Para obtener más información acerca de creación de claves, consulte Programming the AWS KMS API en
la AWS Key Management Service Developer Guide.

Para ver ejemplos de código funcional sobre cómo cargar un objeto, consulte los temas siguientes.
Tendrá que actualizar estos ejemplos de código y facilitar la información de cifrado como se muestra en el
fragmento de código anterior.

• Para cargar un objeto en una única operación, consulte Cargar un objeto con AWS SDK
para .NET (p. 183).
• Para una carga multiparte, consulte los siguientes temas:

Versión de API 2006-03-01


279
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Para utilizar la API de carga multiparte de alto nivel, consulte Carga de un archivo en un bucket de S3
con AWS SDK para .NET (API de alto nivel) (p. 201).
• Para utilizar la API de carga multiparte de bajo nivel, consulte Carga de un archivo en un bucket de S3
con AWS SDK para .NET (API de bajo nivel) (p. 207).

Operación de copia

Al copiar objetos, agrega las mismas propiedades de la solicitud (ServerSideEncryptionMethod y


ServerSideEncryptionKeyManagementServiceKeyId) para solicitar a Amazon S3 que use una
clave de cifrado administrada por AWS KMS. Para obtener más información acerca de la copia de objetos,
consulte Copia de objetos (p. 219).

URL prefirmadas

Al crear una URL prefirmada para un objeto cifrado con una clave de cifrado administrada por AWS KMS
debe especificar explícitamente Signature Version 4:

AWSConfigs.S3Config.UseSignatureVersion4 = true;

Para ver un ejemplo del código, consulte Generar una URL de objeto prefirmada con AWS SDK
para .NET (p. 180).

Especificación de AWS Key Management Service en Amazon S3 con la API REST

Cuando se crea un objeto: es decir, cuando está cargando un objeto nuevo o haciendo una copia de
un objeto existente, puede especificar el uso del cifrado del lado del servidor con claves de cifrado
administradas por AWS KMS (SSE-KMS) para cifrar sus datos agregando el encabezado x-amz-
server-side-encryption a la solicitud. Configure el valor del encabezado para el algoritmo de cifrado
aws:kms. Amazon S3 confirma que su objeto se guardó con SSE-KMS al devolver el encabezado de
respuesta x-amz-server-side-encryption.

La siguiente API REST upload acepta el encabezado de solicitud x-amz-server-side-encryption.

• PUT Object
• PUT Object - Copy
• POST Object
• Initiate Multipart Upload

Cuando carga objetos grandes con la API de carga multiparte, puede especificar SSE-KMS al agregar
el encabezado x-amz-server-side-encryption a la solicitud Iniciar carga multiparte con el valor
aws:kms. Al copiar un objeto existente, independientemente de si el objeto de origen está cifrado o no, el
objeto de destino no está cifrado, a no ser que solicite explícitamente el cifrado en el servidor.

Los encabezados de respuesta de la siguiente API REST devuelven el encabezado x-amz-server-


side-encryption cuando un objeto fue almacenado con el cifrado del lado el servidor.

• PUT Object
• PUT Object - Copy
• POST Object
• Initiate Multipart Upload
• Upload Part
• Upload Part - Copy
• Complete Multipart Upload
• Get Object

Versión de API 2006-03-01


280
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Head Object

Note

No debe enviar encabezados de solicitud de cifrado para las solicitudes GET y HEAD si el objeto
utiliza SSE-KMS, porque obtendrá el error HTTP 400: Solicitud errónea.

Protección de los datos con el cifrado del lado del servidor con claves de cifrado
administradas por Amazon S3 (SSE-S3)
El cifrado del lado del servidor protege los datos en reposo. Amazon S3 cifra cada objeto con una
clave única. Como medida de seguridad adicional, cifra la propia clave con una clave maestra que rota
periódicamente. El cifrado del lado del servidor de Amazon S3 utiliza uno de los cifrados de bloques más
seguros disponibles, Advanced Encryption Standard de 256 bits (AES-256), para cifras sus datos.

Si necesita cifrado de lado de servidor para todos los objetos que se almacenan en un bucket, use una
política de bucket. Por ejemplo, en la siguiente política de bucket se deniega el permiso para cargar un
objeto a menos que la solicitud incluya el encabezado x-amz-server-side-encryption para solicitar
el cifrado del lado del servidor:

{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YourBucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YourBucket/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
}
}
]
}

Note

• Este cifrado solo cifra datos de objetos, no metadatos de objetos.


• Necesita el permiso kms:Decrypt cuando cargue o descargue un objeto de Amazon
S3 cifrado con una clave KMS de AWS, además de los permisos kms:ReEncrypt,
kms:GenerateDataKey y kms:DescribeKey. Para obtener más información, consulte la
sección Errores al cargar un archivo grande en Amazon S3 con cifrado mediante una clave
KMS de AWS.

Versión de API 2006-03-01


281
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

Soporte de API para cifrado del lado del servidor

Para solicitar cifrado del lado del servidor utilizando las API REST de creación de objetos, utilice el
encabezado de solicitud x-amz-server-side-encryption. Para obtener más información acerca de
las API REST, consulte Especificación del cifrado del lado del servidor con la API de REST (p. 289).

Las siguientes API de Amazon S3 admiten este encabezado:

• Operaciones PUT: especifique el encabezado de solicitud cuando cargue datos con la API PUT. Para
obtener más información, consulte PUT Object.
• Iniciar carga multiparte: especifique el encabezado en la solicitud de inicio cuando cargue objetos
grandes mediante la API de carga multiparte. Para obtener más información, consulte la sección sobre
cómo iniciar la carga multiparte.
• Operaciones COPY: cuando copia un objeto, tiene un objeto de origen y otro de destino. Para obtener
más información, consulte Objeto PUT - Copia.

Note

Cuando utilice una operación POST para cargar un objeto, en vez de proporcionar el encabezado
de solicitud, debe proporcionar la misma información en los campos del formulario. Para obtener
más información, consulte POST Object.

Los SDK de AWS también proporcionan API de encapsulamiento que puede utilizar para solicitar el cifrado
del lado del servidor. También puede usar la Consola de administración de AWS para cargar objetos y
solicitar el cifrado del lado del servidor.

Especificación del cifrado del lado del servidor con AWS SDK for Java

Cuando use el AWS SDK for Java para cargar un objeto, puede usar el cifrado del lado del servidor
para cifrarlo. Para solicitar cifrado del lado del servidor utilice la propiedad ObjectMetadata de la
PutObjectRequest para establecer el encabezado de solicitud x-amz-server-side-encryption.
Cuando llama al método putObject() del AmazonS3Client, Amazon S3 cifra y guarda los datos.

También puede usar el cifrado en el lado del servidor cuando cargue objetos con la API de carga
multiparte:

• Cuando usa la API de carga multiparte de nivel alto, utiliza los métodos TransferManager para aplicar
cifrado del lado del servidor a los objetos a medida que los carga. Puede utilizar cualquier método de
carga que tome ObjectMetadata como parámetro. Para obtener más información, consulte Uso de
AWS Java SDK para carga multiparte (API de nivel alto) (p. 193).
• Cuando utiliza la API de carga multiparte de nivel bajo, puede especificar el cifrado del lado del
servidor al iniciar la carga multiparte. Añade la propiedad ObjectMetadata al llamar al método
InitiateMultipartUploadRequest.setObjectMetadata(). Para obtener más información,
consulte Cargar un archivo (p. 197).

No puede cambiar directamente el estado de cifrado de un objeto (cifrado de un objeto no cifrado o


descifrado de un objeto cifrado). Para cambiar el estado de cifrado de un objeto, realice una copia del
objeto, especifique el estado de cifrado deseado para la copia y elimine el objeto original. Amazon S3 Para
solicitar el cifrado del objeto copiado por medio de la API de Java, use la propiedad ObjectMetadata
para especificar el cifrado del lado del servidor en la CopyObjectRequest.

Example Ejemplo

En el siguiente ejemplo se muestra cómo establecer el cifrado del lado del servidor con AWS SDK for Java.
Se muestra cómo realizar las siguientes tareas:

• Cargar un nuevo objeto utilizando un cifrado del lado del servidor.

Versión de API 2006-03-01


282
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Cambiar el estado de cifrado de un objeto (en este ejemplo, cifrar un objeto que no estaba cifrado
anteriormente) copiando el objeto.
• Comprobar el estado de cifrado del objeto.

Para obtener más información acerca del cifrado del lado del servidor, consulte Especificación del
cifrado del lado del servidor con la API de REST (p. 289). Para obtener instrucciones sobre la creación
y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon
S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.internal.SSEResultBase;
import com.amazonaws.services.s3.model.*;

import java.io.ByteArrayInputStream;

public class SpecifyServerSideEncryption {

public static void main(String[] args) {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyNameToEncrypt = "*** Key name for an object to upload and encrypt ***";
String keyNameToCopyAndEncrypt = "*** Key name for an unencrypted object to be
encrypted by copying ***";
String copiedObjectKeyName = "*** Key name for the encrypted copy of the
unencrypted object ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();

// Upload an object and encrypt it with SSE.


uploadObjectWithSSEEncryption(s3Client, bucketName, keyNameToEncrypt);

// Upload a new unencrypted object, then change its encryption state


// to encrypted by making a copy.
changeSSEEncryptionStatusByCopying(s3Client,
bucketName,
keyNameToCopyAndEncrypt,
copiedObjectKeyName);
} 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();
}
}

private static void uploadObjectWithSSEEncryption(AmazonS3 s3Client, String bucketName,


String keyName) {
String objectContent = "Test object encrypted with SSE";
byte[] objectBytes = objectContent.getBytes();

Versión de API 2006-03-01


283
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

// Specify server-side encryption.


ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(objectBytes.length);
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
PutObjectRequest putRequest = new PutObjectRequest(bucketName,
keyName,
new ByteArrayInputStream(objectBytes),
objectMetadata);

// Upload the object and check its encryption status.


PutObjectResult putResult = s3Client.putObject(putRequest);
System.out.println("Object \"" + keyName + "\" uploaded with SSE.");
printEncryptionStatus(putResult);
}

private static void changeSSEEncryptionStatusByCopying(AmazonS3 s3Client,


String bucketName,
String sourceKey,
String destKey) {
// Upload a new, unencrypted object.
PutObjectResult putResult = s3Client.putObject(bucketName, sourceKey, "Object
example to encrypt by copying");
System.out.println("Unencrypted object \"" + sourceKey + "\" uploaded.");
printEncryptionStatus(putResult);

// Make a copy of the object and use server-side encryption when storing the copy.
CopyObjectRequest request = new CopyObjectRequest(bucketName,
sourceKey,
bucketName,
destKey);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
request.setNewObjectMetadata(objectMetadata);

// Perform the copy operation and display the copy's encryption status.
CopyObjectResult response = s3Client.copyObject(request);
System.out.println("Object \"" + destKey + "\" uploaded with SSE.");
printEncryptionStatus(response);

// Delete the original, unencrypted object, leaving only the encrypted copy in
Amazon S3.
s3Client.deleteObject(bucketName, sourceKey);
System.out.println("Unencrypted object \"" + sourceKey + "\" deleted.");
}

private static void printEncryptionStatus(SSEResultBase response) {


String encryptionStatus = response.getSSEAlgorithm();
if (encryptionStatus == null) {
encryptionStatus = "Not encrypted with SSE";
}
System.out.println("Object encryption status is: " + encryptionStatus);
}
}

Especificación de cifrado del lado del servidor con AWS SDK para .NET

Cuando carga un objeto, puede indicar a Amazon S3 que lo cifre. Para cambiar el estado de cifrado de
un objeto existente, realice una copia del objeto y elimine el objeto de origen. De forma predeterminada
la operación de copia cifra el destino solo si usted solicita explícitamente cifrado del lado del servidor del
objeto de destino. Para especificar el cifrado del lado del servidor en la CopyObjectRequest, añada lo
siguiente:

Versión de API 2006-03-01


284
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256

Para obtener una muestra funcional que indica cómo copiar un objeto, consulte Copiar un objeto de
Amazon S3 en una única operación con AWS SDK para .NET (p. 222).

En el siguiente ejemplo se carga un objeto. En la solicitud, el ejemplo indica a Amazon S3 que cifre el
objeto. A continuación el ejemplo recupera los metadatos de los objetos y comprueba el método de cifrado
que se utilizó. Para obtener información acerca de cómo crear y probar una muestra funcional, consulte
Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class SpecifyServerSideEncryptionTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** key name for object created ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
WritingAnObjectAsync().Wait();
}

static async Task WritingAnObjectAsync()


{
try
{
var putRequest = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName,
ContentBody = "sample text",
ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
};

var putResponse = await client.PutObjectAsync(putRequest);

// Determine the encryption state of an object.


GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
{
BucketName = bucketName,
Key = keyName
};
GetObjectMetadataResponse response = await
client.GetObjectMetadataAsync(metadataRequest);
ServerSideEncryptionMethod objectEncryption =
response.ServerSideEncryptionMethod;

Console.WriteLine("Encryption method used: {0}",


objectEncryption.ToString());
}
catch (AmazonS3Exception e)
{

Versión de API 2006-03-01


285
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

Console.WriteLine("Error encountered ***. 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);
}
}
}
}

Especificación de cifrado del lado del servidor con AWS SDK para PHP

En este tema se muestra cómo usar las clases de la versión 3 de AWS SDK para PHP para agregar
cifrado del lado del servidor a objetos que cargue a Amazon Simple Storage Service (Amazon S3). Se
parte de la base de que usted ya sigue las instrucciones para Uso del AWS SDK para PHP y ejecución de
ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP correctamente.

Para cargar un objeto en Amazon S3, use el método Aws\S3\S3Client::putObject(). Para añadir el
encabezado de solicitud x-amz-server-side-encryption a su solicitud de carga, especifique el
parámetro ServerSideEncryption con el valor AES256, como se muestra en el siguiente ejemplo
de código. Para obtener información acerca de solicitudes de cifrado del lado del servidor, consulte
Especificación del cifrado del lado del servidor con la API de REST (p. 289).

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';

// $filepath should be an absolute path to a file on disk.


$filepath = '*** Your File Path ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Upload a file with server-side encryption.


$result = $s3->putObject([
'Bucket' => $bucket,
'Key' => $keyname,
'SourceFile' => $filepath,
'ServerSideEncryption' => 'AES256',
]);

Como respuesta, Amazon S3 devuelve el encabezado x-amz-server-side-encryption con el valor


del algoritmo de cifrado que se utilizó para cifrar los datos del objeto.

Cuando carga objetos grandes con la API de carga multiparte, puede especificar el cifrado del lado del
servidor para los objetos que está cargando, como sigue:

• Cuando utiliza la API de carga multiparte de bajo nivel, debe especificar el cifrado del lado del servidor
al llamar al método Aws\S3\S3Client::createMultipartUpload(). Para agregar el encabezado de solicitud
x-amz-server-side-encryption a su solicitud, especifique la clave del parámetro de la array
ServerSideEncryption con el valor AES256. Para obtener más información acerca de la API de
carga multiparte de bajo nivel, consulte Uso de AWS SDK para PHP para cargas multiparte (API de bajo
nivel) (p. 212).

Versión de API 2006-03-01


286
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Cuando utiliza la API de carga multiparte de alto nivel, debe especificar el cifrado del lado del servidor
mediante el parámetro ServerSideEncryption del método CreateMultipartUpload. Para ver un
ejemplo de cómo usar el método setOption() con la API de carga multiparte de alto nivel, consulte
Uso del AWS PHP SDK para carga multiparte (p. 211).

Determinar el algoritmo de cifrado utilizado

Para determinar el estado de cifrado de un objeto existente, recupere los metadatos del objeto llamando al
método Aws\S3\S3Client::headObject() como se muestra en el siguiente ejemplo de código PHP.

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';


$keyname = '*** Your Object Key ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Check which server-side encryption algorithm is used.


$result = $s3->headObject([
'Bucket' => $bucket,
'Key' => $keyname,
]);
echo $result['ServerSideEncryption'];

Cambiar el cifrado en el servidor para un objeto existente (operación de copia)

Para cambiar el estado de cifrado de un objeto existente, realice una copia del objeto con el método Aws
\S3\S3Client::copyObject() y elimine el objeto de origen. De forma predeterminada, copyObject() no
cifra el objeto de destino, a menos que solicite de forma explícita el cifrado del lado del servidor con el
parámetro ServerSideEncryption con el valor AES256. El siguiente ejemplo de código PHP realiza
una copia de un objeto y agrega cifrado en el servidor al objeto copiado.

require 'vendor/autoload.php';

use Aws\S3\S3Client;

$sourceBucket = '*** Your Source Bucket Name ***';


$sourceKeyname = '*** Your Source Object Key ***';

$targetBucket = '*** Your Target Bucket Name ***';


$targetKeyname = '*** Your Target Object Key ***';

$s3 = new S3Client([


'version' => 'latest',
'region' => 'us-east-1'
]);

// Copy an object and add server-side encryption.


$s3->copyObject([
'Bucket' => $targetBucket,
'Key' => $targetKeyname,
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
'ServerSideEncryption' => 'AES256',
]);

Versión de API 2006-03-01


287
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Documentación de AWS SDK para PHP

Especificación del cifrado del lado del servidor con AWS SDK parar Ruby

Cuando utiliza AWS SDK parar Ruby para cargar un objeto, puede especificar que el objeto se almacene
cifrado en reposo con el cifrado del lado del servidor (SSE). Cuando vuelve a leer el objeto, este se
descifra automáticamente.

En el siguiente ejemplo de la versión 3 de AWS SDK parar Ruby se muestra cómo especificar que un
archivo cargado en Amazon S3 quede cifrado en reposo.

# The following example demonstrates how to specify that a file uploaded to Amazon S3 be
encrypted at rest.
require 'aws-sdk-s3'

regionName = 'us-west-2'
bucketName = 'my-bucket'
key = 'key'
filePath = 'local/path/to/file'
encryptionType = 'AES256'

s3 = Aws::S3::Resource.new(region:regionName)
obj = s3.bucket(bucketName).object(key)
obj.upload_file(filePath, :server_side_encryption => encryptionType)

Para obtener un ejemplo que muestra cómo cargar un objeto sin SSE, consulte Cargar un objeto con AWS
SDK parar Ruby (p. 186).

Determinación del uso del algoritmo de cifrado

El siguiente ejemplo de código muestra cómo determinar el estado de cifrado de un objeto existente.

# Determine server-side encryption of an object.


require 'aws-sdk-s3'

regionName = 'us-west-2'
bucketName='bucket-name'
key = 'key'

s3 = Aws::S3::Resource.new(region:regionName)
enc = s3.bucket(bucketName).object(key).server_side_encryption
enc_state = (enc != nil) ? enc : "not set"
puts "Encryption state is #{enc_state}."

Si no se utiliza el cifrado del lado del servidor para el objeto almacenado en Amazon S3, el valor del
método será nulo.

Cambiar el cifrado en el servidor para un objeto existente (operación de copia)

Para cambiar el estado de cifrado de un objeto existente, realice una copia del objeto y elimine el objeto
de origen. De forma predeterminada, los métodos de copia no cifrarán el objeto de destino, a menos que
solicite de forma explícita el cifrado del lado del servidor. Puede solicitar el cifrado del objeto de destino al
especificar el valor server_side_encryption en las opciones de argumento hash, como se muestra en
el siguiente código de ejemplo de Ruby. El ejemplo de código demuestra cómo copiar un objeto y cifrar la
copia.

Versión de API 2006-03-01


288
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

require 'aws-sdk-s3'

regionName = 'us-west-2'
encryptionType = 'AES256'

s3 = Aws::S3::Resource.new(region:regionName)
bucket1 = s3.bucket('source-bucket-name')
bucket2 = s3.bucket('target-bucket-name')
obj1 = bucket1.object('Bucket1Key')
obj2 = bucket2.object('Bucket2Key')

obj1.copy_to(obj2, :server_side_encryption => encryptionType)

Para obtener una muestra funcional que indica cómo copiar un objeto sin cifrado, consulte Copiar un objeto
con AWS SDK parar Ruby (p. 224).

Especificación del cifrado del lado del servidor con la API de REST

Cuando se crea un objeto: es decir, cuando está cargando un objeto nuevo o haciendo una copia de un
objeto existente, puede especificar si desea que Amazon S3 cifre los datos al añadir el encabezado x-
amz-server-side-encryption en la solicitud. Configure el valor del encabezado para el algoritmo de
cifrado AES256 compatible con Amazon S3. Amazon S3 confirma que su objeto se guardó con cifrado del
lado del servidor al devolver el encabezado de respuesta x-amz-server-side-encryption.

La siguiente API REST upload acepta el encabezado de solicitud x-amz-server-side-encryption.

• PUT Object
• PUT Object - Copy
• POST Object
• Initiate Multipart Upload

Cuando carga objetos grandes con la API de carga multiparte, puede especificar el cifrado del lado
del servidor al añadir el encabezado x-amz-server-side-encryption a la solicitud Iniciar carga
multiparte. Cuando copia un objeto existente, independientemente de si el objeto de origen está cifrado o
no, el objeto de destino no está cifrado, a no ser que solicite explícitamente el cifrado en el servidor.

Los encabezados de respuesta de la siguiente API REST devuelven el encabezado x-amz-server-


side-encryption cuando un objeto fue almacenado con el cifrado del lado el servidor.

• PUT Object
• PUT Object - Copy
• POST Object
• Initiate Multipart Upload
• Upload Part
• Upload Part - Copy
• Complete Multipart Upload
• Get Object
• Head Object

Note

No debe enviar encabezados de solicitud de cifrado para las solicitudes GET y HEAD si el objeto
utiliza SSE-S3, porque obtendrá el error HTTP 400: Solicitud errónea.

Versión de API 2006-03-01


289
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

Especificación del cifrado del lado del servidor con Consola de administración de AWS

Cuando carga un objeto con la Consola de administración de AWS, puede especificar el cifrado del lado
del servidor. Para ver un ejemplo de cómo cargar un objeto, consulte Carga de objetos en S3.

Cuando copia un objeto con la Consola de administración de AWS, esta copia el objeto como es. Es decir,
si el objeto de origen que se copia está cifrado, el objeto de destino también.La consola también le permite
añadir cifrado a un objeto. Para obtener más información, consulte ¿Cómo puedo añadir cifrado a un
objeto de S3?.

Más información

• Cifrado predeterminado de Amazon S3 para los buckets de S3 (p. 69)

Protección de los datos con el cifrado del lado del servidor con claves de cifrado
proporcionadas por el cliente (SSE-C)
El cifrado en el servidor consiste en proteger los datos en reposo. El uso del cifrado en el servidor con
claves de cifrado proporcionadas por el cliente (SSE-C) le permite establecer sus propias claves de cifrado.
Con la clave de cifrado que proporcione como parte de su solicitud, Amazon S3 administra tanto el cifrado,
al escribir en los discos, como el descifrado, al obtener acceso a los objetos. Por tanto, no ha de mantener
ningún código para llevar a cabo el cifrado y el descifrado de los datos. Lo único que debe hacer es
administrar las claves de cifrado que proporcione.

Cuando carga un objeto, Amazon S3 usa la clave de cifrado facilitada para aplicar un cifrado AES-256 a
los datos y elimina la clave de cifrado de la memoria.
Important

Amazon S3 no almacena la clave de cifrado que usted facilite. En su lugar, almacena un valor
HMAC "salted" aleatorio de la clave de cifrado para validar las solicitudes futuras. El valor
HMAC "salted" no se puede usar para derivar el valor de la clave de cifrado ni para descifrar los
contenidos del objeto cifrado. Esto implica que, si pierde la clave de cifrado, habrá perdido el
objeto.
Note

Este cifrado solo cifra datos de objetos, no metadatos de objetos.

Al recuperar un objeto, debe facilitar la misma clave de cifrado como parte de la solicitud. En primer lugar,
Amazon S3 comprueba que la clave de cifrado proporcionada coincida y, a continuación, descifra el objeto
antes de devolverle los datos del mismo.

Las características principales del SSE-C son:

• Debe utilizar HTTPS.


Important

Amazon S3 rechaza cualquier solicitud que se realice por HHTP al usar SSE-C. Por motivos de
seguridad, le recomendamos que tenga en cuenta que cualquier clave que envíe por error por
HTTP podría estar en peligro. Debería descartar esa clave y practicar la rotación apropiada.
• La ETag de la respuesta no es el MD5 de los datos del objeto.
• Debe administrar el mapeo de qué clave de cifrado se utiliza para cifrar cada objeto. Amazon S3 no
almacena claves de cifrado. Usted debe responsabilizarse de realizar un seguimiento de qué clave de
cifrado proporciona para cada objeto.
• Si su bucket tiene activado el control de versiones, cada versión del objeto que cargue con esta
característica tendrá su propia clave de cifrado. Usted debe responsabilizarse de realizar un
seguimiento de qué clave de cifrado se ha utilizado en cada versión del objeto.

Versión de API 2006-03-01


290
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Dado que es usted quien administra las claves de cifrado en el cliente, ha de administrar todas las
garantías adicionales, como la rotación de claves, en el lado del cliente.
Warning

Si pierde la clave de cifrado, todas las solicitudes GET de un objeto sin su clave de cifrado
provoca un error y pierde el objeto.

Uso de SSE-C

Al usar el cifrado en el lado del servidor con claves de servidor facilitadas por el cliente (SSE-C), debe
facilitar la información de la clave de cifrado mediante los siguientes encabezados de solicitud.

Nombre Descripción

x-amz-server-side- Use este encabezado para especificar el algoritmo de cifrado. El valor del
encryption-customer- encabezado ha de ser "AES256".
algorithm

x-amz-server-side- Use este encabezado para facilitar la clave de cifrado de 256 bits con
encryption-customer- codificación base64 para que Amazon S3 pueda usarla para cifrar o
key descifrar los datos.

x-amz-server-side- Use este encabezado para facilitar el resumen MD5 de 128 bits con
encryption-customer- codificación en base64 de la clave de cifrado, según la RFC 1321. Amazon
key-MD5 S3 usa este encabezado para comprobar la integridad del mensaje y
garantizar que la clave de cifrado se haya transmitido sin errores.

Puede usar las bibliotecas de encapsulamiento del AWS SDK para agregar estos encabezados a su
solicitud. Si lo necesita, también puede realizar las llamadas a la API REST de Amazon S3 directamente
en su aplicación.
Note

No es posible utilizar la consola de Amazon S3 para cargar un objeto y solicitar SSE-C. Tampoco
puede usar la consola para actualizar (por ejemplo, cambiar la clase de almacenamiento o
agregar metadatos) un objeto existente almacenado con SSE-C.

Las siguientes API de Amazon S3 admiten estos encabezados.

• Operación GET: cuando recupera datos con la API GET (consulte GET Object), puede especificar los
encabezados de solicitud. No se admiten torrents para objetos cifrados mediante SSE-C.
• Operación HEAD: para recuperar metadatos de objetos con la API HEAD (consulte HEAD Object),
puede especificar estos encabezados de solicitud.
• Operación PUT: cuando carga datos con la API PUT (consulte PUT Object), puede especificar estos
encabezados de solicitud.
• Carga multiparte: al cargar objetos grandes mediante la API de carga multiparte, puede especificar
estos encabezados. Debe especificar estos encabezados en la solicitud inicial (consulte Initiate Multipart
Upload) y en cada solicitud de carga de partes subsiguiente (Upload Part). Para cada solicitud de carga
de parte, la información de cifrado ha de ser la misma que la facilitada en la solicitud inicial de la carga
multiparte.
• Operación POST: cuando utiliza una operación POST para cargar un objeto (consulte POST Object),
en vez de proporcionar los encabezados de solicitud, debe proporcionar la misma información en los
campos del formulario.

Versión de API 2006-03-01


291
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Operación COPY: cuando copia un objeto (consulte PUT Object - Copy), tiene un objeto de origen y uno
de destino. Por consiguiente, ha de tener en cuenta lo que aparece a continuación:
• Si quiere que el objeto objetivo se cifre mediante el cifrado en el servidor con claves administradas por
AWS, debe facilitar el encabezado de solicitud x-amz-server-side-encryption.
• Si quiere que el objeto objetivo se cifre mediante SSE-C, debe facilitar información de cifrado mediante
los tres encabezados descritos en la tabla anterior.
• Si el objeto de origen está cifrado con SSE-C, debe facilitar la información de la clave de cifrado
mediante los siguientes encabezados, de modo que Amazon S3 puede descifrar el objeto para
copiarlo.

Nombre Descripción

x-amz-copy-source Incluya este encabezado para especificar el algoritmo que debe usar
-server-side Amazon S3 para descifrar el objeto de origen. Este valor debe ser
-encryption- AES256.
customer-algorithm

x-amz-copy-source Incluya este encabezado para facilitar la clave de cifrado con


-server-side codificación base64 para que Amazon S3 la utilice para descifrar el
-encryption- objeto de origen. Esta clave de cifrado debe ser la que proporcionó a
customer-key Amazon S3 al crear el objeto de origen. De lo contrario, Amazon S3 no
puede descifrar el objeto.

x-amz-copy- Incluya este encabezado para facilitar el resumen MD5 de 128 bits con
source-server- codificación en base64 de la clave de cifrado, según la RFC 1321.
side-encryption-
customer-key-MD5

URL prefirmada y SSE-C

Puede generar una URL prefirmada, que podrá utilizar para operaciones como la carga de un nuevo objeto
o la recuperación de un objeto existente o metadatos de objetos. Las URL prefirmadas se usan con el
SSE-C de la siguiente forma:

• Al crear una URL prefirmada, debe especificar el algoritmo con x-amz-server-side-encryption-


customer-algorithm en el cálculo de la firma.
• Al usar la URL prefirmada para cargar un objeto nuevo, recuperar un objeto existente o recuperar solo
metadatos de objetos, debe facilitar todos los encabezados de cifrado en su aplicación cliente.
Note

Para objetos no SSE-C, puede generar una URL prefirmada y pegarla directamente en un
navegador, por ejemplo, para acceder a los datos.
No obstante, esto no es así para objetos SSE-C porque además de la URL prefirmada también
tiene que incluir encabezamientos de HTTP específicos de objetos SSE-C Por tanto, puede
usar la URL prefirmada para objetos SSE-C solo mediante programación.

Para obtener más información, consulte los siguientes temas:

• Especificación del cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante AWS SDK for Java (p. 293)
• Especificación del cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante AWS SDK para .NET (p. 297)
• Especificación del cifrado en el servidor con claves de cifrado proporcionadas por el cliente mediante la
API REST (p. 304)

Versión de API 2006-03-01


292
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

Especificación del cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante AWS SDK for Java

En el siguiente ejemplo se muestra cómo solicitar el cifrado del lado del servidor con claves
proporcionadas por el cliente (SSE-C) para objetos. En el ejemplo se realizan las siguientes operaciones.
Cada operación muestra cómo especificar encabezados relacionados con el SSE-C en la solicitud:

• Put object: carga un objeto y solicita el cifrado del lado del servidor mediante una clave de cifrado
proporcionada por un cliente.
• Get object: descargue el objeto que cargó en el paso anterior. En la solicitud, proporciona la misma
información de cifrado que proporcionara en el momento de cargar el objeto. Amazon S3 necesita esta
información para descifrar el objeto para poder devolvérselo.
• Get object metadata: recupera los metadatos del objeto. Proporciona la misma información de cifrado
usada al crear el objeto.
• Copy object: realiza una copia del objeto cargado previamente. Dado que el objeto de origen se
almacena mediante SSE-C, usted debe proporcionar la información de cifrado en su solicitud de copia.
De forma predeterminada, Amazon S3 cifra la copia del objeto solo si lo solicita explícitamente. En este
ejemplo se indica a Amazon S3 que almacene la copia cifrada del objeto con una nueva clave de SSE-C.

Note

Este ejemplo muestra cómo cargar un objeto en una operación única. Cuando utiliza la API de
carga multiparte para cargar objetos grandes, brinda información de cifrado como se muestra
en el siguiente ejemplo. Para ver ejemplos de cargas multiparte que utilizan AWS SDK for Java,
consulte Uso de AWS Java SDK para carga multiparte (API de nivel alto) (p. 193) y Uso de AWS
Java SDK para una carga multiparte (API de bajo nivel) (p. 196).

Para añadir la información de cifrado necesaria, incluya una SSECustomerKey en su solicitud. Para
obtener más información acerca de la clase SSECustomerKey, consulte Uso de SSE-C (p. 291).

Para obtener más información acerca de SSE-C, consulte Protección de los datos con el cifrado del
lado del servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 290). Para obtener
instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de ejemplos de
código Java de Amazon S3 (p. 706).

Example

import com.amazonaws.AmazonServiceException;
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.*;

import javax.crypto.KeyGenerator;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

public class ServerSideEncryptionUsingClientSideEncryptionKey {


private static SSECustomerKey SSE_KEY;
private static AmazonS3 S3_CLIENT;
private static KeyGenerator KEY_GENERATOR;

Versión de API 2006-03-01


293
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

public static void main(String[] args) throws IOException, NoSuchAlgorithmException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Key name ***";
String uploadFileName = "*** File path ***";
String targetKeyName = "*** Target key name ***";

// Create an encryption key.


KEY_GENERATOR = KeyGenerator.getInstance("AES");
KEY_GENERATOR.init(256, new SecureRandom());
SSE_KEY = new SSECustomerKey(KEY_GENERATOR.generateKey());

try {
S3_CLIENT = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Upload an object.
uploadObject(bucketName, keyName, new File(uploadFileName));

// Download the object.


downloadObject(bucketName, keyName);

// Verify that the object is properly encrypted by attempting to retrieve it


// using the encryption key.
retrieveObjectMetadata(bucketName, keyName);

// Copy the object into a new object that also uses SSE-C.
copyObject(bucketName, keyName, targetKeyName);
} 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();
}
}

private static void uploadObject(String bucketName, String keyName, File file) {


PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName,
file).withSSECustomerKey(SSE_KEY);
S3_CLIENT.putObject(putRequest);
System.out.println("Object uploaded");
}

private static void downloadObject(String bucketName, String keyName) throws


IOException {
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName,
keyName).withSSECustomerKey(SSE_KEY);
S3Object object = S3_CLIENT.getObject(getObjectRequest);

System.out.println("Object content: ");


displayTextInputStream(object.getObjectContent());
}

private static void retrieveObjectMetadata(String bucketName, String keyName) {


GetObjectMetadataRequest getMetadataRequest = new
GetObjectMetadataRequest(bucketName, keyName)
.withSSECustomerKey(SSE_KEY);
ObjectMetadata objectMetadata = S3_CLIENT.getObjectMetadata(getMetadataRequest);
System.out.println("Metadata retrieved. Object size: " +
objectMetadata.getContentLength());

Versión de API 2006-03-01


294
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

private static void copyObject(String bucketName, String keyName, String targetKeyName)


throws NoSuchAlgorithmException {
// Create a new encryption key for target so that the target is saved using SSE-C.
SSECustomerKey newSSEKey = new SSECustomerKey(KEY_GENERATOR.generateKey());

CopyObjectRequest copyRequest = new CopyObjectRequest(bucketName, keyName,


bucketName, targetKeyName)
.withSourceSSECustomerKey(SSE_KEY)
.withDestinationSSECustomerKey(newSSEKey);

S3_CLIENT.copyObject(copyRequest);
System.out.println("Object copied");
}

private static void displayTextInputStream(S3ObjectInputStream input) throws


IOException {
// Read one line at a time from the input stream and display each line.
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println();
}
}

Otras operaciones de Amazon S3 con SSE-C mediante AWS SDK for Java

En el ejemplo de la sección anterior se muestra cómo solicitar cifrado en el servidor con claves
proporcionadas por el cliente (SSE-C) en operaciones PUT, GET, Head y Copy. En esta sección se
describen otras API que admiten SSE-C.

Para cargar objetos grandes, puede utilizar la API de carga multiparte (consulte Carga de objetos con la
API de carga multiparte (p. 186)). Puede usar API de nivel alto o de nivel bajo para cargar objetos grandes.
Estas API admiten los encabezados relacionados con el cifrado en la solicitud.

• Cuando utiliza la API TransferManager de alto nivel, usted proporciona los encabezados específicos
del cifrado en la PutObjectRequest (consulte Uso de AWS Java SDK para carga multiparte (API de
nivel alto) (p. 193)).
• Al usar la API de bajo nivel, proporcionará información relacionada con el cifrado en la
InitiateMultipartUploadRequest, seguida por información de cifrado idéntica en cada
UploadPartRequest. No necesita proporcionar encabezados específicos de cifrado en su
CompleteMultipartUploadRequest. Para ver ejemplos, consulte Uso de AWS Java SDK para una
carga multiparte (API de bajo nivel) (p. 196).

En el siguiente ejemplo se usa TransferManager para crear objetos y se muestra cómo facilitar la
información relacionada con SSE-C. En el ejemplo se realiza lo siguiente:

• Crea un objeto mediante el método TransferManager.upload(). En la instancia


PutObjectRequest facilitará la información de la clave de cifrado que hay que solicitar. Amazon S3
cifra el objeto con la clave de cifrado facilitada por el cliente.
• Realiza una copia del objeto llamando al método TransferManager.copy(). El ejemplo indica a
Amazon S3 que cifre la copia del objeto con una nueva SSECustomerKey. Dado que el objeto de origen
está cifrado con SSE-C, la CopyObjectRequest también facilita la clave de cifrado del objeto de
origen, de modo que Amazon S3 puede descifrar el objeto antes de copiarlo.

Versión de API 2006-03-01


295
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

Example

import com.amazonaws.AmazonServiceException;
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.CopyObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.SSECustomerKey;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;

import javax.crypto.KeyGenerator;
import java.io.File;
import java.security.SecureRandom;

public class ServerSideEncryptionCopyObjectUsingHLwithSSEC {

public static void main(String[] args) throws Exception {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String fileToUpload = "*** File path ***";
String keyName = "*** New object key name ***";
String targetKeyName = "*** Key name for object copy ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();

// Create an object from a file.


PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, keyName,
new File(fileToUpload));

// Create an encryption key.


KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(256, new SecureRandom());
SSECustomerKey sseCustomerEncryptionKey = new
SSECustomerKey(keyGenerator.generateKey());

// Upload the object. TransferManager uploads asynchronously, so this call


returns immediately.
putObjectRequest.setSSECustomerKey(sseCustomerEncryptionKey);
Upload upload = tm.upload(putObjectRequest);

// Optionally, wait for the upload to finish before continuing.


upload.waitForCompletion();
System.out.println("Object created.");

// Copy the object and store the copy using SSE-C with a new key.
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucketName,
keyName, bucketName, targetKeyName);
SSECustomerKey sseTargetObjectEncryptionKey = new
SSECustomerKey(keyGenerator.generateKey());
copyObjectRequest.setSourceSSECustomerKey(sseCustomerEncryptionKey);
copyObjectRequest.setDestinationSSECustomerKey(sseTargetObjectEncryptionKey);

Versión de API 2006-03-01


296
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

// Copy the object. TransferManager copies asynchronously, so this call returns


immediately.
Copy copy = tm.copy(copyObjectRequest);

// Optionally, wait for the upload to finish before continuing.


copy.waitForCompletion();
System.out.println("Copy complete.");
} 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();
}
}
}

Especificación del cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante AWS SDK para .NET

En el siguiente ejemplo de código C# se muestra cómo funciona el cifrado del lado del servidor con
claves proporcionadas por el cliente (SSE-C). En el ejemplo se realizan las siguientes operaciones. Cada
operación muestra cómo especificar encabezados relacionados con el SSE-C en la solicitud.

• Put object: carga un objeto y solicita el cifrado del lado del servidor mediante claves de cifrado
proporcionadas por un cliente.
• Get object: descarga el objeto cargado en el paso anterior. La solicitud proporciona la misma información
de cifrado que proporcionara en el momento de cargar el objeto. Amazon S3 necesita esta información
para descifrar el objeto y devolvérselo.
• Get object metadata: proporciona la misma información de cifrado utilizada cuando se creó el objeto para
recuperar los metadatos del objeto.
• Copy object: realiza una copia del objeto cargado. Dado que para almacenar el objeto de origen
se utiliza el SSE-C, la solicitud de copia debe proporcionar la información de cifrado. De forma
predeterminada, Amazon S3 no cifra una copia de un objeto. El código indica a Amazon S3 que cifre el
objeto copiado con el SSE-C proporcionando la información relacionada con el cifrado para el objeto de
destino. También almacena el objeto de destino.

Note

Para ver ejemplos de cómo cargar objetos grandes con la API de carga multiparte, consulte
Utilización de AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 200) y Uso de
AWS SDK para .NET para cargas multiparte (API de bajo nivel) (p. 207).

Para obtener más información acerca de SSE-C, consulte Protección de los datos con el cifrado del
lado del servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 290). Para obtener
información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de ejemplos de
código .NET de Amazon S3 (p. 708).

Example

using Amazon.S3;
using Amazon.S3.Model;
using System;

Versión de API 2006-03-01


297
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class SSEClientEncryptionKeyObjectOperationsTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** key name for new object created ***";
private const string copyTargetKeyName = "*** key name for object copy ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
ObjectOpsUsingClientEncryptionKeyAsync().Wait();
}
private static async Task ObjectOpsUsingClientEncryptionKeyAsync()
{
try
{
// Create an encryption key.
Aes aesEncryption = Aes.Create();
aesEncryption.KeySize = 256;
aesEncryption.GenerateKey();
string base64Key = Convert.ToBase64String(aesEncryption.Key);

// 1. Upload the object.


PutObjectRequest putObjectRequest = await UploadObjectAsync(base64Key);
// 2. Download the object and verify that its contents matches what you
uploaded.
await DownloadObjectAsync(base64Key, putObjectRequest);
// 3. Get object metadata and verify that the object uses AES-256
encryption.
await GetObjectMetadataAsync(base64Key);
// 4. Copy both the source and target objects using server-side encryption
with
// a customer-provided encryption key.
await CopyObjectAsync(aesEncryption, base64Key);
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered ***. 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);
}
}

private static async Task<PutObjectRequest> UploadObjectAsync(string base64Key)


{
PutObjectRequest putObjectRequest = new PutObjectRequest
{
BucketName = bucketName,
Key = keyName,
ContentBody = "sample text",
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};

Versión de API 2006-03-01


298
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

PutObjectResponse putObjectResponse = await


client.PutObjectAsync(putObjectRequest);
return putObjectRequest;
}
private static async Task DownloadObjectAsync(string base64Key, PutObjectRequest
putObjectRequest)
{
GetObjectRequest getObjectRequest = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName,
// Provide encryption information for the object stored in Amazon S3.
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};

using (GetObjectResponse getResponse = await


client.GetObjectAsync(getObjectRequest))
using (StreamReader reader = new StreamReader(getResponse.ResponseStream))
{
string content = reader.ReadToEnd();
if (String.Compare(putObjectRequest.ContentBody, content) == 0)
Console.WriteLine("Object content is same as we uploaded");
else
Console.WriteLine("Error...Object content is not same.");

if (getResponse.ServerSideEncryptionCustomerMethod ==
ServerSideEncryptionCustomerMethod.AES256)
Console.WriteLine("Object encryption method is AES256, same as we
set");
else
Console.WriteLine("Error...Object encryption method is not the same as
AES256 we set");

// Assert.AreEqual(putObjectRequest.ContentBody, content);
// Assert.AreEqual(ServerSideEncryptionCustomerMethod.AES256,
getResponse.ServerSideEncryptionCustomerMethod);
}
}
private static async Task GetObjectMetadataAsync(string base64Key)
{
GetObjectMetadataRequest getObjectMetadataRequest = new
GetObjectMetadataRequest
{
BucketName = bucketName,
Key = keyName,

// The object stored in Amazon S3 is encrypted, so provide the necessary


encryption information.
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};

GetObjectMetadataResponse getObjectMetadataResponse = await


client.GetObjectMetadataAsync(getObjectMetadataRequest);
Console.WriteLine("The object metadata show encryption method used is: {0}",
getObjectMetadataResponse.ServerSideEncryptionCustomerMethod);
// Assert.AreEqual(ServerSideEncryptionCustomerMethod.AES256,
getObjectMetadataResponse.ServerSideEncryptionCustomerMethod);
}
private static async Task CopyObjectAsync(Aes aesEncryption, string base64Key)
{
aesEncryption.GenerateKey();
string copyBase64Key = Convert.ToBase64String(aesEncryption.Key);

Versión de API 2006-03-01


299
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

CopyObjectRequest copyRequest = new CopyObjectRequest


{
SourceBucket = bucketName,
SourceKey = keyName,
DestinationBucket = bucketName,
DestinationKey = copyTargetKeyName,
// Information about the source object's encryption.
CopySourceServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
CopySourceServerSideEncryptionCustomerProvidedKey = base64Key,
// Information about the target object's encryption.
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = copyBase64Key
};
await client.CopyObjectAsync(copyRequest);
}
}
}

Otras operaciones de Amazon S3 y SSE-C

En el ejemplo de la sección anterior se muestra cómo solicitar cifrado del lado del servidor con claves
proporcionadas por el cliente (SSE-C) en operaciones PUT, GET, Head y Copy. En esta sección se
describen otras API de Amazon S3 que admiten SSE-C.

Para cargar objetos grandes, puede utilizar la API de carga multiparte (consulte Carga de objetos con la
API de carga multiparte (p. 186)). AWS SDK para .NET proporciona API de nivel alto o de nivel bajo para
cargar objetos grandes. Estas API admiten los encabezados relacionados con el cifrado en la solicitud.

• Cuando utiliza la API de Transfer-Utility de alto nivel, usted proporciona los encabezados
específicos del cifrado en TransferUtilityUploadRequest como se muestra. Para ver ejemplos de
código, consulte Utilización de AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 200).

TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()


{
FilePath = filePath,
BucketName = existingBucketName,
Key = keyName,
// Provide encryption information.
ServerSideEncryptionCustomerMethod = ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key,
};

• Al usar la API de bajo nivel, proporcionará información relacionada con el cifrado en la solicitud de inicio
de la carga multiparte, seguida por información de cifrado idéntica en las solicitudes de carga de partes
subsiguientes. No necesita proporcionar encabezados específicos de cifrado en su solicitud de carga
multiparte completa. Para ver ejemplos, consulte Uso de AWS SDK para .NET para cargas multiparte
(API de bajo nivel) (p. 207).

A continuación se muestra un ejemplo de carga multiparte de bajo nivel que hace una copia de un objeto
grande existente. En el ejemplo, el objeto que se copiará se guarda en Amazon S3 mediante el SSE-
C y usted también desea usar el SSE-C para guardar el objeto de destino. En el ejemplo usted hace lo
siguiente:
• Inicie una solicitud de carga multiparte proporcionando una clave de cifrado y la información
relacionada.
• Proporcione las claves de cifrado del objeto de origen y de destino, y la información relacionada en
CopyPartRequest.
• Recupere los metadatos del objeto para obtener el tamaño del objeto de origen que se copiará.

Versión de API 2006-03-01


300
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Cargue los objetos en partes de 5 MB.

Example

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class SSECLowLevelMPUcopyObjectTest
{
private const string existingBucketName = "*** bucket name ***";
private const string sourceKeyName = "*** source object key name ***";
private const string targetKeyName = "*** key name for the target object
***";
private const string filePath = @"*** file path ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
CopyObjClientEncryptionKeyAsync().Wait();
}

private static async Task CopyObjClientEncryptionKeyAsync()


{
Aes aesEncryption = Aes.Create();
aesEncryption.KeySize = 256;
aesEncryption.GenerateKey();
string base64Key = Convert.ToBase64String(aesEncryption.Key);

await CreateSampleObjUsingClientEncryptionKeyAsync(base64Key, s3Client);

await CopyObjectAsync(s3Client, base64Key);


}
private static async Task CopyObjectAsync(IAmazonS3 s3Client, string base64Key)
{
List<CopyPartResponse> uploadResponses = new List<CopyPartResponse>();

// 1. Initialize.
InitiateMultipartUploadRequest initiateRequest = new
InitiateMultipartUploadRequest
{
BucketName = existingBucketName,
Key = targetKeyName,
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key,
};

InitiateMultipartUploadResponse initResponse =
await s3Client.InitiateMultipartUploadAsync(initiateRequest);

// 2. Upload Parts.
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
long firstByte = 0;
long lastByte = partSize;

Versión de API 2006-03-01


301
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

try
{
// First find source object size. Because object is stored encrypted with
// customer provided key you need to provide encryption information in
your request.
GetObjectMetadataRequest getObjectMetadataRequest = new
GetObjectMetadataRequest()
{
BucketName = existingBucketName,
Key = sourceKeyName,
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key // " * **source
object encryption key ***"
};

GetObjectMetadataResponse getObjectMetadataResponse = await


s3Client.GetObjectMetadataAsync(getObjectMetadataRequest);

long filePosition = 0;
for (int i = 1; filePosition < getObjectMetadataResponse.ContentLength; i
++)
{
CopyPartRequest copyPartRequest = new CopyPartRequest
{
UploadId = initResponse.UploadId,
// Source.
SourceBucket = existingBucketName,
SourceKey = sourceKeyName,
// Source object is stored using SSE-C. Provide encryption
information.
CopySourceServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
CopySourceServerSideEncryptionCustomerProvidedKey =
base64Key, //"***source object encryption key ***",
FirstByte = firstByte,
// If the last part is smaller then our normal part size then use
the remaining size.
LastByte = lastByte > getObjectMetadataResponse.ContentLength ?
getObjectMetadataResponse.ContentLength - 1 : lastByte,

// Target.
DestinationBucket = existingBucketName,
DestinationKey = targetKeyName,
PartNumber = i,
// Encryption information for the target object.
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};
uploadResponses.Add(await s3Client.CopyPartAsync(copyPartRequest));
filePosition += partSize;
firstByte += partSize;
lastByte += partSize;
}

// Step 3: complete.
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest
{
BucketName = existingBucketName,
Key = targetKeyName,
UploadId = initResponse.UploadId,
};
completeRequest.AddPartETags(uploadResponses);

Versión de API 2006-03-01


302
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

CompleteMultipartUploadResponse completeUploadResponse =
await s3Client.CompleteMultipartUploadAsync(completeRequest);
}
catch (Exception exception)
{
Console.WriteLine("Exception occurred: {0}", exception.Message);
AbortMultipartUploadRequest abortMPURequest = new
AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = targetKeyName,
UploadId = initResponse.UploadId
};
s3Client.AbortMultipartUpload(abortMPURequest);
}
}
private static async Task CreateSampleObjUsingClientEncryptionKeyAsync(string
base64Key, IAmazonS3 s3Client)
{
// List to store upload part responses.
List<UploadPartResponse> uploadResponses = new List<UploadPartResponse>();

// 1. Initialize.
InitiateMultipartUploadRequest initiateRequest = new
InitiateMultipartUploadRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};

InitiateMultipartUploadResponse initResponse =
await s3Client.InitiateMultipartUploadAsync(initiateRequest);

// 2. Upload Parts.
long contentLength = new FileInfo(filePath).Length;
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB

try
{
long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++)
{
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
UploadId = initResponse.UploadId,
PartNumber = i,
PartSize = partSize,
FilePosition = filePosition,
FilePath = filePath,
ServerSideEncryptionCustomerMethod =
ServerSideEncryptionCustomerMethod.AES256,
ServerSideEncryptionCustomerProvidedKey = base64Key
};

// Upload part and add response to our list.


uploadResponses.Add(await s3Client.UploadPartAsync(uploadRequest));

filePosition += partSize;
}

Versión de API 2006-03-01


303
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

// Step 3: complete.
CompleteMultipartUploadRequest completeRequest = new
CompleteMultipartUploadRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
UploadId = initResponse.UploadId,
//PartETags = new List<PartETag>(uploadResponses)

};
completeRequest.AddPartETags(uploadResponses);

CompleteMultipartUploadResponse completeUploadResponse =
await s3Client.CompleteMultipartUploadAsync(completeRequest);

}
catch (Exception exception)
{
Console.WriteLine("Exception occurred: {0}", exception.Message);
AbortMultipartUploadRequest abortMPURequest = new
AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
UploadId = initResponse.UploadId
};
await s3Client.AbortMultipartUploadAsync(abortMPURequest);
}
}
}
}

Especificación del cifrado en el servidor con claves de cifrado proporcionadas por el cliente
mediante la API REST
Las siguientes API REST de Amazon S3 son compatibles con encabezados relacionados con el cifrado
en el lado del servidor con claves de cifrado facilitadas por el cliente. Para obtener más información sobre
estos encabezados, consulte Uso de SSE-C (p. 291).

• GET Object
• HEAD Object
• PUT Object
• PUT Object - Copy
• POST Object
• Initiate Multipart Upload
• Upload Part
• Upload Part - Copy

Protección de datos con el cifrado del lado del cliente


El cifrado del lado del cliente es el acto de cifrar datos antes de enviarlos a Amazon S3. Para habilitar el
cifrado del lado del cliente, dispone de las siguientes opciones:

• Usar una clave maestra almacenada en AWS KMS.


• Usar una clave maestra que tenga almacenada en la aplicación.

Los siguientes SDK de AWS admiten el cifrado del lado del cliente:

Versión de API 2006-03-01


304
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• AWS SDK para .NET


• AWS SDK for Go
• AWS SDK for Java
• AWS SDK para PHP
• AWS SDK parar Ruby
• AWS SDK para C++

Opción 1: Usar una clave maestra almacenada en AWS KMS.


• Al cargar un objeto: con el ID de la clave maestra del cliente (CMK), el cliente primero envía una solicitud
al AWS Key Management Service (AWS KMS) para obtener una clave que pueda usar para cifrar los
datos de los objetos. AWS KMS devuelve dos versiones de una clave de cifrado de datos generada
aleatoriamente:
• Una versión de texto sin formato que el cliente usa para cifrar los datos de los objetos.
• Un blob de cifrado de la misma clave de cifrado de datos que el cliente carga en Amazon S3 como
metadatos de los objetos.
Note

El cliente obtiene una clave de cifrado de datos única para cada objeto que carga.
• Al descargar un objeto: el cliente descarga el objeto cifrado de Amazon S3 junto con la versión de blob
de cifrado de la clave de cifrado de datos almacenada como metadatos de los objetos. El cliente luego
envía el blob de cifrado a AWS KMS para obtener la versión de texto sin formato de la clave, de manera
que pueda descifrar los datos de los objetos.

Para obtener más información acerca de AWS KMS, consulte ¿Qué es AWS Key Management Service?
en la AWS Key Management Service Developer Guide.

Example

En el siguiente ejemplo se carga un objeto en Amazon S3 usando AWS KMS con el AWS SDK for Java.
En el ejemplo se usa una clave maestra del cliente (CMK) administrada por AWS para cifrar los datos del
cliente antes de cargarlos en Amazon S3. Si ya tiene una CMK, puede usarla especificando el valor de la
variable kms_cmk_id en el código de muestra. Si no dispone de una CMK, o bien necesita otra, puede
generar una utilizando la API de Java. En el ejemplo se muestra cómo generar una CMK.

Para obtener más información sobre el material de claves consulte Importación del material de claves en
AWS Key Management Service (AWS KMS). Para obtener instrucciones sobre la creación y comprobación
de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.kms.AWSKMS;
import com.amazonaws.services.kms.AWSKMSClientBuilder;
import com.amazonaws.services.kms.model.CreateKeyResult;
import com.amazonaws.services.s3.AmazonS3Encryption;
import com.amazonaws.services.s3.AmazonS3EncryptionClientBuilder;
import com.amazonaws.services.s3.model.CryptoConfiguration;
import com.amazonaws.services.s3.model.KMSEncryptionMaterialsProvider;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;

Versión de API 2006-03-01


305
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class UploadObjectKMSKey {

public static void main(String[] args) throws IOException {


String bucketName = "*** Bucket name ***";
String keyName = "*** Object key name ***";
Regions clientRegion = Regions.DEFAULT_REGION;
String kms_cmk_id = "*** AWS KMS customer master key ID ***";
int readChunkSize = 4096;

try {
// Optional: If you don't have a KMS key (or need another one),
// create one. This example creates a key with AWS-created
// key material.
AWSKMS kmsClient = AWSKMSClientBuilder.standard()
.withRegion(clientRegion)
.build();
CreateKeyResult keyResult = kmsClient.createKey();
kms_cmk_id = keyResult.getKeyMetadata().getKeyId();

// Create the encryption client.


KMSEncryptionMaterialsProvider materialProvider = new
KMSEncryptionMaterialsProvider(kms_cmk_id);
CryptoConfiguration cryptoConfig = new CryptoConfiguration()
.withAwsKmsRegion(RegionUtils.getRegion(clientRegion.toString()));
AmazonS3Encryption encryptionClient =
AmazonS3EncryptionClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withEncryptionMaterials(materialProvider)
.withCryptoConfiguration(cryptoConfig)
.withRegion(clientRegion).build();

// Upload an object using the encryption client.


String origContent = "S3 Encrypted Object Using KMS-Managed Customer Master
Key.";
int origContentLength = origContent.length();
encryptionClient.putObject(bucketName, keyName, origContent);

// Download the object. The downloaded object is still encrypted.


S3Object downloadedObject = encryptionClient.getObject(bucketName, keyName);
S3ObjectInputStream input = downloadedObject.getObjectContent();

// Decrypt and read the object and close the input stream.
byte[] readBuffer = new byte[readChunkSize];
ByteArrayOutputStream baos = new ByteArrayOutputStream(readChunkSize);
int bytesRead = 0;
int decryptedContentLength = 0;

while ((bytesRead = input.read(readBuffer)) != -1) {


baos.write(readBuffer, 0, bytesRead);
decryptedContentLength += bytesRead;
}
input.close();

// Verify that the original and decrypted contents are the same size.
System.out.println("Original content length: " + origContentLength);
System.out.println("Decrypted content length: " + decryptedContentLength);
} 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.

Versión de API 2006-03-01


306
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

e.printStackTrace();
}
}
}

Opción 2: Usar una clave maestra almacenada en la aplicación.


En esta sección se muestra cómo usar una clave maestra almacenada en la aplicación para el cifrado de
datos del cliente.
Important

Las claves maestras del lado del cliente y los datos no cifrados nunca se envían a AWS. Es
importante que administre las claves de cifrado de forma segura. Si las pierde, no podrá descifrar
los datos.

Así es como funciona:

• Al cargar un objeto: usted proporciona una clave maestra del lado del cliente al cliente de cifrado de
Amazon S3. El cliente usa la clave maestra solo para cifrar la clave de cifrado de datos que genera
aleatoriamente. El proceso ocurre de la siguiente manera:
1. El cliente de cifrado de Amazon S3 genera una clave simétrica de un solo uso (también denominada
clave de cifrado de datos o clave de datos) localmente. Utiliza la clave de datos para cifrar los datos
de un único objeto de Amazon S3. El cliente genera una clave de datos independiente para cada
objeto.
2. El cliente cifra la clave de cifrado de datos con la clave maestra que usted proporciona. El cliente
carga la clave de datos cifrados y su descripción esencial como parte de los metadatos de los objetos.
El cliente usa la descripción esencial para determinar qué clave maestra del lado del cliente usar para
descifrar.
3. El cliente carga los datos cifrados en Amazon S3 y también guarda la clave de datos cifrados como
metadatos de los objetos (x-amz-meta-x-amz-key) en Amazon S3.
• Al descargar un objeto: el cliente primero descarga el objeto cifrado de Amazon S3. Con la descripción
esencial de los metadatos del objeto, el cliente determina qué clave maestra usar para descifrar la clave
de datos. El cliente usa la clave maestra para descifrar la clave de datos y usa la clave de datos para
descifrar el objeto.

La clave maestra del lado del cliente que usted proporciona puede ser una clave simétrica o un par de
claves públicas/privadas. En los ejemplos siguientes se muestra cómo utilizar ambos tipos de claves.

Para obtener más información, consulte Client-Side Data Encryption with the AWS SDK for Java and
Amazon S3 (Cifrado de datos del lado del cliente con el AWS SDK for Java y Amazon S3).
Note

Si obtiene un mensaje de error de cifrado cuando usa la API de cifrado por primera vez,
su versión de JDK puede tener un archivo de política de jurisdicción de Java Cryptography
Extension (JCE, Extensión de criptografía Java) que limite la longitud máxima de la clave para
las transformaciones de cifrado y descifrado a 128 bits. El SDK de AWS requiere una longitud
máxima de clave de 256 bits. Para comprobar la longitud máxima de su clave, use el método
getMaxAllowedKeyLength() de la clase javax.crypto.Cipher. Para eliminar la restricción
de longitud de clave, instale los archivos de políticas de jurisdicción de seguridad ilimitada de la
extensión de criptografía Java (JCE) en la página de descargas de Java SE.

Example

En el siguiente ejemplo se muestra cómo realizar estas tareas:

Versión de API 2006-03-01


307
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• Generar una clave AES de 256 bits.


• Guardar y cargar la clave AES en y desde el sistema de archivos.
• Usar la clave AES para cifrar datos en el lado del cliente antes de enviarlos a Amazon S3.
• Usar la clave AES para descifrar los datos que se reciben desde Amazon S3.
• Comprobar que los datos descifrados sean los datos originales.

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
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.AmazonS3EncryptionClientBuilder;
import com.amazonaws.services.s3.model.*;

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;

public class S3ClientSideEncryptionSymMasterKey {

public static void main(String[] args) throws Exception {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String objectKeyName = "*** Object key name ***";
String masterKeyDir = System.getProperty("java.io.tmpdir");
String masterKeyName = "secret.key";

// Generate a symmetric 256-bit AES key.


KeyGenerator symKeyGenerator = KeyGenerator.getInstance("AES");
symKeyGenerator.init(256);
SecretKey symKey = symKeyGenerator.generateKey();

// To see how it works, save and load the key to and from the file system.
saveSymmetricKey(masterKeyDir, masterKeyName, symKey);
symKey = loadSymmetricAESKey(masterKeyDir, masterKeyName, "AES");

try {
// Create the Amazon S3 encryption client.
EncryptionMaterials encryptionMaterials = new EncryptionMaterials(symKey);
AmazonS3 s3EncryptionClient = AmazonS3EncryptionClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withEncryptionMaterials(new
StaticEncryptionMaterialsProvider(encryptionMaterials))
.withRegion(clientRegion)
.build();

// Upload a new object. The encryption client automatically encrypts it.


byte[] plaintext = "S3 Object Encrypted Using Client-Side Symmetric Master
Key.".getBytes();
s3EncryptionClient.putObject(new PutObjectRequest(bucketName,
objectKeyName,
new ByteArrayInputStream(plaintext),
new ObjectMetadata()));

Versión de API 2006-03-01


308
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

// Download and decrypt the object.


S3Object downloadedObject = s3EncryptionClient.getObject(bucketName,
objectKeyName);
byte[] decrypted =
com.amazonaws.util.IOUtils.toByteArray(downloadedObject.getObjectContent());

// Verify that the data that you downloaded is the same as the original data.
System.out.println("Plaintext: " + new String(plaintext));
System.out.println("Decrypted text: " + new String(decrypted));
} 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();
}
}

private static void saveSymmetricKey(String masterKeyDir, String masterKeyName,


SecretKey secretKey) throws IOException {
X509EncodedKeySpec x509EncodedKeySpec = new
X509EncodedKeySpec(secretKey.getEncoded());
FileOutputStream keyOutputStream = new FileOutputStream(masterKeyDir +
File.separator + masterKeyName);
keyOutputStream.write(x509EncodedKeySpec.getEncoded());
keyOutputStream.close();
}

private static SecretKey loadSymmetricAESKey(String masterKeyDir, String masterKeyName,


String algorithm)
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException,
InvalidKeyException {
// Read the key from the specified file.
File keyFile = new File(masterKeyDir + File.separator + masterKeyName);
FileInputStream keyInputStream = new FileInputStream(keyFile);
byte[] encodedPrivateKey = new byte[(int) keyFile.length()];
keyInputStream.read(encodedPrivateKey);
keyInputStream.close();

// Reconstruct and return the master key.


return new SecretKeySpec(encodedPrivateKey, "AES");
}
}

En el siguiente ejemplo se muestra cómo realizar estas tareas:

• Genere un par de claves RSA de 1024 bits.


• Guardar y cargar las claves RSA en y desde el sistema de archivos.
• Usar las claves RSA para cifrar datos en el lado del cliente antes de enviarlos a Amazon S3.
• Usar las claves RSA para descifrar los datos que se reciben desde Amazon S3.
• Comprobar que los datos descifrados sean los datos originales.

Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;

Versión de API 2006-03-01


309
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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.AmazonS3EncryptionClientBuilder;
import com.amazonaws.services.s3.model.*;
import com.amazonaws.util.IOUtils;

import java.io.*;
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

public class S3ClientSideEncryptionAsymmetricMasterKey {

public static void main(String[] args) throws Exception {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String objectKeyName = "*** Key name ***";
String rsaKeyDir = System.getProperty("java.io.tmpdir");
String publicKeyName = "public.key";
String privateKeyName = "private.key";

// Generate a 1024-bit RSA key pair.


KeyPairGenerator keyGenerator = KeyPairGenerator.getInstance("RSA");
keyGenerator.initialize(1024, new SecureRandom());
KeyPair origKeyPair = keyGenerator.generateKeyPair();

// To see how it works, save and load the key pair to and from the file system.
saveKeyPair(rsaKeyDir, publicKeyName, privateKeyName, origKeyPair);
KeyPair keyPair = loadKeyPair(rsaKeyDir, publicKeyName, privateKeyName, "RSA");

try {
// Create the encryption client.
EncryptionMaterials encryptionMaterials = new EncryptionMaterials(keyPair);
AmazonS3 s3EncryptionClient = AmazonS3EncryptionClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withEncryptionMaterials(new
StaticEncryptionMaterialsProvider(encryptionMaterials))
.withRegion(clientRegion)
.build();

// Create a new object.


byte[] plaintext = "S3 Object Encrypted Using Client-Side Asymmetric Master
Key.".getBytes();
S3Object object = new S3Object();
object.setKey(objectKeyName);
object.setObjectContent(new ByteArrayInputStream(plaintext));
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(plaintext.length);

// Upload the object. The encryption client automatically encrypts it.


PutObjectRequest putRequest = new PutObjectRequest(bucketName,
object.getKey(),
object.getObjectContent(),
metadata);
s3EncryptionClient.putObject(putRequest);

// Download and decrypt the object.


S3Object downloadedObject = s3EncryptionClient.getObject(bucketName,
object.getKey());
byte[] decrypted = IOUtils.toByteArray(downloadedObject.getObjectContent());

// Verify that the data that you downloaded is the same as the original data.
System.out.println("Plaintext: " + new String(plaintext));

Versión de API 2006-03-01


310
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

System.out.println("Decrypted text: " + new String(decrypted));


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

private static void saveKeyPair(String dir,


String publicKeyName,
String privateKeyName,
KeyPair keyPair) throws IOException {
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();

// Write the public key to the specified file.


X509EncodedKeySpec x509EncodedKeySpec = new
X509EncodedKeySpec(publicKey.getEncoded());
FileOutputStream publicKeyOutputStream = new FileOutputStream(dir + File.separator
+ publicKeyName);
publicKeyOutputStream.write(x509EncodedKeySpec.getEncoded());
publicKeyOutputStream.close();

// Write the private key to the specified file.


PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new
PKCS8EncodedKeySpec(privateKey.getEncoded());
FileOutputStream privateKeyOutputStream = new FileOutputStream(dir + File.separator
+ privateKeyName);
privateKeyOutputStream.write(pkcs8EncodedKeySpec.getEncoded());
privateKeyOutputStream.close();
}

private static KeyPair loadKeyPair(String dir,


String publicKeyName,
String privateKeyName,
String algorithm)
throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
// Read the public key from the specified file.
File publicKeyFile = new File(dir + File.separator + publicKeyName);
FileInputStream publicKeyInputStream = new FileInputStream(publicKeyFile);
byte[] encodedPublicKey = new byte[(int) publicKeyFile.length()];
publicKeyInputStream.read(encodedPublicKey);
publicKeyInputStream.close();

// Read the private key from the specified file.


File privateKeyFile = new File(dir + File.separator + privateKeyName);
FileInputStream privateKeyInputStream = new FileInputStream(privateKeyFile);
byte[] encodedPrivateKey = new byte[(int) privateKeyFile.length()];
privateKeyInputStream.read(encodedPrivateKey);
privateKeyInputStream.close();

// Convert the keys into a key pair.


KeyFactory keyFactory = KeyFactory.getInstance(algorithm);
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedPublicKey);
PublicKey publicKey = keyFactory.generatePublic(publicKeySpec);

PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encodedPrivateKey);


PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);

return new KeyPair(publicKey, privateKey);


}
}

Versión de API 2006-03-01


311
Amazon Simple Storage Service Guía del desarrollador
Identity and Access Management

Administración de identidad y acceso en Amazon


S3
De forma predeterminada, todos los recursos de Amazon S3, buckets, objetos y subrecursos relacionados
(por ejemplo, configuración de lifecycle y configuración de website) son privados: solo el propietario
del recurso, una cuenta de AWS que lo haya creado, puede obtener acceso al recurso. El propietario del
recurso puede conceder permisos de acceso opcionalmente a terceros escribiendo una política de acceso.

Amazon S3 ofrece opciones de política de acceso ampliamente categorizadas como políticas basadas en
recursos y políticas de usuario. Las políticas de acceso que adjunte a sus recursos (buckets y objetos) se
denominan políticas basadas en recursos. Por ejemplo, las políticas de bucket y las listas de control de
acceso (ACL) son políticas basadas en recursos. También puede adjuntar políticas de acceso a usuarios
de su cuenta. Estas se denominan políticas de usuario. Puede que quiera usar políticas basadas en
recursos, políticas de usuario o una combinación de ambas para administrar los permisos en sus recursos
de Amazon S3. Los temas de introducción facilitan directrices generales para administrar permisos.

Le aconsejamos que consulte primero los temas sobre control de accesos. Para obtener más información,
consulte Introducción a la administración de permisos de acceso para los recursos de Amazon
S3 (p. 312). A continuación, para obtener más información sobre opciones de política de acceso
específicas, consulte los siguientes temas:

• Uso de políticas de bucket y usuario (p. 353)


• Administración de acceso con ACL (p. 418)
• Uso de Amazon S3 Block Public Access (p. 430)

Introducción a la administración de permisos de


acceso para los recursos de Amazon S3
Temas
• Información general sobre la administración de acceso (p. 313)
• Cómo Amazon S3 autoriza una solicitud (p. 318)
• Directrices de uso de las opciones de política de acceso disponibles (p. 324)
• Tutoriales de ejemplo: Administración de acceso a sus recursos de Amazon S3 (p. 326)

Los temas de esta sección presentan información general sobre la administración de permisos de acceso
a sus recursos de Amazon S3 y facilita directrices sobre cuándo usar cada método de control de acceso.
El tema también presenta guías introductorias de ejemplo. Le aconsejamos que consulte estos temas en
orden.

Varias prácticas recomendadas de seguridad también abarcan el control de acceso, entre ellas se
encuentran:

• Garantizar que los buckets de Amazon S3 no sean accesibles públicamente


• Implementar el acceso a los privilegios mínimos
• Uso de los roles de IAM
• Habilitar la eliminación de MFA (Multi-Factor Authentication)

Versión de API 2006-03-01


312
Amazon Simple Storage Service Guía del desarrollador
Introducción

• Identificar u auditar todos sus buckets de Amazon S3


• Monitorizar Security Advisories de AWS

Información general sobre la administración de acceso


Cuando concede permisos, decide quién debe obtenerlos, para qué recursos de Amazon S3 se obtienen y
qué acciones específicas desea permitir en esos recursos.

Temas
• Recursos de Amazon S3: buckets y objetos (p. 313)
• Propiedad de los buckets y objetos de Amazon S3 (p. 313)
• Operaciones de recursos (p. 315)
• Administración del acceso a recursos (opciones de políticas de acceso) (p. 315)
• ¿Qué método de control de acceso debo usar? (p. 317)
• Más información (p. 318)

Recursos de Amazon S3: buckets y objetos


En Amazon Web Services (AWS), un recurso es una entidad con la que se puede trabajar. En Amazon
S3, los buckets y objetos son los recursos y ambos tienen subrecursos asociados. Por ejemplo, entre los
subrecursos de bucket se encuentran los siguientes:

• lifecycle: almacena información de configuración del ciclo de vida (véase Administración del ciclo de
vida de los objetos (p. 127)).
• website: almacena información de configuración del sitio web, si configura su bucket para el
alojamiento web (véase Alojamiento de un sitio web estático en Amazon S3 (p. 523)).
• versioning: almacena la configuración del control de versiones (véase PUT Bucket versioning).
• policy y acl (lista de control de acceso): almacenan información de permisos de acceso para el
bucket.
• cors (uso compartido de recursos entre orígenes): permite la configuración del bucket para permitir las
solicitudes entre orígenes (véase Cross-Origin Resource Sharing (CORS, Uso compartido de recursos
entre orígenes) (p. 163)).
• logging: le permite solicitar a Amazon S3 que guarde los registros de acceso al bucket.

Entre los subrecursos de objeto se encuentran los siguientes:

• acl: almacena una lista de permisos de acceso en el objeto. En este tema se aborda cómo utilizar
este subrecurso para administrar los permisos de objetos (véase Administración de acceso con
ACL (p. 418)).
• restore: permite temporalmente la restauración de un objeto archivado (véase POST Object restore).
Un objeto en la clase de almacenamiento Glacier es un objeto archivado. Para obtener acceso al objeto,
primero debe iniciar una solicitud de restauración, que restaurará una copia del objeto archivado. En la
solicitud, ha de especificar el número de días durante los que quiera que exista la copia restaurada. Para
obtener más información acerca del archivado de objetos, consulte Administración del ciclo de vida de
los objetos (p. 127).

Propiedad de los buckets y objetos de Amazon S3


Los buckets y los objetos son recursos de Amazon S3. De forma predeterminada, solo el propietario de los
recursos puede obtener acceso a ellos. El propietario del recurso es la cuenta de AWS que crea el recurso.
Por ejemplo:

Versión de API 2006-03-01


313
Amazon Simple Storage Service Guía del desarrollador
Introducción

• La cuenta de AWS que se usa para crear buckets y cargar objetos es el propietario de dichos recursos.

 
• Si carga un objeto utilizando credenciales de usuario o rol de AWS Identity and Access Management
(IAM), la cuenta de AWS a la que pertenece el usuario o el rol es el propietario del objeto.

 
• Un propietario del bucket puede conceder permisos entre cuentas a otra cuenta de AWS (o a usuarios
de otra cuenta) para cargar objetos. En este caso, la cuenta de AWS que carga los objetos es el
propietario de los mismos. El propietario del bucket no tiene permisos sobre los objetos que son
propiedad de otras cuentas, con las siguientes excepciones:
• El propietario del bucket es quien paga las facturas. El propietario del bucket puede denegar el
acceso a cualquier objeto, o eliminar cualquier objeto del bucket, independientemente de quién sea el
propietario.
• El propietario del bucket puede archivar los objetos o restaurar los objetos archivados,
independientemente de quién sea el propietario. El archivado se refiere a la clase de almacenamiento
empleada para almacenar los objetos. Para obtener más información, consulte Administración del ciclo
de vida de los objetos (p. 127).

Autenticación de la titularidad y las solicitudes


Todas las solicitudes a un bucket son autenticadas o no autenticadas. Las solicitudes autenticadas deben
incluir un valor de firma que autentique al remitente de la solicitud, pero no es necesario en el caso de
las solicitudes no autenticadas. Para obtener más información acerca de la autenticación de solicitudes,
consulte Realización de solicitudes (p. 10).

El propietario del bucket puede permitir solicitudes no autenticadas. Por ejemplo, se permiten solicitudes
PUT Object no autenticadas cuando un bucket tiene una política de bucket pública, o cuando una ACL
de bucket concede acceso WRITE o FULL_CONTROL al grupo Todos los usuarios o al usuario anónimo
específicamente. Para obtener más información acerca de las políticas de bucket públicas y las ACL
públicas, consulte Qué significa "pública" (p. 433).

Todas las solicitudes no autenticadas las realiza el usuario anónimo. En las listas de control
de acceso (ACL), este usuario se representa mediante el ID de usuario canónico específico
65a011a29cdf8ec533ec3d1ccaae921c. Si se carga un objeto en un bucket mediante una solicitud no
autenticada, el usuario anónimo es el propietario del objeto. La ACL del objeto predeterminado concede
acceso FULL_CONTROL al usuario anónimo como propietario del objeto. Por lo tanto, Amazon S3 permite
solicitudes no autenticadas para recuperar el objeto o modificar su ACL.

Para impedir que el usuario anónimo modifique objetos, le recomendamos que no implemente políticas
de bucket que permitan escrituras públicas anónimas en su bucket o que utilicen ACL que permitan al
usuario anónimo acceso de escritura a su bucket. Para imponer este comportamiento recomendado, utilice
Amazon S3 Block Public Access.

Para obtener más información acerca del bloqueo del acceso público, consulte Uso de Amazon S3 Block
Public Access (p. 430). Para obtener más información acerca de las ACL, consulte Información general
de las Access Control Lists (ACL, Listas de control de acceso) (p. 419).
Important

AWS recomienda que no use las credenciales del usuario raíz de la cuenta de AWS para
realizar solicitudes autenticadas. En su lugar, cree un usuario de IAM y concédale derechos de
acceso completos. Estos usuarios se denominan usuarios administradores. Puede utilizar las
credenciales del usuario administrador, en lugar de las credenciales de usuario raíz de la cuenta
de AWS, para interactuar con AWS y realizar tareas, tales como crear un bucket, crear usuarios y
concederles permisos. Para obtener más información, consulte Diferencias entre las credenciales
de usuario raíz de una cuenta de AWS y Credenciales de usuario de IAM en la AWS General
Reference y Prácticas recomendadas de IAM en la Guía del usuario de IAM.

Versión de API 2006-03-01


314
Amazon Simple Storage Service Guía del desarrollador
Introducción

Operaciones de recursos
Amazon S3 proporciona un conjunto de operaciones para trabajar con los recursos de Amazon S3. Para
obtener una lista de las operaciones disponibles, visite los temas relativos a operaciones en buckets y
operaciones en objetos en la Amazon Simple Storage Service API Reference.

Administración del acceso a recursos (opciones de políticas de acceso)


La administración de accesos se refiere a la concesión a otros (usuarios y cuentas de AWS) el permiso
para realizar operaciones en los recursos mediante la escritura de una política de acceso. Por ejemplo,
puede conceder un permiso PUT Object a un usuario de una cuenta de AWS de modo que el usuario
pueda cargar objetos en su bucket. Además de conceder permisos a usuarios y cuentas individuales,
puede conceder permisos a cualquiera (denominado también acceso anónimo) o a todos los usuarios
autenticados (usuarios con credenciales de AWS). Por ejemplo, si configura el bucket como sitio web,
puede que quiera hacer que los objetos sean públicos, concediendo el permiso GET Object a cualquiera.

La política de acceso describe quién tiene acceso a qué. Puede asociar una política de acceso con un
recurso (bucket y objeto) o un usuario. Del mismo modo, puede categorizar las políticas de acceso de
Amazon S3 disponibles de las siguientes maneras:

• Políticas basadas en recursos: las políticas de buckets y las listas de control de accesos (ACL) se basan
en recursos porque las adjunta a sus recursos de Amazon S3.

• ACL: cada bucket y cada objeto de – tiene una ACL asociada. Una ACL es una lista de concesiones
en la que se identifica el beneficiario y el permiso concedido. Puede utilizar las ACL para otorgar
permisos de lectura/escritura básicos a otras cuentas de AWS. Las ACL usan un esquema XML
específico a Amazon S3.

A continuación se muestra una ACL de bucket de ejemplo. La concesión en la ACL muestra al


propietario del bucket con permisos de control pleno.

<?xml version="1.0" encoding="UTF-8"?>


<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>*** Owner-Canonical-User-ID ***</ID>
<DisplayName>owner-display-name</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

Versión de API 2006-03-01


315
Amazon Simple Storage Service Guía del desarrollador
Introducción

xsi:type="Canonical User">
<ID>*** Owner-Canonical-User-ID ***</ID>
<DisplayName>display-name</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>

Tanto las ACL de bucket como de objeto usan el mismo esquema XML.
• Política de bucket: para su bucket, puede agregar una política de bucket con la que concederá a otras
cuentas de AWS o usuarios de IAM permisos para el bucket y los objetos que contiene. Los permisos
de objetos solo se aplican a aquellos objetos que cree el propietario del bucket. Las políticas de bucket
complementan y, en muchos casos, sustituyen a las políticas de acceso basadas en ACL.

A continuación se muestra un ejemplo de política de bucket. Debe expresar las políticas de bucket
(y las de usuarios) con un archivo JSON. La política concede permisos de lectura anónimos sobre
todos los objetos de un bucket. La política de bucket tiene una instrucción, que permite la acción
s3:GetObject (permiso de lectura) en objetos que estén en un bucket llamado examplebucket.  Al
especificar el principal con un signo de comodín (*), la política permite el acceso anónimo, aunque
debe utilizarse con cuidado. Por ejemplo, la siguiente política de bucket haría que los objetos fueran
accesibles públicamente:

{
"Version":"2012-10-17",
"Statement": [
{
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}

• Políticas de usuario: puede usar IAM para administrar el acceso a sus recursos de Amazon S3. Puede
crear usuarios de IAM, grupos y roles en su cuenta y adjuntarles políticas de acceso, en las que les
concederá acceso a recursos de AWS, incluido Amazon S3.

Para obtener más información acerca de IAM, consulte la página de detalles del producto AWS Identity
and Access Management (IAM).

A continuación se muestra un ejemplo de una política de usuario. No puede conceder permisos


anónimos en una política de usuario de IAM, ya que la política está asociada a un usuario. La política de

Versión de API 2006-03-01


316
Amazon Simple Storage Service Guía del desarrollador
Introducción

ejemplo permite al usuario asociado y vinculado realizar seis acciones de Amazon S3 diferentes en un
bucket y sobre los objetos que contiene. Puede adjuntar esta política a un usuario, grupo o rol de IAM
específicos.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStatement1",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::examplebucket/*",
"arn:aws:s3:::examplebucket"
]
},
{
"Sid": "ExampleStatement2",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}

Cuando Amazon S3 recibe una solicitud, ha de evaluar todas las políticas de acceso para determinar si ha
de autorizar o denegar la solicitud. Para obtener más información sobre evalúa estas políticas Amazon S3,
consulte Cómo Amazon S3 autoriza una solicitud (p. 318).

¿Qué método de control de acceso debo usar?


Con las opciones disponibles para escribir una política de acceso, se plantean las siguientes preguntas:

• ¿Cuándo debería usar cada uno de los métodos de control de acceso? Por ejemplo, para conceder
permisos para un bucket, ¿debo usar una política de buckets o una ACL de bucket? Soy el propietario
del bucket y de los objetos que contiene. ¿Debo usar una política de acceso basada en recursos o una
política de usuario de IAM? Si uso una política de acceso basada en recursos, ¿debo usar una política
de bucket o una ACL de objeto para administrar los permisos del objeto?
• Soy el propietario de un bucket, pero no de todos los objetos que contiene. ¿Cómo se administran los
permisos de acceso para los objetos que son propiedad de otro?
• Si concedo acceso mediante el uso de una combinación de estas opciones de políticas de acceso,
¿cómo determina Amazon S3 si un usuario tiene permiso para realizar una operación solicitada?

En las siguientes secciones se explican estas alternativas para el control de acceso, cómo Amazon S3
evalúa los mecanismos de control de acceso y cuándo utilizar cada uno de los métodos de control de
acceso. También ofrecen tutoriales de ejemplo.

Cómo Amazon S3 autoriza una solicitud (p. 318)

Directrices de uso de las opciones de política de acceso disponibles (p. 324)

Tutoriales de ejemplo: Administración de acceso a sus recursos de Amazon S3 (p. 326)

Versión de API 2006-03-01


317
Amazon Simple Storage Service Guía del desarrollador
Introducción

Más información
Le recomendamos que consulte primero los temas de introducción en los que se explican las opciones
disponibles para administrar el acceso a sus recursos de Amazon S3. Para obtener más información,
consulte Introducción a la administración de permisos de acceso para los recursos de Amazon
S3 (p. 312). Puede recurrir a los siguientes temas para obtener más información sobre opciones de
política de acceso específicas.

• Uso de políticas de bucket y usuario (p. 353)


• Administración de acceso con ACL (p. 418)

Cómo Amazon S3 autoriza una solicitud


Temas
• Temas relacionados (p. 319)
• Cómo hace Amazon S3 para autorizar una solicitud para una operación de bucket (p. 319)
• Cómo hace Amazon S3 para autorizar una solicitud para una operación de objeto (p. 322)

Cuando Amazon S3 recibe una solicitud, por ejemplo, una operación de bucket o de objeto, primero
verifica que el solicitante tenga los permisos necesarios. Para decidir si autoriza la solicitud o no, Amazon
S3 evalúa todas las políticas de acceso, las políticas de usuario y las políticas de recursos relevantes:
política de bucket, Access Control List (ACL, Lista de control de acceso) de bucket, ACL de objeto. A
continuación se muestran algunas situaciones de ejemplo:

• Si el solicitante es un principal de IAM, Amazon S3 debe determinar si la cuenta principal de AWS a


la que pertenece el principal le concedió al principal el permiso necesario para realizar la operación.
Además, si la solicitud es para una operación de bucket, como una solicitud para mostrar el contenido
del bucket, Amazon S3 debe verificar que el propietario del bucket le haya otorgado permiso al
solicitante para realizar la operación.
Note

Para realizar una operación específica en un recurso, el principal de IAM necesita permiso
tanto de la cuenta principal de AWS a la que pertenece como de la cuenta de AWS a la que
pertenece el recurso.
• Si la solicitud es para una operación en un objeto que no pertenece al propietario del bucket, además
de asegurarse de que el solicitante tenga permisos del propietario del objeto, Amazon S3 también debe
revisar la política de bucket para asegurarse de que el propietario del bucket no haya establecido la
denegación explícita en el objeto.
Note

El propietario del bucket (que paga la factura) puede denegar explícitamente el acceso a los
objetos del bucket independientemente de quién sea el propietario. El propietario del bucket
también puede eliminar cualquier objeto del bucket.

Para determinar si el solicitante tiene permiso para realizar la operación específica, Amazon S3 hace lo
siguiente, por orden, cuando recibe una solicitud:

1. Convierte todas las políticas de acceso relevantes (política de usuario, política de bucket, ACL) en
tiempo de ejecución en un conjunto de políticas para evaluación.
2. Evalúa el conjunto de políticas resultante en los siguiente pasos. En cada paso, Amazon S3 evalúa un
subconjunto de políticas en un contexto específico, en función de la autoridad del contexto.

Versión de API 2006-03-01


318
Amazon Simple Storage Service Guía del desarrollador
Introducción

a. Contexto de usuario: en el contexto de usuario, la cuenta principal a la que pertenece el usuario es la


autoridad del contexto.

Amazon S3 evalúa un subconjunto de políticas perteneciente a la cuenta principal. Este subconjunto


incluye la política de usuario que la cuenta principal asocia al usuario. Si la cuenta principal también
es propietaria del recurso en la solicitud (bucket, objeto), Amazon S3 también evalúa las políticas de
recursos correspondientes (política de bucket, ACL de bucket y ACL de objeto) al mismo tiempo.

El usuario debe tener permiso de la cuenta principal para realizar la operación.

Este paso se aplica solo si la solicitud es realizada por un usuario en una cuenta de AWS. Si la
solicitud se realiza con credenciales raíz de una cuenta de AWS, Amazon S3 omite este paso.
b. Contexto de bucket: en el contexto de bucket, Amazon S3 evalúa las políticas pertenecientes a la
cuenta de AWS que es propietaria del bucket.

Si la solicitud es para una operación de bucket, el solicitante debe tener permiso del propietario del
bucket. Si la solicitud es para un objeto, Amazon S3 evalúa todas las políticas pertenecientes al
propietario del bucket para verificar si el propietario del bucket no denegó explícitamente el acceso al
objeto. Si se estableció una denegación explícita, Amazon S3 no autoriza la solicitud.
c. Contexto de objeto: si la solicitud es para un objeto, Amazon S3 evalúa el subconjunto de políticas
perteneciente al propietario del objeto.

En las siguientes secciones se brindan detalles y ejemplos:

• Cómo hace Amazon S3 para autorizar una solicitud para una operación de bucket (p. 319)
• Cómo hace Amazon S3 para autorizar una solicitud para una operación de objeto (p. 322)

Temas relacionados
Le recomendamos que consulte primero los temas de introducción en los que se explican las opciones
para administrar el acceso a los recursos de Amazon S3. Para obtener más información, consulte
Introducción a la administración de permisos de acceso para los recursos de Amazon S3 (p. 312).
Puede recurrir a los siguientes temas para obtener más información sobre opciones de política de acceso
específicas.

• Uso de políticas de bucket y usuario (p. 353)


• Administración de acceso con ACL (p. 418)

Cómo hace Amazon S3 para autorizar una solicitud para una operación de bucket
Cuando Amazon S3 recibe una solicitud para una operación de bucket, convierte todos los permisos
relevantes, permisos de basados en recursos (política de bucket, lista de control de acceso [ACL] de
bucket) y política de usuario de IAM si la solicitud es de un principal de IAM, en un conjunto de políticas
para evaluar en tiempo de ejecución. Luego, evalúa el conjunto de políticas resultante en una serie de
pasos de acuerdo con un contexto específico: contexto de usuario o contexto de bucket.

1. Contexto de usuario: si el solicitante es un principal de IAM, este debe tener permiso de la cuenta
principal de AWS a la que pertenece. En este paso, Amazon S3 evalúa un subconjunto de políticas
perteneciente a la cuenta principal (también denominada autoridad del contexto). Este subconjunto de
políticas incluye la política de usuario que la cuenta principal asocia al principal. Si la cuenta principal
también es propietaria del recurso en la solicitud (en este caso, el bucket), Amazon S3 también evalúa
las políticas de recursos correspondientes (política de bucket y ACL de bucket) al mismo tiempo.
Siempre que se realiza una solicitud de operación de bucket, los registros de acceso al servidor
registran el ID canónico del solicitante. Para obtener más información, consulte Registro de acceso al
servidor de Amazon S3 (p. 674).

Versión de API 2006-03-01


319
Amazon Simple Storage Service Guía del desarrollador
Introducción

2. Contexto de bucket: el solicitante debe tener permisos del propietario del bucket para realizar una
operación de bucket específica. En este paso, Amazon S3 evalúa un subconjunto de políticas
perteneciente a la cuenta de AWS que es propietaria del bucket.

El propietario del bucket puede conceder permisos mediante una política de bucket o una ACL de
bucket. Tenga en cuenta que, si la cuenta de AWS que es propietaria del bucket también es la cuenta
principal de un principal de IAM, esta puede configurar los permisos del bucket en una política de
usuario.

A continuación se muestra una ilustración gráfica de la evaluación de una operación de bucket basada en
el contexto.

Los siguientes ejemplos ilustran la lógica de evaluación.

Ejemplo 1: Operación de bucket solicitada por el propietario del bucket

En este ejemplo, el propietario del bucket envía una solicitud para una operación de bucket mediante el
uso de credenciales raíz de la cuenta de AWS.

Amazon S3 realiza la evaluación de contexto de la siguiente manera:

1. Dado que la solicitud se realiza con credenciales raíz de una cuenta de AWS, el contexto de usuario no
se evalúa.
2. En el contexto de bucket, Amazon S3 revisa la política de bucket para determinar si el solicitante tiene
permiso para realizar la operación. Amazon S3 autoriza la solicitud.

Ejemplo 2: Operación de bucket solicitada por una cuenta de AWS que no es propietaria del
bucket

En este ejemplo, se realiza una solicitud con credenciales raíz de la cuenta 1111-1111-1111 de AWS para
una operación de bucket perteneciente a la cuenta 2222-2222-2222 de AWS. No hay ningún usuario de
IAM involucrado en esta solicitud.

Versión de API 2006-03-01


320
Amazon Simple Storage Service Guía del desarrollador
Introducción

En este caso, Amazon S3 evalúa el contexto de la siguiente manera:

1. Dado que la solicitud se realiza con credenciales raíz de una cuenta de AWS, el contexto de usuario no
se evalúa.
2. En el contexto de bucket, Amazon S3 examina la política de bucket. Si el propietario del bucket (cuenta
2222-2222-2222 de AWS) no autorizó a la cuenta 1111-1111-1111 de AWS a realizar la operación
solicitada, Amazon S3 deniega la solicitud. De lo contrario, Amazon S3 acepta la solicitud y realiza la
operación.

Ejemplo 3: Operación de bucket solicitada por un principal de IAM cuya cuenta principal de AWS
también es propietaria del bucket

En el ejemplo, la solicitud es enviada por Jill, una usuaria de IAM en la cuenta 1111-1111-1111 de AWS,
que también es propietaria del bucket.

Amazon S3 realiza la siguiente evaluación de contexto:

1. Dado que la solicitud es de un principal de IAM, en el contexto de usuario, Amazon S3 evalúa todas las
políticas que pertenecen a la cuenta principal de AWS para determinar si Jill tiene permiso para realizar
la operación.

En este ejemplo, la cuenta principal 1111-1111-1111 de AWS, a la que pertenece el principal, también
es propietaria del bucket. Como consecuencia, además de la política de usuario, Amazon S3 también
evalúa la política de bucket y la ACL de bucket en el mismo contexto, ya que pertenecen a la misma
cuenta.
2. Dado que Amazon S3 evaluó la política de bucket y la ACL de bucket como parte del contexto de
usuario, no evalúa el contexto de bucket.

Ejemplo 4: Operación de bucket solicitada por un principal de IAM cuya cuenta principal de AWS
no es propietaria del bucket

En este ejemplo, la solicitud es enviada por Jill, una usuaria de IAM cuya cuenta principal de AWS es
1111-1111-1111, pero el bucket es propiedad de otra cuenta de AWS, 2222-2222-2222.

Versión de API 2006-03-01


321
Amazon Simple Storage Service Guía del desarrollador
Introducción

Jill necesitará permisos de la cuenta principal de AWS y el propietario del bucket. Amazon S3 evalúa el
contexto de la siguiente manera:

1. Dado que la solicitud es de un principal de IAM, Amazon S3 evalúa el contexto de usuario mediante la
revisión de las políticas estipuladas por la cuenta para verificar que Jill tenga los permisos necesarios.
Si Jill tiene permiso, Amazon S3 continúa con la evaluación del contexto de bucket; en caso contrario,
deniega la solicitud.
2. En el contexto de bucket, Amazon S3 verifica que el propietario del bucket 2222-2222-2222 le haya
otorgado permiso a Jill (o a su cuenta principal de AWS) para realizar la operación solicitada. Si Jill tiene
ese permiso, Amazon S3 acepta la solicitud y realiza la operación; de lo contrario, Amazon S3 deniega
la solicitud.

Cómo hace Amazon S3 para autorizar una solicitud para una operación de objeto
Cuando Amazon S3 recibe una solicitud para una operación de bucket, convierte todos los permisos
relevantes, permisos de basados en recursos (lista de control de acceso [ACL] de objeto, política de
bucket, ACL de bucket) y las políticas de usuario de IAM, en un conjunto de políticas para evaluar en
tiempo de ejecución. Luego, evalúa el conjunto de políticas resultante en una serie de pasos. En cada
paso, evalúa un subconjunto de políticas en tres contextos específicos: contexto de usuario, contexto de
bucket y contexto de objeto.

1. Contexto de usuario: si el solicitante es un principal de IAM, este debe tener permiso de la cuenta
principal de AWS a la que pertenece. En este paso, Amazon S3 evalúa un subconjunto de políticas
perteneciente a la cuenta principal (también denominada autoridad del contexto). Este subconjunto de
políticas incluye la política de usuario que la cuenta principal asocia al principal. Si la cuenta principal
también es propietaria del recurso en la solicitud (bucket, objeto), Amazon S3 evalúa las políticas de
recursos correspondientes (política de bucket, ACL de bucket y ACL de objeto) al mismo tiempo.
Note

Si la cuenta principal de AWS es propietaria del recurso (bucket u objeto), puede conceder
permisos a nivel de recursos a su principal de IAM mediante la política de usuario o la política
de recursos.
2. Contexto de bucket: en este contexto, Amazon S3 evalúa las políticas pertenecientes a la cuenta de
AWS que es propietaria del bucket.

Si la cuenta de AWS que es propietaria del objeto en la solicitud no es la misma que la propietaria del
bucket, en el contexto de bucket Amazon S3 verifica las políticas si el propietario del bucket denegó
explícitamente el acceso al objeto. Si se estableció una denegación explícita en el objeto, Amazon S3
no autoriza la solicitud.
3. Contexto de objeto: el solicitante debe tener permisos del propietario del objeto para realizar una
operación de objeto específica. En este paso, Amazon S3 evalúa la ACL de objeto.

Versión de API 2006-03-01


322
Amazon Simple Storage Service Guía del desarrollador
Introducción

Note

Si los propietarios del bucket y del objeto son los mismos, el acceso al objeto se puede
conceder en la política de bucket, que se evalúa en el contexto de bucket. Si los propietarios
son diferentes, los propietarios del objeto deben utilizar una ACL de objeto para conceder
permisos. Si la cuenta de AWS que es propietaria del objeto es también la cuenta principal a la
que pertenece el principal de IAM, esta puede configurar los permisos del objeto en una política
de usuario, que se evalúa en el contexto de usuario. Para obtener más información acera del
uso de estas alternativas de políticas de acceso, consulte Directrices de uso de las opciones de
política de acceso disponibles (p. 324).

A continuación se muestra una ilustración de la evaluación de una operación de objeto basada en el


contexto.

Ejemplo 1: Solicitud de operación de objeto

En este ejemplo, Jill, la usuaria de IAM cuya cuenta principal de AWS es 1111-1111-1111, envía una
solicitud de operación de objeto (por ejemplo, Get object) para un objeto que pertenece a la cuenta
3333-3333-3333 de AWS en un bucket que pertenece a la cuenta 2222-2222-2222 de AWS.

Jill necesitará permisos de la cuenta principal de AWS, el propietario del bucket y el propietario del objeto.
Amazon S3 evalúa el contexto de la siguiente manera:

1. Dado que la solicitud es de un principal de IAM, Amazon S3 evalúa el contexto de usuario para verificar
que la cuenta principal 1111-1111-1111 de AWS le haya otorgado a Jill el permiso para realizar la
operación solicitada. Si Jill tiene permiso, Amazon S3 evalúa el contexto de bucket. De lo contrario,
Amazon S3 deniega la solicitud.
2. En el contexto de bucket, el propietario de bucket, la cuenta 2222-2222-2222 de AWS, es la autoridad
del contexto. Amazon S3 evalúa la política de bucket para determinar si el propietario del bucket le
denegó explícitamente el acceso al objeto a Jill.
3. En el contexto de objeto, la autoridad del contexto es la cuenta 3333-3333-3333 de AWS, propietaria del
objeto. Amazon S3 evalúa la ACL de objeto para determinar si Jill tiene permiso para acceder al objeto.
Si lo tiene, Amazon S3 autoriza la solicitud.

Versión de API 2006-03-01


323
Amazon Simple Storage Service Guía del desarrollador
Introducción

Directrices de uso de las opciones de política de acceso


disponibles
Amazon S3 admite políticas basadas en recursos y políticas de usuario para administrar el acceso a
sus recursos de Amazon S3 (consulte Administración del acceso a recursos (opciones de políticas de
acceso) (p. 315)). Las políticas basadas en recursos incluyen políticas de bucket, ACL de buckets y ACL
de objetos. En esta sección se describen escenarios específicos de uso de las políticas de acceso basadas
en recursos para administrar el acceso a los recursos de Amazon S3.

Cuándo usar una política de acceso basada en ACL (ACL de bucket y objeto)
Tanto los buckets como los objetos tienen ACL asociadas que puede utilizar para conceder permisos. En
las siguiente secciones se describen escenarios de uso de ACL de objeto y ACL de bucket.

Cuándo usar una ACL de objeto


Además de las ACL, hay otras formas de que el propietario de un objeto pueda administrar los permisos de
objeto. Por ejemplo:

• Si la cuenta de AWS que es propietaria del objeto también es propietaria del bucket, puede escribir una
política de bucket para administrar los permisos del objeto.
• Si la cuenta de AWS propietaria del objeto quiere conceder permisos a un usuario de su cuenta, puede
emplear una política de usuario.

Por tanto, ¿cuándo se han de usar las ACL de objetos para administrar los permisos de objetos? A
continuación figuran los escenarios en los que puede usar ACL de objetos para administrar permisos de
objetos.

• Una ACL de objeto es la única manera de administrar el acceso a los objetos que no sean propiedad del
propietario del bucket: una cuenta de AWS propietaria del bucket puede conceder a otra cuenta de AWS
permisos para cargar objetos. El propietario del bucket no es propietario de estos objetos. La cuenta de
AWS que creó el objeto debe conceder permisos mediante ACL de objetos.
Note
Un propietario de un bucket no puede conceder permisos para objetos que no son de su
propiedad. Por ejemplo, una política de bucket que concede permisos de objeto solo se aplica
a objetos que sean propiedad del propietario del bucket. Sin embargo, el propietario del bucket,
quien paga las facturas, puede escribir una política de bucket para denegar el acceso a los
objetos del bucket, independientemente de quién sea su propietario. El propietario del bucket
también puede eliminar cualquier objeto del bucket.
• Los permisos varían entre los diferentes objetos y se han de administrar en el nivel de objeto: puede
escribir una única instrucción de política que conceda a una cuenta de AWS permisos de lectura para
millones de objetos con un prefijo de nombre de clave específico. Por ejemplo, conceda permisos de
lectura sobre objetos que comiencen por el prefijo de nombre de clave "logs". Sin embargo, si sus
permisos de acceso varían en función del objeto, conceder permisos a objetos individuales con una
política de bucket podría no resultar práctico. Además, las políticas de bucket tienen un límite de tamaño
de 20 KB.

En este caso, puede que le resulte una alternativa adecuada usar ACL de objetos. Sin embargo, incluso
las ACL de objetos están limitadas a un máximo de 100 concesiones (consulte Información general de
las Access Control Lists (ACL, Listas de control de acceso) (p. 419)).
• Las ACL de objetos solo controlan los permisos en el nivel de objeto: solo hay una única política de
bucket para la totalidad del bucket, pero las ACL de objetos se especifican por objeto.

Una cuenta de AWS que sea propietaria de un bucket puede conceder a otra cuenta de AWS permisos
para administrar las políticas de acceso. Permite a la cuenta determinada cambiar cualquier aspecto

Versión de API 2006-03-01


324
Amazon Simple Storage Service Guía del desarrollador
Introducción

de la política. Para administrar mejor los permisos, podría decidir no conceder un permiso demasiado
amplio y conceder en su lugar solo los permisos READ-ACP y WRITE-ACP sobre un subconjunto
de objetos. Así, se limita la cuenta para administrar permisos solamente sobre objetos específicos
actualizando ACL de objetos individuales.

Cuándo usar una ACL de bucket

El único caso de uso recomendado para las ACL de buckets es conceder permisos de escritura al grupo
Envío de archivos de registro de Amazon S3 para escribir objetos de registro de acceso en su bucket
(consulte Registro de acceso al servidor de Amazon S3 (p. 674)). Si quiere que Amazon S3 envíe
registros de acceso a su bucket, tendrá que conceder permisos de escritura en el bucket al grupo Envío de
archivos de registro. La única manera en la que puede conceder los permisos necesarios al grupo Envío
de archivos de registro es mediante una ACL de bucket, como se demuestra en el siguiente fragmento de
ACL de bucket.

<?xml version="1.0" encoding="UTF-8"?>


<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
...
</Owner>
<AccessControlList>
<Grant>
...
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>WRITE</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>

Cuándo usar una política de bucket


Si una cuenta de AWS propietaria de un objeto quiere conceder permisos a usuarios de su cuenta, puede
emplear una política de bucket o una política de usuario. Sin embargo, en los siguientes escenarios tendrá
que usar una política de bucket.

• Si quiere administrar permisos entre cuentas para todos los permisos de Amazon S3: puede usar ACL
para conceder permisos entre cuentas a otras cuentas, pero las ACL solo admiten un conjunto limitado
de permisos (¿Qué permisos puedo conceder? (p. 421)), y no incluyen todos los permisos de Amazon
S3. Por ejemplo, no puede conceder permisos sobre subrecursos de bucket (consulte Administración de
identidad y acceso en Amazon S3 (p. 312)) con una ACL.

A pesar de que tanto las políticas de bucket como las de usuario admiten la concesión de permisos para
todas las operaciones de Amazon S3 (consulte Especificación de permisos en una política (p. 357)),
las políticas de usuario tienen como objetivo la administración de permisos para usuarios en su cuenta.
Para los permisos entre cuentas para otras cuentas o usuarios de AWS en otra cuenta, debe usar una
política de bucket.

Cuándo usar una política de usuario


En general, puede usar una política de usuario o una política de bucket para administrar permisos. Puede
decidir administrar permisos creando usuarios y administrando sus permisos individualmente adjuntando
políticas a usuarios (o grupos de usuarios), o también podría determinar que las políticas basadas en
recursos, como políticas de bucket, funcionan mejor en su escenario.

Versión de API 2006-03-01


325
Amazon Simple Storage Service Guía del desarrollador
Introducción

Tenga en cuenta que AWS Identity and Access Management (IAM) le permite crear varios usuarios con
su cuenta de AWS y administrar sus permisos con políticas de usuario. Un usuario de IAM debe tener
permisos de la cuenta principal a la que pertenece, y de la cuenta de AWS propietaria del recurso al que
quiere obtener acceso el usuario. Se puede conceder los permisos de las siguientes maneras:

• Permiso de la cuenta principal: la cuenta principal puede conceder permisos a su usuario adjuntando
una política de usuario.
• Permiso del propietario del recurso: el propietario del recurso puede conceder permisos al usuario de
IAM (con una política de bucket) o a la cuenta principal (con una política de bucket, una ACL de bucket o
una ACL de objeto).

Esto se puede comparar a cuando un niño quiere jugar con un juguete que pertenece a otro niño. En
este caso, el niño debe obtener permiso de un padre para jugar con el juguete, y también permiso del
propietario del mismo.

Delegación de permisos
Si una cuenta de AWS es propietaria de un recurso, puede conceder esos permisos a otra cuenta de AWS.
Esa cuenta, a continuación, puede delegar esos permisos, o un subconjunto de ellos, a usuarios de la
cuenta. Esto se conoce como delegación de permisos. Sin embargo, una cuenta que recibe permisos de
otra cuenta no puede delegar permisos entre cuentas a otra cuenta de AWS.

Temas relacionados
Le recomendamos que consulte primero todos los temas de introducción en los que se explican cómo
administrar el acceso a sus recursos de Amazon S3 y las directrices relacionadas. Para obtener más
información, consulte Introducción a la administración de permisos de acceso para los recursos de Amazon
S3 (p. 312). Puede recurrir a los siguientes temas para obtener más información sobre opciones de
política de acceso específicas.

• Uso de políticas de bucket y usuario (p. 353)


• Administración de acceso con ACL (p. 418)

Tutoriales de ejemplo: Administración de acceso a sus recursos


de Amazon S3
Este tema proporciona los siguientes ejemplos de tutorial introductorio para ofrecer acceso a los recursos
de Amazon S3. Estos ejemplos utilizan la Consola de administración de AWS para crear recursos (buckets,
objetos, usuarios) y otorgarles permisos. Luego, los ejemplos le muestran cómo verificar los permisos con
las herramientas de línea de comandos para que no tenga que escribir ningún código. Proporcionamos
comandos a través de la interfaz de línea de comandos (CLI) de AWS y las herramientas de AWS para
Windows PowerShell.

• Ejemplo 1: Propietario del bucket que concede permisos de bucket a sus usuarios (p. 329)

Los usuarios de IAM que crea en su cuenta no tienen permisos de forma predeterminada. En este
ejercicio, usted le otorga a un usuario permiso para realizar operaciones de bucket y objeto.
• Ejemplo 2: Propietario del bucket que concede permisos de bucket entre cuentas (p. 334)

En este ejercicio, el propietario de un bucket, la Cuenta A, concede permisos entre cuentas a otra cuenta
de AWS, la Cuenta B. Luego, la Cuenta B delega esos permisos a los usuarios de su cuenta.
• Administración de permisos de objetos cuando los propietarios del objeto y del bucket no son los mismos

Los escenarios de ejemplo en este caso incluyen a un propietario de bucket que concede permisos de
objetos a otros, pero no todos los objetos en el bucket le pertenecen al propietario del bucket. ¿Qué
permisos necesita el propietario del bucket y cómo puede delegar esos permisos?

Versión de API 2006-03-01


326
Amazon Simple Storage Service Guía del desarrollador
Introducción

La cuenta de AWS que crea un bucket se denomina propietario de bucket. El propietario puede conceder
permisos a otras cuentas de AWS para cargar objetos, y las cuentas de AWS que crean objetos son las
propietarias de estos. El propietario del bucket no tiene permisos sobre aquellos objetos creados por
otras cuentas de AWS. Si el propietario del bucket escribe una política de bucket que concede acceso a
los objetos, la política no se aplica a los objetos que le pertenecen a otras cuentas.

En este caso, el propietario del objeto primero debe otorgar permisos al propietario del bucket con una
Access Control List (ACL, Lista de control de acceso) de objetos. Luego, el propietario del objeto puede
delegar esos permisos de objeto a otros, a usuarios de su propia cuenta o a otra cuenta de AWS, como
se muestra en los siguientes ejemplos.
• Ejemplo 3: Propietario del bucket que le concede a sus usuarios permisos para objetos que no posee
(p. 340)

En este ejercicio, el propietario del bucket primero obtiene permisos del propietario del objeto. Luego,
el propietario del bucket delega esos permisos a usuarios de su propia cuenta.
• Ejemplo 4: Propietarios de buckets que conceden permisos a otras cuentas para objetos que no les
pertenecen (p. 345)

Después de recibir los permisos del propietario del objeto, el propietario del bucket no puede delegar
permisos a otras cuentas de AWS ya que no se admite la delegación entre cuentas (consulte
Delegación de permisos (p. 326)). En lugar de eso, el propietario del bucket puede crear un rol
de IAM con permisos para realizar operaciones específicas (como Get object) y permitir que otra
cuenta de AWS asuma ese rol. Luego, cualquiera que asuma el rol puede acceder a los objetos. En
este ejemplo se muestra cómo el propietario de un bucket utiliza un rol de IAM para habilitar esta
delegación entre cuentas.

Antes de probar los tutoriales de ejemplo


Estos ejemplos utilizan la Consola de administración de AWS para crear recursos y conceder permisos.
Y para probar los permisos, los ejemplos utilizan las herramientas de línea de comando, AWS Command
Line Interface (CLI) y las herramientas de AWS para Windows PowerShell, por lo que no necesita escribir
ningún código. Para probar los permisos deberá configurar una de estas herramientas. Para obtener más
información, consulte Configuración de las herramientas para los tutoriales de ejemplo (p. 327).

Además, cuando se crean recursos, estos ejemplos no utilizan credenciales raíz de una cuenta de AWS.
En lugar de eso, usted crea un usuario administrador en estas cuentas para realizar estas tareas.

Acerca del uso de un usuario administrador para crear recursos y conceder permisos
AWS Identity and Access Management (IAM) recomienda no usar las credenciales raíz de su cuenta
de AWS para realizar solicitudes. En lugar de eso, cree un usuario de IAM, otorgue acceso completo a
ese usuario y luego utilice las credenciales de ese usuario para interactuar con AWS. Este usuario se
denomina usuario administrador. Para obtener más información, vaya a Credenciales de cuenta raíz y
Credenciales de usuario de IAM en la AWS General Reference y Prácticas recomendadas de IAM en la
Guía del usuario de IAM.

Todos los tutoriales de ejemplo en esta sección utilizan las credenciales de usuario administrador. Si no
creó un usuario administrador para su cuenta de AWS, los temas le indican cómo hacerlo.

Tenga en cuenta que para iniciar sesión en la Consola de administración de AWS con las credenciales de
usuario, deberá utilizar el URL de inicio de sesión de usuario de IAM. La consola de IAM proporciona este
URL para su cuenta de AWS. Los temas le muestran cómo obtener el URL.

Configuración de las herramientas para los tutoriales de ejemplo


En los ejemplos introductorios (consulte Tutoriales de ejemplo: Administración de acceso a sus recursos
de Amazon S3 (p. 326)) utilice la Consola de administración de AWS para crear recursos y conceder

Versión de API 2006-03-01


327
Amazon Simple Storage Service Guía del desarrollador
Introducción

permisos. Y para probar los permisos, los ejemplos utilizan las herramientas de línea de comando, AWS
Command Line Interface (CLI) y las herramientas de AWS para Windows PowerShell, por lo que no
necesita escribir ningún código. Para probar los permisos, debe configurar una de estas herramientas.

Para configurar la CLI de AWS

1. Descargue y configure la CLI de AWS. Para obtener instrucciones, consulte los siguientes temas en la
AWS Command Line Interface Guía del usuario.

Configuración inicial de la interfaz de línea de comandos de AWS

Instalación de la interfaz de línea de comandos de AWS

Configuración de la interfaz de línea de comandos de AWS


2. Configure el perfil predeterminado.

Guardará las credenciales de usuario en el archivo de configuración de la CLI de AWS. Cree un perfil
predeterminado en el archivo de configuración con las credenciales de su cuenta de AWS. Consulte
Archivos de configuración y credenciales para obtener instrucciones para buscar y editar su archivo de
configuración de AWS CLI.

[default]
aws_access_key_id = access key ID
aws_secret_access_key = secret access key
region = us-west-2

3. Verifique la configuración introduciendo el siguiente comando en el símbolo del sistema. Ninguno de


estos comandos proporciona las credenciales de forma explícita, por lo que se utilizan las credenciales
del perfil predeterminado.

• Pruebe el comando de ayuda

aws help

• Utilice aws s3 ls para obtener una lista de buckets en su cuenta configurada.

aws s3 ls

A medida que avanza por los tutoriales de ejemplo, creará usuarios y guardará las credenciales de
usuario en los archivos de configuración mediante la creación de perfiles, como se muestra en el siguiente
ejemplo. Tenga en cuenta que estos perfiles tienen nombres (AccountAadmin y AccountBadmin):

[profile AccountAadmin]
aws_access_key_id = User AccountAadmin access key ID
aws_secret_access_key = User AccountAadmin secret access key
region = us-west-2

[profile AccountBadmin]
aws_access_key_id = Account B access key ID
aws_secret_access_key = Account B secret access key
region = us-east-1

Para ejecutar un comando con estas credenciales de usuario, añade el parámetro --profile
especificando el nombre de perfil. El siguiente comando de la CLI de AWS recupera una lista de objetos en
examplebucket y especifica el perfil AccountBadmin.

aws s3 ls s3://examplebucket --profile AccountBadmin

Versión de API 2006-03-01


328
Amazon Simple Storage Service Guía del desarrollador
Introducción

Como alternativa, puede configurar un conjunto de credenciales de usuario como el perfil predeterminado
cambiando la variable de entorno AWS_DEFAULT_PROFILE en el símbolo del sistema. Una vez que hizo
esto, siempre que ejecute los comandos de la CLI de AWS sin el parámetro --profile, la CLI de AWS
utilizará el perfil que configuró en la variable de entorno como el perfil predeterminado.

$ export AWS_DEFAULT_PROFILE=AccountAadmin

Para configurar las herramientas de AWS para Windows PowerShell

1. Descargue y configure las herramientas de AWS para Windows PowerShell. Para obtener
instrucciones, consulte Download and Install the AWS Tools for Windows PowerShell en la Guía del
usuario de Herramientas de AWS para Windows PowerShell.
Note

Para cargar las herramientas de AWS para el módulo Windows PowerShell, debe habilitar
la ejecución del script de PowerShell. Para obtener más información, consulte Enable Script
Execution en la Guía del usuario de Herramientas de AWS para Windows PowerShell.
2. Para estos ejercicios, especificará las credenciales de AWS por sesión con el comando Set-
AWSCredentials. El comando guarda las credenciales en un almacén persistente (parámetro -
StoreAs ).

Set-AWSCredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas string

3. Verifique la configuración.

• Ejecute el Get-Command para recuperar una lista de comandos disponibles que puede utilizar para
las operaciones de Amazon S3.

Get-Command -module awspowershell -noun s3* -StoredCredentials string

• Ejecute el comando Get-S3Object para recuperar una lista de objetos en un bucket.

Get-S3Object -BucketName bucketname -StoredCredentials string

Para ver una lista de los comandos, consulte Amazon Simple Storage Service Cmdlets.

Ahora está listo para probar los ejercicios. Siga los enlaces provistos al principio de la sección.

Ejemplo 1: Propietario del bucket que concede permisos de bucket a sus usuarios
Temas
• Paso 0: Prepárese para el tutorial (p. 330)
• Paso 1: cree recursos (un bucket y un usuario de IAM) en la Cuenta A y concédales
permisos (p. 331)
• Paso 2: prueba de permisos (p. 333)

En este ejercicio, una cuenta de AWS es la propietaria de un bucket, y tiene a un usuario de IAM en
la cuenta. De forma predeterminada, el usuario no tiene permisos. La cuenta principal debe conceder
permisos al usuario para realizar cualquier tarea. Tanto la cuenta del propietario del bucket como la cuenta
principal, a la que pertenece el usuario, son la misma. Por tanto, la cuenta de AWS puede usar una política
de bucket, una política de usuario o ambas para conceder a su usuario permisos sobre el bucket. Puede
conceder algunos permisos mediante una política de bucket y otros permisos mediante una política de
usuario.

Versión de API 2006-03-01


329
Amazon Simple Storage Service Guía del desarrollador
Introducción

En los siguientes pasos se resume el tutorial:

1. El administrador de la cuenta crea una política de bucket en la que se concede un conjunto de permisos
al usuario.
2. El administrador de la cuenta adjunta una política de usuario al usuario, en la que se conceden permisos
adicionales.
3. A continuación, el usuario prueba los permisos concedidos tanto mediante la política de bucket como
mediante la política de usuario.

Para este ejemplo, necesitará una cuenta de AWS. En lugar de usar las credenciales raíces de la cuenta,
creará un usuario administrador (consulte Acerca del uso de un usuario administrador para crear recursos
y conceder permisos (p. 327)). Nos referimos a la cuenta de AWS y al usuario administrador de la
siguiente manera:

ID de cuenta Cuenta denominada Usuario administrador en la


cuenta

1111-1111-1111 Cuenta A AccountAadmin

Todas las tareas de creación de usuarios y concesión de permisos se realizan en la Consola de


administración de AWS. Para verificar los permisos, el tutorial utiliza las herramientas de línea de
comandos, la interfaz de línea de comandos (CLI) y las herramientas de AWS para Windows PowerShell,
por lo que no necesita escribir ningún código.

Paso 0: Prepárese para el tutorial

1. Asegúrese de que tiene una cuenta de AWS que cuente con un usuario con privilegios de
administrador.

a. Si lo necesita, inscríbase para obtener una cuenta. Nos referiremos a esta cuenta como Cuenta A.

i. Vaya a https://aws.amazon.com/s3 y haga clic en Sign Up (Inscribirse).


ii. Siga las instrucciones en pantalla.

Cuando su cuenta esté activada y lista para usar, AWS se lo notificará por email.
b. En la Cuenta A, cree un usuario administrador AccountAadmin. Con las credenciales de la Cuenta
A, inicie sesión en la consola de IAM y realice los siguientes pasos:

Versión de API 2006-03-01


330
Amazon Simple Storage Service Guía del desarrollador
Introducción

i. Cree al usuario AccountAadmin y anote las credenciales de seguridad del mismo.

Para obtener instrucciones, consulte Creación de un usuario IAM en su cuenta de AWS en


Guía del usuario de IAM.
ii. Conceda privilegios de administrador a AccountAadmin adjuntando una política de usuario
que le conceda acceso total.

Para obtener instrucciones, consulte Uso de las políticas en Guía del usuario de IAM.
iii. Anote la URL de inicio de sesión de usuario de IAM para AccountAadmin. Tendrá que usar
esta URL al iniciar sesión en la Consola de administración de AWS. Para obtener más
información sobre dónde encontrarla, consulte Cómo inician sesión los usuarios en la cuenta
en Guía del usuario de IAM. Anote la URL de cada una de las cuentas.
2. Configure la interfaz de línea de comandos (CLI) de AWS o las herramientas de AWS para Windows
PowerShell. Asegúrese de guardar las credenciales del usuario administrador de la siguiente manera:

• Si usa la CLI de AWS, cree un perfil, AccountAadmin, en el archivo de configuración.


• Si usa las herramientas de AWS para Windows PowerShell, asegúrese de almacenar las
credenciales para la sesión como AccountAadmin.

Para obtener instrucciones, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).

Paso 1: cree recursos (un bucket y un usuario de IAM) en la Cuenta A y concédales permisos

Con las credenciales del usuario AccountAadmin en la Cuenta A y la URL especial de inicio de sesión del
usuario de IAM, inicie sesión en la Consola de administración de AWS y realice los siguientes pasos:

1. Cree recursos (un bucket y un usuario de IAM)

a. En la consola de Amazon S3, cree un bucket. Anote la región de AWS en la que lo haya creado.
Para ver instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service
b. En la consola de IAM, haga lo siguiente:

i. Cree un usuario, Dave.

Para obtener instrucciones, consulte Creación de usuarios de IAM (Consola de


administración de AWS) en la Guía del usuario de IAM.
ii. Anote las credenciales del usuario Dave.
iii. Anote el nombre de recurso de Amazon (ARN) para el usuario Dave. En la consola de IAM;
seleccione el usuario, y en la pestaña Summary (Resumen) podrá ver el ARN del usuario.
2. Concesión de permisos.

Dado que la cuenta propietaria del bucket y la cuenta principal a la que pertenece el usuario coinciden,
la cuenta de AWS puede conceder al usuario permisos con una política de bucket, una política de
usuario o ambas. En este ejemplo, usará ambas. Si el objeto también es propiedad de la misma
cuenta, el propietario del bucket puede conceder permisos de objeto en la política del bucket (o una
política de IAM).

a. En la consola de Amazon S3, adjunte la siguiente política de bucket a examplebucket.

La política tiene dos instrucciones:

• En la primera instrucción se conceden a Dave los permisos de operación en el bucket


s3:GetBucketLocation y s3:ListBucket.

Versión de API 2006-03-01


331
Amazon Simple Storage Service Guía del desarrollador
Introducción

• En la segunda instrucción se concede el permiso s3:GetObject. Dado que la Cuenta A


también es propietaria del objeto, el administrador de la cuenta puede conceder el permiso
s3:GetObject.

En la instrucción Principal, el ARN del usuario es lo que identifica a Dave. Para obtener más
información sobre los elementos de las políticas, consulte Información general del lenguaje de la
política de acceso (p. 354).

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket"
]
},
{
"Sid": "statement2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
}
]
}

b. Cree una política en línea para el usuario Dave utilizando la siguiente política. La política concede
a Dave el permiso s3:PutObject. Tendrá que actualizar la política proporcionando el nombre
del bucket.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PermissionForObjectOperations",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
}
]
}

Versión de API 2006-03-01


332
Amazon Simple Storage Service Guía del desarrollador
Introducción

Para obtener instrucciones, consulte Uso de políticas insertadas en la Guía del usuario de IAM.
Tenga en cuenta que tendrá que iniciar sesión en la consola con las credenciales de la Cuenta A.

Paso 2: prueba de permisos

Compruebe que los permisos funcionan con las credenciales de Dave. Puede utilizar uno de los dos
procedimientos siguientes.

Comprobación con la CLI de AWS

1. Actualice el archivo de configuración de la CLI de AWS añadiendo el siguiente perfil


UserDaveAccountA. Para obtener más información, consulte Configuración de las herramientas para
los tutoriales de ejemplo (p. 327).

[profile UserDaveAccountA]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1

2. Compruebe que Dave pueda realizar las operaciones según los permisos concedidos en la política de
usuario. Cargue un objeto de muestra con el siguiente comando de la CLI de AWS: put-object.

El parámetro --body en el comando identifica el archivo de origen para cargar. Por ejemplo,
si el archivo está en el directorio raíz del disco C: en un equipo Windows, debe especificar c:
\HappyFace.jpg. El parámetro --key brinda el nombre de clave para el objeto.

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body HappyFace.jpg --


profile UserDaveAccountA

Ejecute el siguiente comando de la CLI de AWS para obtener el objeto.

aws s3api get-object --bucket examplebucket --key HappyFace.jpg OutputFile.jpg --


profile UserDaveAccountA

Comprobación con las herramientas de AWS para Windows PowerShell

1. Guarde las credenciales de Dave como AccountADave. A continuación, use estas credenciales para
someter a un objeto a las operaciones PUT y GET.

set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas


AccountADave

2. Cargue un objeto de muestra con el comando de las herramientas de AWS para Windows PowerShell
Write-S3Object con las credenciales almacenadas de Dave.

Write-S3Object -bucketname examplebucket -key HappyFace.jpg -file HappyFace.jpg -


StoredCredentials AccountADave

Descargue el objeto que cargó en el paso anterior.

Read-S3Object -bucketname examplebucket -key HappyFace.jpg -file Output.jpg -


StoredCredentials AccountADave

Versión de API 2006-03-01


333
Amazon Simple Storage Service Guía del desarrollador
Introducción

Ejemplo 2: Propietario del bucket que concede permisos de bucket entre cuentas
Temas
• Paso 0: Prepárese para el tutorial (p. 335)
• Paso 1: Realice las tareas de la cuenta A (p. 336)
• Paso 2: Realice las tareas de la cuenta B (p. 337)
• Paso 3: Crédito adicional: Pruebe la denegación explícita (p. 338)
• Paso 4: Eliminación (p. 339)

Una cuenta de AWS, por ejemplo, la cuenta A, puede concederle a otra cuenta de AWS, la cuenta B,
permiso para acceder a sus recursos como buckets y objetos. La cuenta B puede delegar estos permisos a
los usuarios en su cuenta. En este escenario de ejemplo, un propietario de bucket concede permiso entre
cuentas a otra cuenta para realizar operaciones de bucket específicas.
Note

La cuenta A también puede usar una política de bucket para conceder permisos directamente
a un usuario de la cuanta B. Pero aún así, el usuario necesitará permiso de la cuenta principal,
la cuenta B, a la que pertenece el usuario, incluso aunque la cuenta B no tenga permisos de la
cuenta A. El usuario podrá acceder al recurso siempre y cuando tenga permiso del propietario del
recurso y la cuenta principal.

El siguiente es un resumen de los pasos del tutorial:

1. El usuario administrador de la cuenta A adjunta una política de bucket que concede permisos entre
cuentas a la cuenta B para realizar operaciones de bucket específicas.

Tenga en cuenta que el usuario administrador en la cuenta B heredará automáticamente los permisos.
2. El usuario administrador de la cuenta B le adjunta la política de usuario al usuario que delega los
permisos que recibió de la cuenta A.
3. El usuario de la cuenta B luego accede a un objeto en el bucket que pertenece a la cuenta A para
verificar los permisos.

Para este ejemplo, necesita dos cuentas. En la siguiente tabla se muestra cómo nos referimos a estas
cuentas y a sus usuarios administradores. De acuerdo con las directrices de IAM (consulte Acerca del
uso de un usuario administrador para crear recursos y conceder permisos (p. 327)), no utilizamos las
credenciales raíz de la cuenta en este tutorial. En lugar de eso, usted crea un usuario administrador en
cada cuenta y utiliza esas credenciales para crear recursos y conceder permisos.

ID de la cuenta de AWS Cuenta denominada Usuario administrador en la


cuenta

1111-1111-1111 Cuenta A AccountAadmin

Versión de API 2006-03-01


334
Amazon Simple Storage Service Guía del desarrollador
Introducción

ID de la cuenta de AWS Cuenta denominada Usuario administrador en la


cuenta

2222-2222-2222 Cuenta B AccountBadmin

Todas las tareas de creación de usuarios y concesión de permisos se realizan en la Consola de


administración de AWS. Para verificar los permisos, el tutorial utiliza las herramientas de línea de
comandos, la interfaz de línea de comandos (CLI, command line interface) y las herramientas de AWS
para Windows PowerShell, por lo que no necesita escribir ningún código.

Paso 0: Prepárese para el tutorial

1. Asegúrese de tener dos cuentas de AWS y que cada cuenta tenga un usuario administrador, como se
muestra en la tabla de la sección anterior.

a. Inscríbase en una cuenta de AWS, si es necesario.

i. Vaya a https://aws.amazon.com/s3/ y haga clic en Create an AWS Account (Crear una cuenta
de AWS).
ii. Siga las instrucciones en pantalla.

Cuando su cuenta esté activada y lista para usar, AWS se lo notificará por email.
b. Con las credenciales de la cuenta A, inicie sesión en la consola de IAM para crear el usuario
administrador:

i. Cree el usuario AccountAadmin y anote las credenciales de seguridad. Para obtener


instrucciones, consulte Creación de un usuario IAM en su cuenta de AWS en Guía del
usuario de IAM.
ii. Conceda privilegios de administrador a AccountAadmin adjuntando una política de usuario
que le conceda acceso total. Para obtener instrucciones, consulte Uso de las políticas en
Guía del usuario de IAM.
c. Mientras se encuentra en la consola de IAM, anote la IAM User Sign-In URL (URL de inicio de
sesión de usuario de IAM) en el Dashboard (Panel). Todos los usuarios de la cuenta deben utilizar
este URL para iniciar sesión en la Consola de administración de AWS.

Para obtener más información, consulte Cómo inician sesión los usuarios en la cuenta en la Guía
del usuario de IAM.
d. Repita el paso anterior con las credenciales de la cuenta B y cree el usuario administrador
AccountBadmin.
2. Configure la interfaz de línea de comandos (CLI) de AWS o las herramientas de AWS para Windows
PowerShell. Asegúrese de guardar las credenciales del usuario administrador de la siguiente manera:

• Si está usando la CLI de AWS, cree dos perfiles, AccountAadmin y AccountBadmin, en el archivo de
configuración.
• Si usa las herramientas de AWS para Windows PowerShell, asegúrese de almacenar las
credenciales para la sesión como AccountAadmin y AccountBadmin.

Para obtener instrucciones, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).
3. Guarde las credenciales de usuario administrador, también denominadas perfiles. Puede utilizar
el nombre de perfil en lugar de especificar las credenciales para cada comando que escribe.
Para obtener más información, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).

Versión de API 2006-03-01


335
Amazon Simple Storage Service Guía del desarrollador
Introducción

a. Añada perfiles en el archivo de credenciales de la CLI de AWS para cada uno de los usuarios
administradores en las dos cuentas.

[AccountAadmin]
aws_access_key_id = access-key-ID
aws_secret_access_key = secret-access-key
region = us-east-1

[AccountBadmin]
aws_access_key_id = access-key-ID
aws_secret_access_key = secret-access-key
region = us-east-1

b. Si utiliza las herramientas de AWS para Windows PowerShell

set-awscredentials –AccessKey AcctA-access-key-ID –SecretKey AcctA-secret-access-


key –storeas AccountAadmin
set-awscredentials –AccessKey AcctB-access-key-ID –SecretKey AcctB-secret-access-
key –storeas AccountBadmin

Paso 1: Realice las tareas de la cuenta A

Paso 1.1: Inicie sesión en la consola de administración de AWS

Con el URL de inicio de sesión de usuario de IAM para la cuenta A, primero inicie sesión en la Consola
de administración de AWS como usuario AccountAadmin. Este usuario creará un bucket y le asociará una
política.

Paso 1.2: Cree un bucket

1. En la consola de Amazon S3, cree un bucket. En este ejercicio se asume que el bucket se crea en la
región EE. UU. Este (Norte de Virginia) y se llama examplebucket.

Para ver instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service
2. Cargue un objeto de ejemplo en el bucket.

Para obtener instrucciones, consulte Añadir un objeto a un bucket en la Guía de introducción a


Amazon Simple Storage Service.

Paso 1.3: Adjunte una política de bucket para conceder permisos entre cuentas a la cuenta B

La política de bucket le concede los permisos de s3:GetBucketLocation y s3:ListBucket a


la cuenta B. Se asume que usted aún sigue registrado en la consola con las credenciales de usuario
AccountAadmin.

1. Adjunte la siguiente política de bucket a examplebucket. La política le concede a la cuenta B


permiso para las acciones s3:GetBucketLocation y s3:ListBucket.

Para obtener instrucciones, consulte ¿Cómo agrego una política de bucket en S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",

Versión de API 2006-03-01


336
Amazon Simple Storage Service Guía del desarrollador
Introducción

"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket"
]
}
]
}

2. Asegúrese de que la cuenta B (y por lo tanto el usuario administrador) pueda realizar las operaciones.

• Mediante la CLI de AWS

aws s3 ls s3://examplebucket --profile AccountBadmin


aws s3api get-bucket-location --bucket examplebucket --profile AccountBadmin

• Mediante las herramientas de AWS para Windows PowerShell

get-s3object -BucketName example2bucket -StoredCredentials AccountBadmin


get-s3bucketlocation -BucketName example2bucket -StoredCredentials AccountBadmin

Paso 2: Realice las tareas de la cuenta B


Ahora, el administrador de la cuenta B crea un usuario, Dave, y delega los permisos que recibió de la
cuenta A.

Paso 2.1: Inicie sesión en la consola de administración de AWS


Con el URL de inicio de sesión de usuario de IAM para la cuenta B, primero inicie sesión en la Consola de
administración de AWS con el usuario AccountBadmin.

Paso 2.2: Cree al usuario Dave en la cuenta B


En la consola de IAM, cree un usuario, Dave.

Para obtener instrucciones, consulte Creación de usuarios de IAM (Consola de administración de AWS) en
la Guía del usuario de IAM.

Paso 2.3: Delegue permisos al usuario Dave


Cree una política en línea para el usuario Dave utilizando la siguiente política. Tendrá que proporcionar el
nombre del bucket para actualizar la política.

Se asume que usted está registrado en la consola con las credenciales de usuario AccountBadmin.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [

Versión de API 2006-03-01


337
Amazon Simple Storage Service Guía del desarrollador
Introducción

"arn:aws:s3:::examplebucket"
]
}
]
}

Para obtener instrucciones, consulte Uso de políticas insertadas en la Guía del usuario de IAM.

Paso 2.4: Pruebe los permisos


Ahora, Dave en la cuenta B puede indicar los contenidos de examplebucket que pertenece a la cuenta
A. Puede usar cualquiera de los siguientes procedimientos para verificar los permisos.

Comprobación con la CLI de AWS

1. Añada el perfil UserDave al archivo de configuración de la CLI de AWS. Para obtener más información
acerca del archivo de configuración, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).

[profile UserDave]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1

2. En el símbolo del sistema, escriba el siguiente comando de la CLI de AWS para asegurarse de que
Dave ahora puede obtener una lista de objetos de examplebucket que pertenece a la cuenta A.
Tenga en cuenta que el comando especifica el perfil UserDave.

aws s3 ls s3://examplebucket --profile UserDave

Dave no tiene ningún otro permiso. Por lo tanto, si intenta otra operación, como el siguiente comando
para obtener la ubicación del bucket, Amazon S3 deniega el permiso.

aws s3api get-bucket-location --bucket examplebucket --profile UserDave

Pruebe utilizar las herramientas de AWS para Windows PowerShell

1. Guarde las credenciales de Dave como AccountBDave.

set-awscredentials -AccessKey AccessKeyID -SecretKey SecretAccessKey -storeas


AccountBDave

2. Pruebe el comando List Bucket.

get-s3object -BucketName example2bucket -StoredCredentials AccountBDave

Dave no tiene ningún otro permiso. Por lo tanto, si intenta otra operación, como el siguiente comando
para obtener la ubicación del bucket, Amazon S3 deniega el permiso.

get-s3bucketlocation -BucketName example2bucket -StoredCredentials AccountBDave

Paso 3: Crédito adicional: Pruebe la denegación explícita


Puede obtener permisos a través de una Access Control List (ACL, Lista de control de acceso), una política
de bucket y una política de usuario. Pero si se establece una denegación explícita a través de una política

Versión de API 2006-03-01


338
Amazon Simple Storage Service Guía del desarrollador
Introducción

de bucket o una política de usuario, la denegación explícita tiene preferencia sobre cualquier otro permiso.
Para las pruebas, actualice la política de bucket y niegue explícitamente los permisos de s3:ListBucket
a la cuenta B. La política también concede permiso de s3:ListBucket, pero la denegación explícita
prevalece, y la cuenta B o los usuarios de la cuenta B no podrán mostrar los objetos en examplebucket.

1. Con las credenciales de usuario AccountAadmin en la cuenta A, reemplace la política de bucket por lo
siguiente.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket"
]
},
{
"Sid": "Deny permission",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket"
]
}
]
}

2. Ahora, si intenta obtener una lista de bucket con las credenciales de AccountBadmin, se le denegará el
acceso.
• Mediante la CLI de AWS:

aws s3 ls s3://examplebucket --profile AccountBadmin

• Uso de las herramientas de AWS para Windows PowerShell:

get-s3object -BucketName example2bucket -StoredCredentials AccountBDave

Paso 4: Eliminación

1. Después de que haya terminado de probar, puede realizar lo siguiente para limpiar.

• Inicie sesión en la Consola de administración de AWS (Consola de administración de AWS) con


las credenciales de la cuenta A y haga lo siguiente:

• En la consola de Amazon S3, elimine la política de bucket asociada a examplebucket. En


Properties (Propiedades) del bucket, elimine la política en la sección Permissions (Permisos).
Versión de API 2006-03-01
339
Amazon Simple Storage Service Guía del desarrollador
Introducción

• Si se creó el bucket para este ejercicio, en la consola de Amazon S3, elimine los objetos y
luego elimine el bucket.
• En la consola de IAM, elimine el usuario AccountAadmin.
2. Inicie sesión en la Consola de administración de AWS (Consola de administración de AWS) con las
credenciales de la cuenta B. En la consola de IAM, elimine el usuario AccountBadmin.

Ejemplo 3: Propietario del bucket que le concede a sus usuarios permisos para
objetos que no posee
Temas
• Paso 0: Prepárese para el tutorial (p. 341)
• Paso 1: Realice las tareas de la cuenta A (p. 342)
• Paso 2: Realice las tareas de la cuenta B (p. 343)
• Paso 3: Pruebe los permisos (p. 344)
• Paso 4: Eliminación (p. 344)

El escenario para este ejemplo es que el propietario de un bucket desea conceder permiso para acceder
a objetos, pero no todos los objetos del bucket pertenecen al propietario del bucket. ¿Cómo puede el
propietario de un bucket conceder permiso para objetos que no posee? Para este ejemplo, el propietario
del bucket intenta conceder permiso a usuarios en su propia cuenta.

El propietario de un bucket puede habilitar otras cuentas de AWS para cargar objetos. Estos objetos
pertenecen a las cuentas donde se crearon. El propietario del bucket no posee objetos que no fueron
creados por el propietario del bucket. Por lo tanto, para que el propietario del bucket brinde acceso a estos
objetos, el propietario del objeto primero debe conceder permiso al propietario del bucket mediante una
lista de control de acceso (ACL, access control list) de objetos. Para obtener más información, consulte
Propiedad de los buckets y objetos de Amazon S3 (p. 313).

En este ejemplo, el propietario del bucket delega permiso a usuarios en su propia cuenta. El siguiente es
un resumen de los pasos del tutorial:

1. El usuario administrador de la cuenta A adjunta una política de bucket con dos instrucciones.
• Conceda permiso entre cuentas a la cuenta B para cargar objetos.
• Permita que un usuario en su propia cuenta pueda acceder a los objetos en el bucket.

Versión de API 2006-03-01


340
Amazon Simple Storage Service Guía del desarrollador
Introducción

2. El usuario administrador de la cuenta B carga objetos al bucket que pertenece a la cuenta A.


3. El administrador de la cuenta B actualiza la ACL de objetos y le concede al propietario del bucket
permiso de control total sobre el objeto.
4. El usuario de la cuenta A lo verifica al acceder a los objetos en el bucket, independientemente de quién
es el propietario.

Para este ejemplo, necesita dos cuentas. La siguiente tabla muestra cómo denominamos a estas cuentas
y a los usuarios administradores en estas cuentas. De acuerdo con las directrices de IAM (consulte Acerca
del uso de un usuario administrador para crear recursos y conceder permisos (p. 327)), no utilizamos
las credenciales raíz de la cuenta en este tutorial. En lugar de eso, usted crea un usuario administrador en
cada cuenta y utiliza esas credenciales para crear recursos y conceder permisos.

ID de la cuenta de AWS Cuenta denominada Usuario administrador en la


cuenta

1111-1111-1111 Cuenta A AccountAadmin

2222-2222-2222 Cuenta B AccountBadmin

Todas las tareas de creación de usuarios y concesión de permisos se realizan en la Consola de


administración de AWS. Para verificar los permisos, el tutorial utiliza las herramientas de línea de
comandos, la interfaz de línea de comandos (CLI, command line interface) y las herramientas de AWS
para Windows PowerShell, por lo que no necesita escribir ningún código.

Paso 0: Prepárese para el tutorial

1. Asegúrese de tener dos cuentas de AWS y que cada cuenta tenga un usuario administrador, como se
muestra en la tabla en la sección anterior.

a. Inscríbase en una cuenta de AWS, si es necesario.

i. Vaya a https://aws.amazon.com/s3/ y haga clic en Create an AWS Account (Crear una cuenta
de AWS).
ii. Siga las instrucciones en pantalla. Cuando su cuenta esté activada y lista para usar, AWS se
lo notificará por email.
b. Con las credenciales de la cuenta A, inicie sesión en la consola de IAM y haga lo siguiente para
crear un usuario administrador:

• Cree el usuario AccountAadmin y anote las credenciales de seguridad. Para obtener más
información acerca de cómo añadir usuarios, consulte Creación de un usuario de IAM en su
cuenta de AWS en la Guía del usuario de IAM.
• Conceda privilegios de administrador a AccountAadmin adjuntando una política de usuario que
le conceda acceso total. Para obtener instrucciones, consulte Uso de las políticas en Guía del
usuario de IAM.
• En Dashboard (Panel) de la consola de IAM, anote la IAM User Sign-In URL (URL de inicio
de sesión de usuario de IAM). Los usuarios de esta cuenta deben usar este URL para iniciar
sesión en la Consola de administración de AWS. Para obtener más información, consulte Cómo
inician sesión los usuarios en la cuenta en la Guía del usuario de IAM.
c. Repita el paso anterior con las credenciales de la cuenta B y cree el usuario administrador
AccountBadmin.
2. Configure la interfaz de línea de comandos (CLI) de AWS o las herramientas de AWS para Windows
PowerShell. Asegúrese de guardar las credenciales del usuario administrador de la siguiente manera:

Versión de API 2006-03-01


341
Amazon Simple Storage Service Guía del desarrollador
Introducción

• Si está usando la CLI de AWS, cree dos perfiles, AccountAadmin y AccountBadmin, en el archivo de
configuración.
• Si usa las herramientas de AWS para Windows PowerShell, asegúrese de almacenar las
credenciales para la sesión como AccountAadmin y AccountBadmin.

Para obtener instrucciones, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).

Paso 1: Realice las tareas de la cuenta A

Paso 1.1: Inicie sesión en la consola de administración de AWS

Con el URL de inicio de sesión de usuario de IAM para la cuenta A, primero inicie sesión en la Consola
de administración de AWS como usuario AccountAadmin. Este usuario creará un bucket y le asociará una
política.

Paso 1.2: Cree un bucket, un usuario y añada una política de bucket para conceder permisos de
usuario

1. En la consola de Amazon S3, cree un bucket. Este ejercicio asume que el bucket se crea en la región
del Este de EE. UU. (Virginia del Norte) y el nombre es examplebucket.

Para ver instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service
2. En la consola de IAM, cree un usuario, Dave.

Para obtener instrucciones, consulte Creación de usuarios de IAM (Consola de administración de


AWS) en la Guía del usuario de IAM.
3. Anote las credenciales de Dave.
4. En la consola de Amazon S3, asocie la siguiente política de bucket al bucket de examplebucket.
Para obtener instrucciones, consulte ¿Cómo agrego una política de bucket en S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service. Siga los pasos para añadir una política de
bucket. Para obtener información acerca de cómo buscar los ID de cuenta, consulte Buscar su ID de
cuenta de AWS.

La política le concede a la cuenta B permisos para s3:PutObject y s3:ListBucket. La política


también le concede al usuario Dave el permiso para s3:GetObject.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:root"
},
"Action": [
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
"arn:aws:s3:::examplebucket"
]
},
{

Versión de API 2006-03-01


342
Amazon Simple Storage Service Guía del desarrollador
Introducción

"Sid": "Statement3",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
}
]
}

Paso 2: Realice las tareas de la cuenta B

Ahora que la cuenta B tiene permisos para realizar operaciones en el bucket de la cuenta A, el
administrador de la cuenta B hará lo siguiente:

• Cargar un objeto en el bucket de la cuenta A.


• Añadir un permiso en la ACL de objetos para concederle el control total al propietario del bucket de la
cuenta A.

Mediante la CLI de AWS

1. Use el comando put-object de la CLI de AWS para cargar un objeto. El parámetro --body en el
comando identifica el archivo de origen para cargar. Por ejemplo, si el archivo está en la unidad C: de
un equipo con Windows, usted debe especificar c:\HappyFace.jpg. El parámetro --key brinda el
nombre de clave para el objeto.

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body HappyFace.jpg --


profile AccountBadmin

2. Añada un permiso a la ACL de objetos para concederle al propietario del bucket el control total del
objeto. Para obtener información acerca de cómo encontrar un ID de usuario canónico, consulte
Buscar el ID de usuario canónico de su cuenta.

aws s3api put-object-acl --bucket examplebucket --key HappyFace.jpg --grant-full-


control id="AccountA-CanonicalUserID" --profile AccountBadmin

Mediante las herramientas de AWS para Windows PowerShell

1. Use el comando Write-S3Object de las herramientas de AWS para Windows PowerShell para
cargar un objeto.

Write-S3Object -BucketName examplebucket -key HappyFace.jpg -file HappyFace.jpg -


StoredCredentials AccountBadmin

2. Añada un permiso a la ACL de objetos para concederle al propietario del bucket el control total del
objeto.

Set-S3ACL -BucketName examplebucket -Key HappyFace.jpg -CannedACLName "bucket-owner-


full-control" -StoredCreden

Versión de API 2006-03-01


343
Amazon Simple Storage Service Guía del desarrollador
Introducción

Paso 3: Pruebe los permisos

Ahora verifique que el usuario Dave en la cuenta A pueda acceder al objeto que pertenece a la cuenta B.

Mediante la CLI de AWS

1. Añada las credenciales del usuario Dave al archivo de configuración de la CLI de AWS y cree un
nuevo perfil, UserDaveAccountA. Para obtener más información, consulte Configuración de las
herramientas para los tutoriales de ejemplo (p. 327).

[profile UserDaveAccountA]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1

2. Ejecute el comando get-object de la CLI de AWS para descargar HappyFace.jpg y guárdelo


localmente. Para proporcionar las credenciales del usuario Dave, debe añadir el parámetro --
profile.

aws s3api get-object --bucket examplebucket --key HappyFace.jpg Outputfile.jpg --


profile UserDaveAccountA

Mediante las herramientas de AWS para Windows PowerShell

1. Guarde las credenciales del usuario Dave de AWS, como UserDaveAccountA, en un almacenamiento
persistente.

Set-AWSCredentials -AccessKey UserDave-AccessKey -SecretKey UserDave-SecretAccessKey -


storeas UserDaveAccountA

2. Ejecute el comando Read-S3Object para descargar el objeto HappyFace.jpg y guárdelo


localmente. Para proporcionar las credenciales del usuario Dave, debe añadir el parámetro -
StoredCredentials.

Read-S3Object -BucketName examplebucket -Key HappyFace.jpg -file HappyFace.jpg -


StoredCredentials UserDaveAccountA

Paso 4: Eliminación

1. Después de que haya terminado de probar, puede realizar lo siguiente para limpiar.

• Inicie sesión en la Consola de administración de AWS (Consola de administración de AWS) con


las credenciales de la cuenta A y haga lo siguiente:

• En la consola de Amazon S3, elimine la política de bucket asociada a examplebucket. En


Properties (Propiedades) del bucket, elimine la política en la sección Permissions (Permisos).
• Si se creó el bucket para este ejercicio, en la consola de Amazon S3, elimine los objetos y
luego elimine el bucket.
• En la consola de IAM, elimine el usuario AccountAadmin.
2. Inicie sesión en la Consola de administración de AWS (Consola de administración de AWS) con las
credenciales de la cuenta B. En la consola de IAM, elimine el usuario AccountBadmin.

Versión de API 2006-03-01


344
Amazon Simple Storage Service Guía del desarrollador
Introducción

Ejemplo 4: Propietarios de buckets que conceden permisos a otras cuentas para


objetos que no les pertenecen
Temas
• Introducción: Permisos a otras cuentas y uso de funciones de IAM (p. 345)
• Paso 0: Prepárese para el tutorial (p. 347)
• Paso 1: Realice las tareas de la cuenta A (p. 348)
• Paso 2: Realice las tareas de la cuenta B (p. 350)
• Paso 3: Realice las tareas de la cuenta C (p. 351)
• Paso 4: Eliminación (p. 353)
• Recursos relacionados (p. 353)

En este ejemplo de caso, usted posee un bucket y ha habilitado a otras cuentas de AWS para cargar
objetos. Es decir, el bucket puede tener objetos que pertenecen otras cuentas de AWS.

Suponga que como propietario del bucket debe conceder permiso entre cuentas para ciertos objetos,
independientemente de quién sea el propietario, a un usuario en otra cuenta. Por ejemplo, ese usuario
podría ser una aplicación de facturación que necesita obtener acceso a los metadatos de los objetos. Hay
dos cuestiones clave:

• El propietario del bucket no tiene permisos sobre aquellos objetos creados por otras cuentas de AWS.
Por lo tanto, para que el propietario del bucket conceda permisos para aquellos objetos que no le
pertenecen, el propietario del objeto, la cuenta de AWS que creó los objetos, primero debe concederle
permiso al propietario del bucket. Luego, el propietario del bucket puede delegar esos permisos.
• La cuenta del propietario del bucket puede delegar permisos a usuarios en su propia cuenta (consulte
Ejemplo 3: Propietario del bucket que le concede a sus usuarios permisos para objetos que no posee
(p. 340)), pero no puede delegar permisos a otras cuentas de AWS, ya que no se admite la delegación
entre cuentas.

En este caso, el propietario del bucket puede crear un rol de AWS Identity and Access Management (IAM)
con permiso para obtener acceso a los objetos y conceder otro permiso de la cuenta de AWS para asumir
la función de manera temporal, con el cual se podría obtener acceso a los objetos en el bucket.

Introducción: Permisos a otras cuentas y uso de funciones de IAM


Las funciones de IAM hacen posible diferentes situaciones en las que se delega acceso a los recursos y
el acceso a otras cuentas es una de las situaciones clave. En este ejemplo, el propietario del bucket, la
cuenta A, usa un rol de IAM para delegar acceso temporal a los objetos entre cuentas a usuarios en otro
rol de AWS, la cuenta C. Cada rol de IAM que se crea trae asociadas dos políticas:

• Una política de confianza que identifica a otra cuenta de AWS para que pueda asumir la función.
• Una política de acceso que define qué permisos, por ejemplo, s3:GetObject, se conceden cuando
alguien asume el rol. Para ver una lista de permisos que puede especificar en una política, consulte
Especificación de permisos en una política (p. 357).

La cuenta de AWS que se identifica en la política de confianza luego concede a su usuario permiso para
asumir la función. El usuario puede luego realizar lo siguiente para obtener acceso a los objetos:

• Asumir la función y, como respuesta, obtener las credenciales de seguridad temporales


• Con las credenciales de seguridad temporales, obtener acceso a los objetos en el bucket

Para obtener más información acerca de los roles de IAM, consulte Roles de IAM en la Guía del usuario de
IAM.

Versión de API 2006-03-01


345
Amazon Simple Storage Service Guía del desarrollador
Introducción

El siguiente es un resumen de los pasos del tutorial:

1. El usuario administrador de la cuenta A asocia una política de bucket por la cual concede un permiso
condicional a la cuenta B para cargar objetos.
2. El administrador de la cuenta A crea un rol de IAM, con la cual establece una relación de confianza
con la cuenta C, de manera que los usuarios de esa cuenta puedan obtener acceso a la cuenta A. La
política de acceso asociada con la función limita lo que el usuario de la cuenta C puede hacer cuando el
usuario obtiene acceso a la cuenta A.
3. El administrador de la cuenta B carga un objeto al bucket que pertenece a la cuenta A y concede un
permiso de control absoluto al propietario del bucket.
4. El administrador de la cuenta C crea un usuario y asocia una política de usuario que le permite al
usuario asumir la función.
5. El usuario de la cuenta C primero asume la función, la cual le devuelve al usuario credenciales de
seguridad temporales. Con esas credenciales temporales, el usuario obtiene acceso a los objetos en el
bucket.

Para este ejemplo, se necesitan tres cuentas. La siguiente tabla muestra cómo denominamos a estas
cuentas y a los usuarios administradores en estas cuentas. De acuerdo con las directrices de IAM
(consulte Acerca del uso de un usuario administrador para crear recursos y conceder permisos (p. 327)),
no utilizamos las credenciales raíz de la cuenta en este tutorial. En cambio, usted crea un usuario
administrador en cada cuenta y usa esas credenciales para crear recursos y conceder permisos.

ID de la cuenta de AWS Cuenta denominada Usuario administrador en la


cuenta

1111-1111-1111 Cuenta A AccountAadmin

2222-2222-2222 Cuenta B AccountBadmin

3333-3333-3333 Cuenta C AccountCadmin

Versión de API 2006-03-01


346
Amazon Simple Storage Service Guía del desarrollador
Introducción

Paso 0: Prepárese para el tutorial


Note

Se recomienda abrir el editor de textos y tomar notas a medida que se explican los pasos.
Específicamente, necesitará ID de cuentas, ID de usuarios canónicos, URL de inicio de sesión
de usuarios de IAM para cada cuenta a fin de conectarse a la consola y Amazon Resource Name
(ARN, Nombres de recursos de Amazon) para los usuarios de IAM y funciones.

1. Asegúrese de tener tres cuentas de AWS y de que cada cuenta tenga un usuario administrador, como
se muestra en la tabla de la sección anterior.

a. Inscríbase en cuentas de AWS, según sea necesario. Denominamos estas cuentas cuenta A,
cuenta B y cuenta C.

i. Vaya a https://aws.amazon.com/s3/ y haga clic en Create an AWS Account (Crear una cuenta
de AWS).
ii. Siga las instrucciones en pantalla.

Cuando su cuenta esté activada y lista para usar, AWS se lo notificará por email.
b. Con las credenciales de la cuenta A, inicie sesión en la consola de IAM y haga lo siguiente para
crear un usuario administrador:

• Cree el usuario AccountAadmin y anote las credenciales de seguridad. Para obtener más
información acerca de cómo añadir usuarios, consulte Creación de un usuario de IAM en su
cuenta de AWS en la Guía del usuario de IAM.
• Conceda privilegios de administrador a AccountAadmin adjuntando una política de usuario que
le conceda acceso total. Para obtener instrucciones, consulte Uso de las políticas en Guía del
usuario de IAM.
• En Dashboard (Panel) de la consola de IAM, anote la IAM User Sign-In URL (URL de inicio
de sesión de usuario de IAM). Los usuarios de esta cuenta deben usar este URL para iniciar
sesión en la Consola de administración de AWS. Para obtener más información, diríjase a
Cómo inician sesión los usuarios en la cuenta en la Guía del usuario de IAM.
c. Repita el paso anterior para crear usuarios administradores de la cuenta B y de la cuenta C.
2. Para la cuenta C, anote el ID de usuario canónico.

Cuando crea un rol de IAM en la cuenta A, la política de confianza le concede a la cuenta C el permiso
para asumir la función mediante la especificación del ID de la cuenta. Puede buscar la información de
la cuenta de la siguiente manera:

a. Utilice el ID o el alias de la cuenta de AWS, el nombre de usuario de IAM y la contraseña para


iniciar sesión en la consola de Amazon S3.
b. Elija el nombre de un bucket de Amazon S3 para ver los detalles de dicho bucket.
c. Elija la pestaña Permissions (Permisos) y, a continuación, elija Access Control List (Lista de
control de acceso).
d. En la sección Access for your AWS account (Acceso para su cuenta de ), en
la columna Account (Cuenta), hay un identificador largo, como por ejemplo,
c1daexampleaaf850ea79cf0430f33d72579fd1611c97f7ded193374c0b163b6. Este es el
ID de usuario canónico.
3. Cuando cree una política de bucket, necesitará la siguiente información. Anote estos valores:

• El ID de usuario canónico de la cuenta A cuando el administrador de la cuenta A concede el permiso


condicional para cargar objetos al administrador de la cuenta B, la condición especifica el ID de
usuario canónico del usuario de la cuenta A que debe obtener control absoluto de los objetos.

Versión de API 2006-03-01


347
Amazon Simple Storage Service Guía del desarrollador
Introducción

Note

El ID de usuario canónico es un concepto exclusivo de Amazon S3. Es la versión ofuscada


de 64 caracteres del ID de la cuenta.
• El ARN del usuario para el administrador de la cuenta B: puede encontrar el ARN del usuario en la
consola de IAM. Deberá seleccionar el usuario y buscar el ARN del usuario en la pestaña Summary
(Resumen).

En la política de bucket, se concede permiso al usuario AccountBadmin para cargar objetos y se usa
el ARN para especificar el usuario. El siguiente es un ejemplo de valor de ARN:

arn:aws:iam::AccountB-ID:user/AccountBadmin

4. Configure la Interfaz de línea de comandos (CLI) de AWS o las herramientas de AWS para Windows
PowerShell. Asegúrese de guardar las credenciales del usuario administrador de la siguiente manera:

• Si usa la CLI de AWS, cree los perfiles AccountAadmin y AccountBadmin en el archivo de


configuración.
• Si usa las herramientas de AWS para Windows PowerShell, asegúrese de almacenar las
credenciales para la sesión como AccountAadmin y AccountBadmin.

Para obtener instrucciones, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).

Paso 1: Realice las tareas de la cuenta A

En este ejemplo, la cuenta A es la propietaria del bucket. El usuario AccountAadmin de la cuenta A creará
un bucket, asociará una política de bucket para conceder al administrador de la cuenta B el permiso para
cargar objetos y creará un rol de IAM para conceder a la cuenta C el permiso para asumir la función, de
manera que pueda obtener acceso a los objetos en el bucket.

Paso 1.1: Inicie sesión en la consola de administración de AWS

Con el URL de inicio de sesión de usuario de IAM para la cuenta A, primero inicie sesión en la Consola de
administración de AWS como el usuario AccountAadmin. Este usuario creará un bucket y le asociará una
política.

Paso 1.2: Cree un bucket y asocie una política de bucket

En la consola de Amazon S3, haga lo siguiente:

1. Cree un bucket. Para este ejercicio, se supone que el nombre del bucket es examplebucket.

Para ver instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service
2. Asocie la siguiente política de bucket para conceder un permiso condicional al administrador de la
cuenta B para cargar objetos.

Debe actualizar la política proporcionando sus propios valores para examplebucket, AccountB-ID
y CanonicalUserId-of-AWSaccountA-BucketOwner.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "111",

Versión de API 2006-03-01


348
Amazon Simple Storage Service Guía del desarrollador
Introducción

"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*"
},
{
"Sid": "112",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-grant-full-control": "id=CanonicalUserId-of-AWSaccountA-
BucketOwner"
}
}
}
]
}

Paso 1.3: Cree un rol de IAM para permitirle a la cuenta C el acceso entre cuentas a la cuenta A

En la consola de IAM, cree un rol de IAM (“examplerole”) para conceder el permiso a la cuenta C para
asumir la función. Asegúrese de seguir registrado como administrador de la cuenta A, ya que la función se
debe crear en la cuenta A.

1. Antes de crear el rol, prepare la política administrada que define los permisos que requiere el rol. Más
tarde, en otro paso, la asociará al rol.

a. En el panel de navegación de la izquierda, haga clic en Policies (Políticas) y, luego, haga clic en
Create Policy (Crear política).
b. Junto a Create Your Own Policy, haga clic en Select.
c. Escriba access-accountA-bucket en el campo Policy Name.
d. Copie la siguiente política de acceso y péguela en el campo Policy Document. La política de
acceso le concede a la función el permiso de s3:GetObject, de manera que cuando el usuario
de la cuenta C asuma la función, solo pueda realizar la operación s3:GetObject.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}

e. Haga clic en Create Policy.

La nueva política aparece en la lista de políticas administradas.


2. En el panel de navegación de la izquierda, haga clic en Roles y, luego, haga clic en Create New Role
(Crear nuevo rol).

Versión de API 2006-03-01


349
Amazon Simple Storage Service Guía del desarrollador
Introducción

3. En Select Role Type (Seleccionar tipo de rol), seleccione Role for Cross-Account Access (Rol para el
acceso entre cuentas) y, luego, haga clic en el botón Select (Seleccionar) al lado de Provide access
between AWS accounts you own (Proporcionar acceso entre cuentas de AWS de su propiedad).
4. Escriba el ID de la cuenta C.

Para este tutorial, no es obligatorio que los usuarios tengan la Multi-Factor Authentication (MFA) para
asumir la función, por lo que deje esa opción desmarcada.
5. Haga clic en Next Step (Siguiente paso) para establecer los permisos que se asociarán con el rol.
6. Seleccione la casilla al lado de la política access-accountA-bucket que creó y, luego, haga clic en
Next Step (Siguiente paso).

Aparece la página Review para que confirme las configuraciones de la función antes de crearla.
Un elemento muy importante para tener en cuenta en esta página es el enlace que puede enviar a
los usuarios que necesitan usar esta función. Los usuarios que hacen clic en el enlace se dirigen
directamente a la página Switch Role con los campos Account ID y Role Name ya completados.
También puede ver este enlace después en la página Role Summary para conocer las funciones con
permisos entre cuentas.
7. Escriba examplerole para el nombre del rol y, luego, haga clic en Next Step (Siguiente paso).
8. Después de revisar el rol, haga clic en Create Role (Crear rol).

La función examplerole se muestra en la lista de funciones.


9. Haga clic en el nombre de la función examplerole.
10. Seleccione la pestaña Trust Relationships.
11. Haga clic en Show policy document y verifique que la política de confianza que se muestra sea la
misma que la siguiente política.

La siguiente política de confianza establece una relación de confianza con la cuenta C mediante la
concesión del permiso para realizar la acción sts:AssumeRole. Para obtener más información,
consulte AssumeRole en la AWS Security Token Service API Reference.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountC-ID:root"
},
"Action": "sts:AssumeRole"
}
]
}

12. Anote el nombre de recurso de Amazon (ARN) de la función examplerole que creó.

Más adelante en los pasos siguientes, se asocia una política de usuario para permitirle a un usuario de
IAM que asuma esta función y la función se identifica con el valor de ARN.

Paso 2: Realice las tareas de la cuenta B

El ejemplo de bucket examplebucket que pertenece a la cuenta A necesita objetos que pertenezcan a otras
cuentas. En este paso, el administrador de la cuenta B carga un objeto con las herramientas de línea de
comandos.

• Con el comando put-object de la CLI de AWS, cargue un objeto al bucket examplebucket.


Versión de API 2006-03-01
350
Amazon Simple Storage Service Guía del desarrollador
Introducción

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body HappyFace.jpg --


grant-full-control id="canonicalUserId-ofTheBucketOwner" --profile AccountBadmin

Tenga en cuenta lo siguiente:

• El parámetro --Profile especifica el perfil AccountBadmin, por lo que el objeto pertenece a la


cuenta B.
• El parámetro grant-full-control le concede al propietario del bucket permiso de control
absoluto sobre el objeto según lo requiere la política de bucket.
• El parámetro --body identifica el archivo de origen para cargar. Por ejemplo, si el archivo está en la
unidad C: de un equipo con Windows, se especifica c:\HappyFace.jpg.

Paso 3: Realice las tareas de la cuenta C

En los pasos anteriores, la cuenta A ya ha creado un rol, examplerole, mediante el cual se establece
una relación de confianza con la cuenta C. Esto permite a los usuarios de la cuenta C obtener acceso a
la cuenta A. En este paso, el administrador de la cuenta C crea un usuario (Dave) y le delega el permiso
sts:AssumeRole que recibió de la cuenta A. Esto le permite a Dave asumir el rol examplerole y
obtener acceso temporal a la cuenta A. La política de acceso que la cuenta A asoció al rol limitará lo que
Dave puede hacer cuando obtiene acceso a la cuenta A, específicamente, obtener los objetos del bucket
examplebucket.

Paso 3.1: cree un usuario en la cuenta C y delegue un permiso para asumir la función


examplerole

1. Con el URL de inicio de sesión de usuario de IAM para la cuenta C, primero inicie sesión en la
Consola de administración de AWS como usuario AccountCadmin.
2. En la consola de IAM, cree un usuario, Dave.

Para obtener instrucciones, consulte Creación de usuarios de IAM (Consola de administración de


AWS) en la Guía del usuario de IAM.
3. Anote las credenciales de Dave. Dave necesitará estas credenciales para asumir la función
examplerole.
4. Cree una política en línea para el usuario Dave de IAM a fin de delegar el permiso sts:AssumeRole
a Dave en la función examplerole en la cuenta A.

a. En el panel de navegación de la izquierda, haga clic en Users (Usuarios).


b. Haga clic en el nombre de usuario Dave.
c. En la página de detalles del usuario, seleccione la pestaña Permissions (Permisos) y, luego,
expanda la sección Inline Policies (Políticas insertadas).
d. Seleccione click here (hacer clic aquí) (o Create User Policy (Crear política de usuario)).
e. Haga clic en Custom Policy (Política personalizada y, luego, haga clic en Select (Seleccionar).
f. Escriba un nombre para la política en el campo Policy Name (Nombre de la política).
g. Copie la siguiente política en el campo Policy Document (Documento de la política).

Tendrá que actualizar la política proporcionando el ID de la cuenta A.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:AssumeRole"],
"Resource": "arn:aws:iam::AccountA-ID:role/examplerole"

Versión de API 2006-03-01


351
Amazon Simple Storage Service Guía del desarrollador
Introducción

}
]
}

h. Haga clic en Apply Policy (Aplicar política).


5. Añada otro perfil, AccountCDave, para guardar las credenciales de Dave en el archivo de
configuración de la CLI de AWS.

[profile AccountCDave]
aws_access_key_id = UserDaveAccessKeyID
aws_secret_access_key = UserDaveSecretAccessKey
region = us-west-2

Paso 3.2: Asuma la función (examplerole) y obtenga acceso a los objetos

Ahora Dave puede obtener acceso a los objetos en el bucket que pertenecen a la cuenta A de la siguiente
manera:

• Dave primero asume la función examplerole con sus propias credenciales. Esto devuelve credenciales
temporales.
• Con las credenciales temporales, Dave obtiene acceso a los objetos en el bucket de la cuenta A.

1. En el símbolo del sistema, ejecute el siguiente comando assume-role de la CLI de AWS con el perfil
AccountCDave.

Tendrá que actualizar el valor de ARN en el comando proporcionando el ID de la cuenta A donde se


define la función examplerole.

aws sts assume-role --role-arn arn:aws:iam::accountA-ID:role/examplerole --profile


AccountCDave --role-session-name test

Como respuesta, el AWS Security Token Service (STS) devuelve credenciales de seguridad
temporales (ID de clave de acceso, clave de acceso secreta y un token de sesión).
2. Guarde las credenciales de seguridad temporales en el archivo de configuración de la CLI de AWS en
el perfil TempCred.

[profile TempCred]
aws_access_key_id = temp-access-key-ID
aws_secret_access_key = temp-secret-access-key
aws_session_token = session-token
region = us-west-2

3. En el símbolo del sistema, ejecute el siguiente comando de la CLI de AWS para obtener acceso
a los objetos con las credenciales temporales. Por ejemplo, el comando especifica la Application
Programming Interface (API, Interfaz de programación de aplicaciones) de head-object para recuperar
los metadatos de los objetos para el objeto HappyFace.jpg.

aws s3api get-object --bucket examplebucket --key HappyFace.jpg SaveFileAs.jpg --


profile TempCred

Como la política de acceso asociada con la función examplerole permite las acciones, Amazon S3
procesa la solicitud. Puede probar cualquier otra acción en cualquier otro objeto del bucket.

Si prueba cualquier otra acción, por ejemplo, get-object-acl, se le denegará el permiso porque no
se le permite esa acción al rol.
Versión de API 2006-03-01
352
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

aws s3api get-object-acl --bucket examplebucket --key HappyFace.jpg --profile TempCred

Usamos el usuario Dave para asumir la función y obtener acceso al objeto con credenciales
temporales. También podría ser una aplicación en la cuenta C que obtuviera acceso a los objetos en
el bucket examplebucket. La aplicación puede obtener las credenciales de seguridad temporales y
la cuenta C puede delegar el permiso de la aplicación para asumir la función examplerole.

Paso 4: Eliminación

1. Después de que haya terminado de probar, puede realizar lo siguiente para limpiar.

• Inicie sesión en la Consola de administración de AWS (Consola de administración de AWS) con


las credenciales de la cuenta A y haga lo siguiente:

• En la consola de Amazon S3, elimine la política de bucket asociada a examplebucket. En


Properties (Propiedades) del bucket, elimine la política en la sección Permissions (Permisos).
• Si se creó el bucket para este ejercicio, en la consola de Amazon S3, elimine los objetos y
luego elimine el bucket.
• En la consola de IAM, elimine la función examplerole que creó en la cuenta A.
• En la consola de IAM, elimine el usuario AccountAadmin.
2. Inicie sesión en la Consola de administración de AWS (Consola de administración de AWS) con las
credenciales de la cuenta B. En la consola de IAM, elimine el usuario AccountBadmin.
3. Inicie sesión en la Consola de administración de AWS (Consola de administración de AWS) con las
credenciales de la cuenta C. En la consola de IAM, elimine el usuario AccountCadmin y el usuario
Dave.

Recursos relacionados

• Creación de un rol para delegar permisos a un usuario de IAM en la Guía del usuario de IAM.
• Tutorial: Delegación del acceso entre cuentas de AWS mediante roles de IAM en la Guía del usuario de
IAM.
• Trabajo con políticas en la Guía del usuario de IAM.

Uso de políticas de bucket y usuario


Las políticas de bucket y usuario son dos de las opciones de política de acceso disponibles para conceder
permisos para los recursos de Amazon S3. Ambas políticas utilizan el lenguaje de la política de acceso
basado en el formato JSON. En los temas de esta sección se describen los elementos clave del lenguaje
de políticas, se destacan los detalles específicos de Amazon S3 y se proporcionan ejemplos de políticas de
bucket y usuario.
Important

Le recomendamos que consulte primero los temas de introducción en los que se explican los
conceptos básicos y las opciones disponibles para administrar el acceso a sus recursos de
Amazon S3. Para obtener más información, consulte Introducción a la administración de permisos
de acceso para los recursos de Amazon S3 (p. 312).

Temas
• Información general del lenguaje de la política de acceso (p. 354)
• Ejemplos de política de bucket (p. 387)
• Ejemplos de políticas de usuario (p. 396)

Versión de API 2006-03-01


353
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Información general del lenguaje de la política de acceso


En los temas de esta sección se describen los elementos básicos utilizados en las políticas de bucket y
usuario según se utilizan en Amazon S3. Para obtener información completa acerca del lenguaje de la
política, consulte el tema relativo a la descripción de las políticas de IAM y el tema Referencia de políticas
de IAM de AWS en la Guía del usuario de IAM.
Note

Las políticas de bucket tienen un límite de tamaño de 20 KB.

Elementos comunes en una política de acceso


Una política contiene los siguientes elementos básicos:

• Recursos: los buckets y objetos son los recursos de Amazon S3 a los que puede conceder o denegar
permisos. En una política, se usa el nombre de recurso de Amazon (ARN) para identificar el recurso.
• Acciones: Amazon S3 admite un conjunto de operaciones para cada recurso. Con las palabras clave
de acción puede identificar las operaciones del recurso que desea permitir o denegar (consulte
Especificación de permisos en una política (p. 357)).

Por ejemplo, el permiso s3:ListBucket autoriza el permiso de usuario para la operación GET Bucket
(List Objects) de Amazon S3.
• Efecto: el efecto obtenido cuando el usuario solicita la acción específica, que puede ser permitir o
denegar.

Si no concede o permite el acceso de forma explícita a un recurso, el acceso será denegado de forma
implícita. También puede denegar de forma explícita el acceso a un recurso para asegurarse de que un
usuario no obtenga acceso a él, aunque otra política se lo conceda.
• Entidad principal: la cuenta o el usuario con permiso de acceso a las acciones y los recursos en la
instrucción. En una política de bucket, el principal es el usuario, cuenta, servicio u otra entidad que
reciba este permiso.

La política de bucket del ejemplo siguiente ilustra los elementos comunes de políticas anteriores.
La política autoriza a Dave, un usuario en la cuenta ID-cuenta, los permisos s3:GetObject,
s3:GetBucketLocation y s3:ListBucket de Amazon S3 en el bucket examplebucket.

{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account-ID:user/Dave"
},
"Action": [
"s3:GetObject",
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket/*",
"arn:aws:s3:::examplebucket"
]
}
]
}

Versión de API 2006-03-01


354
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Para obtener más información acerca de los elementos de la política de acceso, consulte los siguientes
temas:

• Especificación de recursos en una política (p. 355)


• Especificación de un elemento principal en una política (p. 356)
• Especificación de permisos en una política (p. 357)
• Especificación de las condiciones de una política (p. 363)

Los siguientes temas proporcionan ejemplos adicionales de políticas:

• Ejemplos de política de bucket (p. 387)


• Ejemplos de políticas de usuario (p. 396)

Especificación de recursos en una política


A continuación, se muestra un formato común de Nombre de recurso de Amazon (ARN) para identificar
cualquier recurso en AWS.

arn:partition:service:region:namespace:relative-id

Para los recursos de Amazon S3:

• aws indica un nombre de partición común. Si sus recursos están en la región China (Pekín), aws-cn
será el nombre de la partición.
• s3 indica el servicio.
• No se especifica la región ni el espacio de nombres.
• Para Amazon S3, puede ser un bucket-name o un bucket-name/object-key. Puede utilizar
comodines.

El formato de ARN para los recursos de Amazon S3 será el siguiente:

arn:aws:s3:::bucket_name
arn:aws:s3:::bucket_name/key_name

A continuación, se muestran ejemplos de ARN para recursos de Amazon S3.

• El ARN identifica el objeto /developers/design_info.doc en el bucket examplebucket.

arn:aws:s3:::examplebucket/developers/design_info.doc

• Puede utilizar comodines como parte del ARN del recurso. Puede utilizar caracteres comodín (* y ?) en
cualquier segmento del ARN (las partes se separan mediante signos de dos puntos). Un asterisco (*)
representa cualquier combinación de cero o más caracteres y un signo de interrogación (?) representa
un único carácter. Puede utilizar varios caracteres * o ? en cada segmento, pero un carácter comodín no
puede abarcar varios segmentos.
• Este ARN utiliza el carácter comodín * en la parte de identificador relativo del ARN para identificar
todos los objetos del bucket examplebucket.

arn:aws:s3:::examplebucket/*

Este ARN utiliza * para indicar todos los recursos de Amazon S3 (todos los buckets y objetos en su
cuenta).

Versión de API 2006-03-01


355
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

arn:aws:s3:::*

• Este ARN utiliza los dos caracteres comodín, * e ?, en la parte de identificador relativo. Identifica
todos los objetos en los buckets como example1bucket, example2bucket, example3bucket, etc.

arn:aws:s3:::example?bucket/*

• Puede utilizar variables de política en los ARN de Amazon S3. Cuando se evalúa una política, estas
variables predefinidas se sustituyen por los valores correspondientes. Supongamos que organiza los
buckets como una colección de carpetas, una carpeta para cada uno de los usuarios. El nombre de la
carpeta será igual al nombre del usuario. Para conceder a los usuarios permisos para sus carpetas,
puede especificar una variable de política en el ARN del recurso:

arn:aws:s3:::bucket_name/developers/${aws:username}/

En tiempo de ejecución, cuando se evalúa la política, la variable ${aws:username} en el ARN del


recurso se sustituye por el nombre de usuario que realiza la solicitud.

Para encontrar el ARN de un bucket de S3, puede consultar las páginas de permisos Bucket Policy
(Política de bucket) o CORS configuration (Configuración CORS) de la consola de Amazon S3. Para
obtener más información, consulte ¿Cómo agrego una política de bucket en S3? o ¿Cómo permito que se
compartan recursos entre dominios con CORS? en la Guía del usuario de la consola de Amazon Simple
Storage Service.

Para obtener más información acerca de los ARN, consulte los siguientes temas:

• El tema relativo a recursos en la Guía del usuario de IAM


• Elementos de la política de IAM: Variables en la Guía del usuario de IAM
• Nombres de recursos de Amazon (ARN) en la AWS General Reference

Para obtener más información acerca de otros elementos del lenguaje de la política de acceso, consulte
Información general del lenguaje de la política de acceso (p. 354).

Especificación de un elemento principal en una política


El elemento Principal especifica el usuario, la cuenta, el servicio u otra entidad con acceso permitido
o denegado para un recurso. A continuación se proporcionan ejemplos de la especificación del elemento
Principal. Para obtener más información, consulte Principal en la Guía del usuario de IAM.

• Para conceder permisos para una cuenta de AWS, use el siguiente formato para identificar la cuenta.

"AWS":"account-ARN"

Por ejemplo:

"Principal":{"AWS":"arn:aws:iam::AccountNumber-WithoutHyphens:root"}

Amazon S3 también admite un ID de usuario canónico, que es una forma encubierta del ID de cuenta de
AWS. Puede usar el siguiente formato para especificar este ID.

"CanonicalUser":"64-digit-alphanumeric-value"

Por ejemplo:

Versión de API 2006-03-01


356
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Principal":{"CanonicalUser":"64-digit-alphanumeric-value"}

Para obtener información acerca de cómo encontrar el ID de usuario canónico de su cuenta, consulte
Buscar el ID de usuario canónico de su cuenta.
Important

Cuando se utiliza un ID de usuario canónico en una política, Amazon S3 podría cambiar el ID


canónico por el ID de la cuenta de AWS correspondiente. Esto no afecta a la política, ya que los
dos ID identifican la misma cuenta.
• Para conceder permisos a un usuario de IAM dentro de su cuenta, debe proporcionar el par nombre-
valor "AWS":"user-ARN".

"Principal":{"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}

• Para conceder permisos a todos los usuarios, lo que también se denomina acceso anónimo, puede
establecer el carácter comodín, "*", como valor de Principal. Por ejemplo, si configura el bucket
como sitio web, es porque desea que todos los objetos en el bucket tengan acceso público. Estos son
ejemplos equivalentes:

"Principal":"*"

"Principal":{"AWS":"*"}

Warning

Extreme las precauciones a la hora de otorgar acceso anónimo a su bucket de S3. Al


otorgar acceso anónimo, cualquier persona puede acceder a su bucket. Se recomienda
encarecidamente que no otorgue nunca ningún tipo de acceso de escritura anónimo en su
bucket de S3.
• Puede requerir a los usuarios que obtengan acceso a su contenido de Amazon S3 usando URL de
Amazon CloudFront (en lugar de URL de Amazon S3). Para ello, cree una identidad de acceso de origen
(OAI) de CloudFront y, a continuación, cambie los permisos en su bucket o en los objetos de su bucket.
El formato para especificar la OAI en una declaración Principal es el siguiente:

"Principal":{"CanonicalUser":"Amazon S3 Canonical User ID assigned to origin access


identity"}

Para obtener más información, consulte la sección sobre el uso de una identidad de acceso de origen
para restringir el acceso a su contenido de Amazon S3 en la Guía para desarrolladores de Amazon
CloudFront.

Para obtener más información acerca de otros elementos del lenguaje de la política de acceso, consulte
Información general del lenguaje de la política de acceso (p. 354).

Especificación de permisos en una política


Amazon S3 define un conjunto de permisos que puede especificar en una política. Estas palabras clave se
asignan a operaciones específicas de Amazon S3 (consulte el tema relativo a operaciones en buckets y
operaciones en objetos en la Amazon Simple Storage Service API Reference).

Temas
• Permisos para operaciones de objetos (p. 358)

Versión de API 2006-03-01


357
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• Permisos relacionados con operaciones de bucket (p. 359)


• Permisos relacionados con operaciones de subrecursos de bucket (p. 360)
• Permisos relacionados con operaciones de cuenta (p. 362)

Permisos para operaciones de objetos

En esta sección se proporciona una lista de los permisos para las operaciones de objetos que puede
especificar en una política.

Permisos de Amazon S3 para operaciones de objetos

Permisos Operaciones de Amazon S3

Abort Multipart Upload


s3:AbortMultipartUpload

PUT Object Retention, PUT Object , DELETE Object


s3:BypassGovernanceRetention

s3:DeleteObject DELETE Object

DELETE Object tagging


s3:DeleteObjectTagging

DELETE Object (una versión específica del objeto)


s3:DeleteObjectVersion

DELETE Object tagging (una versión específica del objeto)


s3:DeleteObjectVersionTagging

s3:GetObject GET Object, HEAD Object, SELECT Object Content

Cuando concede este permiso a un bucket con control de versiones habilitado,


siempre obtiene los datos de la versión más reciente.

s3:GetObjectAcl GET Object ACL

GET Object Legal Hold, GET Object


s3:GetObjectLegalHold

Get Object Retention, GET Object


s3:GetObjectRetention

GET Object tagging


s3:GetObjectTagging

GET Object torrent


s3:GetObjectTorrent

GET Object, HEAD Object


s3:GetObjectVersion

Para conceder permiso para los datos de versión específica de un objeto, debe
conceder este permiso. Es decir, necesita este permiso de Amazon S3 cuando
especifica el número de versión al realizar cualquiera de estas solicitudes.

GET ACL (para una versión específica del objeto)


s3:GetObjectVersionAcl

GET Object tagging (para una versión específica del objeto)


s3:GetObjectVersionTagging

GET Object Torrent versioning


s3:GetObjectVersionTorrent

List Parts
s3:ListMultipartUploadParts

s3:PutObject PUT Object, POST Object, Initiate Multipart Upload, Upload Part, Complete
Multipart Upload, PUT Object - Copy

s3:PutObjectAcl PUT Object ACL

PUT Object Legal Hold, PUT Object


s3:PutObjectLegalHold

Versión de API 2006-03-01


358
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permisos Operaciones de Amazon S3

PUT Object Retention, PUT Object


s3:PutObjectRetention

PUT Object tagging


s3:PutObjectTagging

PUT Object ACL (para una versión específica del objeto)


s3:PutObjectVersionAcl

PUT Object tagging (para una versión específica del objeto)


s3:PutObjectVersionTagging

s3:RestoreObject POST Object restore

En la política de bucket del ejemplo siguiente se conceden los permisos s3:PutObject y


s3:PutObjectAcl a un usuario (Dave). Puede asociar la política a un usuario si elimina el elemento
Principal. Estas son operaciones de objetos y, por lo tanto, la parte de ID relativo del ARN Resource
identifica objetos (examplebucket/*). Para obtener más información, consulte Especificación de
recursos en una política (p. 355).

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/Dave"
},
"Action": ["s3:PutObject","s3:PutObjectAcl"],
"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}

Puede utilizar un carácter comodín para conceder permisos para todas las acciones de Amazon S3.

"Action": "*"

Permisos relacionados con operaciones de bucket

En esta sección se proporciona una lista de los permisos relacionados con las operaciones de bucket que
puede especificar en una política.

Permisos de Amazon S3 relacionados con operaciones de bucket

Palabras clave del Operaciones cubiertas de Amazon S3


permiso

s3:CreateBucket PUT Bucket

s3:DeleteBucket DELETE Bucket

s3:ListBucket GET Bucket (List Objects), HEAD Bucket

GET Bucket Object versions


s3:ListBucketVersions

GET Service
s3:ListAllMyBuckets

List Multipart Uploads


s3:ListBucketMultipartUploads

Versión de API 2006-03-01


359
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

La política de usuario del ejemplo siguiente concede los permisos s3:CreateBucket,


s3:ListAllMyBuckets y s3:GetBucketLocation a un usuario. Tenga en cuenta que para todos
estos permisos, usted estableció la parte de ID relativo del ARN Resource en "*". Debe especificar un
nombre de bucket para todas las demás acciones de bucket. Para obtener más información, consulte
Especificación de recursos en una política (p. 355).

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:CreateBucket",
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::*"
]
}
]
}

Si el usuario va a utilizar la consola para ver buckets y ver el contenido de cualquiera de estos buckets,
el usuario debe tener los permisos s3:ListAllMyBuckets y s3:GetBucketLocation. Para ver un
ejemplo, consulte la "Política para acceso a la consola" en la sección Escribir políticas de IAM: cómo
conceder acceso a un bucket de S3.

Permisos relacionados con operaciones de subrecursos de bucket

En esta sección se proporciona una lista de los permisos relacionados con las operaciones de subrecursos
de bucket que puede especificar en una política.

Permisos de Amazon S3 relacionados con operaciones de subrecursos de bucket

Permisos Operaciones cubiertas de Amazon S3

s3:DeleteBucketPolicy DELETE Bucket policy

s3:DeleteBucketWebsite DELETE Bucket website

s3:GetAccelerateConfiguration GET Bucket accelerate

s3:GetAnalyticsConfiguration GET Bucket analytics, List Bucket Analytics Configurations

s3:GetBucketAcl GET Bucket acl

s3:GetBucketCORS GET Bucket cors

s3:GetBucketLocation GET Bucket location

s3:GetBucketLogging GET Bucket logging

s3:GetBucketNotification GET Bucket notification

OBTENER la configuración del bloqueo de objetos del bucket


s3:GetBucketObjectLockConfiguration

s3:GetBucketPolicy GET Bucket policy

s3:GetBucketPolicyStatus GET BucketPolicyStatus

Versión de API 2006-03-01


360
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permisos Operaciones cubiertas de Amazon S3

s3:GetBucketPublicAccessBlock GET PublicAccessBlock

s3:GetBucketRequestPayment GET Bucket requestPayment

s3:GetBucketTagging GET Bucket tagging

s3:GetBucketVersioning GET Bucket versioning

s3:GetBucketWebsite GET Bucket website

s3:GetEncryptionConfiguration GET Bucket encryption

s3:GetInventoryConfiguration GET Bucket inventory, List Bucket Inventory Configurations

s3:GetLifecycleConfiguration Ciclo de vida de GET Bucket

s3:GetMetricsConfiguration GET Bucket metrics, List Bucket Metrics Configurations

s3:GetReplicationConfiguration GET Bucket replication

s3:PutAccelerateConfiguration PUT Bucket accelerate

s3:PutAnalyticsConfiguration PUT Bucket analytics, DELETE Bucket analytics

s3:PutBucketAcl PUT Bucket acl

s3:PutBucketCORS PUT Bucket cors, DELETE Bucket cors

s3:PutBucketLogging PUT Bucket logging

s3:PutBucketNotification PUT Bucket notification

ETABLECER la configuración de bloqueo de objetos del


s3:PutBucketObjectLockConfiguration
bucket

s3:PutBucketPolicy PUT Bucket policy

s3:PutBucketPublicAccessBlock PUT PublicAccessBlock, DELETE PublicAccessBlock

s3:PutBucketRequestPayment PUT Bucket requestPayment

s3:PutBucketTagging DELETE Bucket tagging, PUT Bucket tagging

s3:PutBucketVersioning PUT Bucket versioning

s3:PutBucketWebsite PUT Bucket website

s3:PutEncryptionConfiguration PUT Bucket encryption, DELETE Bucket encryption

s3:PutInventoryConfiguration PUT Bucket inventory, DELETE Bucket inventory

s3:PutLifecycleConfiguration PUT Bucket lifecycle, DELETE Bucket lifecycle

s3:PutMetricsConfiguration PUT Bucket metrics, DELETE Bucket metrics

s3:PutReplicationConfiguration PUT Bucket replication, DELETE Bucket replication

En la siguiente política de usuario de ejemplo se concede el permiso s3:GetBucketAcl en el bucket


examplebucket para el usuario Dave.

Versión de API 2006-03-01


361
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account-ID:user/Dave"
},
"Action": [
"s3:GetObjectVersion",
"s3:GetBucketAcl"
],
"Resource": "arn:aws:s3:::examplebucket"
}
]
}

Para eliminar objetos, puede llamar de forma explícita a la API DELETE Object o configurar el ciclo
de vida (consulte Administración del ciclo de vida de los objetos (p. 127)) para que Amazon S3 pueda
eliminar los objetos cuando caduque su vida útil. Para impedir de forma explícita que los usuarios o
las cuentas eliminen objetos, debe denegarles de forma explícita los permisos s3:DeleteObject,
s3:DeleteObjectVersion y s3:PutLifecycleConfiguration. De forma predeterminada, los
usuarios no tienen permisos. Pero cuando crea usuarios, los añade a grupos y les concede permisos, es
posible que los usuarios adquieran algunos permisos que usted no deseaba concederles. Aquí es donde
puede utilizar la denegación explícita, que sustituye a todos los demás permisos que un usuario puede
tener y deniega los permisos para acciones específicas.

Permisos relacionados con operaciones de cuenta

En esta sección se proporciona una lista de los permisos relacionados con las operaciones de cuenta que
puede especificar en una política.

Permisos de Amazon S3 relacionados con operaciones de cuenta

Palabras clave del Operaciones cubiertas de Amazon S3


permiso

s3:CreateJob CreateJob

s3:DescribeJob DescribeJob

GET PublicAccessBlock
s3:GetAccountPublicAccessBlock

s3:ListJobs ListJobs

PUT PublicAccessBlock, DELETE PublicAccessBlock


s3:PutAccountPublicAccessBlock

UpdateJobPriority
s3:UpdateJobPriority

UpdateJobStatus
s3:UpdateJobStatus

La política de usuario del ejemplo siguiente concede el permiso s3:GetAccountPublicAccessBlock a


un usuario. Tenga en cuenta que para todos estos permisos, usted estableció el valor Resource en "*".
Para obtener más información, consulte Especificación de recursos en una política (p. 355).

{
"Version":"2012-10-17",
"Statement":[

Versión de API 2006-03-01


362
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:GetAccountPublicAccessBlock"
],
"Resource":[
"*"
]
}
]
}

Especificación de las condiciones de una política


El lenguaje de la política de acceso permite especificar las condiciones cuando se conceden permisos. El
elemento Condition (o bloque Condition) permite especificar condiciones que se aplican al entrar en
vigor una política. En el elemento Condition, que es opcional, se crean expresiones en las que se usan
operadores booleanos (igual, menor que, etc.) para asignar la condición a los valores de la solicitud. Por
ejemplo, al conceder un permiso de usuario para cargar un objeto, el propietario del bucket puede añadir la
condición StringEquals para solicitar que el objeto se pueda leer de forma pública, tal como se muestra
aquí:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": [
"public-read"
]
}
}
}
]
}

El bloque Condition especifica la condición StringEquals que se aplica al par clave-valor


especificado, "s3:x-amz-acl":["public-read"]. Existe un conjunto de claves predefinidas que
puede usar para expresar una condición. En el ejemplo se utiliza la clave de condición s3:x-amz-acl.
Esta condición requiere que el usuario incluya el encabezado x-amz-acl con el valor public-read en
cada solicitud PUT object.

Para obtener más información sobre cómo especificar condiciones en un lenguaje de política de acceso,
consulte Condición en la Guía del usuario de IAM.

En los siguientes temas, se describen las claves de condición generales de AWS y específicas de Amazon
S3 y se proporcionan ejemplos de políticas.

Temas
• Claves de condición disponibles (p. 364)

Versión de API 2006-03-01


363
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• Claves de condición de Amazon S3 para operaciones de objetos (p. 366)


• Claves de condición de Amazon S3 para operaciones de bucket (p. 380)

Claves de condición disponibles


Las claves predefinidas disponibles para especificar condiciones en una política de acceso de Amazon S3
se pueden clasificar de la siguiente manera:

• Claves generales de AWS: AWS proporciona un conjunto de claves comunes admitidas por todos los
servicios de AWS que admiten políticas. Estas claves que son comunes para todos los servicios se
denominan claves generales de AWS y utilizan el prefijo aws:. Para ver una lista de claves generales de
AWS, consulte Claves de condición disponibles en la Guía del usuario de IAM. También existen claves
específicas para Amazon S3, que utilizan el prefijo s3:. Las claves específicas para Amazon S3 se
describen en el siguiente punto.

Las nuevas claves de condición aws:sourceVpce y aws:sourceVpc se utilizan en las políticas de


bucket para los puntos de enlace de la VPC. Para ver ejemplos de usos de estas claves de condición,
consulte Ejemplo de políticas de bucket para puntos de enlace de la VPC para Amazon S3 (p. 394).

La política de bucket del ejemplo siguiente concede a los usuarios autenticados el permiso para usar
la acción s3:GetObject si la solicitud se genera a partir de un rango específico de direcciones
IP (192.168.143.*), a menos que la dirección IP sea 192.168.143.188. En el bloque de condición,
IpAddress y NotIpAddress son condiciones y cada una recibe un par clave-valor para evaluación. En
este ejemplo, los pares de clave-valor usan la clave general de AWS aws:SourceIp.
Note
Los valores de clave IPAddress y NotIpAddress especificados en la condición utilizan la
notación CIDR como se describe en RFC 4632. Para obtener más información, consulte http://
www.rfc-editor.org/rfc/rfc4632.txt.

{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": "*",
"Action":["s3:GetObject"] ,
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition" : {
"IpAddress" : {
"aws:SourceIp": "192.168.143.0/24"
},
"NotIpAddress" : {
"aws:SourceIp": "192.168.143.188/32"
}
}
}
]
}

• Claves específicas de Amazon S3: además de las claves generales de AWS, las siguientes claves
de condición solo pueden aplicarse para conceder permisos específicos de Amazon S3. Estas claves
específicas de Amazon S3 utilizan el prefijo s3:.
• s3:x-amz-acl
• s3:x-amz-copy-source

Versión de API 2006-03-01


364
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• s3:x-amz-metadata-directive
• s3:x-amz-server-side-encryption
• s3:VersionId
• s3:LocationConstraint
• s3:delimiter
• s3:max-keys
• s3:prefix
• s3:x-amz-server-side-encryption-aws-kms-key-id
• s3:ExistingObjectTag/<tag-key>

Para ver ejemplos de políticas que utilizan claves de condición relacionadas a las etiquetas de objetos,
consulte Etiquetado de objetos y políticas de control de acceso (p. 121).
• s3:RequestObjectTagKeys
• s3:RequestObjectTag/<tag-key>
• s3:object-lock-remaining-retention-days
• s3:object-lock-mode
• s3:object-lock-retain-until-date
• s3:object-lock-legal-hold

Por ejemplo, la siguiente política de bucket concede el permiso s3:PutObject para dos cuentas de
AWS, si la solicitud incluye el encabezado x-amz-acl, que permite la lectura pública del objeto.

{
"Version":"2012-10-17",
"Statement": [
{
"Sid":"AddCannedAcl",
"Effect":"Allow",
"Principal": {
"AWS": ["arn:aws:iam::account1-ID:root","arn:aws:iam::account2-ID:root"]
},
"Action":["s3:PutObject"],
"Resource": ["arn:aws:s3:::examplebucket/*"],
"Condition": {
"StringEquals": {
"s3:x-amz-acl":["public-read"]
}
}
}
]
}

El bloque Condition utiliza la condición StringEquals y proporciona un par de clave-valor, "s3:x-


amz-acl":["public-read", para evaluación. En el par clave-valor, s3:x-amz-acl es una clave
específica de Amazon S3, como lo indica el prefijo s3:.

Important

No todas las condiciones son adecuadas para todas las acciones. Por ejemplo, es adecuado
incluir una condición s3:LocationConstraint en una política que concede el permiso
s3:CreateBucket de Amazon S3, pero no el permiso s3:GetObject. Amazon S3 puede
realizar pruebas de errores semánticos de este tipo que implican condiciones específicas de
Amazon S3. Sin embargo, si crea una política para un usuario de IAM e incluye una condición de
Versión de API 2006-03-01
365
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Amazon S3 no válida semánticamente, no se reportará ningún error porque IAM no puede validar
condiciones de Amazon S3.

En la siguiente sección se describen las claves de condición que se pueden utilizar para conceder
permisos condicionales a las operaciones de bucket y objeto. Además, existen claves de condición
relacionadas con la autenticación Signature Version 4 de Amazon S3. Para obtener más información,
consulte el tema relativo a las claves de política específicas de la autenticación de Amazon S3 Signature
Version 4 en la Amazon Simple Storage Service API Reference.

Claves de condición de Amazon S3 para operaciones de objetos


En la siguiente tabla se muestran cuáles son las condiciones de Amazon S3 que puede utilizar con
cada acción de Amazon S3. Luego de la tabla, se proporcionan políticas de ejemplo. Tenga en cuenta
los siguientes puntos sobre las claves de condición específicas de Amazon S3 que se describen en la
siguiente tabla:

• Los nombres de las claves de condición tienen el prefijo s3:. Por ejemplo,
s3:x-amz-acl
.
• Cada clave de condición se asigna al encabezado de solicitud con el mismo nombre permitido por la API
en la que se puede establecer la condición. Es decir, las claves de condición indican el comportamiento
de los encabezados de solicitud con el mismo nombre. Por ejemplo:
• La clave de condición s3:x-amz-acl que puede utilizar para conceder el permiso de condición para
el permiso
s3:PutObject
define el comportamiento del encabezado de solicitud x-amz-acl que admite la API de PUT Object.
• La clave de condición s3:VersionId que puede utilizar para conceder permisos condicionales para
el permiso
s3:GetObjectVersion
define el comportamiento del parámetro de consulta versionId que establece en una solicitud GET
Object.

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:PutObject • s3:x-amz-acl La operación PUT Object permite


(para permisos de ACL encabezados específicos para la
predefinida) lista de control de acceso (ACL) que
• s3:x-amz-grant-permi puede utilizar para conceder permisos
ssion basados en la ACL. Con estas claves,
(para permisos explícitos), el propietario del bucket puede
donde el permiso puede configurar una condición para solicitar
ser: permisos de acceso específicos cuando
el usuario carga un objeto.
read, write, read-
acp, write-acp, full Para ver una política de ejemplo,
-control consulte Ejemplo 1: Concesión de
permisos s3:PutObject con una
condición que solicita que el propietario
del bucket tenga control total (p. 375).

Para obtener más información acerca


de las ACL, consulte Información
general de las Access Control
Lists (ACL, Listas de control de
acceso) (p. 419).

Versión de API 2006-03-01


366
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:x-amz-copy-source Para copiar un objeto, se utiliza la API


PUT Object (consulte PUT Object) y se
utiliza el encabezado x-amz-copy-
source para especificar el origen. Con
esta clave, el propietario del bucket
puede restringir el origen de la copia
a un bucket específico, una carpeta
específica en el bucket o un objeto
específico en un bucket.

Para ver una política de ejemplo,


consulte Ejemplo 3: Concesión de
permisos s3:PutObject para copiar
objetos con una restricción en el origen
de la copia (p. 377).

s3:x-amz-server-side- Cuando cargue un objeto, puede utilizar


encryption el encabezado x-amz-server-
side-encryption para solicitar a
Amazon S3 que cifre el objeto cuando
se guarda, con una clave de cifrado
de sobre administrada por AWS Key
Management Service (AWS KMS)
o Amazon S3 (consulte Protección
de datos con el cifrado del lado del
servidor (p. 275)).

Al conceder el permiso
s3:PutObject, el propietario del
bucket puede añadir una condición
con esta clave para solicitar que el
usuario especifique este encabezado
en la solicitud. El propietario del
bucket puede conceder ese permiso
condicional para garantizar que los
objetos cargados por el usuario estén
cifrados cuando se guardan.

Para ver una política de ejemplo,


consulte Ejemplo 1: Concesión de
permisos s3:PutObject con una
condición que solicita que el propietario
del bucket tenga control total (p. 375).

Versión de API 2006-03-01


367
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:x-amz-server-side- Cuando cargue un objeto, puede utilizar


encryption-aws-kms-key- el encabezado x-amz-server-
id side-encryption-aws-kms-key-
id para solicitar a Amazon S3 que
cifre el objeto con la clave de AWS
KMS especificada cuando se guarda
(consulte Protección de datos con el
cifrado en el servidor mediante claves
almacenadas en AWS KMS (SSE-
KMS) (p. 275)).

Al conceder el permiso
s3:PutObject, el propietario del
bucket puede añadir una condición con
esta clave para restringir el ID de clave
de AWS KMS utilizado para el cifrado
de objetos a un valor específico.

El propietario del bucket puede


conceder ese permiso condicional para
garantizar que los objetos cargados por
el usuario estén cifrados con una clave
específica cuando se guardan.

La clave de AWS KMS que especifica


en la política debe tener el siguiente
formato:

arn:aws:kms:region:acct-
id:key/key-id

s3:x-amz-metadata-di Cuando copia un objeto con la API


rective PUT Object (consulte PUT Object),
opcionalmente puede añadir el
encabezado x-amz-metadata-
directive para especificar si desea
que los metadatos del objeto se copien
del objeto de origen o se reemplacen
por los metadatos proporcionados en la
solicitud.

Con este bucket con clave, un


propietario puede añadir una
condición para aplicar determinado
comportamiento cuando se cargan
objetos.

Valores válidos: COPY | REPLACE. El


valor predeterminado es COPY.

Versión de API 2006-03-01


368
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:x-amz-storage-class De forma predeterminada,


s3:PutObject almacena objetos
con la clase de almacenamiento
STANDARD, pero usted puede usar
el encabezado de solicitud x-amz-
storage-class para especificar una
clase de almacenamiento diferente.

Cuando concede el permiso


s3:PutObject, puede usar la clave
de condición s3:x-amz-storage-
class para restringir la clase de
almacenamiento que se debe utilizar
al almacenar objetos cargados. Para
obtener más información acerca de las
clases de almacenamiento, consulte
Clases de almacenamiento.

Para ver una política de ejemplo,


consulte Ejemplo 5: Restricción
de cargas de objetos a objetos
con una clase de almacenamiento
específica (p. 379).

Para conocer los valores válidos,


consulte el tema relacionado con las
solicitudes de PUT Object de Amazon
S3.

• s3:RequestObjectTagK Con esta clave de condición, puede


eys limitar los permisos para la acción
• s3:RequestObjectTag/ s3:PutObject
<tag-key> al restringir las etiquetas de objetos
permitidas en la solicitud. Para ver
ejemplos de usos de estas claves
de condición, consulte Etiquetado
de objetos y políticas de control de
acceso (p. 121).

s3:object-lock-mode Cuando carga un objeto, puede utilizar


la condición s3:object-lock-mode
para restringir al usuario para que solo
establezca un modo de COMPLIANCE o
GOVERNANCE en un objeto.

s3:object-lock-retain- Cuando carga un objeto, puede utilizar


until-date la condición de s3:object-lock-
retain-until-date para limitar las
fechas de retención permitidas en un
objeto.

Versión de API 2006-03-01


369
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:object-lock-legal- Cuando carga un objeto, puede


hold utilizar la condición de s3:object-
lock-legal-hold para restringir la
capacidad del usuario para establecer
una retención legal en un objeto.

s3:PutObjectAcl • s3:x-amz-acl La API PUT Object ACL establece la


(para permisos de ACL lista de control de acceso (ACL) en
predefinida) el objeto especificado. La operación
• s3:x-amz-grant-permi admite encabezados relacionados con
ssion la ACL. Al conceder este permiso, el
(para permisos explícitos), propietario del bucket puede añadir
donde el permiso puede condiciones con estas claves para
ser: solicitar determinados permisos. Para
obtener más información acerca de las
read, write, read- ACL, consulte Información general de
acp, write-acp, las Access Control Lists (ACL, Listas de
grant-full-control control de acceso) (p. 419).

Por ejemplo, se recomienda que los


propietarios de buckets mantengan el
control del objeto, independientemente
de quién sea el propietario del objeto.
Para ello, el propietario del bucket
puede añadir una condición con una
de estas claves para solicitar que el
usuario incluya permisos específicos
para el propietario del bucket.

s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso para la acción
s3:PutObjectAcl
a solo en objetos que tienen una clave
y un valor específicos para la etiqueta.
Para ver ejemplos, consulte Etiquetado
de objetos y políticas de control de
acceso (p. 121).

s3:PutObjectTagging • s3:RequestObjectTagK Con esta clave de condición, puede


eys limitar los permisos para la acción
• s3:RequestObjectTag/ s3:PutObjectTagging
<tag-key> al restringir las etiquetas de objetos
permitidas en la solicitud. Para ver
ejemplos de usos de estas claves
de condición, consulte Etiquetado
de objetos y políticas de control de
acceso (p. 121).

s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

Versión de API 2006-03-01


370
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:PutObjectVersionT • s3:RequestObjectTagK Con esta clave de condición, puede


agging eys limitar los permisos para la acción
• s3:RequestObjectTag/ s3:PutObjectVersionTagging
<tag-key> al restringir las etiquetas de objetos
permitidas en la solicitud. Para ver
ejemplos de usos de estas claves
de condición, consulte Etiquetado
de objetos y políticas de control de
acceso (p. 121).

s3:VersionId Con esta clave de condición, puede


limitar el permiso para la acción
s3:PutObjectVersionTagging
en una versión específica de objeto.
Para ver una política de ejemplo,
consulte Ejemplo 4: Concesión de
acceso a una versión específica de un
objeto (p. 378).

s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

s3:GetObjectVersion s3:VersionId Este permiso de Amazon S3 permite


al usuario realizar un grupo de
operaciones de la API de Amazon S3
(consulte Permisos de Amazon S3 para
operaciones de objetos (p. 358)).
En un bucket con control de versiones
habilitado, puede especificar la versión
del objeto de la que desea recuperar
datos.

Al añadir una condición con esta


clave, el propietario del bucket puede
restringir al usuario el acceso a los
datos únicamente para una versión
específica del objeto. Para ver una
política de ejemplo, consulte Ejemplo
4: Concesión de acceso a una versión
específica de un objeto (p. 378).

s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

Versión de API 2006-03-01


371
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:GetObject s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

s3:GetObjectAcl s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

s3:GetObjectVersionA s3:VersionId Para recuperar la lista de control de


cl acceso (ACL) de una versión específica
del objeto puede usar la API GET
Object acl. El usuario debe tener
permiso para la acción
s3:GetObjectVersionAcl
. Este permiso de Amazon S3 permite
a un usuario obtener la ACL de una
versión específica del objeto cuando
el bucket tiene control de versiones
habilitado.

El propietario del bucket puede añadir


una condición con la clave para
restringir al usuario a una versión
específica del objeto.

s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

s3:PutObjectVersionA s3:VersionId En un bucket con control de versiones


cl habilitado, puede especificar la versión
del objeto en la solicitud PUT Object
acl para configurar la ACL en una
versión específica del objeto. Con
esta condición, el propietario del
bucket puede restringir al usuario la
configuración de una ACL solo en una
versión específica de un objeto.

Versión de API 2006-03-01


372
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

• s3:x-amz-acl Este permiso de Amazon S3 le permite


(para permisos de ACL establecer una ACL en una versión
predefinida) específica del objeto cuando el bucket
• s3:x-amz-grant-permi tiene control de versiones habilitado.
ssion
(para permisos explícitos), Para obtener una descripción de
donde el permiso puede estas claves de condición, consulte el
ser: permiso s3:PutObjectACL en esta
tabla.
read, write, read-
acp, write-acp,
grant-full-control

s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

s3:DeleteObjectVersi s3:VersionId Este permiso de Amazon S3 permite al


on usuario eliminar una versión específica
del objeto cuando el bucket tiene
control de versiones habilitado.

El propietario del bucket puede añadir


una condición con esta clave para
limitar la posibilidad del usuario de
eliminar solo una versión específica del
objeto.

Para ver ejemplo de usos de esta


clave de condición, consulte Ejemplo
4: Concesión de acceso a una versión
específica de un objeto (p. 378).
En este ejemplo se muestra cómo
conceder la acción
s3:GetObjectVersion
, pero la política muestra el uso de esta
clave de condición.

s3:DeleteObjectTagging s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

s3:ExistingObjectTag/
s3:DeleteObjectVersionTagging Con esta clave de condición, puede
<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

Versión de API 2006-03-01


373
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:VersionId Con esta clave de condición, puede


limitar el permiso para la acción
s3:DeleteObjectVersionTagging
en una versión específica de objeto.
Para ver una política de ejemplo,
consulte Ejemplo 4: Concesión de
acceso a una versión específica de un
objeto (p. 378).

s3:GetObjectTagging s3:ExistingObjectTag/ Con esta clave de condición, puede


<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

s3:ExistingObjectTag/
s3:GetObjectVersionTagging Con esta clave de condición, puede
<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).

s3:VersionId Con esta clave de condición, puede


limitar el permiso para la acción
s3:GetObjectVersionTagging
en una versión específica de objeto.
Para ver una política de ejemplo,
consulte Ejemplo 4: Concesión de
acceso a una versión específica de un
objeto (p. 378).

s3:PutObjectRetention s3:object-lock- Al conceder este permiso, el propietario


remaining-retention- del bucket puede fijar los periodos
days de retención mínimos y máximos
permitidos para los objetos del bucket
utilizando esta clave de condición.

s3:object-lock-mode Puede utilizar la condición


s3:object-lock-mode para
restringir al usuario para que solo
establezca un modo de COMPLIANCE o
GOVERNANCE en un objeto.

s3:object-lock-retain- Puede utilizar la condición de


until-date s3:object-lock-retain-until-
date para limitar las fechas de
retención permitidas en un objeto.

s3:object-lock-legal- Puede utilizar la condición de


hold s3:object-lock-legal-hold para
restringir la capacidad del usuario para
establecer una retención legal en un
objeto.

Versión de API 2006-03-01


374
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


(o palabras clave)

s3:CreateMultipartUp s3:object-lock-mode Cuando carga un objeto, puede utilizar


load la condición s3:object-lock-mode
para restringir al usuario para que solo
establezca un modo de COMPLIANCE o
GOVERNANCE en un objeto.

s3:object-lock-retain- Cuando carga un objeto, puede utilizar


until-date la condición de s3:object-lock-
retain-until-date para limitar las
fechas de retención permitidas en un
objeto.

s3:object-lock-legal- Cuando carga un objeto, puede


hold utilizar la condición de s3:object-
lock-legal-hold para restringir la
capacidad del usuario para establecer
una retención legal en un objeto.

Ejemplo 1: Concesión de permisos s3:PutObject con una condición que solicita que el propietario
del bucket tenga control total

Supongamos que la cuenta A tiene un bucket y el administrador de la cuenta desea conceder permisos
para cargar objetos a Dave, usuario en la cuenta B. De forma predeterminada, los objetos que carga Dave
pertenecen a la cuenta B y la cuenta A no tiene permisos sobre estos objetos. El propietario del bucket,
que paga las facturas, desea tener los permisos completos sobre los objetos que carga Dave. Para esto, el
administrador de la cuenta A puede conceder el permiso s3:PutObject a Dave, con la condición de que
la solicitud incluya los encabezados específicos de ACL, que concede permisos totales de forma explícita o
utiliza una ACL predefinida (consulte PUT Object).

• Requiere el encabezado x-amz-full-control en la solicitud con permiso de control total para el


propietario del bucket.

La siguiente política de bucket concede el permiso s3:PutObject al usuario Dave con una condición
que utiliza la clave de condición s3:x-amz-grant-full-control, que requiere que la solicitud
incluya el encabezado x-amz-full-control.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/Dave"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
}
]
}

Versión de API 2006-03-01


375
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Note

En este ejemplo se describe el permiso entre cuentas. Sin embargo, si Dave, quien obtiene el
permiso, pertenece a la cuenta de AWS que tiene el bucket, este permiso condicional no será
necesario, ya que Dave pertenece a la cuenta principal que es propietaria de los objetos que el
usuario carga.

La política de bucket anterior concede el permiso condicional al usuario Dave en la cuenta B. Mientras
esta política tenga vigencia, es posible que Dave obtenga el mismo permiso sin ninguna condición
mediante otra política. Por ejemplo, Dave puede pertenecer a un grupo y usted concede el permiso
s3:PutObject al grupo sin ninguna condición. Para evitar esas ambigüedades en los permisos, puede
escribir una política de acceso más estricta y añadir una denegación explícita. En este ejemplo, deniega
el permiso de carga de forma explícita al usuario Dave si no incluye los encabezados necesarios en la
solicitud que concede los permisos completos al propietario del bucket. La denegación explícita siempre
sustituye a cualquier otro permiso concedido. A continuación, se muestra un ejemplo de la política de
acceso revisada.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
},
{
"Sid": "statement2",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
}
]
}

Si tiene dos cuentas de AWS, puede usar la AWS Command Line Interface (AWS CLI) para probar la
política. Puede asociar la política y, con las credenciales de Dave, usar el siguiente comando put-
object de la AWS CLI para probar el permiso. Para proporcionar las credenciales de Dave, debe
añadir el parámetro --profile. Para conceder el permiso de control total al propietario del bucket,
debe añadir el parámetro --grant-full-control. Para obtener más información acerca de la
configuración y el uso de la AWS CLI, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).

Versión de API 2006-03-01


376
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg


--grant-full-control id="AccountA-CanonicalUserID" --profile AccountBUserProfile

• Requiere el encabezado x-amz-acl con una ACL predefinida que conceda permiso de control total al
propietario del bucket.

Para pedir el encabezado x-amz-acl en la solicitud, puede reemplazar el par clave-valor en el bloque
Condition y especificar la clave de condición s3:x-amz-acl, tal y como se muestra en el siguiente
ejemplo.

"Condition": {
"StringNotEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}

Para probar el permiso con la AWS CLI, debe especificar el parámetro --acl. Luego, la AWS CLI añade
el encabezado x-amz-acl cuando envía la solicitud.

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg


--acl "bucket-owner-full-control" --profile AccountBadmin

Ejemplo 2: Concesión de permisos s3:PutObject con una condición que requiere que los objetos
almacenados tengan cifrado en el servidor

Supongamos que la cuenta A tiene un bucket. El administrador de la cuenta desea conceder permisos
para cargar objetos a Jane, usuario en la cuenta A, con la condición de que Jane siempre solicite el cifrado
del lado del servidor para que Amazon S3 guarde los objetos cifrados. Para ello, el administrador de la
cuenta A puede usar la clave de condición s3:x-amz-server-side-encryption, tal como se muestra.
El par clave-valor en el bloque Condition especifica la clave s3:x-amz-server-side-encryption.

"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}

Al probar el permiso con la AWS CLI, debe usar el parámetro requerido utilizando el parámetro --
server-side-encryption.

aws s3api put-object --bucket example1bucket --key HappyFace.jpg --body c:\HappyFace.jpg --


server-side-encryption "AES256" --profile AccountBadmin

Ejemplo 3: Concesión de permisos s3:PutObject para copiar objetos con una restricción en el
origen de la copia

Una operación de copia ocurre cuando usted especifica un objeto de origen en la solicitud PUT Object
(consulte PUT Object - Copy). Por lo tanto, el propietario del bucket puede conceder un permiso al usuario
para copiar objetos con restricciones en el origen; por ejemplo:

• Permitir copiar objetos solo del bucket sourcebucket.


• Permitir copiar objetos del bucket sourcebucket y solo los objetos con prefijos de nombre de clave que
comienzan con public/. Por ejemplo, sourcebucket/public/*
• Permitir copiar solo un objeto específico del sourcebucket; por ejemplo, sourcebucket/
example.jpg.

Versión de API 2006-03-01


377
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

La siguiente política de bucket concede al usuario Dave el permiso s3:PutObject. Le permite copiar solo
los objetos con la condición de que la solicitud incluya el encabezado s3:x-amz-copy-source y el valor
del encabezado especifique el prefijo de nombre de clave /examplebucket/public/*.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "cross-account permission to user in your own account",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": ["s3:PutObject"],
"Resource": "arn:aws:s3:::examplebucket/*"
},
{
"Sid": "Deny your user permission to upload object if copy source is not /
bucket/folder",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotLike": {
"s3:x-amz-copy-source": "examplebucket/public/*"
}
}
}
]
}

Puede usar el comando copy-object de la AWS CLI para probar el permiso. Para especificar el
origen, debe añadir el parámetro --copy-source y el prefijo de nombre de clave debe coincidir con
el prefijo permitido en la política. Tiene que proporcionar las credenciales al usuario Dave utilizando el
parámetro --profile. Para obtener más información acerca de la configuración de la AWS CLI, consulte
Configuración de las herramientas para los tutoriales de ejemplo (p. 327).

aws s3api copy-object --bucket examplebucket --key HappyFace.jpg


--copy-source examplebucket/public/PublicHappyFace1.jpg --profile AccountADave

La política anterior utiliza la condición StringNotLike. Para conceder el permiso para copiar solo un
objeto específico, debe cambiar la condición de StringNotLike a StringNotEquals y, a continuación,
especificar la clave exacta del objeto, tal como se muestra.

"Condition": {
"StringNotEquals": {
"s3:x-amz-copy-source": "examplebucket/public/PublicHappyFace1.jpg"
}
}

Ejemplo 4: Concesión de acceso a una versión específica de un objeto

Supongamos que la cuenta A tiene un bucket con control de versiones habilitado. El bucket tiene varias
versiones del objeto HappyFace.jpg. Ahora, el administrador de la cuenta desea conceder al usuario
(Dave) permiso para obtener solo una versión específica del objeto. Para ello, el administrador de la cuenta
debe conceder a Dave el permiso s3:GetObjectVersion de forma condicional, tal como se muestra. El
par clave-valor en el bloque Condition especifica la clave de condición s3:VersionId.

Versión de API 2006-03-01


378
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": ["s3:GetObjectVersion"],
"Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg"
},
{
"Sid": "statement2",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": ["s3:GetObjectVersion"],
"Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg",
"Condition": {
"StringNotEquals": {
"s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e"
}
}
}
]
}

En este caso, Dave tiene que saber el ID de versión exacta del objeto para recuperar el objeto.

Puede usar el comando get-object de la AWS CLI para probar estos permisos y el parámetro --
version-id para identificar la versión específica del objeto. El comando recupera el objeto y lo guarda en
el archivo OutputFile.jpg.

aws s3api get-object --bucket examplebucketversionenabled --key HappyFace.jpg


OutputFile.jpg --version-id AaaHbAQitwiL_h47_44lRO2DDfLlBO5e --profile AccountADave

Ejemplo 5: Restricción de cargas de objetos a objetos con una clase de almacenamiento


específica
Supongamos que la cuenta A tiene un bucket. El administrador de la cuenta desea restringir los permisos
a Dave, usuario en la cuenta A, para que solo pueda cargar objetos en el bucket que se almacenan con la
clase de almacenamiento STANDARD_IA. Para ello, el administrador de la cuenta A debe usar la clave de
condición s3:x-amz-storage-class, como se muestra en la política de bucket del siguiente ejemplo.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-storage-class": [

Versión de API 2006-03-01


379
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"STANDARD_IA"
]
}
}
}
]
}

Claves de condición de Amazon S3 para operaciones de bucket

En la siguiente tabla se muestra una lista de permisos específicos de operaciones de buckets que puede
conceder en las políticas. En cada permiso se muestran las claves disponibles que puede usar a la hora de
especificar una condición.

Permiso Claves de condición aplicables Descripción

s3:CreateBucket • s3:x-amz-acl La API Create Bucket (consulte


(para permisos de ACL PUT Bucket) admite encabezados
predefinida) específicos de ACL. Con estas
• s3:x-amz-grant-permi claves de condición, puede solicitar
ssion a un usuario que configure estos
(para permisos explícitos), encabezados en la solicitud que
donde el permiso puede ser: concede permisos específicos.

read, write, read-


acp, write-acp, full-
control

s3:LocationConstraint Con esta clave de condición, puede


impedir que un usuario cree un bucket
en una región de AWS específica. Para
ver una política de ejemplo, consulte
Ejemplo 1: Permiso para que un usuario
cree un bucket pero solo en una región
específica (p. 383).

s3:ListBucket s3:prefix Con esta clave de condición, puede


limitar la respuesta de la API Get
Bucket (List Objects) (consulte GET
Bucket (List Objects)) a nombres de
clave con un prefijo específico.

La API de Get Bucket (List Objects)


devuelve una lista de claves de objetos
en el bucket especificado. Esta API
admite el encabezado prefix para
recuperar solo las claves de objeto
con un prefijo específico. Esta clave
de condición se relaciona con el
encabezado prefix.

Por ejemplo, la consola de Amazon


S3 admite el concepto de carpeta que
utiliza prefijos de nombre de clave. Si
tiene dos objetos con nombres de clave
public/object1.jpg y public/
object2.jpg, la consola muestra los
objetos en la carpeta public. Si usa

Versión de API 2006-03-01


380
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción


esos prefijos para organizar las claves
de objetos, puede conceder el permiso
s3:ListBucket
con la condición que permitirá al
usuario obtener una lista de nombres
de clave con un prefijo específico.

Para ver una política de ejemplo,


consulte Ejemplo 2: Permiso para que
un usuario obtenga una lista de objetos
en un bucket de acuerdo con un prefijo
específico (p. 385).

s3:delimiter Si utiliza prefijos y delimitadores para


organizar los nombres de clave de
los objetos, puede usar esta clave de
condición para solicitar al usuario que
especifique el parámetro delimiter
en la solicitud Get Bucket (List Objects).
En este caso, la respuesta de Amazon
S3 será una lista de claves de objetos
con prefijos comunes agrupados. Para
obtener un ejemplo de usos de prefijos
y delimitadores, consulte Get Bucket
(List Objects).

s3:max-keys Con esta condición, puede limitar


el número de claves que devuelve
Amazon S3 como respuesta a la
solicitud Get Bucket (List Objects) al
solicitar al usuario que especifique
el parámetro max-keys. De forma
predeterminada, la API devuelve hasta
1000 nombres de clave.
Para ver una lista de las condiciones
numéricas que puede usar, consulte
Operadores de condición numérica en
la Guía del usuario de IAM.

Versión de API 2006-03-01


381
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción

s3:ListBucketVersions s3:prefix Si el bucket tiene el control de


versiones habilitado, puede usar la API
GET Bucket Object versions
(consulte GET Bucket Object versions)
para recuperar los metadatos de todas
las versiones de los objetos. Para esta
API, el propietario del bucket debe
conceder el permiso
s3:ListBucketVersions
en la política.

Con esta clave de condición, puede


limitar la respuesta de la API a nombres
de clave con un prefijo específico, al
solicitar al usuario que especifique el
parámetro prefix en la solicitud con
un valor específico.

Por ejemplo, la consola de Amazon


S3 admite el concepto de carpeta que
utiliza prefijos de nombre de clave.
Si tiene dos objetos con los nombres
de clave public/object1.jpg y
public/object2.jpg, la consola
muestra los objetos en la carpeta
public. Si organiza las claves de
objetos con esos prefijos, puede
conceder el permiso
s3:ListBucket
con la condición de que permitirá a un
usuario obtener una lista de nombres
de clave con un prefijo específico.

Para ver una política de ejemplo,


consulte Ejemplo 2: Permiso para que
un usuario obtenga una lista de objetos
en un bucket de acuerdo con un prefijo
específico (p. 385).

s3:delimiter Si utiliza prefijos y delimitadores para


organizar los nombres de clave de
los objetos , puede usar esta clave de
condición para solicitar al usuario que
especifique el parámetro delimiter
en la solicitud de versiones de GET
Bucket Object. En este caso, la
respuesta de Amazon S3 será una
lista de claves de objetos con prefijos
comunes agrupados.

Versión de API 2006-03-01


382
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permiso Claves de condición aplicables Descripción

s3:max-keys Con esta condición, puede limitar


el número de claves que devuelve
Amazon S3 como respuesta a la
solicitud GET Bucket Object versions
al solicitar al usuario que especifique
el parámetro max-keys . De forma
predeterminada, la API devuelve hasta
1000 nombres de clave. Para ver una
lista de las condiciones numéricas que
puede usar, consulte el tema relativo a
operadores de condición numérica en la
Guía del usuario de IAM.

s3:PutBucketAcl • s3:x-amz-acl La API PUT Bucket acl (consulte


(para permisos de ACL PUT Bucket) admite encabezados
predefinida) específicos de ACL. Puede usar estas
• s3:x-amz-grant-permi claves de condición para solicitar
ssion a un usuario que configure estos
(para permisos explícitos), encabezados en la solicitud.
donde el permiso puede ser:

read, write, read-


acp, write-acp, full-
control

Ejemplo 1: Permiso para que un usuario cree un bucket pero solo en una región específica

Supongamos que el administrador de una cuenta de AWS desea conceder al usuario (Dave) el
permiso para crear un bucket solo en la región América del Sur (São Paulo). El administrador de la
cuenta puede asociar la siguiente política de usuario que concede el permiso s3:CreateBucket con
una condición, tal como se muestra. El par clave-valor en el bloque Condition especifica la clave
s3:LocationConstraint y la región sa-east-1 como su valor.
Note

En este ejemplo, el propietario del bucket concede el permiso a uno de sus usuarios, así que
se puede usar una política de bucket o de usuario. En este ejemplo se muestra una política de
usuario.

Para ver una lista de las regiones de Amazon S3, consulte Regiones y puntos de enlace en la AWS
General Reference.

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:CreateBucket"
],
"Resource":[
"arn:aws:s3:::*"
],
"Condition": {
"StringLike": {

Versión de API 2006-03-01


383
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"s3:LocationConstraint": "sa-east-1"
}
}
}
]
}

Esta política impide que el usuario cree un bucket en cualquier otra región, excepto la región sa-east-1.
Sin embargo, es posible que otras políticas concedan al usuario el permiso para crear buckets en otra
región. Por ejemplo, si el usuario pertenece a un grupo, es posible que el grupo tenga una política
asociada que permite a todos los usuarios en el grupo crear buckets en otra región. Para asegurarse de
que el usuario no obtenga el permiso para crear buckets en otra región, puede añadir una instrucción de
denegación explícita en esta política.

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:CreateBucket"
],
"Resource":[
"arn:aws:s3:::*"
],
"Condition": {
"StringLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Action":[
"s3:CreateBucket"
],
"Resource":[
"arn:aws:s3:::*"
],
"Condition": {
"StringNotLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
}
]
}

La instrucción Deny utiliza la condición StringNotLike. Es decir, la solicitud para crear un bucket se
deniega si la restricción de ubicación no es "sa-east-1". La denegación explícita no permite al usuario crear
un bucket en ninguna otra región, independientemente de los permisos que obtenga el usuario.

Puede usar el siguiente comando create-bucket de la AWS CLI para probar la política. En este ejemplo
se utiliza el archivo bucketconfig.txt para especificar la restricción de ubicación. Observe la ruta del
archivo de Windows. Tiene que actualizar el nombre y la ruta del bucket según corresponda. Debe usar
el parámetro --profile para proporcionar las credenciales de usuario. Para obtener más información
acerca de la configuración y el uso de la AWS CLI, consulte Configuración de las herramientas para los
tutoriales de ejemplo (p. 327).

Versión de API 2006-03-01


384
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

aws s3api create-bucket --bucket examplebucket --profile AccountADave --create-bucket-


configuration file://c:/Users/someUser/bucketconfig.txt

El archivo bucketconfig.txt especifica la configuración, tal y como se muestra a continuación.

{"LocationConstraint": "sa-east-1"}

Ejemplo 2: Permiso para que un usuario obtenga una lista de objetos en un bucket de acuerdo con
un prefijo específico
El propietario del bucket puede impedir que el usuario cree una lista de contenido de una carpeta
específica en el bucket. Esto resulta útil si los objetos en el bucket están organizados por prefijos de
nombre de clave. En ese caso, la consola de Amazon S3 utiliza los prefijos para mostrar una jerarquía
de carpetas (solo la consola admite el concepto de carpetas; la API de Amazon S3 admite solo buckets y
objetos).

En este ejemplo, la cuenta del propietario del bucket y la cuenta principal, a la que pertenece el usuario,
son las mismas. Por lo tanto, el propietario del bucket puede usar una política de bucket o de usuario.
Primero mostraremos una política de usuario.

La siguiente política de usuario concede el permiso s3:ListBucket (consulte GET Bucket (List Objects))
con una condición que requiere que el usuario especifique prefix en la solicitud con el valor projects.

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::examplebucket"
],
"Condition" : {
"StringEquals" : {
"s3:prefix": "projects"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Action":[
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::examplebucket"
],
"Condition" : {
"StringNotEquals" : {
"s3:prefix": "projects"
}
}
}
]
}

La condición impide que el usuario cree una lista de claves de objetos con el prefijo projects. Esta
denegación explícita añadida impide que el usuario realice una lista de claves con cualquier otro prefijo,

Versión de API 2006-03-01


385
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

independientemente de los demás permisos que tenga el usuario. Por ejemplo, es posible que el
usuario obtenga el permiso para crear una lista de claves de objetos sin ninguna restricción, mediante
actualizaciones de políticas de usuario anteriores o mediante una política de bucket. Pero, como la
denegación explícita siempre sustituye a cualquier otro permiso, la solicitud del usuario para crear listas de
claves que no tengan el prefijo project se deniega.

La política anterior es una política de usuario. Si añade el elemento Principal a la política, que identifica
al usuario, tendrá una política de bucket, tal como se muestra.

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Principal": {
"AWS": "arn:aws:iam::BucketOwner-accountID:user/user-name"
},
"Action":[
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::examplebucket"
],
"Condition" : {
"StringEquals" : {
"s3:prefix": "examplefolder"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Principal": {
"AWS": "arn:aws:iam::BucketOwner-AccountID:user/user-name"
},
"Action":[
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::examplebucket"
],
"Condition" : {
"StringNotEquals" : {
"s3:prefix": "examplefolder"
}
}
}
]
}

Puede usar el siguiente comando list-object de la AWS CLI para probar la política. En el comando,
usa el parámetro --profile para proporcionar las credenciales de usuario. Para obtener más
información acerca de la configuración y el uso de la AWS CLI, consulte Configuración de las herramientas
para los tutoriales de ejemplo (p. 327).

aws s3api list-objects --bucket examplebucket --prefix examplefolder --profile AccountADave

Si el bucket tiene el control de versiones habilitado, para crear una lista de los objetos en el bucket, en
vez del permiso s3:ListBucket, debe conceder el permiso s3:ListBucketVersions en la política
anterior. Este permiso también admite la clave de condición s3:prefix.

Versión de API 2006-03-01


386
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Ejemplos de política de bucket


En esta sección se presentan algunos ejemplos de casos de uso típicos para políticas de bucket. Las
políticas utilizan cadenas bucket y examplebucket en el valor del recurso. Para probar estas políticas,
debe reemplazar estas cadenas con el nombre de su bucket. Para obtener información acerca del lenguaje
de la política de acceso, consulte Información general del lenguaje de la política de acceso (p. 354).
Note

Las políticas de bucket tienen un límite de tamaño de 20 KB.

Puede utilizar la herramienta AWS Policy Generator para crear una política de bucket para su bucket de
Amazon S3. Luego, puede utilizar el documento generado para configurar su política de bucket a través de
la consola de Amazon S3, mediante una serie de herramientas de terceros o a través de su aplicación.
Important

Si utiliza la consola de Amazon S3 para probar los permisos, deberá conceder


permisos adicionales requeridos por la consola: permisos s3:ListAllMyBuckets,
s3:GetBucketLocation y s3:ListBucket. Para ver un ejemplo de un tutorial en el que
se conceden permisos a usuarios y se los prueba con la consola, consulte Tutorial: Control del
acceso a un bucket con las políticas de usuario (p. 401).

Temas
• Concesión de permisos a varias cuentas con condiciones adicionales (p. 387)
• Concesión de permisos de solo lectura a un usuario anónimo (p. 388)
• Restricción del acceso a direcciones IP específicas (p. 388)
• Restricción del acceso a un origen de referencia de HTTP específico (p. 389)
• Concesión de permiso a una identidad de origen Amazon CloudFront (p. 390)
• Incorporación de una política de bucket para requerir MFA (p. 391)
• Concesión de permisos entre cuentas para cargar objetos al mismo tiempo que se garantiza que el
propietario del bucket tenga el control total (p. 393)
• Concesión de permisos para el inventario de Amazon S3 y el análisis de Amazon S3 (p. 393)
• Ejemplo de políticas de bucket para puntos de enlace de la VPC para Amazon S3 (p. 394)

Concesión de permisos a varias cuentas con condiciones adicionales


En la siguiente política de ejemplo se conceden permisos para s3:PutObject y s3:PutObjectAcl
a varias cuentas de AWS y se requiere que cualquier solicitud de estas operaciones incluya la Access
Control List (ACL, Lista de control de acceso) predefinida public-read. Para obtener más información,
consulte Especificación de permisos en una política (p. 357) y Especificación de las condiciones de una
política (p. 363).

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddCannedAcl",
"Effect":"Allow",
"Principal": {"AWS":
["arn:aws:iam::111122223333:root","arn:aws:iam::444455556666:root"]},
"Action":["s3:PutObject","s3:PutObjectAcl"],
"Resource":["arn:aws:s3:::examplebucket/*"],
"Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}}

Versión de API 2006-03-01


387
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

}
]
}

Concesión de permisos de solo lectura a un usuario anónimo


En la siguiente política de ejemplo se conceden permisos para s3:GetObject a cualquier usuario
anónimo público. (Para obtener una lista de las operaciones y de los permisos que permiten, consulte
Especificación de permisos en una política (p. 357)). Este permiso permite que cualquier persona pueda
leer los datos del objeto, lo que es útil para cuando configura su bucket como un sitio web y desea que
todos puedan leer los objetos del bucket.

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}

Warning

Extreme las precauciones a la hora de otorgar acceso anónimo a su bucket de S3. Al otorgar
acceso anónimo, cualquier persona puede acceder a su bucket. Se recomienda encarecidamente
que no otorgue nunca ningún tipo de acceso de escritura anónimo en su bucket de S3.

Restricción del acceso a direcciones IP específicas


En el siguiente ejemplo se conceden permisos a un usuario para que realice operaciones de Amazon S3
en objetos del bucket especificado. Sin embargo, la solicitud debe proceder del rango de direcciones IP
especificado en la condición.

La condición en esta instrucción identifica el rango 54.240.143.* de direcciones IP permitidas en formato de


Protocolo de Internet versión 4 (IPv4), con una excepción: 54.240.143.188.

El bloque Condition utiliza las condiciones IpAddress y NotIpAddress, y la clave de condición


aws:SourceIp, que es una clave de condición general de AWS. Para obtener más información acerca de
las claves de condición, consulte Especificación de las condiciones de una política (p. 363). Los valores
de IPv4 aws:SourceIp utilizan la notación CIDR estándar. Para obtener más información, consulte
Operadores de condición de dirección IP en la Guía del usuario de IAM.

{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
"NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"}

Versión de API 2006-03-01


388
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

}
}
]
}

Autorización de direcciones IPv4 y IPv6

Cuando comienza a utilizar direcciones IPv6, le recomendamos que actualice todas las políticas de su
organización con sus rangos de dirección IPv6 además de los rangos IPv4 existentes para asegurarse de
que las políticas sigan funcionando mientras adopta IPv6.

En el siguiente ejemplo de política de bucket se muestra cómo combinar los rangos de dirección IPv4 y
IPv6 para incluir todas las direcciones IP válidas de su organización. La política de ejemplo permitiría el
acceso a las direcciones IP de ejemplo 54.240.143.1 y 2001:DB8:1234:5678::1, y denegaría el
acceso a las direcciones 54.240.143.129 y 2001:DB8:1234:5678:ABCD::1.

Los valores de IPv6 para aws:SourceIp deben estar en formato CIDR estándar. Para IPv6 aceptamos
el uso de :: para representar un rango de 0, por ejemplo, 2032001:DB8:1234:5678::/64. Para obtener más
información, consulte Operadores de condición de dirección IP en la Guía del usuario de IAM.

{
"Id":"PolicyId2",
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AllowIPmix",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:*",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"54.240.143.0/24",
"2001:DB8:1234:5678::/64"
]
},
"NotIpAddress": {
"aws:SourceIp": [
"54.240.143.128/30",
"2001:DB8:1234:5678:ABCD::/80"
]
}
}
}
]
}

Restricción del acceso a un origen de referencia de HTTP específico


Suponga que tiene un sitio web con nombre de dominio (www.example.com o example.com)
con enlaces a fotografías y videos almacenados en su bucket de S3, examplebucket. De forma
predeterminada, todos los recursos de S3 son privados; por lo tanto, solo la cuenta de AWS que creó los
recursos puede acceder a ellos. Para permitir el acceso de lectura a estos objetos desde su sitio web,
puede añadir una política de bucket que conceda el permiso para s3:GetObject con una condición, a
través de la clave aws:Referer, que establezca que la solicitud GET debe proceder de páginas web
específicas. En la siguiente política se especifica la condición StringLike con la clave de condición
aws:Referer.

Versión de API 2006-03-01


389
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:GetObject",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition":{
"StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
}
}
]
}

Asegúrese de que los navegadores que utiliza incluyan el encabezado http referer en la solicitud.

Para aumentar la seguridad del acceso a los objetos del bucket examplebucket puede añadir una
denegación explícita a la política de bucket como se muestra en el siguiente ejemplo. La denegación
explícita sustituye cualquier permiso que pueda conceder a los objetos del bucket examplebucket con
otros medios como las ACL o las políticas de usuario.
Important

Tenga en cuenta que este ejemplo impedirá que todos los usuarios (incluido el usuario raíz)
realicen las acciones de Amazon S3, incluida la administración de políticas de buckets. Piense en
añadir un tercer Sid que permita al usuario raíz realizar las acciones de s3:*.

{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
{
"Sid": "Allow get requests referred by www.example.com and example.com.",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
}
},
{
"Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/
*"]}
}
}
]
}

Concesión de permiso a una identidad de origen Amazon CloudFront


En el siguiente ejemplo de política de bucket se concede permiso a una identidad de origen CloudFront
para obtener (lista) todos los objetos de su bucket de Amazon S3. La identidad de origen CloudFront

Versión de API 2006-03-01


390
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

se utiliza para permitir la característica de contenido privado de CloudFront. La política utiliza el prefijo
CanonicalUser, en lugar de AWS, para especificar un ID de usuario canónico. Para obtener más
información sobre soporte de CloudFront para la publicación de contenido privado, consulte el tema
Distribución de contenido privado en la Guía para desarrolladores de Amazon CloudFront. Debe
especificar el ID de usuario canónico para la identidad de acceso de origen de distribución de CloudFront.
Para obtener instrucciones acerca de cómo buscar el ID de usuario canónico, consulte Especificación de
un elemento principal en una política (p. 356).

{
"Version":"2012-10-17",
"Id":"PolicyForCloudFrontPrivateContent",
"Statement":[
{
"Sid":" Grant a CloudFront Origin Identity access to support private content",
"Effect":"Allow",
"Principal":{"CanonicalUser":"CloudFront Origin Identity Canonical User ID"},
"Action":"s3:GetObject",
"Resource":"arn:aws:s3:::examplebucket/*"
}
]
}

Incorporación de una política de bucket para requerir MFA


Amazon S3 admite el acceso de API protegido por MFA, una característica que puede exigir multi-factor
authentication (MFA) para acceder a sus recursos de Amazon S3. La autenticación multifactor proporciona
un nivel de seguridad adicional que puede aplicar a su entorno de AWS. Se trata de una característica
de seguridad que requiere que los usuarios demuestren una posesión física de un dispositivo de MFA
facilitando un código MFA válido. Para obtener más información, vaya a AWS Multi-Factor Authentication.
Puede solicitar la autenticación MFA para cualquier solicitud de acceso a sus recursos de Amazon S3.

Puede implementar el requisito de autenticación MFA con la clave aws:MultiFactorAuthAge en una


política de bucket. Los usuarios de IAM pueden acceder a los recursos de Amazon S3 con credenciales
temporales emitidas por el AWS Security Token Service (STS). Usted brinda el código de MFA al realizar
la solicitud al STS.

Cuando Amazon S3 recibe una solicitud con autenticación de MFA, la clave aws:MultiFactorAuthAge
brinda un valor numérico que indica el tiempo que transcurrió (en segundos) desde que se creó la
credencial temporal. Si la credencial temporal provista en la solicitud no se creó con un dispositivo de
MFA, este valor de clave es nulo (no está presente). En una política de bucket, puede añadir una condición
para revisar este valor, como se muestra en el siguiente ejemplo de política de bucket. La política deniega
cualquier operación de Amazon S3 en la carpeta /taxdocuments del bucket examplebucket si la
solicitud no incluye una MFA. Para obtener más información acerca de la autenticación MFA, consulte Uso
de Multi-Factor Authentication (MFA) en AWS en la Guía del usuario de IAM.

{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
"Condition": { "Null": { "aws:MultiFactorAuthAge": true }}
}
]
}

Versión de API 2006-03-01


391
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

La condición Null en el bloque Condition se evalúa como válida si el valor de clave


aws:MultiFactorAuthAge es nulo, lo que indica que las credenciales de seguridad temporales en la
solicitud se crearon sin la clave de MFA.

La siguiente política de bucket es una extensión de la política de bucket anterior. Incluye dos instrucciones
de política. Una instrucción concede el permiso para s3:GetObject en un bucket (examplebucket)
a todas las personas y la otra instrucción restringe aún más el acceso a la carpeta examplebucket/
taxdocuments del bucket al exigir la autenticación MFA.

{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
"Condition": { "Null": { "aws:MultiFactorAuthAge": true } }
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}

Puede utilizar de forma opcional una condición numérica para limitar la duración de la validez de la clave
aws:MultiFactorAuthAge, independientemente de la duración de la credencial de seguridad temporal
que se utiliza en la autenticación de la solicitud. Por ejemplo, la siguiente política de bucket, además
de exigir la autenticación MFA, también verifica el tiempo que transcurrió desde que se creó la sesión
temporal. La política deniega cualquier operación si el valor de clave aws:MultiFactorAuthAge indica
que la sesión temporal se creó hace más de una hora (3600 segundos).

{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
"Condition": {"Null": {"aws:MultiFactorAuthAge": true }}
},
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
"Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }}
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],

Versión de API 2006-03-01


392
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}

Concesión de permisos entre cuentas para cargar objetos al mismo tiempo que se
garantiza que el propietario del bucket tenga el control total
Puede permitir que otra cuenta de AWS cargue objetos en su bucket. Sin embargo, como propietario
del bucket, puede optar por tener el control total de los objetos que se cargan a su bucket. La siguiente
política establece que se le debe denegar a una cuenta de AWS específica (111111111111) la capacidad
de cargar objetos a menos que la cuenta permita el acceso de control total al propietario del bucket
que se identifica a través de la dirección de correo electrónico (xyz@amazon.com). La condición
StringNotEquals en la política especifica la clave de condición s3:x-amz-grant-full-control
para expresar el requisito (consulte Especificación de las condiciones de una política (p. 363)).

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"111",
"Effect":"Allow",
"Principal":{"AWS":"1111111111"},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::examplebucket/*"
},
{
"Sid":"112",
"Effect":"Deny",
"Principal":{"AWS":"1111111111" },
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotEquals": {"s3:x-amz-grant-full-control":["emailAddress=xyz@amazon.com"]}
}
}
]
}

Concesión de permisos para el inventario de Amazon S3 y el análisis de Amazon


S3
El inventario de Amazon S3 crea listas de los objetos en un bucket de S3 y la exportación de análisis
de Amazon S3 crea archivos de salida de los datos utilizados en los análisis. El bucket para el que
el inventario enumera los objetos se denomina bucket de origen. El bucket donde se escribe el
archivo de inventario y el bucket donde se escribe el archivo de exportación de análisis se denomina
bucket de destino. Debe crear una política de bucket para el bucket de destino cuando configura el
inventario para un bucket de S3 y cuando configura la exportación de análisis. Para obtener más
información, consulte Inventario de Amazon S3 (p. 439) y Análisis de Amazon S3: análisis de clases de
almacenamiento (p. 267).

En el siguiente ejemplo de política de bucket se concede a Amazon S3 permiso para escribir objetos (PUT)
de la cuenta para el bucket de origen en el bucket de destino. Usted utiliza una política de bucket como
esta en el bucket de destino cuando configura el inventario de Amazon S3 y la exportación de análisis de
Amazon S3.

{
"Version":"2012-10-17",
"Statement":[
{

Versión de API 2006-03-01


393
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Sid":"InventoryAndAnalyticsExamplePolicy",
"Effect":"Allow",
"Principal": {"Service": "s3.amazonaws.com"},
"Action":["s3:PutObject"],
"Resource":["arn:aws:s3:::destination-bucket/*"],
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:::source-bucket"
},
"StringEquals": {
"aws:SourceAccount": "1234567890",
"s3:x-amz-acl": "bucket-owner-full-control"
}
}
}
]
}

Ejemplo de políticas de bucket para puntos de enlace de la VPC para Amazon S3


Puede utilizar las políticas de bucket Amazon S3 para controlar el acceso a los buckets desde puntos de
enlace de la Amazon Virtual Private Cloud (Amazon VPC) específicos o VPC específicas. Esta sección
incluye ejemplos de políticas de bucket que se pueden utilizar para controlar el acceso al bucket de S3
desde puntos de enlace de la VPC. Para obtener información acerca de cómo configurar los puntos de
enlace de la VPC, consulte Puntos de enlace de la VPC en la Guía del usuario de Amazon VPC.

Amazon VPC le permite lanzar recursos de Amazon Web Services (AWS) en una red virtual que haya
definido. Un punto de enlace de la VPC le permite crear una conexión privada entre su VPC y otro servicio
de AWS sin necesidad de acceder a través de Internet, a través de una conexión de virtual private network
(VPN, Red privada virtual), una instancia NAT o AWS Direct Connect.

Un punto de enlace de la VPC para Amazon S3 es una entidad lógica dentro de una VPC que únicamente
permite conectarse a Amazon S3. El punto de enlace de la VPC direcciona las solicitudes a Amazon S3 y
direcciona las respuestas de vuelta a la VPC. Los puntos de enlace de la VPC solo cambian la forma en
que se direccionan las solicitudes; los nombres de DNS y los puntos de enlace públicos de Amazon S3
seguirán funcionando con los puntos de enlace de la VPC. Para obtener información importante acerca de
cómo utilizar los puntos de enlace de Amazon VPC con Amazon S3, consulte Puntos de enlace de la VPC
de Gateway y Puntos de enlace para Amazon S3 en la Guía del usuario de Amazon VPC.

Los puntos de enlace de la VPC para Amazon S3 brindan dos maneras de controlar el acceso a los datos
de Amazon S3:

• Puede controlar qué solicitudes, usuarios o grupos obtienen acceso a través de un punto de enlace de la
VPC específico. Para obtener información acerca de este tipo de control de acceso, consulte Control del
acceso a los servicios con Puntos de enlace de la VPC en la Guía del usuario de Amazon VPC.
• Puede controlar que VPC o puntos de enlace de la VPC tienen acceso a sus buckets de S3 a través de
las políticas de bucket de S3. Para ver ejemplos de este tipo de control de acceso de política de bucket,
consulte los siguientes temas sobre restricción de acceso.

Temas
• Restricción del acceso a un punto de enlace de la VPC específico (p. 395)
• Restricción del acceso a una VPC específica (p. 395)
• Recursos relacionados (p. 396)

Important
Al aplicar las políticas de bucket de S3 para los puntos de conexión de la VPC que se describen
en esta sección, puede bloquear el acceso al bucket sin querer. Los permisos de bucket pensados

Versión de API 2006-03-01


394
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

para limitar el acceso del bucket a las conexiones procedente de su punto de enlace de la VPC
pueden bloquear todas las conexiones al bucket. Para obtener información acerca de cómo
resolver este problema, consulte How do I regain access to an Amazon S3 bucket after applying
a policy to the bucket that restricts access to my VPC endpoint? en el Centro de conocimiento de
AWS Support.

Restricción del acceso a un punto de enlace de la VPC específico

El siguiente es un ejemplo de una política de bucket de S3 que restringe el acceso a un bucket específico,
examplebucket, solo desde el punto de conexión de la VPC con el ID vpce-1a2b3c4d. La política
deniega todo el acceso al bucket si el punto de conexión especificado no se está utilizando. La condición
aws:sourceVpce se utiliza para especificar el punto de conexión. La condición aws:sourceVpce no
requiere un nombre de recurso de Amazon (ARN, Amazon resource name) para el recurso de punto de
conexión de la VPC, solo el ID de la VPC. Para obtener más información acerca del uso de las condiciones
en una política, consulte Especificación de las condiciones de una política (p. 363).

{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}

Restricción del acceso a una VPC específica

Puede crear una política de bucket para restringir el acceso a una VPC específica con la condición
aws:sourceVpc. Esto es útil si tiene múltiples puntos de enlace de la VPC configurados en la misma
VPC y desea administrar el acceso a sus buckets de S3 para todos sus puntos de enlace. El siguiente
es el ejemplo de una política que le brinda a la VPC vpc-111bbb22 acceso a examplebucket y sus
objetos. La política deniega todo el acceso al bucket si la VPC especificada no se está utilizando. La clave
de condición vpc-111bbb22 no requiere un ARN para el recurso de VPC, solo el ID de VPC.

{
"Version": "2012-10-17",
"Id": "Policy1415115909153",
"Statement": [
{
"Sid": "Access-to-specific-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbb22"
}
}

Versión de API 2006-03-01


395
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

}
]
}

Recursos relacionados

• Ejemplos de política de bucket (p. 387)


• Puntos de enlace de la VPC en la Guía del usuario de Amazon VPC

Ejemplos de políticas de usuario


En esta sección se muestran varias políticas de usuario de IAM para controlar el acceso de los usuarios a
Amazon S3. Para obtener información acerca del lenguaje de la política de acceso, consulte Información
general del lenguaje de la política de acceso (p. 354).

Las siguientes políticas de ejemplo funcionarán si las prueba mediante programación. Sin embargo, debe
conceder permisos adicionales que necesita la consola de Amazon S3 para utilizarlas con dicha consola.
Para obtener información acerca del uso de estas políticas con la consola de Amazon S3, consulte
Tutorial: Control del acceso a un bucket con las políticas de usuario (p. 401).

Temas
• Permiso para que el usuario de IAM tenga acceso a uno de los buckets (p. 396)
• Permiso para que cada usuario de IAM tenga acceso a una carpeta en un bucket (p. 397)
• Permiso para que un grupo tenga una carpeta compartida en Amazon S3 (p. 400)
• Permiso para que sus usuarios lean objetos en una parte del bucket corporativo (p. 400)
• Permiso para que un socio coloque archivos en una parte específica del bucket corporativo (p. 400)
• Tutorial: Control del acceso a un bucket con las políticas de usuario (p. 401)

Permiso para que el usuario de IAM tenga acceso a uno de los buckets
En este ejemplo, desea conceder acceso a uno de sus buckets, examplebucket, a un usuario de IAM en
su cuenta de AWS y permitirle que añada, actualice y elimine objetos.

Además de conceder los permisos s3:PutObject, s3:GetObject y s3:DeleteObject al usuario,


la política también concede los permisos s3:ListAllMyBuckets, s3:GetBucketLocation
y s3:ListBucket. Estos son los permisos adicionales que requiere la consola. Las acciones
s3:PutObjectAcl y s3:GetObjectAcl también son necesarias para poder copiar, cortar y pegar
objetos en la consola. Para ver un ejemplo de un tutorial en el que se conceden permisos a usuarios
y se los prueba con la consola, consulte Tutorial: Control del acceso a un bucket con las políticas de
usuario (p. 401).

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:ListAllMyBuckets"
],
"Resource":"arn:aws:s3:::*"
},
{
"Effect":"Allow",
"Action":[

Versión de API 2006-03-01


396
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource":"arn:aws:s3:::examplebucket"
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"
],
"Resource":"arn:aws:s3:::examplebucket/*"
}
]
}

Permiso para que cada usuario de IAM tenga acceso a una carpeta en un bucket
En este ejemplo, desea conceder el acceso a su bucket, examplebucket, a dos usuarios de IAM, Alice
y Bob, para que puedan añadir, actualizar y eliminar objetos. Sin embargo, desea impedir que cada
usuario tenga acceso a una carpeta en el bucket. Debe crear carpetas con nombres que coincidan con los
nombres de los usuarios.

examplebucket
Alice/
Bob/

Para conceder a cada usuario el acceso solo a sus carpetas, puede escribir una política para cada usuario
y asociarla de forma individual. Por ejemplo, puede asociar la siguiente política al usuario Alice para
concederle permisos específicos de Amazon S3 en la carpeta examplebucket/Alice.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::examplebucket/Alice/*"
}
]
}

Luego, asocia una política similar al usuario Bob e identifica la carpeta Bob en el valor Resource.

En vez de asociar políticas a cada usuario, puede escribir una sola política que utilice una variable
de política y asociarla a un grupo. En primer lugar, debe crear un grupo y añadir a Alice y Bob
al grupo. La política del ejemplo siguiente permite un conjunto de permisos de Amazon S3 en la
carpeta examplebucket/${aws:username}. Cuando se evalúa la política, la variable de la política
${aws:username} se reemplaza por el nombre de usuario del solicitante. Por ejemplo, si Alice envía
una solicitud para colocar un objeto, la operación será permitida solo si Alice carga el objeto en la carpeta
examplebucket/Alice.

Versión de API 2006-03-01


397
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::examplebucket/${aws:username}/*"
}
]
}

Note

Cuando utiliza variables de políticas, debe especificar de forma explícita la versión 2012-10-17
en la política. La versión predeterminada del lenguaje de la política de acceso, 2008-10-17, no
admite variables de políticas.

Si desea probar la política anterior en la consola de Amazon S3, esta requiere permiso para permisos
adicionales de Amazon S3, como se muestra en la siguiente política. Para obtener información acerca de
cómo la consola utiliza estos permisos, consulte Tutorial: Control del acceso a un bucket con las políticas
de usuario (p. 401).

{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ],
"Effect": "Allow",
"Resource": [ "arn:aws:s3:::*" ]
},
{
"Sid": "AllowRootLevelListingOfTheBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::examplebucket"],
"Condition":{
"StringEquals":{
"s3:prefix":[""], "s3:delimiter":["/"]
}
}
},
{
"Sid": "AllowListBucketOfASpecificUserPrefix",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::examplebucket"],
"Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] }
}
},
{
"Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix",
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",

Versión de API 2006-03-01


398
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::examplebucket/${aws:username}/*"
}
]
}

Note

En la versión 2012-10-17 de la política, las variables comienzan con $. Este cambio en la


sintaxis puede crear un conflicto potencial si la clave de sus objetos incluye $. Por ejemplo, para
incluir una clave de objeto my$file en la política, debe especificar el carácter $ con ${$}, my
${$}file.

Aunque los nombres de usuario de IAM son identificadores descriptivos fáciles, no necesariamente deben
ser identificadores globales únicos. Por ejemplo, si el usuario Bob abandona la organización y se une un
usuario con el mismo nombre (Bob), este puede tener acceso a la información del usuario anterior con el
mismo nombre. En vez de usar nombres de usuario, puede crear carpetas con los ID de usuario. Cada
ID de usuario es único. En este caso, debe modificar la política anterior para usar la variable de política
${aws:userid}. Para obtener más información acerca de los identificadores de usuarios, consulte
Identificadores de IAM en la Guía del usuario de IAM.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::my_corporate_bucket/home/${aws:userid}/*"
}
]
}

Permiso para que los usuarios que no son de IAM (usuarios de aplicaciones móviles) tengan
acceso a las carpetas de un bucket

Supongamos que desea desarrollar una aplicación móvil, un juego que almacena los datos de usuario
en un bucket de S3. Debe crear una carpeta en el bucket para cada usuario de la aplicación. También
debe limitar el acceso para que cada usuario solo tenga acceso a su propia carpeta.  Pero no puede
crear carpetas antes de que alguien descargue la aplicación y comience a jugar porque no tiene un ID de
usuario.

En este caso, puede solicitar a los usuarios que inicien sesión en la aplicación con los proveedores de
identidades públicos como Login with Amazon, Facebook o Google. Una vez que los usuarios iniciaron
sesión en la aplicación mediante uno de estos proveedores, tendrán un ID de usuario que usted podrá
utilizar para crear carpetas específicas de usuarios en tiempo de ejecución.

Luego, puede utilizar la identidad federada de sitio web en AWS Security Token Service para integrar la
información del proveedor de identidad con su aplicación y obtener credenciales de seguridad temporales
para cada usuario. Luego puede crear políticas de IAM para permitir que la aplicación tenga acceso a su
bucket y realice operaciones como crear carpetas específicas de usuario y cargar datos. Para obtener más

Versión de API 2006-03-01


399
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

información acerca de la identidad federada de sitio web, consulte Acerca de identidades web federadas
en la Guía del usuario de IAM.

Permiso para que un grupo tenga una carpeta compartida en Amazon S3


Al asociar la siguiente política a un grupo, todos los miembros del grupo obtienen acceso a la siguiente
carpeta en Amazon S3: my_corporate_bucket/share/marketing Los miembros del grupo solo
pueden acceder a los permisos específicos de Amazon S3 que se muestran en la política y solo a los
objetos en la carpeta especificada.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::my_corporate_bucket/share/marketing/*"
}
]
}

Permiso para que sus usuarios lean objetos en una parte del bucket corporativo
En este ejemplo, crea un grupo denominado AllUsers, que contiene todos los usuarios de IAM que
pertenecen a la cuenta de AWS. A continuación asocia una política que concede al grupo el acceso a
GetObject y GetObjectVersion, pero solo para objetos en la carpeta my_corporate_bucket/
readonly.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":"arn:aws:s3:::my_corporate_bucket/readonly/*"
}
]
}

Permiso para que un socio coloque archivos en una parte específica del bucket
corporativo
En este ejemplo, crea un grupo llamado WidgetCo que representa a una compañía asociada. Crea un
usuario de IAM para la persona o aplicación específica en la compañía asociada que necesita acceso y,
luego, coloca al usuario en el grupo.

Luego, asocia una política que concede al grupo PutObject acceso a la siguiente carpeta en el bucket
corporativo: my_corporate_bucket/uploads/widgetco.

Como quiere evitar que el grupo WidgetCo realice cualquier otro tipo de acción en el bucket, añade
una instrucción que deniega explícitamente el permiso para cualquier permiso de Amazon S3, excepto

Versión de API 2006-03-01


400
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

PutObject en cualquier recurso de Amazon S3 en la cuenta de AWS. Este paso es necesario solo si
existe una política amplia en uso en cualquier otra parte de su cuenta de AWS, que otorgue a los usuario
un acceso amplio a los recursos de Amazon S3.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"
},
{
"Effect":"Deny",
"NotAction":"s3:PutObject",
"Resource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"
},
{
"Effect":"Deny",
"Action":"s3:*",
"NotResource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"
}
]
}

Tutorial: Control del acceso a un bucket con las políticas de usuario


En este tutorial se explica cómo funcionan los permisos del usuario con Amazon S3. En este ejemplo,
creará un bucket con carpetas y, a continuación, creará usuarios de AWS Identity and Access
Management (IAM) en la cuenta de AWS y concederá a estos usuarios permisos graduales en el bucket de
Amazon S3 y sus carpetas.

Temas
• Conceptos básicos de buckets y carpetas (p. 401)
• Resumen de tutorial (p. 403)
• Prepárese para el tutorial (p. 404)
• Paso 1: cree un bucket (p. 404)
• Paso 2: cree usuarios y un grupo de IAM (p. 405)
• Paso 3: compruebe que los usuarios de IAM no tengan permisos (p. 405)
• Paso 4: otorgue permisos en el nivel de grupo (p. 406)
• Paso 5: otorgue permisos específicos al usuario Alice de IAM (p. 412)
• Paso 6: otorgue permisos específicos al usuario Bob de IAM (p. 416)
• Paso 7: proteja la carpeta Private (p. 416)
• Paso 8: eliminación (p. 418)
• Recursos relacionados (p. 418)

Conceptos básicos de buckets y carpetas

El modelo de datos de Amazon S3 es una estructura plana: usted crea un bucket y el bucket almacena
objetos. No existe una jerarquía entre los subbuckets o las subcarpetas, pero puede emular una jerarquía
de carpetas. Las herramientas, como, por ejemplo, la consola de Amazon S3, pueden mostrar una vista de
estas carpetas y subcarpetas lógicas del bucket, tal y como se muestra en la siguiente imagen.

Versión de API 2006-03-01


401
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

La consola muestra que un bucket denominado companybucket tiene tres carpetas: Private,
Development y Finance, y un objeto, s3-dg.pdf. La consola utiliza los nombres de objeto (claves) para
crear una jerarquía lógica con carpetas y subcarpetas. Considere los siguientes ejemplos:

• Al crear la carpeta Development, la consola crea un objeto con la clave Development/. Tenga en
cuenta el delimitador final (/).
• Al cargar un objeto denominado Projects1.xls en la carpeta Development, la consola carga el
objeto y le asigna la clave Development/Projects1.xls.

En la clave, Development es el prefijo y / es el delimitador. La API de Amazon S3 admite prefijos


y delimitadores en sus operaciones. Por ejemplo, puede obtener una lista de todos los objetos de un
bucket con un prefijo y delimitador específicos. En la consola, al abrir la carpeta Development, la
consola muestra los objetos de esa carpeta. En el siguiente ejemplo, la carpeta Development contiene
un objeto.

Versión de API 2006-03-01


402
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Cuando la consola muestra la carpeta Development del bucket companybucket, envía una solicitud a
Amazon S3 en la que especifica el prefijo Development y el delimitador /. La respuesta de la consola
se parece a una lista de carpetas del sistema de archivos de su equipo. En el ejemplo anterior se
muestra que el bucket companybucket tiene un objeto con la clave Development/Projects1.xls.

La consola utiliza las claves del objeto para inferir una jerarquía lógica. Amazon S3 no tiene una jerarquía
física, solo buckets que contienen objetos en una estructura plana de archivos. Cuando crea objetos con
la API de Amazon S3, puede utilizar las claves del objeto que implican una jerarquía lógica. Al crear una
jerarquía lógica de objetos, puede administrar el acceso a carpetas individuales, tal y como se explica en
este tutorial.

Antes de comenzar, asegúrese de estar familiarizado con el concepto del contenido del bucket en el nivel
raíz. Supongamos que el bucket companybucket tiene los siguientes objetos:

• Private/privDoc1.txt
• Private/privDoc2.zip
• Development/project1.xls
• Development/project2.xls
• Finance/Tax2011/document1.pdf
• Finance/Tax2011/document2.pdf
• s3-dg.pdf

Estas claves de objeto crean una jerarquía lógica con Private, Development y Finance como carpetas
en el nivel raíz y s3-dg.pdf como un objeto en el nivel raíz. Cuando elige el nombre del bucket en la
consola de Amazon S3, los elementos en el nivel raíz aparecen tal y como se muestran en la siguiente
imagen. La consola muestra los prefijos de nivel principal (Private/, Development/ y Finance/) como
carpetas en el nivel raíz. La clave del objeto s3-dg.pdf no tiene prefijo y, por lo tanto, aparece como un
elemento en el nivel raíz.

Resumen de tutorial

En este tutorial, creará un bucket con tres carpetas: (Private, Development y Finance).

Versión de API 2006-03-01


403
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Tiene dos usuarios, Alice y Bob. Quiere que Alice solo tenga acceso a la carpeta Development y que Bob
solo tenga acceso a la carpeta Finance. Desea mantener privado el contenido de la carpeta Private. En
el tutorial, para administrar el acceso, cree los usuarios de IAM (el ejemplo utiliza los nombres de usuario
Alice y Bob) y conceda los permisos necesarios.

IAM también permite crear grupos de usuarios y conceder permisos a nivel grupal para que se apliquen
a todos los usuarios del grupo. Esto lo ayuda a administrar mejor los permisos. Para este ejercicio, Alice
y Bob deben tener algunos permisos en común. Por lo tanto, también debe crear un grupo denominado
Consultants y, a continuación, añadir a Alice y Bob al grupo. En primer lugar, para conceder los
permisos, asocie una política de grupo al grupo. A continuación, para añadir los permisos específicos del
usuario, asocie políticas a usuarios específicos.
Note
En el tutorial se utiliza companybucket como el nombre del bucket, Alice y Bob como los
usuarios de IAM y Consultants como el nombre del grupo. Dado que Amazon S3 requiere que
los nombres de los buckets sean exclusivos a nivel global, debe crear un nombre de bucket para
reemplazar el existente.

Prepárese para el tutorial


En este ejemplo, utilizará las credenciales de su cuenta de AWS para crear usuarios de IAM. Al principio,
estos usuarios no tienen permisos. Conceda permisos a estos usuarios de forma gradual para realizar
acciones específicas de Amazon S3. Para probar estos permisos, inicie sesión en la consola con las
credenciales de cada usuario. A medida que concede los permisos de forma gradual como propietario
de la cuenta de AWS y prueba los permisos como usuario de IAM, tendrá que iniciar y cerrar sesión con
diferentes credenciales en cada ocasión. Puede realizar estas pruebas con un navegador, pero el proceso
se agilizará si utiliza dos navegadores distintos. Utilice un navegador para conectarse a la Consola de
administración de AWS con las credenciales de su cuenta de AWS y otro navegador para conectarse con
las credenciales del usuario de IAM.

Para iniciar sesión en la Consola de administración de AWS con las credenciales de su cuenta de AWS,
consulte https://console.aws.amazon.com/. Un usuario de IAM no puede iniciar sesión con el mismo
enlace. Un usuario de IAM debe utilizar una página de inicio de sesión habilitada para IAM. Como
propietario de la cuenta, puede proporcionar este enlace a los usuarios.

Para obtener más información acerca de IAM, consulte La página de inicio de sesión de Consola de
administración de AWS en la Guía del usuario de IAM.

Para proporcionar un enlace de inicio de sesión para usuarios de IAM

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https://


console.aws.amazon.com/iam/.
2. En el panel Navigation (Navegación), elija IAM Dashboard (Panel de IAM).
3. Anote el URL en el enlace de inicio de sesión de los usuarios de IAM:. Proporcionará este enlace a los
usuarios de IAM para que inicien sesión en la consola con el nombre de usuario y contraseña de IAM.

Paso 1: cree un bucket


En este paso, iniciará sesión en la consola de Amazon S3 con las credenciales de su cuenta de AWS,
creará un bucket, añadirá las carpetas (Development, Finance y Private) al bucket y cargará uno o
dos documentos de muestra en cada carpeta.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
2. Cree un bucket.

Para obtener instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service

Versión de API 2006-03-01


404
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

3. Cargue un documento en el bucket.

Para este ejercicio, supongamos que tiene el documento s3-dg.pdf en el nivel raíz de este bucket.
Si carga un documento diferente, sustituya el nombre de archivo por s3-dg.pdf.
4. Añada las tres carpetas denominadas Private, Finance y Development al bucket.

Para obtener instrucciones paso a paso acerca de cómo crear una carpeta, consulte Creación de una
carpeta en la Guía del usuario de la consola de Amazon Simple Storage Service.
5. Cargue uno o dos documentos en cada carpeta.

Para este ejercicio, supongamos que tiene cargado un par de documentos en cada carpeta, lo que
hace que el bucket tenga objetos con las siguientes claves:

• Private/privDoc1.txt
• Private/privDoc2.zip
• Development/project1.xls
• Development/project2.xls
• Finance/Tax2011/document1.pdf
• Finance/Tax2011/document2.pdf
• s3-dg.pdf

Para obtener instrucciones paso a paso, consulte ¿Cómo puedo cargar archivos y carpetas en un
bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service

Paso 2: cree usuarios y un grupo de IAM

Ahora utilice la consola de IAM para añadir dos usuarios de IAM, Alice y Bob, a su cuenta de AWS.
Además, cree un grupo administrativo denominado Consultants y, a continuación, añada ambos
usuarios al grupo.
Warning

Cuando añade los usuarios y un grupo, no debe asociar ninguna política que conceda permisos a
estos usuarios. Al principio, estos usuarios no tienen ningún permiso. En las siguientes secciones
se explica cómo conceder los permisos de forma gradual. En primer lugar, debe asegurarse
de haber asignado contraseñas a estos usuarios de IAM. Utilice estas credenciales de usuario
para probar las acciones de Amazon S3 y comprobar que los permisos funcionen de la forma
esperada.

Para obtener instrucciones paso a paso acerca de cómo crear un nuevo usuario de IAM, consulte Creación
de un usuario de IAM en su cuenta de AWS en la Guía del usuario de IAM. Cuando cree los usuarios para
este tutorial, marque AWS Management Console access (Acceso a consola de administración de AWS) y
deje sin marcar Programmatic access (Acceso mediante programación).

Para obtener instrucciones paso a paso acerca de cómo crear un grupo administrativo, consulte Creación
del primer grupo y usuario administrador de IAM en la Guía del usuario de IAM.

Paso 3: compruebe que los usuarios de IAM no tengan permisos

Si utiliza dos navegadores, ahora puede utilizar el segundo navegador para iniciar sesión en la consola con
una de las credenciales de usuario de IAM.

1. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de inicio
de sesión para usuarios de IAM (p. 404)), inicie sesión en la Consola de administración de AWS con
cualquiera de las credenciales de usuario de IAM.
2. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

Versión de API 2006-03-01


405
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Revise el siguiente mensaje de la consola que indica que el acceso está denegado.

Ahora, puede comenzar a conceder permisos de forma gradual a los usuarios. En primer lugar, asocie una
política de grupo que conceda los permisos que ambos usuarios deben tener.

Paso 4: otorgue permisos en el nivel de grupo

Quiere que los usuarios puedan realizar las siguientes acciones:

• Mostrar todos los buckets que pertenecen a la cuenta principal. Para ello, Bob y Alice deben tener
permiso para ejecutar la acción s3:ListAllMyBuckets.
• Mostrar los elementos, las carpetas y los objetos del bucket companybucket en el nivel raíz.
Para ello, Bob y Alice deben tener permiso para ejecutar la acción s3:ListBucket en el bucket
companybucket.

En primer lugar, cree una política que conceda estos permisos y, a continuación, asóciela al grupo
Consultants.

Paso 4.1: conceda permiso para mostrar todos los buckets

En este paso, creará una política administrada que conceda a los usuarios los permisos mínimos para
que puedan mostrar todos los buckets que pertenecen a la cuenta principal y, a continuación, asociará la
política al grupo Consultants. Al asociar la política administrada a un usuario o grupo, permite al usuario
o grupo obtener una lista de buckets que pertenecen a la cuenta principal de AWS.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https://


console.aws.amazon.com/iam/.
Note

Dado que concederá permisos al usuario, inicie sesión con las credenciales de su cuenta de
AWS, no como usuario de IAM.
2. Cree la política administrada.

a. En el panel de navegación de la izquierda, elija Policies (Políticas) y, a continuación, seleccione


Create Policy (Crear política).
b. Seleccione la pestaña JSON.
c. Copie la siguiente política de acceso y péguela en el campo de texto de la política.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
}
]
}

Versión de API 2006-03-01


406
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Una política es un documento JSON. En el documento, Statement es una matriz de objetos,


cada uno describe un permiso con una recopilación de pares nombre-valor. La política anterior
describe un permiso específico. El elemento Action especifica el tipo de acceso. En la política,
s3:ListAllMyBuckets es una acción predeterminada de Amazon S3. Esta acción abarca
la operación GET Service de Amazon S3, que devuelve una lista de todos los buckets que
pertenecen al remitente autenticado. El valor del elemento Effect determina si se concede o
deniega un permiso específico.
d. Elija Review Policy (Revisar la política). En la página siguiente, introduzca
AllowGroupToSeeBucketListInTheConsole en el campo Name (Nombre) y, a continuación,
seleccione Create policy (Crear política).
Note

La entrada Summary (Resumen) muestra un mensaje que indica que la política no


concede ningún permiso. Para este tutorial, puede hacer caso omiso de este mensaje.
3. Asocie la política administrada AllowGroupToSeeBucketListInTheConsole que creó para el
grupo Consultants.

Para obtener instrucciones paso a paso acerca de cómo asociar una política administrada, consulte
Adición y eliminación de permisos de identidad de IAM en la Guía del usuario de IAM.

Asocie los documentos de la política a los usuarios y grupos de IAM en la consola de IAM. Asocie la
política al grupo porque quiere que ambos usuarios puedan mostrar los buckets.
4. Pruebe el permiso.

a. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de
inicio de sesión para usuarios de IAM (p. 404)), inicie sesión en la consola con cualquiera de las
credenciales del usuario de IAM.
b. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

Ahora, la consola debería mostrar todos los buckets pero no los objetos que ellos contienen.

Paso 4.2: permita a los usuarios mostrar el contenido de un bucket en el nivel raíz

A continuación, permita a todos los usuarios del grupo Consultants mostrar los elementos del bucket
companybucket en el nivel raíz. Cuando un usuario elija el bucket de la empresa en la consola de
Amazon S3, podrá ver los elementos del bucket en el nivel raíz.

Versión de API 2006-03-01


407
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Note
En este ejemplo se utiliza companybucket a título ilustrativo. Debe utilizar el nombre del bucket
que creó.

Es necesario realizar un análisis de forma más detenida para comprender qué solicitud envía la consola a
Amazon S3 cuando selecciona el nombre de un bucket, la respuesta que devuelve Amazon S3 y la forma
en que la consola interpreta la respuesta.

Al elegir el nombre de un bucket, la consola envía la solicitud GET Bucket (List Objects) a Amazon S3.
Esta solicitud incluye los siguientes parámetros:

• El parámetro prefix con una cadena vacía como valor.


• El parámetro delimiter con / como valor.

A continuación, se muestra un ejemplo de solicitud.

GET ?prefix=&delimiter=/ HTTP/1.1


Host: companybucket.s3.amazonaws.com
Date: Wed, 01 Aug 2012 12:00:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=

Amazon S3 devuelve una respuesta que incluye el siguiente elemento <ListBucketResult/>.

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>companybucket</Name>
<Prefix></Prefix>
<Delimiter>/</Delimiter>
...
<Contents>
<Key>s3-dg.pdf</Key>
...
</Contents>
<CommonPrefixes>
<Prefix>Development/</Prefix>
</CommonPrefixes>
<CommonPrefixes>
<Prefix>Finance/</Prefix>

Versión de API 2006-03-01


408
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

</CommonPrefixes>
<CommonPrefixes>
<Prefix>Private/</Prefix>
</CommonPrefixes>
</ListBucketResult>

La clave del objeto s3-dg.pdf no contiene el delimitador / y Amazon S3 devuelve la clave en el elemento
<Contents>. Sin embargo, todas las demás claves del bucket de ejemplo contienen el delimitador /.
Amazon S3 agrupa estas claves y devuelve un elemento <CommonPrefixes> para cada uno de los
valores de prefijo diferentes Development/, Finance/ y Private/, que es una subcadena desde el
comienzo de estas claves hasta la primera instancia del delimitador / especificado.

La consola interpreta este resultado y muestra los elementos en el nivel raíz como tres carpetas y una
clave de objeto.

Si Bob o Alice abren la carpeta Development (Desarrollo), la consola envía la solicitud GET Bucket (List
Objects) a Amazon S3 con los parámetros prefix y delimiter establecidos en los siguientes valores:

• El parámetro prefix con el valor Development/.


• El parámetro delimiter con el valor “/”.

Como respuesta, Amazon S3 devuelve las claves de objeto que comienzan con el prefijo especificado.

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Name>companybucket</Name>
<Prefix>Development</Prefix>
<Delimiter>/</Delimiter>
...
<Contents>
<Key>Project1.xls</Key>
...
</Contents>
<Contents>
<Key>Project2.xls</Key>
...
</Contents>
</ListBucketResult>

Versión de API 2006-03-01


409
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

La consola muestra las claves de objeto.

Ahora, vuelva a conceder permiso a los usuarios para mostrar los elementos del bucket en el nivel
raíz. Para mostrar el contenido del bucket, los usuarios necesitan permiso para ejecutar la acción
s3:ListBucket, tal como se muestra en la siguiente instrucción de política. Para asegurarse de que
vean solo el contenido en el nivel raíz, añada una condición en la que los usuarios deben especificar un
parámetro prefix vacío en la solicitud, es decir, no pueden hacer doble clic en ninguna de las carpetas
en el nivel raíz. Por último, añada una condición para solicitar acceso de tipo carpeta al pedir que las
solicitudes de usuario incluyan el parámetro delimiter con el valor “/”.

{
"Sid": "AllowRootLevelListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{
"StringEquals":{
"s3:prefix":[""], "s3:delimiter":["/"]
}
}
}

Al elegir un bucket de la consola de Amazon S3, la consola primero envía la solicitud GET Bucket location
para buscar la región de AWS donde se implementa el bucket. A continuación, la consola utiliza el
punto de enlace específico de la región del bucket para enviar la solicitud GET Bucket (List Objects).
Como resultado, si los usuarios utilizan la consola, debe concederles permiso para ejecutar la acción
s3:GetBucketLocation, tal como se muestra en la siguiente instrucción de política.

{
"Sid": "RequiredByS3Console",
"Action": ["s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
}

Para permitir a los usuarios mostrar el contenido del bucket en el nivel raíz

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.

Versión de API 2006-03-01


410
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Utilice las credenciales de su cuenta de AWS, no las credenciales de usuario de IAM, para iniciar
sesión en la consola.
2. Sustituya la política administrada existente AllowGroupToSeeBucketListInTheConsole asociada
al grupo Consultants por la siguiente política, que también permite la acción s3:ListBucket.
Recuerde sustituir companybucket en la política Resource por el nombre del bucket.

Para obtener instrucciones paso a paso, consulte Edición de políticas de IAM en la Guía del usuario
de IAM. Al seguir las instrucciones paso a paso, asegúrese de seguir las indicaciones para aplicar los
cambios a todas las entidades principales a las que la política está asociada.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid":
"AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
"Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ],
"Effect": "Allow",
"Resource": [ "arn:aws:s3:::*" ]
},
{
"Sid": "AllowRootLevelListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{
"StringEquals":{
"s3:prefix":[""], "s3:delimiter":["/"]
}
}
}
]
}

3. Pruebe los permisos actualizados.

a. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de
inicio de sesión para usuarios de IAM (p. 404)), inicie sesión en la Consola de administración de
AWS.

Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


b. Elija el bucket que creó y la consola mostrará los elementos del bucket en el nivel raíz. Si elige
cualquiera de las carpetas del bucket, no podrá ver el contenido de la carpeta, ya que aún no ha
concedido esos permisos.

Versión de API 2006-03-01


411
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Esta prueba se ejecuta correctamente cuando los usuarios utilizan la consola deAmazon S3. Cuando elija
un bucket en la consola, la implementación de la consola envía una solicitud que incluye el parámetro
prefixcon una cadena vacía como valor y el parámetro delimiter con “/” como valor.

Paso 4.3: resumen de la política de grupo

El resultado final de la política de grupo que añadió es conceder a los usuarios de IAM, Alice y Bob, los
siguientes permisos:

• Mostrar todos los buckets que pertenecen a la cuenta principal.


• Ver los elementos del bucket companybucket en el nivel raíz.

Sin embargo, los usuarios aún no pueden hacer demasiado. A continuación, conceda permisos específicos
del usuario de la siguiente manera:

• Permita a Alice obtener y colocar objetos en la carpeta Development.


• Permita a Bob obtener y colocar objetos en la carpeta Finance.

Para permisos específicos del usuario, asocie una política al usuario específico, no al grupo. En la
siguiente sección, conceda permiso a Alice para trabajar en la carpeta Development. Puede repetir los
pasos para conceder un permiso similar a Bob para trabajar en la carpeta Finance.

Paso 5: otorgue permisos específicos al usuario Alice de IAM

Ahora debe conceder permisos adicionales a Alice para que pueda ver el contenido de la carpeta
Development y obtener y colocar objetos en esa carpeta.

Paso 5.1: otorgue permiso al usuario Alice de IAM para mostrar el contenido de la carpeta
Development

Para que Alice pueda mostrar el contenido de la carpeta Development, debe aplicar una política
al usuario Alice que le conceda permiso para ejecutar la acción s3:ListBucket en el bucket
companybucket, siempre que la solicitud incluya el prefijo Development/. Utilice una política insertada,
ya que quiere que esta política se aplique únicamente al usuario Alice. Para obtener más información

Versión de API 2006-03-01


412
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

sobre las políticas insertadas, consulte Políticas administradas y políticas insertadas en la Guía del usuario
de IAM.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https://


console.aws.amazon.com/iam/.

Utilice las credenciales de su cuenta de AWS, no las credenciales de usuario de IAM, para iniciar
sesión en la consola.
2. Cree una política insertada para conceder permiso al usuario Alice para mostrar el contenido de la
carpeta Development.

a. En el panel de navegación de la izquierda, elija Users (Usuarios).


b. Elija el nombre de usuario Alice.
c. En la página de detalles del usuario, elija la pestaña Permissions (Permisos) y, a continuación,
seleccione Add inline policy (Añadir política insertada).
d. Seleccione la pestaña JSON.
e. Copie la siguiente política de acceso y péguela en el campo de texto de la política.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringLike":{"s3:prefix":["Development/*"] }
}
}
]
}

f. Elija Review Policy (Revisar la política). En la página siguiente, introduzca un nombre en el campo
Name (Nombre) y, a continuación, elija Create policy (Crear política).
3. Pruebe el cambio en los permisos de Alice:

a. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de
inicio de sesión para usuarios de IAM (p. 404)), inicie sesión en la Consola de administración de
AWS.
b. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.
c. En la consola de Amazon S3, compruebe que Alice pueda ver la lista de objetos en la carpeta
Development/ del bucket.

Cuando el usuario selecciona la carpeta /Development para ver la lista de objetos que
contiene, la consola de Amazon S3 envía la solicitud ListObjects a Amazon S3 con el prefijo
/Development. Debido a que se le ha concedido permiso al usuario para ver la lista de objetos
con el prefijo Development y el delimitador /, Amazon S3 devuelve la lista de objetos con el
prefijo de clave Development/ y la consola muestra la lista.

Versión de API 2006-03-01


413
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Paso 5.2: otorgue permisos al usuario Alice de IAM para obtener y colocar objetos en la carpeta
Development

Para que Alice pueda obtener y colocar objetos en la carpeta Development, necesitará permiso para
ejecutar las acciones s3:GetObject y s3:PutObject. Las siguientes instrucciones de política conceden
estos permisos, siempre que la solicitud incluya el parámetro prefix con un valor de Development/.

{
"Sid":"AllowUserToReadWriteObjectData",
"Action":["s3:GetObject", "s3:PutObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket/Development/*"]
}

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.

Utilice las credenciales de su cuenta de AWS, no las credenciales de usuario de IAM, para iniciar
sesión en la consola.
2. Edite la política insertada que creó en el paso anterior.

a. En el panel de navegación de la izquierda, elija Users (Usuarios).


b. Elija el nombre de usuario Alice.
c. En la página de detalles del usuario, elija la pestaña Permissions (Permisos) y expanda la sección
Inline Policies (Políticas insertadas).
d. Seleccione Edit Policy (Editar política) junto al nombre de la política que creó en el paso anterior.
e. Copie la siguiente política y péguela en el campo de texto de la política para sustituir la política
existente.

{
"Version": "2012-10-17",
"Statement":[
{
"Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action":["s3:ListBucket"],
"Effect":"Allow",

Versión de API 2006-03-01


414
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Resource":["arn:aws:s3:::companybucket"],
"Condition":{
"StringLike":{"s3:prefix":["Development/*"]
}
}
},
{
"Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder",
"Action":["s3:GetObject", "s3:PutObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket/Development/*"]
}
]
}

3. Pruebe la política actualizada:

a. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de
inicio de sesión para usuarios de IAM (p. 404)), inicie sesión en la Consola de administración de
AWS.
b. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.
c. En la consola de Amazon S3, compruebe que Alice pueda añadir y descargar un objeto en la
carpeta Development.

Paso 5.3: deniegue permisos de forma explícita al usuario Alice de IAM para que no obtenga
acceso a ninguna otra carpeta del bucket
El usuario Alice ahora puede mostrar el contenido del bucket companybucket en el nivel raíz. También
puede obtener y colocar objetos en la carpeta Development. Si realmente desea ajustar los permisos de
acceso, puede denegar de forma explícita el acceso a Alice a cualquier otra carpeta del bucket. Si existe
alguna otra política (política de bucket o ACL) que conceda acceso a Alice a otra carpeta del bucket, esta
denegación explícita anula estos permisos.

Puede añadir la siguiente instrucción a la política del usuario Alice que requiere que todas las solicitudes
que Alice envía a Amazon S3 incluyan el parámetro prefix, cuyo valor puede ser Development/* o una
cadena vacía.

{
"Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] },
"Null" : {"s3:prefix":false }
}
}

Existen dos expresiones condicionales en el bloque Condition. El resultado de estas expresiones


condicionales se combina con el uso de la operación lógica AND. Si ambas condiciones son válidas, el
resultado de la condición combinada se considera válido. Dado que el Effect en esta política es Deny,
cuando la Condition se considera válida, los usuarios no pueden realizar la Action especificada.

• La expresión condicional Null asegura que las solicitudes de Alice incluyan el parámetro prefix.

El parámetro prefix requiere acceso de tipo carpeta. Si envía una solicitud sin el parámetro prefix,
Amazon S3 devuelve todas las claves de objeto.

Si la solicitud incluye el parámetro prefix con un valor nulo, la expresión se considera válida y, por
lo tanto, el parámetro Condition también se considera válido. Debe permitir una cadena vacía como
valor del parámetro prefix. Recuerde que permitir una cadena nula permite a Alice recuperar los

Versión de API 2006-03-01


415
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

elementos del bucket en el nivel raíz como lo hizo la consola en la explicación anterior. Para obtener
más información, consulte Paso 4.2: permita a los usuarios mostrar el contenido de un bucket en el nivel
raíz (p. 407).
• La expresión condicional StringNotLike asegura que la solicitud falle, si se especifica el valor del
parámetro prefix y no el parámetro Development/*.

Siga los pasos de la sección anterior y vuelva a actualizar la política insertada que creó para el usuario
Alice.

Copie la siguiente política y péguela en el campo de texto de la política para sustituir la política existente.

{
"Version": "2012-10-17",
"Statement":[
{
"Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket"],
"Condition":{
"StringLike":{"s3:prefix":["Development/*"]
}
}
},
{
"Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder",
"Action":["s3:GetObject", "s3:PutObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket/Development/*"]
},
{
"Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] },
"Null" : {"s3:prefix":false }
}
}
]
}

Paso 6: otorgue permisos específicos al usuario Bob de IAM


Ahora desea conceder permiso a Bob para trabajar en la carpeta Finance. Siga los pasos realizados
anteriormente para conceder permisos a Alice, pero sustituya la carpeta Development por la carpeta
Finance. Para obtener instrucciones paso a paso, consulte Paso 5: otorgue permisos específicos al
usuario Alice de IAM (p. 412).

Paso 7: proteja la carpeta Private


En este ejemplo, tiene solo dos usuarios. Concedió todos los permisos mínimos requeridos en el nivel de
grupo y los permisos en el nivel de usuario solo cuando realmente se requerían permisos en el nivel de
usuario individual. Este enfoque ayuda a reducir el esfuerzo para administrar los permisos. A medida que
el número de usuarios aumenta, administrar los permisos puede ser complicado. Por ejemplo, no quiere
que ninguno de los usuarios de este ejemplo obtenga acceso al contenido de la carpeta Private. ¿Cómo
asegurarse de no conceder permisos accidentalmente al usuario? Añada una política que deniegue
explícitamente el acceso a la carpeta. Una denegación explícita anula cualquier otro permiso.

Para asegurarse de que la carpeta Private sea privada, puede añadir estas dos instrucciones de
denegación a la política de grupo:

Versión de API 2006-03-01


416
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• Añada la siguiente instrucción para denegar explícitamente cualquier acción sobre los recursos de la
carpeta Private (companybucket/Private/*).

{
"Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
"Action": ["s3:*"],
"Effect": "Deny",
"Resource":["arn:aws:s3:::companybucket/Private/*"]
}

• Además, deniegue el permiso para mostrar la acción de los objetos cuando la solicitud especifica
el prefijo Private/. Si Bob o Alice abren la carpeta Private en la consola, esta política hace que
Amazon S3 devuelva una respuesta de error.

{
"Sid": "DenyListBucketOnPrivateFolder",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringLike":{"s3:prefix":["Private/"]}
}
}

Sustituya la política del grupo Consultants por una política actualizada que incluya las instrucciones de
denegación anteriores. Después de aplicar la política actualizada, ninguno de los usuarios del grupo puede
obtener acceso a la carpeta Private de su bucket.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.

Utilice las credenciales de su cuenta de AWS, no las credenciales de usuario de IAM, para iniciar
sesión en la consola.
2. Sustituya la política administrada existente AllowGroupToSeeBucketListInTheConsole
que se encuentra asociada al grupo Consultants por la siguiente política. Recuerde sustituir
companybucket en la política por el nombre de su bucket.

Para obtener instrucciones, consulte Edición de políticas administradas por el cliente en la Guía del
usuario de IAM. Al seguir las instrucciones, asegúrese de seguir las indicaciones para aplicar los
cambios a todas las entidades principales a las que la política está asociada.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid":
"AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
},
{
"Sid": "AllowRootLevelListingOfCompanyBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{
"StringEquals":{"s3:prefix":[""]}
}
},

Versión de API 2006-03-01


417
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

{
"Sid": "RequireFolderStyleList",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringNotEquals":{"s3:delimiter":"/"}
}
},
{
"Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
"Action": ["s3:*"],
"Effect": "Deny",
"Resource":["arn:aws:s3:::companybucket/Private/*"]
},
{
"Sid": "DenyListBucketOnPrivateFolder",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringLike":{"s3:prefix":["Private/"]}
}
}
]
}

Paso 8: eliminación
Para realizar una limpieza, abra la consola de IAM y elimine los usuarios Alice y Bob. Para obtener
instrucciones paso a paso, consulte Eliminación de un usuario de IAM en la Guía del usuario de IAM.

Para asegurarse de que no le apliquen cargos adicionales por almacenamiento, debe eliminar los objetos y
el bucket que creó para este ejercicio.

Recursos relacionados

• Administración de políticas de IAM en la Guía del usuario de IAM.

Administración de acceso con ACL


Temas
• Información general de las Access Control Lists (ACL, Listas de control de acceso) (p. 419)
• Administración de las ACL (p. 425)

Las listas de control de acceso (ACL) son una de las opciones de política de acceso basada en recursos
(consulte Información general sobre la administración de acceso (p. 313)) que puede utilizar para
administrar el acceso a sus buckets y objetos. Puede utilizar las ACL para otorgar permisos de lectura/
escritura básicos a otras cuentas de AWS. Hay límites en la administración de permisos con ACL. Por
ejemplo, puede otorgar permisos solo a otras cuentas de AWS; no puede otorgar permisos a usuarios en
su cuenta. No puede otorgar permisos condicionales ni tampoco puede denegar permisos explícitamente.
Las ACL son adecuadas para situaciones específicas. Por ejemplo, si el propietario de un bucket
les permite a otras cuentas de AWS cargar objetos, los permisos para estos objetos solo se pueden
administrar con una ACL de objeto de la cuenta de AWS que es propietaria del objeto.

Los siguientes temas introductorios explican los conceptos básicos y las opciones disponibles para
administrar el acceso a sus recursos de Amazon S3 y ofrecen directrices sobre qué opciones de política de
acceso debe utilizar y cuándo.

Versión de API 2006-03-01


418
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

• Introducción a la administración de permisos de acceso para los recursos de Amazon S3 (p. 312)
• Directrices de uso de las opciones de política de acceso disponibles (p. 324)

Información general de las Access Control Lists (ACL, Listas de


control de acceso)
Temas
• ¿Quién es un beneficiario? (p. 420)
• ¿Qué permisos puedo conceder? (p. 421)
• ACL de muestra (p. 423)
• ACL predefinidas (p. 424)
• Cómo especificar una ACL (p. 424)

Las listas de control de acceso (ACL) de Amazon S3 le permiten administrar el acceso a buckets y objetos.
Cada bucket y objeto incluye una ACL como un subrecurso. Esto define qué cuentas de AWS o grupos
tienen acceso y el tipo de acceso. Cuando se recibe una solicitud en relación con un recurso, Amazon
S3 verifica la ACL correspondiente para asegurarse de que el solicitante tenga los permisos de acceso
necesarios.

Cuando crea un bucket o un objeto, Amazon S3 crea una ACL predeterminada que concede al propietario
del recurso control total sobre el recurso. Esto se muestra en el siguiente ACL de bucket de muestra (el
ACL del objeto predeterminado tiene la misma estructura):

Example

<?xml version="1.0" encoding="UTF-8"?>


<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>*** Owner-Canonical-User-ID ***</ID>
<DisplayName>owner-display-name</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="Canonical User">
<ID>*** Owner-Canonical-User-ID ***</ID>
<DisplayName>display-name</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>

La ACL de muestra incluye un elemento Owner que identifica al propietario a través del ID de usuario
canónico de la cuenta de AWS. Para obtener instrucciones acerca de cómo buscar su identificador de
usuario canónico, consulte Búsqueda del ID de usuario canónico de una cuenta de AWS (p. 420). El
elemento Grant identifica al beneficiario (ya sea una cuenta de AWS o un grupo predefinido) y el permiso
otorgado. Esta ACL predeterminada tiene un elemento Grant para el propietario. Usted otorga permisos al
añadir elementos Grant, con cada concesión identifica al beneficiario y al permiso.
Note

Una ACL puede tener hasta 100 concesiones.

Versión de API 2006-03-01


419
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

¿Quién es un beneficiario?
Un beneficiario puede ser una cuenta de AWS o uno de los grupos de Amazon S3 predefinidos. Puede
conceder permiso a una cuenta de AWS mediante la dirección de correo electrónico o del ID de usuario
canónico. Sin embargo, si proporciona una dirección de correo electrónico en su solicitud de concesión,
Amazon S3 detecta el ID de usuario canónico para esa cuenta y lo añade a la ACL. Las ACL resultantes
siempre incluye el ID de usuario canónico para la cuenta de AWS, no la dirección de correo electrónico de
la cuenta de AWS.
Important

Solo las siguientes regiones de AWS permiten utilizar direcciones de correo electrónico para
especificar un beneficiario de una concesión:

• US East (N. Virginia)


• EE.UU. Oeste (Norte de California)
• EE.UU. Oeste (Oregón)
• Asia Pacífico (Singapur)
• Asia Pacífico (Sídney)
• Asia Pacífico (Tokio)
• UE (Irlanda)
• América del Sur (São Paulo)

Para ver una lista de todas las regiones y puntos de enlace admitidos en Amazon S3, consulte
Regiones y puntos de enlace en la Referencia general de AWS.
Warning

Cuando les otorga a otras cuentas de AWS acceso a sus recursos, asegúrese de que las cuentas
de AWS puedan delegar sus permisos a usuarios de sus cuentas. Esto se conoce como acceso
entre cuentas. Para obtener información acerca del uso del acceso entre cuentas, consulte
Creación de un rol para delegar permisos a un usuario de IAM en la Guía del usuario de IAM.

Búsqueda del ID de usuario canónico de una cuenta de AWS

El ID de usuario canónico está asociado a su cuenta de AWS. Es una cadena larga, como
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be. Para obtener
información acerca de cómo encontrar el ID de usuario canónico de su cuenta, consulte Buscar el ID de
usuario canónico de su cuenta.

También puede buscar el ID de usuario canónico de una cuenta de AWS mediante la lectura de la ACL
de un bucket o un objeto para la cual la cuenta de AWS tiene permisos de acceso. Cuando una cuenta de
AWS individual recibe permisos mediante una solicitud de concesión, se añade una entrada de concesión
a la ACL con el ID de usuario canónico de la cuenta de AWS.
Note

Si hace su bucket público (no se recomienda) cualquier usuario sin autenticar puede cargar
objetos al bucket. Estos usuarios anónimos no tienen una cuenta de AWS. Cuando un usuario
anónimo carga un objeto en su bucket Amazon S3 agrega un ID de usuario canónico especial
(65a011a29cdf8ec533ec3d1ccaae921c) como propietario del objeto en la ACL. Para obtener
más información, consulte Propiedad de los buckets y objetos de Amazon S3 (p. 313).

Grupos predefinidos de Amazon S3

Amazon S3 tiene un conjunto de grupos predefinidos. Cuando le otorga acceso a la cuenta a un grupo,
usted especifica uno de nuestros Uniform Resource Identifiers (URI, Identificadores de recursos uniformes)
en lugar de un ID de usuario canónico. Proporcionamos los siguientes grupos predefinidos:

Versión de API 2006-03-01


420
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

• Grupo Usuarios autenticados: representado por http://acs.amazonaws.com/groups/global/


AuthenticatedUsers.

Este grupo representa todas las cuentas de AWS. El permiso de acceso a este grupo permite que
cualquier cuenta de AWS pueda acceder al recurso. Sin embargo, todas las solicitudes deben estar
firmadas (autenticadas).
Warning
Al conceder acceso al Grupo Usuarios autenticados cualquier usuario autenticado de AWS en
el mundo puede acceder a su recurso.
• Grupo Todos los usuarios: representado por http://acs.amazonaws.com/groups/global/
AllUsers.

El permiso de acceso a este grupo permite que cualquier persona en el mundo tenga acceso al recurso.
Las solicitudes pueden estar firmadas (autenticadas) o pueden no incluir una firma (anónimas). Las
solicitudes sin firmar omiten el encabezado de autenticación en la solicitud.
Warning
Recomendamos encarecidamente que no conceda nunca los permisos WRITE, WRITE_ACP
o FULL_CONTROL al grupo Todos los usuarios. Por ejemplo, los permisos WRITE permiten a
cualquier persona almacenar objetos en su bucket y usted tendrá que asumir los costos. Esto
también permite a otras personas eliminar objetos que quizás desee conservar. Para obtener
más información sobre estos permisos, consulte la sección siguiente ¿Qué permisos puedo
conceder? (p. 421).
• Grupo Envío de archivos de registro: representado por http://acs.amazonaws.com/groups/s3/
LogDelivery.

El permiso de escritura (WRITE) en un bucket le permite a este grupo escribir registros de acceso al
servidor (consulte Registro de acceso al servidor de Amazon S3 (p. 674)) en el bucket.

Note
Cuando utiliza ACL, el beneficiario puede ser una cuenta de AWS o uno de los grupos de Amazon
S3 predefinidos. Sin embargo, el beneficiario no puede ser un usuario de IAM. Para obtener más
información acerca de los usuarios y los permisos de AWS en IAM, consulte Utilización de AWS
Identity and Access Management.

¿Qué permisos puedo conceder?


En la siguiente tabla se muestra el conjunto de permisos que Amazon S3 admite en una ACL. El conjunto
de permisos de ACL es el mismo para una ACL de objetos y una ACL de buckets. Sin embargo, según el
contexto (ACL de bucket o ACL de objeto) estos permisos de ACL conceden permisos para operaciones
de buckets o de objeto específicas. La tabla muestra los permisos y describe qué significan en el contexto
de objetos y buckets.

Permiso Cuando se concede en un bucket Cuando se concede en un objeto

READ Le permite al beneficiario crear una lista Le permite al beneficiario leer los datos
de objetos en el bucket del objeto y sus metadatos

WRITE Le permite al beneficiario crear, No aplicable


sobrescribir y eliminar cualquier objeto del
bucket

READ_ACP Le permite al beneficiario leer la ACL de Le permite al beneficiario leer la ACL de


bucket objeto

Versión de API 2006-03-01


421
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

Permiso Cuando se concede en un bucket Cuando se concede en un objeto

WRITE_ACP Le permite al beneficiario escribir la ACL Le permite al beneficiario escribir la ACL


para el bucket correspondiente para el objeto correspondiente

FULL_CONTROL Le concede al beneficiario los permisos Le concede al beneficiario permisos


READ, WRITE, READ_ACP y READ, READ_ACP y WRITE_ACP en el
WRITE_ACP en el bucket objeto

Warning

Extreme las precauciones a la hora de conceder permisos de acceso a sus objetos y buckets
de S3. Por ejemplo, la concesión de acceso WRITE a un bucket permite al beneficiario crear,
sobrescribir y eliminar cualquier objeto en el bucket. Se recomienda encarecidamente que lea
toda esta sección Información general de las Access Control Lists (ACL, Listas de control de
acceso) (p. 419) antes de conceder permisos.

Mapeo de permisos de ACL y permisos de política de acceso

Como se muestra en la tabla anterior, una ACL permite solo un conjunto limitado de permisos, en
comparación con el número de permisos que puede configurar en una política de acceso (consulte
Especificación de permisos en una política (p. 357)). Cada uno de estos permisos permite una o más
operaciones de Amazon S3.

La siguiente tabla muestra cómo cada permiso de ACL se asigna a los permisos de política de acceso
correspondientes. Como puede ver, la política de acceso permite más permisos que ACL. ACL se utiliza
principalmente para conceder permisos básicos de lectura/escritura, similar a los permisos del sistema de
archivos. Para obtener más información acerca de cuándo utilizar la ACL, consulte Directrices de uso de
las opciones de política de acceso disponibles (p. 324).

Permiso de ACL Permisos de política de acceso Permisos de política de acceso


correspondientes cuando se concede un correspondientes cuando se concede un
permiso de ACL en un bucket permiso de ACL en un objeto

READ s3:ListBucket, s3:GetObject,


s3:ListBucketVersions, y s3:GetObjectVersion, y
s3:ListBucketMultipartUploads s3:GetObjectTorrent

WRITE s3:PutObject y s3:DeleteObject. No aplicable

Además, cuando el beneficiario es


el propietario del bucket, conceder
permisos WRITE en una ACL
de bucket permite que la acción
s3:DeleteObjectVersion se realice
en cualquier versión en ese bucket.

READ_ACP s3:GetBucketAcl s3:GetObjectAcl y


s3:GetObjectVersionAcl

WRITE_ACP s3:PutBucketAcl s3:PutObjectAcl y


s3:PutObjectVersionAcl

FULL_CONTROL Equivalente a otorgar permisos de ACL Equivalente a otorgar permisos de ACL


READ, WRITE, READ_ACP y WRITE_ACP. READ, READ_ACP y WRITE_ACP. Por
Por consiguiente, este permiso de consiguiente, este permiso de ACL se
ACL se asigna a una combinación

Versión de API 2006-03-01


422
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

Permiso de ACL Permisos de política de acceso Permisos de política de acceso


correspondientes cuando se concede un correspondientes cuando se concede un
permiso de ACL en un bucket permiso de ACL en un objeto
de permisos de política de acceso asigna a una combinación de permisos
correspondientes. de política de acceso correspondientes.

ACL de muestra
La siguiente ACL de muestra en un bucket identifica al propietario del recurso y un conjunto de
concesiones. El formato es la representación XML de una ACL en la Application Programming Interface
(API, Interfaz de programación de aplicaciones) de REST de Amazon S3. El propietario del bucket tiene
FULL_CONTROL del recurso. Además, la ACL muestra cómo se conceden permisos en un recurso a
dos cuentas de AWS, identificadas por el ID de usuario canónico, y a dos de los grupos de Amazon S3
predefinidos, analizados en la sección anterior.

Example

<?xml version="1.0" encoding="UTF-8"?>


<AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>Owner-canonical-user-ID</ID>
<DisplayName>display-name</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>Owner-canonical-user-ID</ID>
<DisplayName>display-name</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>

<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>user1-canonical-user-ID</ID>
<DisplayName>display-name</DisplayName>
</Grantee>
<Permission>WRITE</Permission>
</Grant>

<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>user2-canonical-user-ID</ID>
<DisplayName>display-name</DisplayName>
</Grantee>
<Permission>READ</Permission>
</Grant>

<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>

Versión de API 2006-03-01


423
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

<Permission>WRITE</Permission>
</Grant>

</AccessControlList>
</AccessControlPolicy>

ACL predefinidas
Amazon S3 admite un conjunto de concesiones predefinidas, conocidas como ACL predefinidas. Cada
ACL predefinida tiene un conjunto predefinido de beneficiarios y permisos. En la siguiente tabla se muestra
el conjunto de ACL predefinidas y las concesiones predefinidas asociadas.

ACL predefinidas Se aplica a Permisos añadidos a la ACL

private Bucket y El propietario tiene FULL_CONTROL. Nadie más tiene


objeto derechos de acceso (opción predeterminada).

public-read Bucket y El propietario tiene FULL_CONTROL. El grupo AllUsers


objeto (consulte ¿Quién es un beneficiario? (p. 420)) obtiene
acceso READ.

public-read-write Bucket y El propietario tiene FULL_CONTROL. El grupo AllUsers


objeto obtiene acceso READ y WRITE. Por lo general, no se
recomienda conceder esto en un bucket.

aws-exec-read Bucket y El propietario obtiene FULL_CONTROL. Amazon EC2


objeto obtiene acceso READ a GET para obtener un paquete de
imagen de máquina de Amazon (AMI) de Amazon S3.

authenticated-read Bucket y El propietario tiene FULL_CONTROL. El grupo


objeto AuthenticatedUsers obtiene acceso de READ.

bucket-owner-read Objeto El propietario del objeto tiene FULL_CONTROL. El propietario


del bucket obtiene acceso READ. Si especifica esta ACL
predefinida cuando crea un bucket, Amazon S3 la ignora.

bucket-owner-full- Objeto Tanto el propietario del objeto como el propietario del bucket
control tienen FULL_CONTROL del objeto. Si especifica esta ACL
predefinida cuando crea un bucket, Amazon S3 la ignora.

log-delivery-write Bucket El grupo LogDelivery obtiene permisos de WRITE y


READ_ACP en el bucket. Para obtener más información
acerca de los logs, consulte (Registro de acceso al servidor
de Amazon S3 (p. 674)).

Note

Puede especificar solo una de estas ACL predefinidas en su solicitud.

Para especificar una ACL predefinida en su solicitud, debe utilizar el encabezado de solicitud x-amz-acl.
Cuando Amazon S3 recibe una solicitud con una ACL predefinida en la solicitud, añade las concesiones
predefinidas a la ACL del recurso.

Cómo especificar una ACL


Las API de Amazon S3 le permiten configurar una ACL cuando crea un bucket o un objeto. Amazon S3
también proporciona una API para configurar una ACL en un bucket o un objeto existente. Estas API le
proporcionan los siguientes métodos para configurar una ACL:

Versión de API 2006-03-01


424
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

• Configuración de ACL con encabezados de solicitud: cuando envía una solicitud para crear un recurso
(bucket u objeto), usted configura una ACL con los encabezados de solicitud. Con estos encabezados,
usted puede especificar una ACL predefinida o especificar concesiones de forma explícita (identificación
explícita del beneficiario y los permisos).
• Configuración de ACL con cuerpo de solicitud: cuando envía una solicitud para configurar una ACL en un
recurso existente, puede configurar la ACL en el encabezado de solicitud o en el cuerpo.

Para obtener más información, consulte Administración de las ACL (p. 425).

Administración de las ACL


Temas
• Administración de las ACL en la Consola de administración de AWS (p. 425)
• Administración de ACL con AWS SDK for Java (p. 425)
• Administración de ACL con AWS SDK para .NET (p. 428)
• Administración de ACL con la API de REST (p. 430)

Existen varias formas de añadir concesiones a su ACL de recursos. Puede utilizar la Consola de
administración de AWS, que brinda una UI para administrar permisos sin escribir ningún código. Puede
utilizar la API de REST o uno de los SDK de AWS. Estas bibliotecas simplifican aún más sus tareas de
programación.

Administración de las ACL en la Consola de administración de AWS


La Consola de administración de AWS proporciona una UI para que pueda conceder permisos de acceso
basados en ACL a sus buckets y objetos. Para obtener información acerca de la configuración de permisos
de acceso basados en ACL en la consola, consulte ¿Cómo configuro permisos para buckets con ACL? y
¿Cómo puedo configurar permisos en un objeto? en la Guía del usuario de la consola de Amazon Simple
Storage Service.

Administración de ACL con AWS SDK for Java


Esta sección ofrece ejemplos de cómo configurar las concesiones de la lista de control de acceso
(ACL) para buckets y objetos. El primer ejemplo crea un bucket con una ACL predefinida (consulte ACL
predefinidas (p. 424)), crea una lista de concesiones de permisos personalizadas y luego reemplaza la
ACL predefinida con una ACL que contiene las concesiones personalizadas. En el segundo ejemplo se
muestra cómo modificar una ACL con el método AccessControlList.grantPermission().

Configuración de concesiones de ACL

Example
Este ejemplo crea un bucket. En la solicitud, el ejemplo especifica una ACL predefinida que concede
permiso al grupo Envío de archivos de registro para escribir registros en el bucket.

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;

import java.io.IOException;
import java.util.ArrayList;

public class CreateBucketWithACL {

Versión de API 2006-03-01


425
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String userEmailForReadPermission = "*** user@example.com ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.build();

// Create a bucket with a canned ACL. This ACL will be replaced by the
setBucketAcl()
// calls below. It is included here for demonstration purposes.
CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName,
clientRegion.getName())
.withCannedAcl(CannedAccessControlList.LogDeliveryWrite);
s3Client.createBucket(createBucketRequest);

// Create a collection of grants to add to the bucket.


ArrayList<Grant> grantCollection = new ArrayList<Grant>();

// Grant the account owner full control.


Grant grant1 = new Grant(new
CanonicalGrantee(s3Client.getS3AccountOwner().getId()), Permission.FullControl);
grantCollection.add(grant1);

// Grant the LogDelivery group permission to write to the bucket.


Grant grant2 = new Grant(GroupGrantee.LogDelivery, Permission.Write);
grantCollection.add(grant2);

// Save grants by replacing all current ACL grants with the two we just
created.
AccessControlList bucketAcl = new AccessControlList();
bucketAcl.grantAllPermissions(grantCollection.toArray(new Grant[0]));
s3Client.setBucketAcl(bucketName, bucketAcl);

// Retrieve the bucket's ACL, add another grant, and then save the new ACL.
AccessControlList newBucketAcl = s3Client.getBucketAcl(bucketName);
Grant grant3 = new Grant(new EmailAddressGrantee(userEmailForReadPermission),
Permission.Read);
newBucketAcl.grantAllPermissions(grant3);
s3Client.setBucketAcl(bucketName, newBucketAcl);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and 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();
}
}
}

Configuración de concesiones de ACL en un objeto existente

Example

En este ejemplo se actualiza la ACL en un objeto. En el ejemplo se realizan las siguientes tareas:

• Recuperar una ACL de un objeto


• Eliminar la ACL mediante la eliminación de todos los permisos existentes

Versión de API 2006-03-01


426
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

• Añadir dos permisos: acceso completo para el propietario y WRITE_ACP (consulte ¿Qué permisos
puedo conceder? (p. 421)) para un usuario identificado por una dirección de correo electrónico
• Guardar la ACL en el objeto

import com.amazonaws.AmazonServiceException;
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.AccessControlList;
import com.amazonaws.services.s3.model.CanonicalGrantee;
import com.amazonaws.services.s3.model.EmailAddressGrantee;
import com.amazonaws.services.s3.model.Permission;

import java.io.IOException;

public class ModifyACLExistingObject {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String keyName = "*** Key name ***";
String emailGrantee = "*** user@example.com ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Get the existing object ACL that we want to modify.


AccessControlList acl = s3Client.getObjectAcl(bucketName, keyName);

// Clear the existing list of grants.


acl.getGrantsAsList().clear();

// Grant a sample set of permissions, using the existing ACL owner for Full
Control permissions.
acl.grantPermission(new CanonicalGrantee(acl.getOwner().getId()),
Permission.FullControl);
acl.grantPermission(new EmailAddressGrantee(emailGrantee),
Permission.WriteAcp);

// Save the modified ACL back to the object.


s3Client.setObjectAcl(bucketName, keyName, acl);
} 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();
}
}
}

Versión de API 2006-03-01


427
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

Administración de ACL con AWS SDK para .NET


Esta sección ofrece ejemplos de cómo configurar las concesiones de ACL para buckets y objetos de
Amazon S3.

Ejemplo 1: Creación de un bucket y uso de una ACL predefinida para configurar permisos

Este ejemplo de código C# crea un bucket. En la solicitud, el código también especifica una ACL
predefinida que concede permisos al grupo Envío de archivos de registro para escribir registros en el
bucket.

Para obtener instrucciones sobre la creación y comprobación de un ejemplo funcional, consulte Ejecución
de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class ManagingBucketACLTest
{
private const string newBucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
CreateBucketUseCannedACLAsync().Wait();
}

private static async Task CreateBucketUseCannedACLAsync()


{
try
{
// Add bucket (specify canned ACL).
PutBucketRequest putBucketRequest = new PutBucketRequest()
{
BucketName = newBucketName,
BucketRegion = S3Region.EUW1, // S3Region.US,
// Add canned ACL.
CannedACL = S3CannedACL.LogDeliveryWrite
};
PutBucketResponse putBucketResponse = await
client.PutBucketAsync(putBucketRequest);

// Retrieve bucket ACL.


GetACLResponse getACLResponse = await client.GetACLAsync(new GetACLRequest
{
BucketName = newBucketName
});
}
catch (AmazonS3Exception amazonS3Exception)
{
Console.WriteLine("S3 error occurred. Exception: " +
amazonS3Exception.ToString());
}
catch (Exception e)
{

Versión de API 2006-03-01


428
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

Console.WriteLine("Exception: " + e.ToString());


}
}
}
}

Ejemplo 2: Configuración de concesiones de ACL en un objeto existente

En este ejemplo de código C# se actualiza la ACL en un objeto existente. En el ejemplo se realizan las
siguientes tareas:

• Recuperar una ACL de un objeto.


• Eliminar la ACL mediante la eliminación de todos los permisos existentes.
• Añadir dos permisos: acceso completo para el propietario y WRITE_ACP para un usuario identificado por
una dirección de correo electrónico.
• Guardar la ACL enviando una solicitud PutAcl.

Para obtener instrucciones sobre la creación y comprobación de un ejemplo funcional, consulte Ejecución
de ejemplos de código .NET de Amazon S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class ManagingObjectACLTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** object key name ***";
private const string emailAddress = "*** email address ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
TestObjectACLTestAsync().Wait();
}
private static async Task TestObjectACLTestAsync()
{
try
{
// Retrieve the ACL for the object.
GetACLResponse aclResponse = await client.GetACLAsync(new GetACLRequest
{
BucketName = bucketName,
Key = keyName
});

S3AccessControlList acl = aclResponse.AccessControlList;

// Retrieve the owner (we use this to re-add permissions after we clear
the ACL).
Owner owner = acl.Owner;

// Clear existing grants.


acl.Grants.Clear();

Versión de API 2006-03-01


429
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público

// Add a grant to reset the owner's full permission (the previous clear
statement removed all permissions).
S3Grant fullControlGrant = new S3Grant
{
Grantee = new S3Grantee { CanonicalUser = owner.Id },
Permission = S3Permission.FULL_CONTROL

};

// Describe the grant for the permission using an email address.


S3Grant grantUsingEmail = new S3Grant
{
Grantee = new S3Grantee { EmailAddress = emailAddress },
Permission = S3Permission.WRITE_ACP
};
acl.Grants.AddRange(new List<S3Grant> { fullControlGrant,
grantUsingEmail });

// Set a new ACL.


PutACLResponse response = await client.PutACLAsync(new PutACLRequest
{
BucketName = bucketName,
Key = keyName,
AccessControlList = acl
});
}
catch (AmazonS3Exception amazonS3Exception)
{
Console.WriteLine("An AmazonS3Exception was thrown. Exception: " +
amazonS3Exception.ToString());
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
}
}
}
}

Administración de ACL con la API de REST


Para obtener información acerca del soporte de la API REST para administrar las ACL, consulte las
siguientes secciones en la Amazon Simple Storage Service API Reference:

• GET Bucket acl


• PUT Bucket acl
• GET Object acl
• PUT Object acl
• PUT Object
• PUT Bucket
• PUT Object - Copy
• Initiate Multipart Upload

Uso de Amazon S3 Block Public Access


Amazon S3 proporciona a Block Public Access la configuración para buckets y cuentas para ayudarle a
administrar el acceso público a recursos de Amazon S3. De forma predeterminada, los buckets y objetos

Versión de API 2006-03-01


430
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público

nuevos no permiten acceso público, pero los usuarios pueden modificar políticas de bucket o permisos
de objetos para permitir el acceso público. La configuración de Amazon S3 Block Public Access anula
estas políticas y permisos para poder limitar el acceso público a estos recursos. Con Amazon S3 Block
Public Access, los administradores de cuentas y los propietarios de buckets pueden configurar fácilmente
controles centralizados para limitar el acceso público a sus recursos de Amazon S3 que se aplican
independientemente de cómo se crean los recursos.

Cuando Amazon S3 recibe una solicitud para acceder a un bucket o a un objeto, determina si el bucket
o la cuenta del propietario del bucket tiene aplicada una configuración de Block Public Access. Si hay
una configuración de Block Public Access que prohíbe el acceso solicitado, Amazon S3 rechaza la
solicitud. Amazon S3 Block Public Access proporciona cuatro configuraciones. Estas configuraciones son
independientes y se pueden usar en cualquier combinación. Además, cada configuración puede aplicarse
a un bucket o a toda una cuenta de AWS. Si un bucket tiene configuraciones de Block Public Access
diferentes de las de la cuenta de su propietario, Amazon S3 aplica la combinación más restrictiva de la
configuración de nivel de cuenta y de nivel de bucket. Cuando Amazon S3 evalúa si una configuración de
Block Public Access prohíbe una operación, rechaza cualquier solicitud que infringiría una configuración de
nivel de cuenta o de nivel de bucket.
Note

• Puede habilitar configuraciones de Block Public Access solo para buckets y cuentas de AWS.
Amazon S3 no admite configuraciones de Block Public Access por objeto.
• Cuando aplica la configuración de Block Public Access a una cuenta, la configuración se aplica
globalmente a todas las regiones de AWS. La configuración podría no entrar en vigor en todas
las regiones de manera inmediata o simultánea, pero acabará propagándose a todas las
regiones.

Temas
• Habilitación de Block Public Access en la consola de Amazon S3 (p. 431)
• Configuración de Block Public Access (p. 432)
• Qué significa "pública" (p. 433)
• Permisos (p. 435)
• Ejemplos (p. 436)

Habilitación de Block Public Access en la consola de Amazon S3


Amazon S3 Block Public Access proporciona cuatro configuraciones. Puede aplicar estas configuraciones
en cualquier combinación a buckets individuales o a todas las cuentas de AWS. En la imagen siguiente
se muestra cómo habilitar Block Public Access en la consola de Amazon S3 para su cuenta. Para obtener
más información, consulte Setting Permissions: Block Public Access (Configuración de permisos: Block
Public Access) en la Guía del usuario de la consola de Amazon Simple Storage Service.

Versión de API 2006-03-01


431
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público

Configuración de Block Public Access


Amazon S3 Block Public Access proporciona cuatro configuraciones. Puede aplicar estas configuraciones
en cualquier combinación a buckets individuales o a todas las cuentas de AWS. Si aplica una configuración
a una cuenta, se aplica a todos los buckets propiedad de la cuenta.

La siguiente tabla contiene las configuraciones disponibles

Nombre Descripción

BlockPublicAcls Si se establece esta opción en TRUE causa el siguiente comportamiento:

• Las llamadas de la acl de PUT Object y la acl de PUT Object fallan si la lista de
control de acceso (ACL) es pública.
• Las llamadas de objetos de PUT fallan si la solicitud incluye una ACL pública.
• Si se aplica esta configuración a una cuenta, las llamadas al PUT Bucket fallan
si la solicitud incluye una ACL pública.

Cuando se ajusta esta configuración en TRUE, se produce un error en las


operaciones especificadas (independientemente de si se hace a través de la
API REST, la AWS CLI o los SDK de AWS). No obstante, las políticas existentes
y las ACL para buckets y objetos no se modifican. Esta configuración permite
protegerse frente al acceso público al tiempo que le permite auditar, ajustar o
alterar de otro modo las políticas existentes y ACL de sus buckets y objetos.

Versión de API 2006-03-01


432
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público

Nombre Descripción

IgnorePublicAcls Al configurar esta opción en TRUE provoca que Amazon S3 ignore todas las ACL
públicas en un bucket y cualquier objeto que contenga. Esta configuración le
permite bloquear de manera segura el acceso público concedido por las ACL al
tiempo que permite llamadas a PUT Object que incluyen una ACL pública (frente
a la BlockPublicAcls que rechaza llamadas a PUT Object que incluyen una
ACL pública). La habilitación de esta configuración no afecta a la persistencia de
ninguna ACL existente y no evita el establecimiento de ACL públicas nuevas.

BlockPublicPolicy Configurar esta opción en TRUE hace que Amazon S3 rechace llamadas a la
política de buckets de PUT si la política de buckets especificada permite el
acceso público. Esta configuración le permite permitir a los usuarios administrar
políticas de bucket sin permitirles compartir públicamente el bucket o los objetos
que contiene. La habilitación de esta configuración no afecta a las políticas de
bucket existentes.
Important

Para usar esta configuración de manera eficaz, debe aplicarla en el


nivel de cuenta. Una política de bucket puede permitir a los usuarios
alterar la configuración de Block Public Access de un bucket. Por tanto,
los usuarios que tienen permiso para cambiar una política de bucket
podrían insertar una política que les permita deshabilitar la configuración
de Block Public Access del bucket. Si se habilita esta configuración para
toda la cuenta en lugar de para un bucket específco, entonces Amazon
S3 bloquea políticas públicas incluso si un usuario altera la política del
bucket para deshabilitar esta configuración.

El establecimiento de esta opción en TRUE restringir el acceso a un bucket con


RestrictPublicBuckets
una política pública solo a servicios de AWS y usuarios autorizados dentro de la
cuenta del propietario del bucket. Este ajuste bloquea todo acceso entre cuentas
al bucket (salvo a los servicios de AWS) al tiempo que permite a los usuarios de
la cuenta administrar el bucket.

La habilitación de este ajuste no afecta a las políticas de bucket existentes,


salvo que Amazon S3 bloquea el acceso público y entre cuentas derivado de
cualquier política de buckets pública, incluida la delegación no pública a cuentas
específicas.

Important

• Las llamadas a GET Bucket acl y GET Object acl siempre devuelve los permisos efectivos
instaurados para el bucket u objeto especificados. Por ejemplo, imagine que un bucket
tiene un ACL que concede acceso público, pero el bucket también tiene la configuración
IgnorePublicAcls habilitada. En este caso, GET Bucket acl devuelve una ACL que refleja
los permisos de acceso que Amazon S3 está implementando, en lugar de la ACL real asociada
con el bucket.
• La configuración de Block Public Access no altera las políticas ni las ACL existentes. Por tanto,
la eliminación de una configuración de Block Public Access provoca que pueda accederse de
nuevo públicamente a un bucket o un objeto con una política pública o ACL.

Qué significa "pública"


ACL

Versión de API 2006-03-01


433
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público

Amazon S3 considera que una ACL de objetos o buckets es pública si concede cualquier permiso
a los miembros de los grupos AllUsers o AuthenticatedUsers definidos previamente. Para
obtener más información acerca de los grupos predefinidos, consulte Grupos predefinidos de Amazon
S3 (p. 420).
Políticas
Al evaluar una política de bucket, Amazon S3 comienza suponiendo que la política es pública. A
continuación, evalúa la política para determinar si califica como no pública. Para que se considere no
pública, una política de bucket debe conceder acceso solo a valores fijos (valores que no contienen un
comodín) de uno o más de los siguientes:
• Un conjunto de Classless Inter-Domain Routings (CIDR), mediante aws:SourceIp. Para obtener
más información sobre CIDR, consulte RFC 4632 en la página web de RFC EditoR.
• Una entidad principal de AWS, un usuario, un rol o una entidad principal de servicio (por ejemplo,
aws:PrincipalOrgID)
• aws:SourceArn
• aws:SourceVpc
• aws:SourceVpce
• aws:SourceOwner
• aws:SourceAccount
• s3:x-amz-server-side-encryption-aws-kms-key-id
• aws:userid, fuera del patrón "AROLEID:*"
Bajo estas reglas, las siguientes políticas de ejemplo se consideran públicas:

{
"Principal": { "Federated": "graph.facebook.com" },
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow"
}

{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow"
}

{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow",
"Condition": { "StringLike": {"aws:SourceVpc": "vpc-*"}}
}

Puede convertir estas políticas en no públicas incluyendo cualquiera de las claves de condición
indicadas con anterioridad, utilizando un valor fijo. Por ejemplo, puede convertir la última política de
arriba en no pública estableciendo aws:SourceVpc en un valor fijo, de esta manera:

{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow",
"Condition": {"StringEquals":
Versión{"aws:SourceVpc":
de API 2006-03-01 "vpc-91237329"}}
434
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público

Para obtener más información acerca de las políticas de bucket, consulte Uso de políticas de bucket y
usuario (p. 353).

Ejemplo
Este ejemplo muestra cómo evalúa Amazon S3 una política que contiene concesiones de acceso público y
no público.

Imagine que un bucket tiene una política que concede acceso a un conjunto de entidades principales
fijas. Bajo las reglas descritas con anterioridad, esta política no es pública. Por tanto, si habilita la
configuración RestrictPublicBuckets, la política permanece en efecto tal y como está redactada,
porque RestrictPublicBuckets solo se aplica a buckets que tienen políticas públicas. Sin embargo,
si añade una instrucción pública a la política, RestrictPublicBuckets surtirá efecto en el bucket.
Solo permite a las entidades principales del servicio de AWS y a los usuarios autorizados de la cuenta del
propietario del bucket tener acceso al bucket.

Suponga, por ejemplo, que un bucket propiedad de "Cuenta-1 tiene una política que contiene lo siguiente:

1. Una instrucción que concede acceso a AWS CloudTrail (que es una entidad principal de servicio de
AWS)
2. Una instrucción que concede acceso a la cuenta "Cuenta-2"
3. Una instrucción que concede acceso al público, especificando, por ejemplo, "Principal": "*" sin
Condition limitante

Esta política califica como pública debido a la tercera instrucción. Con esta política en vigor y
RestrictPublicBuckets habilitado, Amazon S3 solo permite obtener acceso a CloudTrail. Aunque la
instrucción 2 no es pública, Amazon S3 inhabilita el acceso por parte de "Cuenta-2". Esto se debe a que
la instrucción 3 convierte en pública a toda la política, por lo que se aplica RestrictPublicBuckets.
Como consecuencia, Amazon S3 deshabilita el acceso entre cuentas, aunque la política delega el acceso
a una cuenta específica, "Cuenta-2". Pero si elimina la instrucción 3 de la política, la política no califica
como pública y RestrictPublicBuckets ya no es aplicable. Así, "Cuenta-2" recupera el acceso al
bucket, aunque deje RestrictPublicBuckets habilitado.

Permisos
Para usar características de Amazon S3 Block Public Access, debe contar con los siguientes permisos:

Operación Permisos necesarios

Estado de la política de bucket de GET s3:GetBucketPolicyStatus

Configuración de Block Public Access de GET s3:GetBucketPublicAccessBlock


bucket

Configuración de Block Public Access de PUT s3:PutBucketPublicAccessBlock


bucket

Configuración de Block Public Access de DELETE s3:PutBucketPublicAccessBlock


bucket

Configuración de Block Public Access de GET s3:GetAccountPublicAccessBlock


account

Configuración de Block Public Access de PUT s3:PutAccountPublicAccessBlock


account

Versión de API 2006-03-01


435
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público

Operación Permisos necesarios

Configuración de Block Public Access de DELETE s3:PutAccountPublicAccessBlock


account

Note

Las operaciones DELETE necesitan los mismos permisos que las operaciones PUT. NO hay
permisos separados para las operaciones DELETE.

Ejemplos
Uso de Block Public Access con la AWS CLI
Para ello, puede usar Amazon S3 Block Public Access a través de la AWS CLI. El comando utilizado
depende de si quiere realizar una llamada Block Public Access en un bucket o en una cuenta. Para obtener
más información acerca de cómo configurar y usar la AWS CLI, consulte ¿Qué es la AWS Command Line
Interface?

Bucket
Para realizar operaciones de Block Public Access en un bucket, use el servicio de la AWS CLI s3api.
Estas son las operaciones de nivel de bucket que utilizan este servicio:
• PUT PublicAccessBlock (para un bucket)
• GET PublicAccessBlock (para un bucket)
• DELETE PublicAccessBlock (para un bucket)
• GET BucketPolicyStatus
Cuenta
Para realizar operaciones de Block Public Access en una cuenta, use el servicio de la AWS CLI
s3control. Estas son las operaciones de nivel de cuenta que utilizan este servicio:
• PUT PublicAccessBlock (para una cuenta)
• GET PublicAccessBlock (para una cuenta)
• DELETE PublicAccessBlock (para una cuenta)

Uso de Block Public Access con el AWS SDK for Java.


En los siguientes ejemplos se muestra cómo usar Amazon S3 Block Public Access con el AWS SDK for
Java. Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Uso del
AWS SDK for Java. (p. 705).

Ejemplo 1

En este ejemplo se muestra cómo establecer una configuración de Public Access Block en un bucket de
S3 mediante el AWS SDK for Java.

AmazonS3 client = AmazonS3ClientBuilder.standard()


.withCredentials(<credentials>)
.build();

client.setPublicAccessBlock(new SetPublicAccessBlockRequest()
.withBucketName(<bucket-name>)
.withPublicAccessBlockConfiguration(new PublicAccessBlockConfiguration()
.withBlockPublicAcls(<value>)

Versión de API 2006-03-01


436
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público

.withIgnorePublicAcls(<value>)
.withBlockPublicPolicy(<value>)
.withRestrictPublicBuckets(<value>)));

Important

Este ejemplo pertenece exclusivamente a operaciones de nivel de bucket que utilizan la clase de
cliente AmazonS3. Para operaciones a nivel de cuenta, consulte el siguiente ejemplo.

Ejemplo 2

En este ejemplo se muestra cómo establecer una configuración de Public Access Block en una cuenta de
Amazon S3 mediante el AWS SDK for Java.

AWSS3ControlClientBuilder controlClientBuilder = AWSS3ControlClientBuilder.standard();


controlClientBuilder.setRegion(<region>);
controlClientBuilder.setCredentials(<credentials>);

AWSS3Control client = controlClientBuilder.build();


client.putPublicAccessBlock(new PutPublicAccessBlockRequest()
.withAccountId(<account-id>)
.withPublicAccessBlockConfiguration(new PublicAccessBlockConfiguration()
.withIgnorePublicAcls(<value>)
.withBlockPublicAcls(<value>)
.withBlockPublicPolicy(<value>)
.withRestrictPublicBuckets(<value>)));

Important

Este ejemplo pertenece exclusivamente a operaciones de nivel de cuenta que utilizan la clase de
cliente AWSS3Control. Para operaciones a nivel de bucket, consulte el ejemplo anterior.

Uso de Block Public Access con otros AWS SDK.


Para obtener información acerca de cómo otros AWS SDK, consulte Uso de los SDK, la CLI y los
exploradores de AWS (p. 697).

Uso de Block Public Access con las API de REST


Para obtener información acerca del uso de Amazon S3 Block Public Access a través de las API de REST,
consulte los siguientes temas en la Amazon Simple Storage Service API Reference.

• Operaciones de nivel de cuenta


• PUT PublicAccessBlock
• GET PublicAccessBlock
• DELETE PublicAccessBlock

• Operaciones de nivel de bucket


• PUT PublicAccessBlock
• GET PublicAccessBlock
• DELETE PublicAccessBlock
• GET BucketPolicyStatus
Versión de API 2006-03-01
437
Amazon Simple Storage Service Guía del desarrollador
Registro y monitorización

Registro y monitorización en Amazon S3


La monitorización es una parte importante del mantenimiento de la fiabilidad, la disponibilidad y el
desempeño de Amazon S3 y sus soluciones de AWS. Debe recopilar datos de monitorización de todas las
partes de su solución de AWS para que pueda depurar un error multipunto de una forma más fácil si se
produce. AWS proporciona varias herramientas para monitorizar sus recursos de Amazon S3 y responder
a posibles incidentes:

Alarmas de Amazon CloudWatch

Con las alarmas de Amazon CloudWatch, puede ver una métrica determinada durante el periodo
especificado. Si la métrica supera un umbral determinado, se envía una notificación a un tema de
Amazon SNS o política de AWS Auto Scaling. Las alarmas de CloudWatch no invocan acciones
por tener un estado determinado. En su lugar, el estado debe haber cambiado y debe mantenerse
durante el número de periodos especificado. Para obtener más información, consulte Monitorización
de métricas con Amazon CloudWatch (p. 636).
Registros de AWS CloudTrail

CloudTrail proporciona un registro de las medidas adoptadas por un usuario, un rol o un servicio
de AWS en Amazon S3. Mediante la información que recopila CloudTrail, se puede determinar la
solicitud que se envió a Amazon S3, la dirección IP desde la que se realizó la solicitud, quién realizó la
solicitud, cuándo la realizó y detalles adicionales. Para obtener más información, consulte Registro de
llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 647).
Registros de acceso de Amazon S3

Los registros de acceso del servidor proporcionan registros detallados sobre las solicitudes que se
realizan a un bucket. Los registros de acceso al servidor resultan útiles para muchas aplicaciones. Por
ejemplo, la información del registro de acceso puede ser útil en auditorías de acceso y seguridad. Para
obtener más información, consulte Registro de acceso al servidor de Amazon S3 (p. 674).
AWS Trusted Advisor

Trusted Advisor aprovecha las prácticas recomendadas aprendidas al atender a cientos de miles de
clientes de AWS. Trusted Advisor inspecciona su entorno de AWS y realiza recomendaciones cuando
surge la oportunidad de ahorrar dinero, mejorar el rendimiento y la disponibilidad del sistema o ayudar
a cerrar deficiencias de seguridad. Todos los clientes de AWS tienen acceso a cinco comprobaciones
de Trusted Advisor. Los clientes con un plan de soporte Business o Enterprise pueden ver todas las
comprobaciones de Trusted Advisor.

Trusted Advisor cuenta con las siguientes comprobaciones relacionadas con Amazon S3:
• Configuración de registro de los buckets de Amazon S3.
• Comprobaciones de seguridad de los buckets de Amazon S3 que tienen permisos de acceso
abierto.
• Comprobaciones de la tolerancia a errores de los buckets de Amazon S3 que no tienen activado el
control de versiones, o que lo tienen suspendido.

Para obtener más información, consulte AWS Trusted Advisor en la Guía del usuario de AWS Support.

Las siguientes prácticas recomendadas sobre seguridad también evalúan el registro y la monitorización:

• Identificar u auditar todos sus buckets de Amazon S3


• Implementar la monitorización con herramientas de monitorización de AWS
• Habilitar AWS Config
• Habilitar el registro de acceso al servidor de Amazon S3
• UsarAWS CloudTrail

Versión de API 2006-03-01


438
Amazon Simple Storage Service Guía del desarrollador
Validación de la conformidad

• Monitorizar Security Advisories de AWS

Validación de la conformidad en Amazon S3


Los auditores externos evalúan la seguridad y la conformidad de Amazon S3 como parte de varios
programas de conformidad de AWS, incluidos los siguientes:

• Controles del Sistema y Organizaciones (System and Organization Controls, SOC)


• Estándar de Seguridad de Datos del Sector de las Tarjetas de Pago (PCI DSS, Payment Card Industry
Data Security Standard) versión 3.2
• Programa Federal de Administración de Riesgos y Autorizaciones (Federal Risk and Authorization
Management Program, FedRAMP)
• Ley de Portabilidad y Responsabilidad de Seguros Médicos de EE. UU (Health Insurance Portability and
Accountability Act, HIPAA).

AWS proporciona una lista actualizada frecuentemente de los servicios de AWS adscritos al ámbito de los
programas de conformidad en Servicios de AWS en el ámbito del programa de conformidad.

Los informes de auditoría de terceros están disponibles para su descarga utilizando AWS Artifact. Para
obtener más información, consulte la sección Descarga de informes en AWS Artifact.

Para obtener más información acerca de los programas de conformidad de AWS, consulte Programas de
conformidad de AWS.

Su responsabilidad de conformidad al utilizar Amazon S3 se determina en función de la sensibilidad de


los datos, los objetivos de conformidad de su organización, así como de la legislación y los reglamentos
aplicables. Si su uso de Amazon S3 está sujeto a conformidad con normas tales como HIPAA, PCI o
FedRAMP, AWS proporciona recursos para ayudarlo:

• En las Guías de inicio rápido de seguridad y conformidad se incluyen consideraciones sobre arquitectura
y se ofrecen pasos para implementar los entornos de referencia centrados en la seguridad y la
conformidad en AWS.
• En el documento técnico Diseño de arquitecturas para la conformidad y la seguridad de HIPAA se
describe cómo las empresas utilizan AWS para poder cumplir los requisitos de HIPAA.
• Losrecursos de conformidad de AWS incluyen diferentes cuadernos de trabajo y guías que se pueden
aplicar a su sector y ubicación.
• AWS Config puede ayudarlo a evaluar en qué medida las configuraciones de los recursos cumplen las
prácticas internas, las directrices del sector y las normativas.
• AWS Security Hub ofrece una vista integral de su estado de seguridad en AWS que lo ayuda a
comprobar la conformidad con las normas del sector de seguridad y las prácticas recomendadas.
• Bloqueo de objetos de Amazon S3 puede ayudarle a cumplir con los requisitos técnicos de los
reguladores de servicios financieros (como SEC, FINRA y CFTC) que requieren un almacenamiento de
datos de una escritura y muchas lecturas (WORM) para determinados tipos de libros e información de
registros.
• Inventario de Amazon S3 (p. 439) puede ayudarle a auditar e informar sobre el estado de replicación y
cifrado de los objetos para sus necesidades empresariales, de conformidad y legales.

Inventario de Amazon S3
El inventario de Amazon S3 es una de las herramientas que facilita Amazon S3 para ayudarle a administrar
su almacenamiento. Puede utilizarlo para auditar e informar sobre el estado de replicación y cifrado de los
objetos para sus necesidades empresariales, de conformidad y legales. Puede simplificar o acelerar los

Versión de API 2006-03-01


439
Amazon Simple Storage Service Guía del desarrollador
Inventario

flujos de trabajo empresariales y los trabajos relacionados con big data mediante el inventario de Amazon
S3, que facilita una alternativa programada a la operación de la API alternativa sincrónica List de Amazon
S3.

El inventario de Amazon S3 proporciona archivos de salida con formato de valores separados por comas
(CSV), Apache optimized row columnar (ORC) o Apache Parquet (Parquet) que muestran diaria o
semanalmente los objetos y los metadatos correspondientes en un bucket de S3 o un prefijo compartido
(objetos con nombres que comienzan con la misma cadena). Para obtener información acerca de los
precios del inventario de Amazon S3, consulte Precios de Amazon S3.

Puede configurar varias listas de inventario para un bucket. Puede configurar qué metadatos de objeto
incluir en el inventario, si enumerar todas las versiones de un objeto o solo las actualizadas, si almacenar
el resultado del archivo con la lista de inventario y si generar el inventario con una frecuencia diaria o
semanal. También puede especificar que el archivo con la lista de inventario esté cifrado.

Puede consultar el inventario de Amazon S3 mediante SQL estándar utilizando Amazon Athena, Amazon
Redshift Spectrum y otras herramientas como, por ejemplo, Presto, Apache Hive y Apache Spark. Es muy
fácil utilizar Athena para ejecutar consultas en sus archivos de inventario. Puede utilizar Athena para las
consultas del inventario de Amazon S3 en todas las regiones donde Athena está disponible.

Temas
• ¿Cómo configuro el inventario de Amazon S3? (p. 440)
• ¿Qué incluye un inventario de Amazon S3? (p. 442)
• ¿Dónde se encuentran las listas de inventario? (p. 444)
• ¿Cómo sé cuándo está completo un inventario? (p. 446)
• Consultas de inventario con Amazon Athena (p. 447)
• API de REST del inventario de Amazon S3 (p. 448)

¿Cómo configuro el inventario de Amazon S3?


En esta sección se describe cómo configurar un inventario, incluida información detallada acerca de los
buckets de origen y destino del inventario.

Buckets de origen y destino del inventario de Amazon S3


El bucket para el que el inventario enumera los objetos se denomina bucket de origen. El bucket en el que
se almacena el archivo con la lista del inventario se denomina bucket de destino.

Bucket de origen

El inventario enumera los objetos almacenados en el bucket de origen. Puede obtener listas de inventario
para todo un bucket o filtradas por prefijo (del nombre de la clave de objeto).

El bucket de origen:

• Contiene los objetos enumerados en el inventario.


• Contiene la configuración del inventario.

Bucket de destino

Los archivos con la lista del inventario de Amazon S3 se escriben en el bucket de destino. Para agrupar
todos los archivos con la lista de inventario en una ubicación común del bucket de destino, puede
especificar un prefijo de destino (nombre de la clave de objeto) en la configuración del inventario.

El bucket de destino:

Versión de API 2006-03-01


440
Amazon Simple Storage Service Guía del desarrollador
Inventario

• Contiene las listas de archivos de inventario.


• Contiene los archivos de manifiesto que muestran todas las listas de inventario en archivos
almacenadas en el bucket de destino. Para obtener más información, consulte ¿Qué es un manifiesto de
inventario? (p. 445)
• Debe tener una política de bucket para conceder a Amazon S3 permiso para verificar la propiedad del
bucket y permiso para escribir archivos en el bucket.
• Debe estar en la misma región de AWS que el bucket de origen.
• Puede ser igual que la del bucket de origen.
• Puede ser propiedad de una cuenta de AWS diferente de la propietaria de la cuenta en la que está el
bucket de origen.

Configuración del inventario de Amazon S3


El inventario de Amazon S3 le ayuda a administrar su almacenamiento creando listas de los objetos que
hay en un bucket de S3 en un periodo definido. Puede configurar varias listas de inventario para un bucket.
Las listas del inventario se publican en archivos CSV, ORC o Parquet en un bucket de destino.

La forma más sencilla de configurar un inventario es a través de la Consola de administración de AWS,


pero también puede utilizar la API de REST, la AWS CLI o los SDK de AWS. La consola realiza el primer
paso del siguiente procedimiento automáticamente: añadir un política de bucket al bucket de destino.

Para configurar un inventario de Amazon S3 para un bucket de S3

1. Agregue una política de bucket para el bucket de destino.

Debe crear una política de bucket en el bucket de destino para conceder permisos para que Amazon
S3 escriba objetos en el bucket, en la ubicación definida. Para ver una política de ejemplo, consulte
Concesión de permisos para el inventario de Amazon S3 y el análisis de Amazon S3 (p. 393).
2. Configure un inventario para enumerar los objetos de un bucket de origen y publicar la lista en un bucket
de destino.

Al configurar una lista de inventario para un bucket de origen, debe especificar el bucket de destino en el
que quiera que se almacene la lista, y si desea generar la lista cada día o cada semana. También puede
configurar qué metadatos de objetos ha de incluir, y si enumerar todas las versiones de objetos o solo
las versiones actuales.

Puede especificar que el archivo con la lista de inventario se cifre mediante claves administradas por
Amazon S3 (SSE-S3) o claves almacenadas en AWS KMS (SSE-KMS). Para obtener más información
sobre SSE-S3 y SSE-KMS, consulte Protección de datos con el cifrado del lado del servidor (p. 275).
Si va a utilizar el cifrado SSE-KMS, consulte el paso 3.
• Para obtener información sobre cómo utilizar la consola para configurar una lista de inventario,
consulte ¿Cómo puedo configurar el inventario de Amazon S3? en la Guía del usuario de la consola
de Amazon Simple Storage Service.
• Para usar la API de Amazon S3 para una lista de inventario, use la API REST PUT Bucket inventory
configuration o su equivalente de la AWS CLI o los SDK de AWS.
3. Para cifrar el archivo con la lista de inventario con SSE-KMS, conceda a Amazon S3 permiso para
utilizar la clave de AWS KMS.

Puede configurar el cifrado para el archivo con la lista de inventario usando la Consola de
administración de AWS, la API REST, la AWS CLI o los SDK de AWS. Cualquiera que sea el método
que elija, debe conceder a Amazon S3 permiso para usar la clave maestra del cliente (CMK) de AWS
KMS para cifrar el archivo de inventario. Puede conceder permiso a Amazon S3 modificando la política
de claves de la CMK de AWS KMS que se va a usar para cifrar el archivo de inventario. Para obtener
más información, consulte la siguiente sección, Conceder permiso a Amazon S3 para cifrar mediante su
clave de AWS KMS (p. 442).

Versión de API 2006-03-01


441
Amazon Simple Storage Service Guía del desarrollador
Inventario

Conceder permiso a Amazon S3 para cifrar mediante su clave de AWS KMS

Debe conceder a Amazon S3 permiso para cifrar mediante su clave de AWS KMS con una política de
claves. En el procedimiento siguiente se describe cómo utilizar la consola de AWS Identity and Access
Management (IAM) para modificar la política de claves para la CMK de AWS KMS que se utiliza para cifrar
el archivo de inventario.

Para conceder permiso para cifrar mediante su clave de AWS KMS

1. Inicie sesión en la Consola de administración de AWS con la cuenta de AWS propietaria de la CMK de
AWS KMS y abra la consola de IAM en https://console.aws.amazon.com/iam/.
2. En el panel de navegación izquierdo, elija Encryption keys (Claves de cifrado).
3. En Región (Región), elija la región de AWS apropiada. No use el selector de regiones de la barra de
navegación (en la esquina superior derecha).
4. Elija el alias de la CMK con la que desea cifrar el inventario.
5. En la sección Key Policy (Política de claves) de la página, elija Switch to policy view (Cambiar a la
vista de política).
6. Mediante el editor de Key Policy (Política de claves), inserte la siguiente política de claves en la
política existente y después elija Save Changes (Guardar cambios). Es posible que desee copiar la
política al final de la política existente.

{
"Sid": "Allow Amazon S3 use of the key",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey*"
],
"Resource": "*"
}

También puede utilizar la API de la política de claves PUT de AWS KMS PutKeyPolicy para copiar la
política de claves en la CMK que se va a usar para cifrar el archivo de inventario. Para obtener más
información acerca de cómo crear y editar CMK de AWS KMS, consulte Introducción en la AWS Key
Management Service Developer Guide.

¿Qué incluye un inventario de Amazon S3?


Un archivo de lista de inventario contiene una lista de los objetos del bucket de origen y los metadatos
para cada objeto. Las listas de inventario se almacenan en el bucket de destino como un archivo CSV
comprimido con GZIP, como un archivo Apache optimized row columnar (ORC) comprimido con ZLIB o
como un archivo Apache Parquet (Parquet) comprimido con Snappy.

La lista del inventario contiene una enumeración de los objetos en un bucket de S3 y los siguientes
metadatos para cada objeto enumerado:

• Bucket name (Nombre del bucket): el nombre del bucket para el que se realiza el inventario.
• Key name (Nombre de clave): el nombre de la clave de objeto (o clave) que identifica unívocamente el
objeto del bucket. Cuando se utiliza el formato de archivo CSV, el nombre la clave se codifica como URL
y se debe descodificar antes de poder utilizarlo.
• Version ID (ID de versión): el ID de la versión del objeto. Si activa el control de versiones en un bucket,
Amazon S3 asigna un número de versión a los objetos que añada a dicho bucket. Para obtener más

Versión de API 2006-03-01


442
Amazon Simple Storage Service Guía del desarrollador
Inventario

información, consulte Control de versiones de objetos (p. 115). (este campo no estará incluido si la lista
solo refleja la versión actual de los objetos).
• IsLatest: estará establecido en True si el objeto es la versión actual del objeto. (este campo no estará
incluido si la lista solo refleja la versión actual de los objetos).
• Size (Tamaño): el tamaño del objeto en bytes.
• Last modified date (Fecha de la última modificación): la fecha de creación del objeto o la última fecha de
modificación, si esta última fecha es posterior a la primera.
• ETag: la etiqueta de entidad es un hash del objeto. que solo refleja los cambios en su contenido, no en
los metadatos. La ETag puede ser o no un resumen MD5 de los datos del objeto. Esto dependerá del
método de creación del objeto y del tipo de cifrado.
• Storage class (Clase de almacenamiento): la clase de almacenamiento utilizado para almacenar el
objeto. Para obtener más información, consulte Clases de almacenamiento de Amazon S3 (p. 110).
• Multipart upload flag (Marcador de carga multiparte): establecido en True si el objeto se cargó
mediante una carga multiparte. Para obtener más información, consulte Información general de carga
multiparte (p. 187).
• Delete marker (Marcador de eliminación): establecido en True, si el objeto es un marcador de
eliminación. Para obtener más información, consulte Control de versiones de objetos (p. 115). (Este
campo se añade automáticamente al informe si este se ha configurado para que incluya todas las
versiones de los objetos).
• Replication status (Estado de replicación): establecido en PENDING, COMPLETED, FAILED o REPLICA.
Para obtener más información, consulte Información del estado de replicación (p. 618).
• Encryption status (Estado de cifrado): establecido en SSE-S3, SSE-C, SSE-KMS o NOT-SSE. El estado
de cifrado del servidor para SSE-S3, SSE-KMS y SSE con claves proporcionadas por el cliente (SSE-C).
Un estado de NOT-SSE significa que el objeto no está cifrado con el cifrado del servidor. Para obtener
más información, consulte Protección de datos mediante cifrado (p. 274).
• Object lock Retain until date (Fecha de retención del bloqueo del archivo): la fecha hasta la que no
se puede eliminar un objeto bloqueado. Para obtener más información, consulte Bloqueo de objetos
mediante el bloqueo de objetos de Amazon S3 (p. 472).
• Object lock Mode (Modo de bloqueo del objeto): establecido en Governance o Compliance para los
objetos que están bloqueados. Para obtener más información, consulte Bloqueo de objetos mediante el
bloqueo de objetos de Amazon S3 (p. 472).
• Object lock Legal hold status (Estado de retención legal de bloqueo del objeto): establecido en On si se
ha aplicado una retención legal a un objeto; de no ser así, estará establecido en Off. Para obtener más
información, consulte Bloqueo de objetos mediante el bloqueo de objetos de Amazon S3 (p. 472).

A continuación se muestra una lista de inventario CSV de ejemplo abierta en una aplicación de hoja de
cálculo. La fila del encabezado se muestra únicamente para ayudar a explicar el ejemplo; no está incluida
en la lista real.

Le recomendamos que cree una política del ciclo de vida que elimine las listas de inventario antiguas. Para
obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127).

Coherencia del inventario


Puede que en cada lista de inventario no aparezcan todos sus objetos. La lista de inventario ofrece
consistencia final para los PUT tanto de nuevos objetos como de objetos sobrescritos, además de los

Versión de API 2006-03-01


443
Amazon Simple Storage Service Guía del desarrollador
Inventario

DELETE. Las listas de inventario son una instantánea continua de los elementos de un bucket, que son
finalmente coherentes (es decir, que la lista podría no incluir los objetos agregados o eliminados más
recientemente).

Para comprobar el estado del objeto antes de realizar ninguna acción sobre el mismo, le recomendamos
que realice una solicitud HEAD Object con la API REST para recuperar los metadatos del objeto o que
compruebe las propiedades del mismo en la consola de Amazon S3. También puede comprobar los
metadatos del objeto con la AWS CLI o con los SDK de AWS. Para obtener más información, consulte la
sección sobre HEAD Object en la Amazon Simple Storage Service API Reference.

¿Dónde se encuentran las listas de inventario?


Cuando se publica una lista de inventario, los archivos de manifiesto se publican en la siguiente ubicación
del bucket de destino.

destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.json
destination-prefix/source-bucket/config-ID/YYYY-MM-DDTHH-MMZ/manifest.checksum
destination-prefix/source-bucket/config-ID/hive/dt=YYYY-MM-DD-HH-MM/symlink.txt

• destination-prefix es el prefijo (nombre de la clave de objeto) establecido en la configuración del


inventario, que se puede usar para agrupar todos los archivos de lista del inventario en una ubicación
común del bucket de destino.
• source-bucket es el bucket de origen para el que se realiza la lista del inventario. Se agrega para
evitar las colisiones cuando se envían varios informes de inventario procedentes de distintos buckets de
origen al mismo bucket de destino.
• config-ID se agrega para evitar las colisiones con varios informes de inventario del mismo bucket
de origen que se envían al mismo bucket de destino. El config-ID proviene de la configuración del
informe de inventario, y es el nombre del informe que se define durante la configuración.
• AAAA-MM-DDTHH-MMZ es la marca temporal que consta de la hora y de la fecha de inicio en la que la
generación del informe de inventario comienza a explorar el bucket; por ejemplo, 2016-11-06T21-32Z.
El almacenamiento añadido después de la marca temporal no está en el informe.
• manifest.json es el archivo de manifiesto.
• manifest.checksum es el MD5 del contenido del archivo manifest.json.
• symlink.txt es el archivo de manifiesto compatible con Apache Hive.

Las listas de inventario se publican en la siguiente ubicación del bucket de destino a diario o cada semana.

destination-prefix/source-bucket/config-ID/example-file-name.csv.gz
...
destination-prefix/source-bucket/config-ID/example-file-name-1.csv.gz

• destination-prefix es el prefijo (nombre de objeto de clave) definido en la configuración del


inventario. Se puede utilizar para agrupar todos los archivos de lista de inventario en una ubicación
común en el bucket de destino.
• source-bucket es el bucket de origen para el que se realiza la lista del inventario. Se agrega para
evitar las colisiones cuando se envían varios informes de inventario procedentes de distintos buckets de
origen al mismo bucket de destino.
• example-file-name.csv.gz es uno de los archivos de inventario CSV. Los nombres de inventario
ORC terminan con la extensión .orc, mientras que los nombres de inventario Parquet terminan con la
extensión .parquet.

Versión de API 2006-03-01


444
Amazon Simple Storage Service Guía del desarrollador
Inventario

¿Qué es un manifiesto de inventario?


Los archivos de manifiesto manifest.json y symlink.txt describen dónde se encuentran los archivos
de inventario. Siempre que se entrega una nueva lista de inventario, esta va acompañada de un nuevo
conjunto de archivos de manifiesto.

Cada manifiesto incluido en el archivo manifest.json proporciona metadatos y otra información básica
sobre un inventario. La información incluye lo siguiente:

• Nombre del bucket de origen


• Nombre del bucket de destino
• Versión del inventario
• Marca temporal de creación en formato de fecha de inicio que consta de la hora y de la fecha de inicio
en la que la generación del informe de inventario comienza a explorar el bucket
• Formato y esquema de los archivos de inventario
• Lista real de los archivos de inventario que están en el bucket de destino

Cuando se escribe un archivo manifest.json, va acompañado de un archivo manifest.checksum,


que es el MD5 del contenido de un archivo manifest.json.

A continuación se incluye un ejemplo de un manifiesto en un archivo manifest.json para un inventario


con formato CSV.

{
"sourceBucket": "example-source-bucket",
"destinationBucket": "arn:aws:s3:::example-inventory-destination-bucket",
"version": "2016-11-30",
"creationTimestamp" : "1514944800000",
"fileFormat": "CSV",
"fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, Size,
LastModifiedDate, ETag, StorageClass, IsMultipartUploaded, ReplicationStatus,
EncryptionStatus, ObjectLockRetainUntilDate, ObjectLockMode, ObjectLockLegalHoldStatus",
"files": [
{
"key": "Inventory/example-source-bucket/2016-11-06T21-32Z/
files/939c6d46-85a9-4ba8-87bd-9db705a579ce.csv.gz",
"size": 2147483647,
"MD5checksum": "f11166069f1990abeb9c97ace9cdfabc"
}
]
}

A continuación se incluye un ejemplo de un manifiesto en un archivo manifest.json para un inventario


con formato ORC.

{
"sourceBucket": "example-source-bucket",
"destinationBucket": "arn:aws:s3:::example-destination-bucket",
"version": "2016-11-30",
"creationTimestamp" : "1514944800000",
"fileFormat": "ORC",
"fileSchema":
"struct<bucket:string,key:string,version_id:string,is_latest:boolean,is_delete_marker:boolean,size:big
"files": [
{
"key": "inventory/example-source-bucket/data/
d794c570-95bb-4271-9128-26023c8b4900.orc",
"size": 56291,
"MD5checksum": "5925f4e78e1695c2d020b9f6eexample"

Versión de API 2006-03-01


445
Amazon Simple Storage Service Guía del desarrollador
Inventario

}
]
}

A continuación se incluye un ejemplo de un manifiesto en un archivo manifest.json para un inventario


con formato Parquet.

{
"sourceBucket": "example-source-bucket",
"destinationBucket": "arn:aws:s3:::example-destination-bucket",
"version": "2016-11-30",
"creationTimestamp" : "1514944800000",
"fileFormat": "Parquet",
"fileSchema": "message s3.inventory { required binary bucket (UTF8); required binary
key (UTF8); optional binary version_id (UTF8); optional boolean is_latest; optional
boolean is_delete_marker; optional int64 size; optional int64 last_modified_date
(TIMESTAMP_MILLIS); optional binary e_tag (UTF8); optional binary storage_class (UTF8);
optional boolean is_multipart_uploaded; optional binary replication_status (UTF8);
optional binary encryption_status (UTF8);}"
"files": [
{
"key": "inventory/example-source-bucket/data/
d754c470-85bb-4255-9218-47023c8b4910.parquet",
"size": 56291,
"MD5checksum": "5825f2e18e1695c2d030b9f6eexample"
}
]
}

El archivo symlink.txt es un archivo de manifiesto compatible con Apache Hive que permite a Hive
detectar automáticamente los archivos de inventario y archivos de datos asociados. El manifiesto
compatible con Hive funciona con los servicios compatibles con Hive Athena y Amazon Redshift Spectrum.
También funciona con aplicaciones compatibles con Hive, como Presto, Apache Hive, Apache Spark y
muchas otras.
Important

El archivo symlink.txt de manifiesto compatible con Apache Hive no funciona actualmente con
AWS Glue.
El archivo symlink.txt no se puede leer con Apache Hive ni Apache Spark en los archivos de
inventario con formato ORC o Parquet.

¿Cómo sé cuándo está completo un inventario?


Puede configurar una notificación de evento de Amazon S3 para recibir un aviso cuando se crea el archivo
de suma de comprobación del manifiesto, que indica que una lista de inventario se ha agregado al bucket
de destino. El manifiesto es una lista actualizada de todas las listas de inventario en la ubicación de
destino.

Amazon S3 puede publicar eventos en un tema de Amazon Simple Notification Service (Amazon SNS),
una cola de Amazon Simple Queue Service (Amazon SQS) o una función de AWS Lambda. Para obtener
más información, consulte Configuración de notificaciones de eventos de Amazon S3 (p. 551).

La siguiente configuración de notificación define que todos los archivos manifest.checksum agregados
recientemente al bucket de destino se procesen con la función cloud-function-list-write de AWS
Lambda.

<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>

Versión de API 2006-03-01


446
Amazon Simple Storage Service Guía del desarrollador
Inventario

<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>destination-prefix/source-bucket</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>checksum</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:222233334444:cloud-function-list-write</Cloudcode>
<Event>s3:ObjectCreated:*</Event>
</QueueConfiguration>
</NotificationConfiguration>

Para obtener más información, consulte Uso de AWS Lambda con Amazon S3 en la AWS Lambda
Developer Guide.

Consultas de inventario con Amazon Athena


Puede consultar el inventario de Amazon S3 mediante SQL estándar utilizando Amazon Athena en
todas las regiones donde Athena está disponible. Para comprobar la disponibilidad de la región de AWS,
consulte la Tabla de regiones de AWS.

Athena puede consultar archivos de inventario de Amazon S3 en formato ORC, Parquet o CSV. Cuando
se utiliza Athena para consultar el inventario, es recomendable que se usen archivos de inventario con
formato ORC o Parquet. Los formatos ORC y Parquet proporcionan mayor velocidad y menores costos
de las consultas. ORC y Parquet son formatos de archivo ordenados en columnas autodescriptivos y
con reconocimiento de tipos diseñados para Apache Hadoop. El formato en columnas permite al lector
leer, descomprimir y procesar solo las columnas necesarias para la consulta actual. Los formatos ORC y
Parquet para el inventario de Amazon S3 están disponibles en todas las regiones de AWS.

Para empezar a utilizar Athena para consultar el inventario de Amazon S3

1. Cree una tabla de Athena. Para obtener información sobre cómo crear una tabla, consulte el tema
relacionado con la creación de tablas en Amazon Athena en la Guía del usuario de Amazon Athena.

La siguiente consulta de ejemplo incluye todos los campos opcionales del informe de inventario en
formato ORC. Elimine todos los campos opcionales que no haya seleccionado para su inventario para
que la consulta se corresponda con los campos seleccionados para su inventario. Además, debe
utilizar el nombre y la ubicación del bucket. La ubicación apunta a la ruta de destino del inventario
como, por ejemplo, s3://destination-prefix/source-bucket/config-ID/hive/.

CREATE EXTERNAL TABLE your_table_name(


`bucket` string,
key string,
version_id string,
is_latest boolean,
is_delete_marker boolean,
size bigint,
last_modified_date timestamp,
e_tag string,
storage_class string,
is_multipart_uploaded boolean,
replication_status string,
encryption_status string,
object_lock_retain_until_date timestamp,
object_lock_mode string,
object_lock_legal_hold_status string

Versión de API 2006-03-01


447
Amazon Simple Storage Service Guía del desarrollador
Resiliencia

)
PARTITIONED BY (dt string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION 's3://destination-prefix/source-bucket/config-ID/hive/';

Si utiliza Athena para consultar un informe de inventario con formato Parquet, use el siguiente SerDe
de Parquet en lugar del SerDe de ORC en la instrucción ROW FORMAT SERDE.

ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'

2. Para añadir nuevas listas de inventario a la tabla, utilice el siguiente comando MSCK REPAIR TABLE.

MSCK REPAIR TABLE your-table-name;

3. Después de realizar los dos primeros pasos, puede ejecutar consultas ad hoc en su inventario, tal y
como se muestra en el siguiente ejemplo.

SELECT encryption_status, count(*) FROM your-table-name GROUP BY encryption_status;

Para obtener más información acerca del uso de Athena, consulte Guía del usuario de Amazon Athena.

API de REST del inventario de Amazon S3


A continuación se indican las operaciones REST que se usan para el inventario de Amazon S3.

• DELETE Bucket Inventory


• GET Bucket Inventory
• List Bucket Inventory
• PUT Bucket Inventory

Resiliencia en Amazon S3
La infraestructura global de AWS está conformada por regiones y zonas de disponibilidad. Las regiones
de AWS proporcionan varias zonas de disponibilidad físicamente independientes y aisladas que se
encuentran conectadas mediante redes con un alto nivel de rendimiento y redundancia, además de baja
latencia. Estas zonas de disponibilidad ofrecen un medio eficaz de diseñar y utilizar aplicaciones y bases
de datos. Tienen una mayor disponibilidad, tolerancia a errores y escalabilidad que las infraestructuras
de centros de datos tradicionales únicos o múltiples. Si específicamente necesita replicar sus datos en
distancias geográficas mayores, puede utilizar Replicación (p. 573), que permite la copia automática y
asincrónica de objetos en los buckets de diferentes regiones de AWS.

Cada región de AWS cuenta con varias zonas de disponibilidad. Puede implementar sus aplicaciones
en varias zonas de disponibilidad en la misma región para la tolerancia de errores y la baja latencia. Las
zonas de disponibilidad están conectadas entre sí con redes de fibra óptica rápidas y privadas, lo que
permite diseñar aplicaciones con facilidad que conmuten por error entre las zonas de disponibilidad sin
interrupciones.

Para obtener más información sobre las zonas de disponibilidad y las regiones de AWS, consulte
Infraestructura global de AWS.

Además de la infraestructura global de AWS, Amazon S3 ofrece varias características que le ayudan con
sus necesidades de resiliencia y copia de seguridad de los datos.

Versión de API 2006-03-01


448
Amazon Simple Storage Service Guía del desarrollador
Cifrado de copia de seguridad

Configuración del ciclo de vida

Una configuración del ciclo de vida es un conjunto de reglas que definen acciones que Amazon S3
aplica a un grupo de objetos. Con las reglas de configuración del ciclo de vida, puede indicarle a
Amazon S3 que pase los objetos a otras clases de almacenamiento más económicas, que los archive
o que los elimine. Para obtener más información, consulte Administración del ciclo de vida de los
objetos (p. 127).
Control de versiones

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 Amazon S3. Con el control de versiones, puede recuperarse
fácilmente de acciones no deseadas del usuario y de errores de la aplicación. Para obtener más
información, consulte Uso del control de versiones (p. 449).
Bloqueo de objetos de Amazon S3

Puede usar el bloqueo de objetos de Amazon S3 para almacenar objetos mediante un modelo de
escritura única y lectura múltiple (WORM). Utilizando Amazon S3 el bloqueo de objeto, puede evitar
que se elimine o se sobrescriba un objeto durante un periodo de tiempo determinado o de manera
indefinida. El bloqueo de objeto de Amazon S3 le permite cumplir con los requisitos normativos que
precisen de almacenamiento WORM o agregar una capa de protección adicional frente a cambios
y eliminaciones de objetos. Para obtener más información, consulte Bloqueo de objetos mediante el
bloqueo de objetos de Amazon S3 (p. 472).
Clases de almacenamiento

Amazon S3 ofrece una gama de clases de almacenamiento para los objetos que almacene. Dos de
estas clases de almacenamiento (STANDARD_IA y ONEZONE_IA) están diseñadas para datos de
larga duración y de acceso poco frecuente, como copias de seguridad. También puede emplear la
clase de almacenamiento GLACIER para archivar objetos a los que no necesita acceder a tiempo real.
Para obtener más información, consulte Clases de almacenamiento de Amazon S3 (p. 110).

Las siguientes prácticas recomendadas sobre seguridad también evalúan la resiliencia:

• Habilitar el control de versiones


• Considerar la replicación entre regiones de Amazon S3
• Identificar u auditar todos sus buckets de Amazon S3

Cifrado para las copias de seguridad de Amazon S3


Si almacena copias de seguridad utilizando Amazon S3, el cifrado de sus copias dependerá de la
configuración de dichos buckets. Amazon S3 ofrece una manera de establecer el comportamiento del
cifrado predeterminado para un bucket de S3. Puede configurar el cifrado predeterminado en un bucket
para que todos los objetos se cifren cuando se almacenen en el bucket. El cifrado predeterminado es
compatible con las claves almacenadas en AWS KMS (SSE-KMS). Para obtener más información,
consulte Cifrado predeterminado de Amazon S3 para los buckets de S3 (p. 69).

Uso del control de versiones


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 Amazon S3. Con el control de versiones, puede recuperarse
fácilmente de acciones no deseadas del usuario y de errores de la aplicación.

En un bucket, por ejemplo, puede tener dos objetos con la misma clave pero ID de versión diferentes,
como photo.gif (versión 111111) y photo.gif (versión 121212).

Versión de API 2006-03-01


449
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Los buckets con el control de versiones habilitado le permiten recuperar objetos ante su eliminación o
sobrescritura accidental. Por ejemplo:

• Si elimina un objeto, en lugar de eliminarlo permanentemente, Amazon S3 inserta un marcador de


eliminación, que se convierte en la versión del objeto actual. Siempre puede restaurar la versión anterior.
Para obtener más información, consulte Eliminación de versiones de objetos (p. 463).
• Si sobrescribe un objeto, se creará una nueva versión del objeto en el bucket. Siempre puede restaurar
la versión anterior.

Important

Si cuenta con una política de ciclo de vida para la caducidad de un objeto en el bucket sin
versiones y quiere mantener el mismo comportamiento de eliminación cuando habilite el control
de versiones, debe agregar una política de vencimiento no actual. La política de vencimiento
no actual administrará las eliminaciones de las versiones de objetos no actuales en el bucket
habilitado para el control de versiones. (Un bucket con habilitación de versiones mantiene la
versión actual y cero o más versiones objeto no actuales). Para obtener más información, consulte
How Do I Create a Lifecycle Policy for an S3 Bucket? en la Guía del usuario de la consola de
Amazon Simple Storage Service.

Los buckets pueden tener tres estados: sin control de versiones (estado predeterminado), con control de
versiones habilitado o con control de versiones suspendido.
Important

Tras habilitar el control de versiones en un bucket, nunca puede volver a un estado sin control de
versiones. Sin embargo, sí que puede suspender el control de versiones en el bucket.

El estado del control de versiones se aplica a todos los objetos (nunca solo a una parte) del bucket. A
partir de la primera vez que habilite el control de versiones en un bucket, los objetos que contiene siempre
estarán versionados y tendrán un ID de versión exclusivo. Tenga en cuenta lo siguiente:

• Los objetos almacenados en un bucket antes de establecer el estado del control de versiones tienen el
ID de versión null. Al habilitar el control de versiones, los objetos existentes en el bucket no cambian.
Lo que cambia es la forma en la que Amazon S3 administrará los objetos en las solicitudes futuras. Para
obtener más información, consulte Administración de objetos en un bucket con control de versiones
habilitado (p. 455).
• El propietario del bucket (o cualquier usuario con los permisos adecuados) puede suspender el control
de versiones para dejar de acumular versiones de objetos. Al suspender el control de versiones,
los objetos existentes en el bucket no cambian. Lo que cambia es la forma en la que Amazon
S3 administrará los objetos en las solicitudes futuras. Para obtener más información, consulte
Administración de objetos en un bucket con control de versiones suspendido (p. 469).

Cómo configurar el control de versiones en un bucket


Puede configurar el control de versiones en un bucket con cualquiera de los siguientes métodos:

• Configurar el control de versiones con la consola de Amazon S3.

Versión de API 2006-03-01


450
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

• Configurar el control de versiones mediante programación con los SDK de AWS.

Tanto la consola como los SDK llaman a la API REST que proporciona Amazon S3 para administrar el
control de versiones.
Note

Si lo necesita, también puede realizar las llamadas a la API REST de Amazon S3 directamente
desde su código. Sin embargo, esto puede ser engorroso porque debe escribir el código para
autenticar las solicitudes.

Cada bucket que cree tiene un subrecurso de control de versiones (consulte Opciones de configuración
de buckets (p. 58)) asociado. De forma predeterminada, su bucket no tendrá control de versiones y, por
tanto, el subrecurso de control de versiones almacena una configuración vacía.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</VersioningConfiguration>

Para habilitar el control de versiones, envía una solicitud a Amazon S3 con una configuración para el
control de versiones que incluye un estado.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Status>Enabled</Status>
</VersioningConfiguration>

Para suspender el control de versiones, puede configurar el valor de estado como Suspended.

El propietario de un bucket, una cuenta de AWS que haya creado el bucket (cuenta raíz), y los usuarios
autorizados pueden configurar el estado de control de versiones de un bucket. Para obtener más
información sobre los permisos, consulte Administración de identidad y acceso en Amazon S3 (p. 312).

Para ver un ejemplo de cómo configurar el control de versiones, consulte Ejemplos de habilitación del
control de versiones en buckets (p. 452).

Eliminación MFA
También puede agregar opcionalmente otra capa de seguridad si configura un bucket para habilitar la
eliminación con MFA (autenticación multifactor), lo que requiere una autenticación adicional para alguna de
las siguientes operaciones:

• Cambiar el estado de control de versiones del bucket


• Eliminar permanentemente la versión de un objeto

La eliminación MFA requiere dos formas combinadas de autenticación:

• Sus credenciales de seguridad


• La concatenación de un número de serie válido, un espacio y el código de seis dígitos que se muestra
en un dispositivo de autenticación autorizado

Por tanto, la eliminación con MFA refuerza la seguridad en caso, por ejemplo, de que sus credenciales de
seguridad estén en riesgo.

Para habilitar o deshabilitar la eliminación con MFA, puede usar la misma API que utilice para configurar el
control de versiones en un bucket. Amazon S3 almacena la configuración de la eliminación con MFA en el
mismo subrecurso de control de versiones que almacena el estado del control de versiones del bucket.

Versión de API 2006-03-01


451
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

La eliminación de MFA le puede ser de utilidad para evitar eliminaciones accidentales del bucket haciendo
lo siguiente:

• Requiere que el usuario que inicia la acción de eliminación demuestre la posesión física del dispositivo
MFA con un código MFA.
• Añade una capa adicional de fricción y seguridad a la acción de eliminación.

<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Status>VersioningState</Status>
<MfaDelete>MfaDeleteState</MfaDelete>
</VersioningConfiguration>

Note

El propietario de un bucket, la cuenta de AWS que haya creado el bucket (cuenta raíz) y todos
los usuarios de IAM autorizados pueden habilitar el control de versiones, pero solo el propietario
del bucket (cuenta raíz) puede habilitar la eliminación con MFA. Para obtener más información,
consulte la publicación del blog de AWS en Eliminación y control de versiones de MFA.

Para usar la eliminación con MFA, puede usar hardware o un dispositivo virtual de MFA para generar un
código de autenticación. En el siguiente ejemplo se muestra un código de autenticación generado en un
dispositivo de hardware.

Note

La eliminación con MFA y el acceso a la API protegido con MFA son características cuyo objetivo
es proporcionar protección en distintos escenarios. Puede configurar la eliminación con MFA
en un bucket para garantizar que los datos en el bucket no se puedan eliminar por accidente.
El acceso a la API protegido por MFA se usa para aplicar otro factor de autenticación (código
de MFA) al obtener acceso a recursos de Amazon S3 confidenciales. Puede requerir que todas
las operaciones relacionadas con estos recursos de Amazon S3 se realicen con credenciales
temporales creadas con MFA. Para ver un ejemplo, consulte Incorporación de una política de
bucket para requerir MFA (p. 391).
Para obtener más información sobre cómo adquirir y activar un dispositivo de autenticación,
consulte https://aws.amazon.com/iam/details/mfa/.

Temas relacionados
Para obtener más información, consulte los siguientes temas:

• Ejemplos de habilitación del control de versiones en buckets (p. 452)


• Administración de objetos en un bucket con control de versiones habilitado (p. 455)
• Administración de objetos en un bucket con control de versiones suspendido (p. 469)
• Aumentos significativos en las respuestas HTTP 503 a solicitudes de Amazon S3 para buckets con
control de versiones habilitado (p. 670)

Ejemplos de habilitación del control de versiones en buckets


Temas
• Uso de la consola de Amazon S3 (p. 453)
• Mediante el AWS SDK para Java (p. 453)

Versión de API 2006-03-01


452
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

• Mediante el AWS SDK para .NET (p. 454)


• Mediante otros SDK de AWS (p. 455)

En esta sección se presentan ejemplos de cómo habilitar el control de versiones en un bucket. En los
ejemplos, primero se habilita el control de versiones en un bucket y después se recupera el estado de
control de versiones. Para ver una introducción, consulte Uso del control de versiones (p. 449).

Uso de la consola de Amazon S3


Para obtener más información acerca de la habilitación del control de versiones en un bucket con la
consola de Amazon S3, consulte ¿Cómo habilito o suspendo el control de versiones para un bucket de
S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Mediante el AWS SDK para Java


Example

Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Prueba de
ejemplos de código Java de Amazon S3 (p. 706).

import java.io.IOException;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;

public class BucketVersioningConfigurationExample {


public static String bucketName = "*** bucket name ***";
public static AmazonS3Client s3Client;

public static void main(String[] args) throws IOException {


s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
s3Client.setRegion(Region.getRegion(Regions.US_EAST_1));
try {

// 1. Enable versioning on the bucket.


BucketVersioningConfiguration configuration =
new BucketVersioningConfiguration().withStatus("Enabled");

SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest =
new SetBucketVersioningConfigurationRequest(bucketName,configuration);

s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);

// 2. Get bucket versioning configuration information.


BucketVersioningConfiguration conf =
s3Client.getBucketVersioningConfiguration(bucketName);
System.out.println("bucket versioning configuration status: " + conf.getStatus());

} catch (AmazonS3Exception amazonS3Exception) {


System.out.format("An Amazon S3 error occurred. Exception: %s",
amazonS3Exception.toString());
} catch (Exception ex) {
System.out.format("Exception: %s", ex.toString());
}
}
}

Versión de API 2006-03-01


453
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Mediante el AWS SDK para .NET


Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

Example

using System;
using Amazon.S3;
using Amazon.S3.Model;

namespace s3.amazon.com.docsamples
{
class BucketVersioningConfiguration
{
static string bucketName = "*** bucket name ***";

public static void Main(string[] args)


{
using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USEast1))
{
try
{
EnableVersioningOnBucket(client);
string bucketVersioningStatus =
RetrieveBucketVersioningConfiguration(client);
}
catch (AmazonS3Exception amazonS3Exception)
{
if (amazonS3Exception.ErrorCode != null &&
(amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
||
amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
{
Console.WriteLine("Check the provided AWS Credentials.");
Console.WriteLine(
"To sign up for service, go to http://aws.amazon.com/s3");
}
else
{
Console.WriteLine(
"Error occurred. Message:'{0}' when listing objects",
amazonS3Exception.Message);
}
}
}

Console.WriteLine("Press any key to continue...");


Console.ReadKey();
}

static void EnableVersioningOnBucket(IAmazonS3 client)


{

PutBucketVersioningRequest request = new PutBucketVersioningRequest


{
BucketName = bucketName,
VersioningConfig = new S3BucketVersioningConfig
{
Status = VersionStatus.Enabled
}
};

PutBucketVersioningResponse response = client.PutBucketVersioning(request);

Versión de API 2006-03-01


454
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

static string RetrieveBucketVersioningConfiguration(IAmazonS3 client)


{
GetBucketVersioningRequest request = new GetBucketVersioningRequest
{
BucketName = bucketName
};

GetBucketVersioningResponse response = client.GetBucketVersioning(request);


return response.VersioningConfig.Status;
}
}
}

Mediante otros SDK de AWS


Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.

Administración de objetos en un bucket con control de versiones


habilitado
Temas
• Adición de objetos a buckets con control de versiones habilitado (p. 455)
• Listado de objetos en un bucket con control de versiones habilitado (p. 456)
• Recuperación de versiones de objetos (p. 461)
• Eliminación de versiones de objetos (p. 463)
• Transición de versiones de objetos (p. 467)
• Restauración de versiones anteriores (p. 467)
• Permisos de objetos versionados (p. 468)

Los objetos que se almacenan en un bucket antes de establecer el estado del control de versiones tienen
el ID de versión null. Al habilitar el control de versiones, los objetos existentes en el bucket no cambian.
Lo que cambia es la forma en la que Amazon S3 administrará los objetos en las solicitudes futuras. Los
temas de esta sección explican varias operaciones con objetos en un bucket con control de versiones
habilitado.

Adición de objetos a buckets con control de versiones habilitado


Al habilitar el control de versiones en un bucket, Amazon S3 agrega automáticamente un ID de versión
exclusivo a todos los objetos almacenados (con PUT, POST o COPY) en el bucket.

En el siguiente gráfico se muestra que Amazon S3 agrega un ID de versión exclusivo a un objeto cuando
se agrega a un bucket con control de versiones habilitado.

Versión de API 2006-03-01


455
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Temas
• Mediante la consola (p. 456)
• Uso de los SDK de AWS (p. 456)
• Mediante la API de REST (p. 456)

Mediante la consola

Para obtener instrucciones, consulte la sección sobre cómo cargar un objeto en un bucket de S3 en la
Guía del usuario de la consola de Amazon Simple Storage Service.

Uso de los SDK de AWS

Para ver ejemplos de cómo cargar objetos con los SDK de AWS para Java, .NET y PHP, consulte Carga
de objetos (p. 181). Los ejemplos para cargar objetos en buckets sin control de versiones y con control de
versiones habilitado son iguales, aunque en el caso de los buckets con control de versiones habilitado,
Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor nulo.

Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.

Mediante la API de REST

Adición de objetos a buckets con control de versiones habilitado

1 Habilite el control de versiones en un bucket con una solicitud PUT Bucket versioning. Para
obtener más información, consulte PUT Bucket versioning.

2 Envíe una solicitud PUT, POST o COPY para almacenar un objeto en el bucket.

Cuando se agrega un objeto a un bucket con control de versiones habilitado, Amazon S3 devuelve el ID de
versión del objeto en el encabezado de respuesta x-amz-version-id; por ejemplo:

x-amz-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY

Note

Se aplican tasas normales de Amazon S3 por cada versión de un objeto almacenado y


transferido. Cada versión de un objeto es el objeto en sí, no se limita a ser una diferenciación de
la versión anterior. Por tanto, si tiene tres versiones de un objeto almacenado, se le cobrará por
tres objetos.
Note

Los valores del ID de versión que asigna Amazon S3 son seguros para URL (se pueden usar
como parte de un URI).

Listado de objetos en un bucket con control de versiones habilitado


Temas
• Mediante la consola (p. 457)
• Uso de los SDK de AWS (p. 457)
• Mediante la API de REST (p. 459)

Esta sección proporciona un ejemplo de cómo enumerar versiones de un objeto en un bucket con control
de versiones habilitado. Amazon S3 almacena la información de versión de un objeto en el subrecurso
versiones (consulte Opciones de configuración de buckets (p. 58)) asociado con el bucket.

Versión de API 2006-03-01


456
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Mediante la consola
Para obtener más información acerca del listado de versiones de objetos con la consola de Amazon S3,
consulte ¿Cómo veo las versiones de un objeto de S3? en la Guía del usuario de la consola de Amazon
Simple Storage Service.

Uso de los SDK de AWS


Los ejemplos en esta sección muestran cómo recuperar un listado de objetos de un bucket con control
de versiones habilitado. Cada solicitud devuelve hasta 1000 versiones, a menos que especifique un
número más bajo. Si el bucket tiene más versiones que ese límite, tendrá que enviar varias solicitudes
para recuperar la lista de todas las versiones. Este proceso de devolución de resultados en "páginas"
se llama paginación. Para mostrar cómo funciona la paginación, los ejemplos limitan cada respuesta a
dos versiones de objetos. Después de recuperar la primera página de resultados, cada ejemplo realiza
una comprobación para determinar si se truncó la lista de la versión. Si fue así, el ejemplo continúa
recuperando páginas hasta que se hayan recuperado todas las versiones.
Note
El siguiente ejemplo también funciona con un bucket que no tiene habilitado el control de
versiones u objetos que no tienen versiones individuales. En esos casos, Amazon S3 devuelve un
listado de objetos con un ID de versión null.

Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.

Uso del AWS SDK for Java.


Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).

Example

import com.amazonaws.AmazonServiceException;
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.ListVersionsRequest;
import com.amazonaws.services.s3.model.S3VersionSummary;
import com.amazonaws.services.s3.model.VersionListing;

public class ListKeysVersioningEnabledBucket {

public static void main(String[] args) {


Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Retrieve the list of versions. If the bucket contains more versions


// than the specified maximum number of results, Amazon S3 returns
// one page of results per request.
ListVersionsRequest request = new ListVersionsRequest()
.withBucketName(bucketName)
.withMaxResults(2);
VersionListing versionListing = s3Client.listVersions(request);
int numVersions = 0, numPages = 0;
while (true) {

Versión de API 2006-03-01


457
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

numPages++;
for (S3VersionSummary objectSummary :
versionListing.getVersionSummaries()) {
System.out.printf("Retrieved object %s, version %s\n",
objectSummary.getKey(),
objectSummary.getVersionId());
numVersions++;
}
// Check whether there are more pages of versions to retrieve. If
// there are, retrieve them. Otherwise, exit the loop.
if (versionListing.isTruncated()) {
versionListing = s3Client.listNextBatchOfVersions(versionListing);
} else {
break;
}
}
System.out.println(numVersions + " object versions retrieved in " + numPages +
" pages");
} 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();
}
}
}

Mediante el AWS SDK para .NET

Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).

Example

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class ListObjectsVersioningEnabledBucketTest
{
static string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;

public static void Main(string[] args)


{
s3Client = new AmazonS3Client(bucketRegion);
GetObjectListWithAllVersionsAsync().Wait();
}

static async Task GetObjectListWithAllVersionsAsync()


{
try
{
ListVersionsRequest request = new ListVersionsRequest()

Versión de API 2006-03-01


458
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

{
BucketName = bucketName,
// You can optionally specify key name prefix in the request
// if you want list of object versions of a specific object.

// For this example we limit response to return list of 2 versions.


MaxKeys = 2
};
do
{
ListVersionsResponse response = await
s3Client.ListVersionsAsync(request);
// Process response.
foreach (S3ObjectVersion entry in response.Versions)
{
Console.WriteLine("key = {0} size = {1}",
entry.Key, entry.Size);
}

// If response is truncated, set the marker to get the next


// set of keys.
if (response.IsTruncated)
{
request.KeyMarker = response.NextKeyMarker;
request.VersionIdMarker = response.NextVersionIdMarker;
}
else
{
request = null;
}
} while (request != null);
}
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);
}
}
}
}

Mediante la API de REST

Para enumerar todas las versiones de todos los objetos de un bucket, use el subrecurso versions en
una solicitud GET Bucket. Amazon S3 solo puede recuperar un máximo de 1000 objetos y cada versión
del objeto cuenta como un objeto. Por tanto, si un bucket contiene dos claves (por ejemplo, photo.gif y
picture.jpg), la primera clave tiene 990 versiones y la segunda tiene 400 versiones, una única solicitud
recuperaría las 990 versiones de photo.gif y solo las 10 versiones más recientes de picture.jpg.

Amazon S3 devuelve las versiones de objetos en el orden en el que se almacenaron y devuelve las
almacenadas más recientemente primero.

Para enumerar todas las versiones de objetos en un bucket:

• En una solicitud GET Bucket, incluya el subrecurso versions.

GET /?versions HTTP/1.1


Host: bucketName.s3.amazonaws.com

Versión de API 2006-03-01


459
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Date: Wed, 28 Oct 2009 22:32:00 +0000


Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Recuperación de un subconjunto de objetos en un bucket


En esta sección se abordan los siguientes dos escenarios de ejemplo:

• Quiere recuperar un subconjunto de todas las versiones de objeto que haya en un bucket, por ejemplo,
recuperar todas las versiones de un objeto específico.
• El número de versiones del objeto de la respuesta supera el valor de max-key (de forma
predeterminada, 1000), de modo que tendrá que enviar una segunda solicitud para recuperar las
versiones del objeto restantes.

Para recuperar un subconjunto de las versiones de un objeto, use los parámetros de la solicitud GET
Bucket. Para obtener más información, consulte GET Bucket.

Ejemplo 1: Recuperación de todas las versiones de un único objeto específico


Puede recuperar todas las versiones de un objeto con el subrecurso versions y el parámetro de solicitud
prefix con el siguiente proceso. Para obtener más información acerca de prefix, consulte GET Bucket.

Recuperar todas las versiones de una clave

1 Establezca el parámetro prefix en la clave del objeto que quiera recuperar.

2 Envíe una solicitud GET Bucket con el subrecurso versions y prefix.

GET /?versions&prefix=objectName HTTP/1.1

Example Recuperación de objetos con un prefijo


En el siguiente ejemplo se recuperan objetos cuya clave es o comienza por myObject.

GET /?versions&prefix=myObject HTTP/1.1


Host: bucket.s3.amazonaws.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Puede usar los otros parámetros de solicitud para recuperar un subconjunto de todas las versiones del
objeto. Para obtener más información, consulte GET Bucket.

Ejemplo 2: Recuperación de un listado de objetos adicionales si la respuesta está incompleta


Si el número de objetos que se pueden devolver con una solicitud GET supera el valor de max-keys,
la respuesta contendrá <isTruncated>true</isTruncated> e incluirá la primera clave (en
NextKeyMarker) y el primer ID de versión (en NextVersionIdMarker) que se ajusten a la solicitud,
pero no se hayan devuelto. Puede usar esos valores como posición de inicio en una solicitud subsiguiente
para recuperar los objetos adicionales que se ajusten a la solicitud GET.

Puede usar el siguiente proceso para recuperar objetos adicionales que se ajusten a la solicitud GET
Bucket versions original desde un bucket. Para obtener más información sobre key-marker,
version-id-marker, NextKeyMarker y NextVersionIdMarker, consulte GET Bucket.

Recuperación de respuestas adicionales que se ajusten a la solicitud GET original

1 Establezca el valor de key-marker de acuerdo con la clave devuelta en


NextKeyMarker en la respuesta anterior.

Versión de API 2006-03-01


460
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

2 Establezca el valor de version-id-marker de acuerdo con el ID de versión


devuelto en NextVersionIdMarker en la respuesta anterior.

3 Envíe una solicitud GET Bucket versions con el subrecurso key-marker


y version-id-marker.

Example Recuperación de objetos que comiencen con una clave y un ID de versión específicos

GET /?versions&key-marker=myObject&version-id-marker=298459348571 HTTP/1.1


Host: bucket.s3.amazonaws.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Recuperación de versiones de objetos


Una solicitud GET sencilla recupera la versión actual de un objeto. El siguiente gráfico muestra cómo GET
devuelve la versión actual del objeto, photo.gif.

Para recuperar una versión específica, debe especificar su ID de versión. El siguiente gráfico muestra
cómo una solicitud GET versionId devuelve la versión especificada del objeto (no necesariamente la
actual).

Mediante la consola

Para obtener instrucciones, consulte ¿Cómo veo las versiones de un objeto de S3? en la Guía del usuario
de la consola de Amazon Simple Storage Service.

Uso de los SDK de AWS

Para ver ejemplos de cómo cargar objetos con los SDK de AWS para Java, .NET y PHP, consulte
Obtención de objetos (p. 173). Los ejemplos para cargar objetos en buckets sin control de versiones y con
control de versiones habilitado son iguales, aunque en el caso de los buckets con control de versiones
habilitado, Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor
nulo.

Versión de API 2006-03-01


461
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.

Mediante REST

Para recuperar una versión de objeto específica:

1. Establezca el parámetro versionId según el ID de la versión del objeto que quiera recuperar.
2. Envíe una solicitud GET Object versionId .

Example Recuperación de un objeto versionado

La siguiente solicitud recupera la versión L4kqtJlcpXroDTDmpUMLUo de my-image.jpg.

GET /my-image.jpg?versionId=L4kqtJlcpXroDTDmpUMLUo HTTP/1.1


Host: bucket.s3.amazonaws.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Temas relacionados

Recuperación de los metadatos de una versión de objeto (p. 462)

Recuperación de los metadatos de una versión de objeto

Si solo quiere recuperar los metadatos de un objeto (y no su contenido), puede usar la operación HEAD. De
forma predeterminada, obtendrá los metadatos de la versión más reciente. Para recuperar los metadatos
de una versión de objeto específica, debe especificar su ID de versión.

Para recuperar los metadatos de una versión de objeto:

1. Establezca el parámetro versionId según el ID de la versión del objeto cuyos metadatos quiera
recuperar.
2. Envíe una solicitud HEAD Object versionId.

Example Recuperación de los metadatos de un objeto versionado

La siguiente solicitud recupera los metadatos de la versión 3HL4kqCxf3vjVBH40Nrjfkd de my-image.jpg.

HEAD /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTP/1.1


Host: bucket.s3.amazonaws.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

A continuación se muestra una respuesta de ejemplo.

HTTP/1.1 200 OK
x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
x-amz-request-id: 318BC8BC143432E5
x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
Date: Wed, 28 Oct 2009 22:32:00 GMT
Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
ETag: "fba9dede5f27731c9771645a39863328"
Content-Length: 434234
Content-Type: text/plain
Connection: close
Server: AmazonS3

Versión de API 2006-03-01


462
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Eliminación de versiones de objetos


Puede eliminar versiones de objeto cuando quiera. Además, también puede definir normas de
configuración de ciclo de vida para objetos que tengan un ciclo de vida bien definido, de modo que solicite
a Amazon S3 que haga vencer versiones de objetos actuales o eliminar permanentemente versiones
de objetos no actuales. Cuando en su bucket está habilitado o suspendido el control de versiones, las
acciones de configuración de ciclo de vida funcionan así:

• La acción Expiration se aplica a la versión actual del objeto y, en lugar de eliminar la versión actual,
Amazon S3 conserva la versión actual como versión no actual agregándole un marcador de eliminación
que, posteriormente, se convierte en la versión actual.
• La acción NoncurrentVersionExpiration se aplica a las versiones no actuales del objeto
y Amazon S3 elimina permanentemente estas versiones de objeto. No puede recuperar objetos
eliminados permanentemente.

Para obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127).

Una solicitud DELETE presenta los siguientes casos de uso:

• Cuando está habilitado el control de versiones, un DELETE simple no puede eliminar permanentemente
un objeto.

En su lugar, Amazon S3 inserta un marcador de eliminación en el bucket, y ese marcador se convierte


en la versión actual del objeto con un nuevo ID. Cuando intenta GET un objeto cuya versión actual es un
marcador de eliminación, Amazon S3 se comporta como si el objeto se hubiera eliminado (aunque no
sea el caso) y devuelve un error 404.

El siguiente gráfico muestra cómo una solicitud DELETE simple no elimina realmente el objeto
especificado. Por el contrario, Amazon S3 inserta un marcador de eliminación.

• Para eliminar permanentemente objetos versionados, debe usar DELETE Object versionId.

El siguiente gráfico muestra cómo la eliminación de una versión de objeto específica elimina
permanentemente el objeto.

Versión de API 2006-03-01


463
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Mediante la consola

Para obtener instrucciones, consulte ¿Cómo veo las versiones de un objeto de S3? en la Guía del usuario
de la consola de Amazon Simple Storage Service.

Uso de los SDK de AWS

Para ver ejemplos de cómo eliminar objetos con los SDK de AWS para Java, .NET y PHP, consulte
Eliminación de objetos (p. 236). Los ejemplos para eliminar objetos en buckets sin control de versiones y
con control de versiones habilitado son iguales, aunque en el caso de los buckets con control de versiones
habilitado, Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor
nulo.

Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.

Mediante REST

Para eliminar una versión específica de un objeto:

• En un DELETE, especifique un ID de versión.

Example Eliminar una versión específica

En el siguiente ejemplo se muestra cómo eliminar la versión UIORUnfnd89493jJFJ de photo.gif:

DELETE /photo.gif?versionId=UIORUnfnd89493jJFJ HTTP/1.1

Host: bucket.s3.amazonaws.com
Date: Wed, 12 Oct 2009 17:50:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=
Content-Type: text/plain
Content-Length: 0

Temas relacionados

Uso de eliminación con MFA (p. 464)

Trabajo con marcadores de eliminación (p. 465)

Eliminación de marcadores de eliminación (p. 466)

Uso del control de versiones (p. 449)

Uso de eliminación con MFA

Si la configuración del control de versiones de un bucket tiene la eliminación con MFA habilitada, el
propietario del bucket debe incluir el encabezado de solicitud x-amz-mfa en las solicitudes para eliminar
permanentemente una versión de objeto o cambiar el estado del control de versiones del bucket. Las
solicitudes que incluyen x-amz-mfa deben usar HTTPS. El valor del encabezado es la concatenación del
número de serie de su dispositivo de autenticación, un espacio y el código de autenticación que se muestra
en él. Si no incluye este encabezado de solicitud, la solicitud producirá un error.

Para obtener más información sobre dispositivos de autenticación, consulte https://aws.amazon.com/iam/


details/mfa/.

Example Eliminación de un objeto de un bucket habilitado para la eliminación con MFA

En el siguiente ejemplo se muestra cómo eliminar my-image.jpg (con la versión especificada), que
está en un bucket configurado con la eliminación con MFA habilitada. Tenga en cuenta el espacio entre

Versión de API 2006-03-01


464
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

el [Número de serie] y el [Código de autenticación]. Para obtener más información, consulte


DELETE Object.

DELETE /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd HTTPS/1.1


Host: bucketName.s3.amazonaws.com
x-amz-mfa: 20899872 301749
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Para obtener más información acerca de la habilitación de la eliminación con MFA, consulte Eliminación
MFA (p. 451).

Trabajo con marcadores de eliminación

Un marcador de eliminación es un marcador para un objeto versionado que haya recibido el nombre en
una solicitud DELETE simple. Dado que el objeto estaba en un bucket con control de versiones habilitado,
el objeto no se ha eliminado. El marcador de eliminación, sin embargo, hace que Amazon S3 se comporte
como si se hubiese eliminado.

Un marcador de eliminación tiene un nombre de clave (o clave) y un ID de versión al igual que cualquier
otro objeto. Sin embargo, un marcador de eliminación se diferencia de otros objetos en los siguientes
aspectos:

• No tiene datos asociados con él.


• No está asociado a un valor de lista de control de acceso (ACL).
• No recupera nada de una solicitud GET porque no tiene datos, se obtiene un error 404.
• La única operación que puede usar en un marcador de eliminación es DELETE, y solo el propietario del
bucket puede emitir una solicitud así.

Los marcadores de eliminación acumulan cargos nominales por almacenamiento en Amazon S3. El
tamaño de almacenamiento de un marcador de eliminación es igual al tamaño del nombre de clave del
marcador de eliminación. Un nombre de clave es una secuencia de caracteres Unicode. La codificación
UTF-8 agrega entre 1 y 4 bytes de almacenamiento al bucket para cada carácter del nombre. Para
obtener más información sobre nombres de clave, consulte Claves de objeto (p. 105). Para obtener
información acerca de cómo eliminar marcadores de eliminación, consulte Eliminación de marcadores de
eliminación (p. 466).

Solo Amazon S3 puede crear un marcador de eliminación, lo hace cuando envía una solicitud DELETE
Object a un objeto en un bucket con control de versiones habilitado o suspendido. El objeto denominado
en la solicitud DELETE no se elimina realmente. Por el contrario, el marcador de eliminación se convierte
en la versión actual del objeto. (El nombre de la clave del objeto, o clave, se convierte en la clave del
marcador de eliminación). Si intenta obtener un objeto y su versión actual es un marcador de eliminación,
Amazon S3 responde con:

• Un error 404 (no se encuentra)


• Un encabezado de respuesta, x-amz-delete-marker: true

El encabezado de respuesta le indica que el objeto al que se ha obtenido acceso era un marcador de
eliminación. El encabezado de respuesta no devuelve nunca false; si el valor es false, Amazon S3 no
incluye este encabezado de respuesta en la respuesta.

En el siguiente gráfico se muestra cómo un GET simple en un objeto cuya versión actual es un marcador
de eliminación devuelve un error 404 (no se encuentra).

Versión de API 2006-03-01


465
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Para enumerar todas las versiones de todos los objetos de un bucket, use el subrecurso versions en una
solicitud GET Bucket versions. Un GET simple no recupera objetos de marcador de eliminación. En el
siguiente gráfico se muestra que una solicitud GET Bucket no recupera objetos cuya versión actual sea
un marcador de eliminación.

Eliminación de marcadores de eliminación

Para eliminar un marcador de eliminación, debe especificar su ID de versión en una solicitud DELETE
Object versionId. Si usa una solicitud DELETE para eliminar un marcador de eliminación (sin
especificar el ID de versión del marcador de eliminación), Amazon S3 no elimina el marcador de
eliminación, sino que inserta un nuevo marcador de eliminación.

En el siguiente gráfico se muestra cómo un DELETE simple en un marcador de eliminación no elimina


nada, sino que agrega un nuevo marcador de eliminación a un bucket.

En un bucket con control de versiones habilitado, este nuevo marcador de eliminación tendría un ID de
versión exclusivo. Por tanto, es posible tener varios marcadores de eliminación del mismo objeto en un
bucket.

Versión de API 2006-03-01


466
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Para eliminar permanentemente un marcador de eliminación, debe incluir su ID de versión en una solicitud
DELETE Object versionId. En el siguiente gráfico se muestra cómo una solicitud DELETE Object
versionId elimina permanentemente un marcador de eliminación. Solo el propietario de un bucket puede
eliminar permanentemente un marcador de eliminación.

El efecto de eliminar el marcador de eliminación es que ahora una solicitud GET simple devolverá la
versión actual (121212) del objeto.

Para eliminar permanentemente un marcador de eliminación:

1. Establezca el parámetro versionId según el ID de la versión del marcador de eliminación que quiera
eliminar.
2. Envíe una solicitud DELETE Object versionId.

Example Eliminación de un marcador de eliminación


En el siguiente ejemplo se elimina el marcador de eliminación para la versión 4857693 de photo.gif.

DELETE /photo.gif?versionId=4857693 HTTP/1.1


Host: bucket.s3.amazonaws.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Al eliminar un marcador de eliminación, Amazon S3 incluye en la respuesta:

204 NoContent
x-amz-version-id: versionID
x-amz-delete-marker: true

Transición de versiones de objetos


Puede definir reglas de configuración de ciclo de vida para objetos que tengan un ciclo de vida bien
definido para realizar la transición de versiones de un objeto a la clase de almacenamiento GLACIER en un
momento específico del periodo de vida del objeto. Para obtener más información, consulte Administración
del ciclo de vida de los objetos (p. 127).

Restauración de versiones anteriores


Una de las propuestas de valor del control de versiones es la capacidad de recuperar las versiones
anteriores de un objeto. Existen dos enfoques para hacerlo:

• Copiar una versión anterior del objeto en el mismo bucket

El objeto copiado se convierte en la versión actual del mismo, y se conservan todas las versiones del
objeto.

Versión de API 2006-03-01


467
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

• Eliminar permanentemente la versión actual del objeto

Al eliminar la versión actual del objeto, en efecto, estará convirtiendo la versión anterior en la versión
actual del mismo.

Dado que se conservan todas las versiones de los objetos, puede hacer que cualquier versión sea la
versión actual copiando una versión específica del objeto en el mismo bucket. En el siguiente gráfico, el
objeto de origen (ID=111111) se copia en el mismo bucket. Amazon S3 facilita un nuevo ID (88778877)
y se convierte en la versión actual del objeto. Por tanto, el bucket contendrá tanto la versión original del
objeto (111111) como su copia (88778877).

Un GET subsiguiente recuperará la versión 88778877.

En el siguiente gráfico se muestra cómo eliminar la versión actual (121212) de un objeto, lo que deja la
versión anterior (111111) como objeto actual.

Un GET subsiguiente recuperará la versión 111111.

Permisos de objetos versionados


Los permisos se establecen en el nivel de la versión. Cada versión tiene su propio propietario del objeto, la
cuenta de AWS que crea la versión del objeto es el propietario del mismo. Así, puede establecer distintos
permisos para diferentes versiones del mismo objeto. Para hacerlo, debe especificar el ID de la versión del
objeto cuyos permisos quiera establecer en una solicitud PUT Object versionId acl. Para obtener
una descripción detallada e instrucciones sobre cómo usar las ACL, consulte Administración de identidad y
acceso en Amazon S3 (p. 312).

Example Establecimiento de permisos para una versión de objeto

La siguiente solicitud establece los permisos del beneficiario, BucketOwner@amazon.com, como


FULL_CONTROL en la clave, my-image.jpg, ID de versión 3HL4kqtJvjVBH40Nrjfkd.

PUT /my-image.jpg?acl&versionId=3HL4kqtJvjVBH40Nrjfkd HTTP/1.1


Host: bucket.s3.amazonaws.com

Versión de API 2006-03-01


468
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Date: Wed, 28 Oct 2009 22:32:00 GMT


Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
Content-Length: 124

<AccessControlPolicy>
<Owner>
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>mtd@amazon.com</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>a9a7b886d6fd24a52fe8ca5bef65f89a64e0193f23000e241bf9b1c61be666e9</ID>
<DisplayName>BucketOwner@amazon.com</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>

Del mismo modo, para obtener permisos para una versión de objeto específica, debe facilitar su ID de
versión en una solicitud GET Object versionId acl. Debe incluir el ID de versión porque, de forma
predeterminada, GET Object acl devuelve los permisos de la versión actual del objeto.

Example Recuperación de los permisos para una versión de objeto específica

En el siguiente ejemplo, Amazon S3 devuelve los permisos para la clave, my-image.jpg, ID de versión
DVBH40Nr8X8gUMLUo.

GET /my-image.jpg?versionId=DVBH40Nr8X8gUMLUo&acl HTTP/1.1


Host: bucket.s3.amazonaws.com
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU

Para obtener más información, consulte GET Object acl.

Administración de objetos en un bucket con control de versiones


suspendido
Temas
• Adición de objetos a buckets con control de versiones suspendido (p. 469)
• Recuperación de objetos desde buckets con control de versiones suspendido (p. 470)
• Eliminación de objetos de buckets con control de versiones suspendido (p. 471)

Puede suspender el control de versiones para evitar que se acumulen nuevas versiones del mismo objeto
en un bucket. El motivo de hacer esto es que quiera tener solo una única versión de un objeto en un bucket
o que no se acumulen cargos por las diversas versiones.

Al suspender el control de versiones, los objetos existentes en el bucket no cambian. Lo que cambia es la
forma en la que Amazon S3 administrará los objetos en las solicitudes futuras. Los temas de esta sección
explican varias operaciones con objetos en un bucket con control de versiones suspendido.

Adición de objetos a buckets con control de versiones suspendido


Al suspender el control de versiones en un bucket, Amazon S3 agrega automáticamente un ID de versión
null a todos los objetos almacenados subsecuentemente (con PUT, POST o COPY) en ese bucket.

Versión de API 2006-03-01


469
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

En el siguiente gráfico se muestra cómo Amazon S3 agrega un ID de versión null a un objeto cuando se
agrega a un bucket con control de versiones suspendido.

Si ya existe una versión nula en el bucket y agrega otro objeto con la misma clave, el objeto agregado
sobrescribe la versión nula original.

Si hay objetos versionados en el bucket, la versión que someta a la operación PUT se convertirá en la
versión actual del objeto. En el siguiente gráfico se muestra cómo agregar un objeto a un bucket que
contiene objetos versionados no sobrescribe el objeto ya presente en el bucket. En esta caso, la versión
111111 ya estaba en el bucket. Amazon S3 adjunta un ID de versión nulo al objeto que se agrega, y lo
almacena en el bucket. La versión 111111 no se sobrescribe.

Si ya existe una versión nula en un bucket, la versión nula se sobrescribe, como se muestra en el siguiente
gráfico.

Tenga en cuenta que aunque la clave y el ID de versión (null) de la versión nula son las mismas antes y
después de la operación PUT, los contenidos de la versión nula almacenados originalmente en el bucket se
sustituyen por los contenidos del PUT del objeto en el bucket.

Recuperación de objetos desde buckets con control de versiones suspendido


Una solicitud GET Object devuelve la versión actual de un objeto, haya activado el control de versiones
en un bucket o no. El siguiente gráfico muestra cómo una solicitud GET sencilla devuelve la versión actual
de un objeto.

Versión de API 2006-03-01


470
Amazon Simple Storage Service Guía del desarrollador
Control de versiones

Eliminación de objetos de buckets con control de versiones suspendido


Si el control de versiones está suspendido, una solicitud DELETE:

• Solo puede eliminar un objeto cuyo ID de versión sea null

No elimina ningún elemento si no hay una versión nula del objeto en el bucket.
• Inserta un marcador de eliminación en el bucket.

En el siguiente gráfico se muestra cómo un DELETE simple elimina una versión nula y Amazon S3 inserta
un marcador de eliminación en su lugar con un ID de versión null.

Recuerde que un marcador de eliminación no tiene ningún contenido, por lo que perderá el contenido de la
versión nula cuando un marcador de eliminación la sustituya.

El siguiente gráfico muestra un bucket que no tiene una versión nula. En este caso, DELETE no elimina
nada, Amazon S3 inserta simplemente un marcador de eliminación.

Incluso en un bucket con control de versiones suspendido, el propietario del bucket puede eliminar
permanentemente una versión específica. El siguiente gráfico muestra cómo la eliminación de una versión
de objeto específica elimina permanentemente el objeto. Solo el propietario de un bucket puede eliminar
una versión de objeto específica.

Versión de API 2006-03-01


471
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de objetos

Bloqueo de objetos mediante el bloqueo de objetos de


Amazon S3
Con Amazon S3 object lock, puede almacenar objetos con un modelo de escritura única y lectura múltiple
(WORM). Puede usarlo para evitar que se elimine o se sobrescriba un objeto durante un periodo de
tiempo determinado o de manera indefinida. Amazon S3 object lock le ayuda a cumplir con los requisitos
normativos que precisen de almacenamiento WORM o agregar otra capa de protección frente a cambios y
eliminaciones de objetos.

Cohasset Associates ha evaluado el uso de Amazon S3 object lock en entornos sujetos a las normativas
SEC 17a-4, CTCC y FINRA. Para obtener más información acerca de cómo Amazon S3 object lock está
relacionado con estas regulaciones, consulte la evaluación de cumplimiento de Cohasset Associates.

Amazon S3 object lock proporciona dos formas de administrar la retención de objetos: periodos de
retención y retenciones legales.

• Un periodo de retención especifica un periodo de tiempo fijo durante el cual los objetos permanecen
bloqueados. Durante este periodo, el objeto tiene protección WORM y no es posible sobrescribirlo ni
eliminarlo.
• Una retención legal proporciona la misma protección que un periodo de retención, pero no tiene fecha
de vencimiento. En cambio, la retención legal sigue vigente hasta que la elimine explícitamente. Las
retenciones legales son independientes de los periodos de retención.

Una versión de un objeto puede tener tanto un periodo de retención como una retención legal, solo una
de estas opciones o ninguna de ellas. Para obtener más información, consulte Información general del
bloqueo de objetos de Amazon S3 (p. 473).

Amazon S3 object lock solo funciona en buckets con control de versiones y los periodos de retención y
las retenciones legales se aplican a versiones individuales de los objetos. Cuando bloquea una versión de
un objeto, Amazon S3 almacena la información de bloqueo en los metadatos de esa versión del objeto. Al
colocar un periodo de retención o retención legal en un objeto se protege solo la versión especificada en
la solicitud. No se impide la creación de nuevas versiones del objeto. Si pone un objeto en un bucket que
tiene el mismo nombre de clave que un objeto que ya existe y está protegido, Amazon S3 crea una nueva
versión de ese objeto, la almacena en el bucket según se haya solicitado y comunica que la solicitud se
ha completado correctamente. La versión existente y protegida del objeto sigue bloqueada conforme a su
configuración de retención.

Para usar Amazon S3 object lock, siga estos pasos básicos:

1. Cree un nuevo bucket con Amazon S3 object lock habilitado.


2. De manera opcional, puede configurar un período de retención predeterminado para los objetos
colocados en el bucket.

Versión de API 2006-03-01


472
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de objetos

3. Coloque los objetos que quiera bloquear en el bucket.


4. Aplique un periodo de retención, una retención legal o ambas opciones, a los objetos que desea
proteger.

Para obtener información acerca del uso de Amazon S3 object lock en la Consola de administración de
AWS, consulte ¿Cómo puedo bloquear un objeto de Amazon S3? en la Guía del usuario de la consola de
Amazon Simple Storage Service.

Temas
• Información general del bloqueo de objetos de Amazon S3 (p. 473)
• Administración del bloqueo de objetos de Amazon S3 (p. 476)

Información general del bloqueo de objetos de Amazon S3


Puede usar Amazon S3 object lock para almacenar objetos mediante un modelo de escritura única y
lectura múltiple (WORM). Puede ayudarle a evitar que se eliminen o se sobrescriban objetos durante un
periodo de tiempo determinado o de manera indefinida. Puede usar Amazon S3 object lock para cumplir
con los requisitos normativos que precisen de almacenamiento WORM o agregar una capa adicional de
protección frente a cambios y eliminaciones de objetos.

Para obtener información acerca de la administración del estado de bloqueo de sus objetos de Amazon S3,
consulte the section called “Administración del bloqueo de objetos” (p. 476).

En las siguientes secciones se describen las características principales deAmazon S3 object lock.

Temas
• Modos de retención (p. 473)
• Periodos de retención (p. 474)
• Retenciones legales (p. 475)
• Configuración del bucket (p. 475)
• Permisos necesarios (p. 476)

Modos de retención
Amazon S3 object lock proporciona dos modos de retención:

• Modo Gobierno
• Modo Cumplimiento

Estos modos de retención aplican diferentes niveles de protección a los objetos. Puede aplicar cualquier
modo de retención a cualquier versión del objeto protegida por Amazon S3 object lock.

En el modo Gobierno, los usuarios no pueden sobrescribir ni eliminar una versión del objeto ni alterar su
configuración de bloqueo a menos que tengan permisos especiales. Con el modo Gobierno, evita que
la mayoría de los usuarios eliminen un objeto, pero puede seguir otorgando permiso a algunos usuarios
para alterar la configuración de retención o eliminar el objeto si es necesario. También puede usar el modo
Gobierno para probar la configuración del periodo de retención antes de crear un periodo de retención
en el modo Cumplimiento. Para anular o eliminar la configuración de retención del modo Gobierno, el
usuario debe tener el permiso s3:BypassGovernanceRetention que debe incluir explícitamente x-
amz-bypass-governance-retention:true como encabezado de la solicitud con cualquier solicitud
que requiera la anulación del modo Gobierno.

Versión de API 2006-03-01


473
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de objetos

Note

La consola de Amazon S3, de forma predeterminada, incluye el encabezado x-amz-bypass-


governance-retention:true. Si intenta eliminar objetos protegidos por el modo gobierno y
cuenta con permisos s3:BypassGovernanceMode y s3:GetObjectLockConfiguration o
s3:GetObjectRetention, la operación se realizará correctamente.

En el modo Cumplimiento, ningún usuario puede sobrescribir ni eliminar una versión de objeto protegida,
incluido el usuario raíz de la cuenta de AWS. Una vez que se ha bloqueado un objeto en el modo
Cumplimiento, no es posible cambiar su modo de retención ni acortar su periodo de retención. El modo
Cumplimiento asegura que no se pueda sobrescribir ni eliminar una versión del objeto en toda la duración
del periodo de retención.
Note

La actualización de los metadatos de la versión del objeto, como ocurre cuando coloca o altera
el bloqueo de un objeto, no sobrescribe las versiones del objeto ni restablece su marca temporal
Last-Modified.

Periodos de retención
Un periodo de retención protege una versión de un objeto por un periodo de tiempo determinado. Cuando
coloca un periodo de retención en una versión del objeto, Amazon S3 almacena una marca temporal en
los metadatos de la versión del objeto para indicar el vencimiento del periodo de retención. Cuando vence
el periodo de retención, es posible sobrescribir o eliminar la versión del objeto a menos que también haya
colocado una retención legal en la versión del objeto.

Puede colocar un periodo de retención en una versión del objeto bien explícitamente o bien a través
de una configuración predeterminada del bucket. Si aplica explícitamente un periodo de retención a
una versión del objeto, especifica una fecha de finalización de la retención de esta versión. Amazon S3
almacena la fecha de finalización de la retención en los metadatos de la versión del objeto y la protege
hasta que vence el periodo de retención.

Si usa la configuración predeterminada del bucket, no especificará una fecha de finalización de la


retención. En cambio, especifica una duración, en días o años, durante la cual deberá protegerse cada
versión del objeto colocada en el bucket. Cuando coloca un objeto en un bucket, Amazon S3 calcula una
fecha de finalización de la retención de la versión del objeto añadiendo la duración especificada a la marca
temporal de creación de la versión del objeto. Almacena la fecha de finalización de la retención en los
metadatos de la versión del objeto. La versión del objeto queda protegida exactamente como si hubiese
colocado en esta un bloqueo explícito con ese periodo de retención.
Note

Si solicita colocar una versión del objeto en un bucket que contiene un modo y período de
retención explícitos, esa configuración anula la configuración predeterminada del bucket para esa
versión del objeto.

Como todos los demás ajustes de Amazon S3 object lock, los períodos de retención solo se aplican a
versiones del objeto individuales. Diferentes versiones del mismo objeto pueden tener distintos modos y
periodos de retención.

Por ejemplo, supongamos que tiene un objeto para el que han transcurrido 15 días de un periodo de
retención de 30 días y aplica PUT a un objeto en Amazon S3 con el mismo nombre y un periodo de
retención de 60 días. En este caso, PUT se considerará correcto y Amazon S3 creará una nueva versión
del objeto con un periodo de retención de 60 días. La versión antigua mantiene su periodo de retención
original y podrá borrarse en 15 días.

Puede ampliar el periodo de retención una vez que ha aplicado una configuración de retención a una
versión de un objeto. Para ello, envíe una nueva solicitud de bloqueo para la versión del objeto con una

Versión de API 2006-03-01


474
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de objetos

Retain Until Date que es posterior a la configurada actualmente para esa versión del objeto. Amazon
S3 reemplaza el periodo de retención actual con el periodo nuevo, más largo. Cualquier usuario con
permiso para colocar un periodo de retención en un objeto puede ampliar dicho periodo de retención para
una versión del objeto bloqueada en cualquier modo.

Retenciones legales
Amazon S3 object lock también le permite colocar una retención legal en una versión del objeto. Al igual
que un periodo de retención, la retención legal impide que se sobrescriba o elimine una versión de un
objeto. Sin embargo, una retención legal no tiene asociado un periodo de retención y sigue vigente hasta
que se elimine. Los usuarios con el permiso s3:PutObjectLegalHold pueden colocar y eliminar
libremente retenciones legales.

Las retenciones legales son independientes de los periodos de retención. Siempre que el bucket que
contiene el objeto tenga el Amazon S3 object lock habilitado, puede colocar y eliminar retenciones legales
sin importar si la versión del objeto especificada tiene establecido un período de retención. La colocación
de una retención legal en una versión de un objeto no afecta al modo ni al periodo de retención de dicha
versión del objeto. Por ejemplo, supongamos que coloca una retención legal en una versión de un objeto
al mismo tiempo que esta también recibe protección de un periodo de retención. Si vence el periodo de
retención, el objeto no perderá su protección WORM. En cambio, la retención legal continúa protegiendo el
objeto hasta que un usuario autorizado la elimine explícitamente. De igual modo, si elimina una retención
legal en una versión del objeto que tiene un periodo de retención vigente, la versión del objeto seguirá
protegida hasta que venza el periodo de retención.

Configuración del bucket


Para usar Amazon S3 object lock, debe habilitarlo para un bucket. De manera opcional, puede configurar
un modo y un periodo de retención predeterminados para los nuevos objetos colocados en el bucket.

Habilitar el bloqueo de objetos

Para poder bloquear un objeto, debe configurar el bucket para que use el Amazon S3 object lock. Para
hacerlo, cuando crea el bucket debe especificar que desea habilitar el Amazon S3 object lock. Tras
configurar el bucket para el Amazon S3 object lock, puede bloquear objetos en ese bucket con periodos de
retención, retenciones legales o ambas opciones.
Note

• Solo puede habilitar el Amazon S3 object lock en buckets nuevos. Si desea activar Amazon S3
object lock para un bucket existente, entre en contacto con AWS Support.
• Cuando crea un bucket con Amazon S3 object lock habilitado, Amazon S3 habilita
automáticamente el control de versiones para ese bucket.
• Una vez que cree un bucket con Amazon S3 object lock habilitado, no puede deshabilitar el
bloqueo de objetos ni suspender el control de versiones en ese bucket.

Para obtener información acerca de la habilitación de Amazon S3 object lock en la consola, consulte
¿Cómo puedo bloquear un objeto de Amazon S3? en la Guía del usuario de la consola de Amazon Simple
Storage Service.

Configuración de retención predeterminada

Al activar Amazon S3 object lock para un bucket, este puede almacenar objetos protegidos. Sin embargo,
la configuración no protege automáticamente los objetos que incluye en el bucket. Si desea proteger
automáticamente las versiones del objeto colocadas en el bucket, puede configurar un periodo de
retención predeterminado. La configuración predeterminada se aplica a todos los objetos nuevos
colocados en el bucket a menos que especifique de forma explícita un modo y periodo de retención
diferentes para el objeto cuando lo crea.

Versión de API 2006-03-01


475
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de objetos

Tip
Si desea aplicar el modo y el periodo de retención predeterminados del bucket a todas las nuevas
versiones del objeto colocadas en el bucket, establezca las opciones predeterminadas del bucket
y deniegue a los usuarios el permiso para establecer la configuración de retención del objeto. A
continuación, Amazon S3 aplica el modo y el periodo de retención predeterminados a las nuevas
versiones del objeto colocadas en el bucket y rechaza todas las solicitudes de poner un objeto
que incluya una configuración y un modo de retención.

La configuración predeterminada del bucket requiere tanto un modo como un periodo. El modo
predeterminado del bucket es Gobierno o Cumplimiento. Para obtener más información, consulte Modos
de retención (p. 473).

Un periodo de retención predeterminado no es una marca temporal sino un periodo de días o años. Al
colocar una versión de un objeto en un bucket con un periodo de retención determinado, Amazon S3
object lock calcula una fecha de eliminación de la retención. Lo hace añadiendo el periodo de retención
predeterminado a la marca temporal de creación de la versión del objeto. Amazon S3 almacena la marca
temporal resultante como la fecha de finalización de la retención de la versión del objeto, como si hubiera
calculado manualmente la marca temporal y la hubiera colocado en la versión del objeto usted mismo.

La configuración predeterminada se aplica solo a los objetos nuevos colocados en el bucket. La colocación
de una configuración de retención predeterminada en un bucket no coloca ninguna configuración de
retención en los objetos que ya están en este.
Important
Los bloqueos de objeto se aplican solo a las versiones individuales del objeto. Si coloca un objeto
en un bucket que tiene un periodo de retención predeterminado y no especifica explícitamente un
periodo de retención para ese objeto, Amazon S3 crea el objeto con un periodo de retención que
coincida con lo predeterminado en el bucket. Después de crear un objeto, el periodo de retención
es independiente del periodo de retención predeterminado del bucket. El cambio del periodo de
retención predeterminado del bucket no altera el periodo de retención existente de los objetos en
ese bucket.
Note
Si configura un periodo de retención predeterminado en el bucket, las solicitudes para cargar
objetos en dicho bucket deben incluir el encabezado Content-MD5. Para obtener más
información, consulte PUT Object en la Amazon Simple Storage Service API Reference.

Permisos necesarios
Las operaciones de Amazon S3 object lock necesitan permisos específicos. Para obtener más información,
consulte Permisos para operaciones de objetos (p. 358).

Administración del bloqueo de objetos de Amazon S3


Amazon S3 object lock le permite almacenar objetos en Amazon S3 con un modelo de escritura única y
lectura múltiple (WORM). Puede usarlo para ver, configurar y administrar el estado de bloqueo de objetos
de sus objetos de Amazon S3. Para obtener más información acerca de las capacidades deAmazon S3
object lock, consulte Información general del bloqueo de objetos de Amazon S3 (p. 473).

Temas
• Visualización de la información de bloqueo de un objeto (p. 477)
• Omitir el modo de gobierno (p. 477)
• Configurar eventos y notificaciones (p. 477)
• Configuración de límites de retención (p. 478)
• Administración de marcadores de eliminación y ciclos de vida de los objetos (p. 478)
• Uso del bloqueo de objetos con la replicación (p. 478)

Versión de API 2006-03-01


476
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de objetos

Visualización de la información de bloqueo de un objeto


Puede ver el estado de bloqueo de objetos de una versión del objeto de Amazon S3 con los comandos
GET Object o HEAD Object. Ambos comandos devuelven el modo de retención, Retain Until Date
y el estado de la retención legal de la versión del objeto especificada.

A fin de ver el periodo de retención y el modo de retención de la versión del objeto, debe tener el permiso
s3:GetObjectRetention. A fin de ver el estado de la retención legal de la versión del objeto, debe
tener el permiso s3:GetObjectLegalHold. Si usa los comandos GET o HEAD para una versión del
objeto pero no tiene los permisos necesarios para ver su estado de bloqueo, la solicitud se considerará
correcta. Sin embargo, no devolverá aquella información para cuya visualización no tenga permiso.

Para ver la configuración de retención predeterminada del bucket (si tiene una), solicite
la configuración de bloqueo de objetos del bucket. Para ello, debe tener el permiso
s3:GetBucketObjectLockConfiguration. Si realiza una solicitud para ver la configuración de
bloqueo de objetos en un bucket que no tiene habilitado Amazon S3 object lock, Amazon S3 devuelve un
error.

Puede configurar informes de inventario de Amazon S3 acerca de sus buckets para incluir Retain Until
Date, object lock Mode y Legal Hold Status en todos los objetos de un bucket. Para obtener más
información, consulte Inventario de Amazon S3 (p. 439).

Omitir el modo de gobierno


Si tiene el permiso s3:BypassGovernanceRetention puede realizar operaciones en versiones de
objetos bloqueados en modo Gobierno como si no estuvieran protegidos. Estas operaciones incluyen
eliminar una versión del objeto, acortar el periodo de retención o eliminar el bloqueo del objeto colocando
un nuevo bloqueo con parámetros vacíos. Para omitir el modo Gobierno, debe indicar explícitamente en
la solicitud que desea omitir este modo. Para ello, incluya el encabezado x-amz-bypass-governance-
retention:true en la solicitud o utilice el parámetro equivalente en las solicitudes realizadas por medio
de la AWS CLI o los SDK de AWS. La Consola de administración de AWS aplica automáticamente este
encabezado a las solicitudes realizadas a través de la consola si usted tiene el permiso necesario para
omitir el modo Gobierno.
Note

Omitir el modo Gobierno no afecta al estado de retención legal de la versión del objeto. Si una
versión de un objeto tiene habilitada una retención legal, esta sigue vigente e impide solicitudes
de sobrescribir o eliminar la versión del objeto.

Configurar eventos y notificaciones


Puede configurar eventos de Amazon S3 para operaciones en el nivel de objeto en un bucket con bloqueo
de objetos. Cuando las llamadas PUT Object, HEAD Object y GET Object incluyen metadatos de
bloqueo de objetos, los eventos de estas llamadas incluyen los valores de esos metadatos. Cuando
se añaden o actualizan los metadatos de bloqueo de objetos para un objeto, esas acciones también
desencadenan eventos. Estos eventos ocurren siempre que se aplica PUT o GET a la información del
estado legal o la retención de un objeto.

Para obtener más información acerca de los eventos de Amazon S3, consulte Configuración de
notificaciones de eventos de Amazon S3 (p. 551).

Puede usar las notificaciones de eventos de Amazon S3 para realizar un seguimiento del acceso y los
cambios a los datos y las configuraciones de bloqueo de objetos mediante AWS CloudTrail. Para obtener
más información acerca de CloudTrail, consulte la documentación de AWS CloudTrail.

También puede utilizar Amazon CloudWatch para generar alertas según estos datos. Para obtener
información acerca de CloudWatch, consulte la documentación de Amazon CloudWatch.

Versión de API 2006-03-01


477
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de objetos

Configuración de límites de retención


Puede establecer los períodos de retención mínimos y máximos permitidos para un bucket con una política
de bucket. Para ello utilice la clave de condición s3:object-lock-remaining-retention-days. En
el siguiente ejemplo se muestra una política de bucket que establece un periodo de retención máximo de
10 días.

{
"Version": "2012-10-17",
"Id": "<Policy1436912751980>",
"Statement": [
{
"Sid": "<Stmt1436912698057>",
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:PutObjectRetention"
],
"Resource": "arn:aws:s3:::<example-bucket>/*",
"Condition": {
"NumericGreaterThan": {
"s3:object-lock-remaining-retention-days": "10"
}
}
}
]
}

Note
Si el bucket es el bucket de destino para una política de replicación y desea configurar períodos
de retención mínimos y máximos admisibles para réplicas de objeto que se crean utilizando la
replicación, debe incluir la acción s3:ReplicateObject en su política de bucket.

Para obtener más información acerca del uso de políticas de buckets, consulte Uso de políticas de bucket
y usuario (p. 353).

Administración de marcadores de eliminación y ciclos de vida de los objetos


Aunque no puede eliminar una versión de objeto protegida, puede crear un marcador de eliminación
para ese objeto. Al colocarse un marcador de eliminación en un objeto no se elimina ninguna versión
de objeto. Sin embargo, hace que Amazon S3 se comporte de muchas de las maneras que lo haría si
el objeto se hubiese eliminado. Para obtener más información, consulte Trabajo con marcadores de
eliminación (p. 465).
Note
Los marcadores de eliminación no tienen protección WORM, independientemente del periodo de
retención o retención legal que se haya aplicado al objeto subyacente.

Las configuraciones de administración del ciclo de vida del objeto continúan funcionando normalmente en
objetos protegidos, incluida la colocación de marcadores de eliminación. Sin embargo, las versiones de
los objetos protegidos permanecen a salvo de eliminación o sobrescritura gracias a una configuración de
ciclo de vida. Para obtener más información acerca de la administración de ciclos de vida de los objetos,
consulte Administración del ciclo de vida de los objetos (p. 127).

Uso del bloqueo de objetos con la replicación


Puede utilizar el bloqueo de objetos de Amazon S3 con la replicación para permitir copias asíncronas y
automáticas de objetos bloqueados y sus metadatos de retención en los buckets de S3 de diferentes de las
mismas regiones de AWS. Cuando utiliza la replicación, los objetos de un bucket de origen se replican en
un bucket de destino. Para obtener más información, consulte Replicación (p. 573).

Versión de API 2006-03-01


478
Amazon Simple Storage Service Guía del desarrollador
Seguridad de la infraestructura

Para configurar el bloqueo de objetos con la replicación, puede elegir una de las siguientes opciones.

Opción 1: Habilitar primero el bloqueo de objetos.

1. Habilite el bloqueo de objetos en el bucket de destino o en el de origen y en el de destino.


2. Configure la replicación entre los buckets de origen y de destino.

Opción 2: Configurar primero replicación.

1. Configure la replicación entre los buckets de origen y de destino.


2. Habilite el bloqueo de objetos solo en el bucket de destino o en el de origen y en el de destino.

Para completar el paso 2 en las opciones anteriores, tiene que ponerse en contacto con AWS Support.
Este proceso se requiere para garantizar que la replicación se configure correctamente.

Antes de ponerse en contacto con AWS Support, consulte los siguientes requisitos para configurar el
bloqueo de objetos con la replicación:

• El bucket de Amazon S3 de destino debe tener la opción de bloqueo de objetos habilitada.


• Tiene que conceder dos nuevos permisos en el bucket de S3 de origen del rol de AWS Identity and
Access Management (IAM) que utiliza para configurar la replicación. Los dos nuevos permisos son
s3:GetObjectRetention y s3:GetObjectLegalHold. Si el rol tiene un permiso de s3:Get*,
cumple el requisito. Para obtener más información, consulte Configuración de permisos para la
replicación (p. 587).

Para obtener más información acerca del bloqueo de objetos de Amazon S3, consulte Bloqueo de objetos
mediante el bloqueo de objetos de Amazon S3 (p. 472).

Seguridad de la infraestructura en Amazon S3


Al tratarse de un servicio administrado, Amazon S3 está protegido por los procedimientos de seguridad
de red globales de AWS, que se describen en el documento técnico Amazon Web Services: Información
general sobre procesos de seguridad.

El acceso a Amazon S3 a través de la red se realiza mediante las API publicadas por AWS. Los clientes
deben admitir Transport Layer Security (TLS) 1.0. Nosotros recomendamos TLS 1.2. Los clientes también
deben admitir conjuntos de cifrado con confidencialidad directa total (PFS) tales como Ephemeral Diffie-
Hellman (DHE) o Elliptic Curve Diffie-Hellman Ephemeral (ECDHE). Además, las solicitudes se deben
firmar con AWS Signature V4 o AWS Signature V2, lo que requiere que se proporcionen credenciales
válidas.

Estas API se pueden invocar desde cualquier ubicación de red. Sin embargo, Amazon S3 admite políticas
de acceso basadas en recursos, que pueden incluir restricciones en función de la dirección IP de origen.
También puede utilizar las políticas de bucket de Amazon S3 para controlar el acceso a los buckets desde
puntos de enlace de Amazon Virtual Private Cloud (Amazon VPC) específicos o VPC específicas. Este
proceso aísla con eficacia el acceso de red a un bucket de Amazon S3 determinado únicamente desde la
VPC específica de la red de AWS. Para obtener más información, consulte Ejemplo de políticas de bucket
para puntos de enlace de la VPC para Amazon S3 (p. 394).

Las siguientes prácticas recomendadas sobre seguridad también evalúan la seguridad de la infraestructura
en Amazon S3:

• Considerar los puntos de enlace de la VPC para el acceso a Amazon S3


• Identificar u auditar todos sus buckets de Amazon S3

Versión de API 2006-03-01


479
Amazon Simple Storage Service Guía del desarrollador
Configuración y análisis de vulnerabilidades

Configuración y análisis de vulnerabilidades en


Amazon S3
AWS gestiona las tareas de seguridad básicas como la aplicación de parches en la base de datos y el
sistema operativo (SO) de invitado, la configuración del firewall y la recuperación de desastres. Estos
procedimientos han sido revisados y certificados por los terceros pertinentes. Para obtener más detalles,
consulte los siguientes recursos:

• Validación de la conformidad en Amazon S3 (p. 439)


• Modelo de responsabilidad compartida
• Amazon Web Services: información general de procesos de seguridad (documento técnico)

Las siguientes prácticas recomendadas sobre seguridad también evalúan la configuración y los análisis de
vulnerabilidades en Amazon S3:

• Identificar u auditar todos sus buckets de Amazon S3


• Habilitar AWS Config

Prácticas recomendadas de seguridad para


Amazon S3
Amazon S3 cuenta con una serie de características de seguridad que debe tener en cuenta a la hora de
desarrollar e implementar sus propias políticas de seguridad. Las siguientes prácticas recomendadas
son directrices generales y no suponen una solución de seguridad completa. Puesto que es posible que
estas prácticas recomendadas no sean adecuadas o suficientes para el entorno, considérelas como
consideraciones útiles en lugar de como normas.

Temas
• Prácticas recomendadas preventivas de seguridad de Amazon S3 (p. 480)
• Monitorización y auditoría de prácticas recomendadas de Amazon S3 (p. 483)

Prácticas recomendadas preventivas de seguridad de


Amazon S3
Las siguientes prácticas recomendadas para Amazon S3 pueden serle de utilidad para evitar incidentes de
seguridad.

Asegúrese que sus buckets de Amazon S3 empleen las políticas correctas y que no sean accesibles
públicamente.

A menos que necesite de forma explícita que alguien en Internet pueda leer o escribir en su bucket de
S3, debe asegurarse de que este no sea público. Estos son algunos de los pasos que puede realizar:
• Uso de Block Public Access de Amazon S3 Con Amazon S3 Block Public Access, los
administradores de cuentas y los propietarios de buckets pueden configurar fácilmente controles
centralizados para limitar el acceso público a sus recursos de Amazon S3, que se aplican
independientemente de cómo se creen los recursos. Para obtener más información, consulte Uso de
Amazon S3 Block Public Access (p. 430).

Versión de API 2006-03-01


480
Amazon Simple Storage Service Guía del desarrollador
Prácticas recomendadas preventivas
de seguridad de Amazon S3

• Identifique las políticas de bucket de Amazon S3 que permiten identidades con comodines, como
Principal “*” (que, efectivamente, significa “cualquiera”) o permite una acción comodín “*” (que,
efectivamente, permite al usuario llevar a cabo cualquier acción en el bucket de Amazon S3).
• Tenga en cuenta que, de forma parecida, la lista de control de acceso (ACL) del bucket de Amazon
S3 facilita la lectura, escritura o el acceso completo a “Everyone” o “Any authenticated AWS user”.
• Utilice la API de ListBuckets para examinar todos sus buckets de Amazon S3. A continuación,
utilice GetBucketAcl, GetBucketWebsite y GetBucketPolicy para determinar si el bucket
cuenta con configuración y controles de acceso compatibles.
• Utilice AWS Trusted Advisor para inspeccionar su implementación de Amazon S3.
• Considere la implementación de controles de detección en curso usando la Reglas de AWS Config
administrada de s3-bucket-public-read-prohibited y s3-bucket-public-write-prohibited.

Para obtener más información, consulte Configuración de permisos de acceso a buckets y objetos en
la Guía del usuario de la consola de Amazon Simple Storage Service.
Implemente el acceso a los privilegios mínimos

Cuando concede permisos, debe decidir a quién concede cada permiso y para qué recurso de
Amazon S3 se lo concede. Habilite las acciones específicas que desea permitir en dichos recursos.
Por lo tanto, debe conceder únicamente los permisos obligatorios para realizar una tarea. La
implementación del acceso con privilegios mínimos es esencial a la hora de reducir los riesgos de
seguridad y el impacto que podrían causar los errores o los intentos malintencionados.

Las siguientes herramientas están disponibles para implementar el acceso a los privilegios mínimos:
• Políticas de usuario deIAM yLímites de permisos paras las entidades de IAM
• Políticas de buckets de Amazon S3
• Listas de control de acceso (ACL)Amazon S3
• Políticas de control de servicios

Para recibir asesoramiento sobre lo que tener en cuenta al elegir uno o más de los mecanismos
anteriores, consulte Introducción a la administración de permisos de acceso para los recursos de
Amazon S3 (p. 312).
Utilice los roles de IAM para las aplicaciones y servicios de AWS que necesiten acceso a Amazon S3

Tienen que incluir credenciales válidas de AWS en sus solicitudes API de AWS para las aplicaciones
de Amazon EC2 u otros servicios de AWS y así acceder a los recursos de Amazon S3. No debe
almacenar las credenciales de AWS directamente en la aplicación ni en la instancia de Amazon
EC2. Estas son las credenciales a largo plazo que no rotan automáticamente y que podrían tener un
impacto empresarial significativo si se comprometen.

En su lugar, debería utilizar un rol de IAM para administrar las credenciales temporales de las
aplicaciones o servicios que necesitan acceder a Amazon S3. Al utilizar un rol, no tiene que distribuir
credenciales a largo plazo (como un nombre de usuario y una contraseña o claves de acceso) a
una instancia Amazon EC2 o un servicio de AWS como AWS Lambda. El rol proporciona permisos
temporales que las aplicaciones pueden utilizar al realizar llamadas a otros recursos de AWS.

Para obtener más información, consulte los siguientes temas en la Guía del usuario de IAM.
• Roles de IAM
• Situaciones habituales con los roles: usuarios, aplicaciones y servicios

 
Habilite la eliminación de la Multi-Factor Authentication (MFA)

La eliminación de MFA le puede se de utilidad para evitar eliminaciones accidentales del bucket. Si
la eliminación de MFA no está habilitada, cualquier usuario con la contraseña de un usuario de IAM o
raíz con los suficientes privilegios puede eliminar de forma permanente un objeto de Amazon S3.

Versión de API 2006-03-01


481
Amazon Simple Storage Service Guía del desarrollador
Prácticas recomendadas preventivas
de seguridad de Amazon S3

La eliminación de MFA precisa una autenticación adicional para cualquiera de las siguientes
operaciones:
• Cambiar el estado de control de versiones del bucket
• Eliminar de forma permanente la versión de un objeto

Para obtener más información, consulte Eliminación MFA (p. 451).


Tenga en cuenta el cifrado de datos en reposo

Dispone de las siguientes opciones para proteger datos en reposo en Amazon S3.
• Cifrado en el servidor: solicite que Amazon S3 cifre su objeto antes de guardarlo en discos de sus
centros de datos y, a continuación, lo descifre al descargarlo. El cifrado en el servidor le puede
ser de utilidad para minimizar el riesgo de sus datos al cifrarlos con una clave almacenada en un
mecanismo distinto de que almacena los datos por sí mismo.

Amazon S3 ofrece distintas opciones de cifrado en el servidor. Para obtener más información,
consulte Protección de datos con el cifrado del lado del servidor (p. 275).
• Cifrado en el cliente: puede cifrar datos en el cliente y cargar los datos cifrados en Amazon S3. En
este caso, administra el proceso de cifrado, las claves de cifrado y las herramientas relacionadas. Al
igual que con el cifrado en el servidor, el cifrado en el cliente le puede ser de utilidad para minimizar
el riesgo al cifrar los datos con una clave almacenada en un mecanismo distinto de que almacena
los datos por sí mismo.

Amazon S3 ofrece distintas opciones de cifrado en el cliente. Para obtener más información,
consulte Protección de datos con el cifrado del lado del cliente (p. 304).
Aplique el cifrado de datos en tránsito

Puede utilizar HTTPS (TLS) para ayudarle a evitar posibles ataques de acceso no autorizado o de
manipulación del tráfico de red con ataques de «persona en medio» o similares. Debería permitir solo
las conexiones cifradas a través de HTTPS (TLS) mediante la condición aws:SecureTransport en las
políticas de bucket de Amazon S3.

Tenga en cuenta también la implementación de controles de detección en curso mediante la regla


administrada de AWS Config, s3-bucket-ssl-requests-only.
Considere el bloqueo de objetos de Amazon S3

El bloqueo de objetos de Amazon S3 le permite almacenar objetos con un modelo de «escritura única
y lectura múltiple» (WORM). El bloqueo de objetos de Amazon S3 le puede ser de utilidad para evitar
la eliminación accidental o inadecuada de datos. Por ejemplo, podría utilizar el bloqueo de objetos de
Amazon S3 para proteger sus registros de AWS CloudTrail.
Habilite el control de versiones

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 Amazon S3. Con el control de versiones, puede recuperarse
fácilmente de acciones no deseadas del usuario y de errores de la aplicación.

Tenga en cuenta también la implementación de controles de detección en curso mediante la regla


administrada de AWS Config, s3-bucket-versioning-enabled.

Para obtener más información, consulte Uso del control de versiones (p. 449).
Tenga en cuenta la replicación entre regiones de Amazon S3

Aunque Amazon S3 almacena sus datos en diversas zonas de disponibilidad alejadas


geográficamente, de forma predeterminada los requisitos de conformidad pueden exigir que almacene
los datos incluso en ubicaciones aún más alejadas. La replicación entre regiones (CRR) permite
replicar los datos entre regiones de AWS alejadas para cumplir con estos requisitos. CRR habilita
la copia asincrónica y automática de los objetos entre buckets de diferentes regiones de AWS. Para
obtener más información, consulte Replicación (p. 573).

Versión de API 2006-03-01


482
Amazon Simple Storage Service Guía del desarrollador
Monitorización y auditoría de prácticas
recomendadas de Amazon S3

Note

CRR precisa que tanto el origen y el destino de los buckets de S3 tengan habilitado el control
de versiones.

Tenga en cuenta también la implementación de controles de detección en curso mediante la regla


administrada de AWS Config, s3-bucket-replication-enabled.
Tenga en cuenta los puntos de enlace de la VPC para el acceso a Amazon S3

Un punto de enlace de la VPC para Amazon S3 es una entidad lógica dentro de una Amazon Virtual
Private Cloud (Amazon VPC) que únicamente permite conectarse a Amazon S3. Puede utilizar las
políticas de bucket de Amazon S3 para controlar el acceso a los buckets desde puntos de enlace
específicos de la Amazon VPC, o de VPC específicas. Un punto de enlace de la VPC puede ser de
utilidad para evitar que el tráfico pueda recorrer una red de Internet de acceso público o estar sujeto a
una red de Internet de acceso público.

Los puntos de enlace de la VPC para Amazon S3 brindan dos maneras de controlar el acceso a los
datos de Amazon S3:
• Puede controlar qué solicitudes, usuarios o grupos obtienen acceso a través de un punto de enlace
de la VPC específico.
• Puede controlar que VPC o puntos de enlace de la VPC tienen acceso a sus buckets de S3 a través
de las políticas de bucket de S3.
• Puede ser de utilidad para evitar la sustracción de datos mediante el uso de una VPC que no tiene
una gateway de Internet.

Para obtener más información, consulte Ejemplo de políticas de bucket para puntos de enlace de la
VPC para Amazon S3 (p. 394).

Monitorización y auditoría de prácticas recomendadas


de Amazon S3
Las siguientes prácticas recomendadas para Amazon S3 le pueden ser de utilidad para detectar los
incidentes y los posibles puntos débiles de la seguridad.

Identifique y audite todos su buckets de Amazon S3

La identificación de sus activos de TI es un aspecto fundamental de seguridad y control. Tiene que


tener una visión de todos sus recursos de Amazon S3 para evaluar sus medidas de seguridad y tomar
así las acciones pertinentes respecto a las posibles áreas débiles.

Utilice Tag Editor para identificar los recursos que precisan más seguridad o una auditoría y utilice
dichas etiquetas cuando tenga que buscarlos. Para obtener más información, consulte Buscar
recursos para etiquetar.

Utilice el inventario de Amazon S3 para auditar e informar sobre el estado de replicación y cifrado
de los objetos para sus necesidades empresariales, de conformidad y legales. Para obtener más
información, consulte Inventario de Amazon S3 (p. 439).

Cree grupos de recursos para sus recursos de Amazon S3. Para obtener más información, consulte
¿Qué es AWS Resource Groups?
Implemente la monitorización con herramientas de monitorización de AWS

La monitorización es una parte importante del mantenimiento de la fiabilidad, la seguridad, la


disponibilidad y el desempeño de Amazon S3 y sus soluciones de AWS. AWS dispone de diversas
herramientas y servicios para ayudarle a monitorizar Amazon S3 y el resto de servicios de AWS.

Versión de API 2006-03-01


483
Amazon Simple Storage Service Guía del desarrollador
Monitorización y auditoría de prácticas
recomendadas de Amazon S3

Por ejemplo, puede monitorizar las métricas de CloudWatch de Amazon S3, sobre todo respecto a
PutRequests, GetRequests, 4xxErrors y DeleteRequests. Para obtener más información,
consulte Monitorización de métricas con Amazon CloudWatch (p. 636). Para obtener más
información, consulte Monitorización de Amazon S3 (p. 635).

Si desea ver un segundo ejemplo, consulte Ejemplo: actividad del bucket de Amazon S3. Este ejemplo
describe cómo crear una alarma de Amazon CloudWatch, que se dispara cuando se produce una
llamada a la API de Amazon S3 a la política de bucket de PUT o DELETE, el ciclo de vida de bucket,
la replicación de bucket o a PUT, un bucket ACL.
Habilite el registro de acceso al servidor de Amazon S3

El registro de acceso al servidor brinda registros detallados de las solicitudes realizadas a un bucket.
Los registros de acceso al servidor pueden ayudarle con la seguridad y la auditoría de accesos; le
pueden ayudar a saber más sobre su base de clientes y a comprender su factura de Amazon S3. Para
obtener información acerca de cómo habilitar el registro de acceso del servidor, consulte Registro de
acceso al servidor de Amazon S3 (p. 674).

Tenga en cuenta también los controles de detección en curso mediante la regla administrada de AWS
Config, s3-bucket-logging-enabled.
Use AWS CloudTrail

AWS CloudTrail proporciona un registro de las medidas adoptadas por un usuario, un rol o un servicio
de AWS en Amazon S3. Mediante la información recopilada por CloudTrail, puede determinar la
solicitud que se realizó a Amazon S3, la dirección IP de origen desde la que se realizó, quién la
realizó y cuándo, etc. Por ejemplo, puede identificar entradas de CloudTrail para acciones Put que
afecten al acceso a los datos, sobre todo PutBucketAcl, PutObjectAcl, PutBucketPolicy
y PutBucketWebsite. Para obtener más información, consulte Registro de llamadas a la API de
Amazon S3 mediante AWS CloudTrail (p. 647).

También puede utilizar CloudTrail junto con el registro de acceso al servidor de Amazon S3. El
registro de acceso al servidor de Amazon S3 le proporciona un registro de acceso de las solicitudes
realizadas al bucket, pero no da visibilidad a las operaciones de la API a nivel de objeto. CloudTrail
admite las operaciones de API a nivel de objeto de Amazon S3, como GetObject, DeleteObject
y PutObject. Monitorizar dichos eventos, llamados eventos de datos, puede proporcionarle
información valiosa sobre las operaciones relacionadas con sus objetos de Amazon S3. Para obtener
más información, consulte Eventos de datos en la AWS CloudTrail User Guide.
Habilite AWS Config

Varias de las prácticas recomendadas que se enumeran en este tema sugieren la creación de
reglas de AWS Config. AWS Config le permite examinar, auditar y evaluar las configuraciones de
sus recursos de AWS. AWS Config monitoriza las configuraciones de sus recursos, permitiéndole
evaluar las configuraciones registradas frente a las configuraciones de seguridad deseadas. Con AWS
Config puede revisar los cambios en las configuraciones y las relaciones entre los recursos de AWS,
investigar los historiales detallados de configuración de recursos y determinar la conformidad general
con respecto a las configuraciones especificadas en sus pautas internas. Esto le puede ser de utilidad
para simplificar las auditorías de conformidad, los análisis de seguridad, la administración de cambios
y la resolución de problemas operativos. Para obtener más información, consulte Configuración de
AWS Config mediante la consola en la Guía para desarrolladores de AWS Config. Al especificar los
tipos de recursos para registras, asegúrese de incluir los recursos de Amazon S3.

Para ver un ejemplo de cómo utilizar AWS Config para monitorizar y dar respuesta a los buckets de
Amazon S3 que permiten el acceso a una red pública, consulte Cómo utilizar la configuración de AWS
para monitorizar y dar respuesta a los buckets de Amazon S3 que permiten el acceso a redes de
acceso a la red pública en el blog de seguridad de AWS.
Considere utilizar Amazon Macie con Amazon S3

Macie utiliza el aprendizaje automático para detectar, clasificar y proteger automáticamente


información confidencial en AWS. Macie reconoce la información confidencial, como la información

Versión de API 2006-03-01


484
Amazon Simple Storage Service Guía del desarrollador
Monitorización y auditoría de prácticas
recomendadas de Amazon S3

personalmente identificable (PII) o la propiedad intelectual. Le ofrece paneles y alertas que le


permiten visualizar cómo se mueven estos datos o cómo se obtiene acceso a ellos. Para obtener más
información, consulte ¿Qué es Amazon Macie?
Monitorice Security Advisories de AWS

Debe comprobar con regularidad los avisos de seguridad publicados en Trusted Advisor para su
cuenta de AWS. Tenga en cuenta sobre todo las advertencias sobre los buckets de Amazon S3 con
«open access permissions». Puede hacer esto mediante programación con describe-trusted-advisor-
checks.

Además, monitorice de forma activa la dirección principal de correo electrónico registrada en cada una
de sus cuentas de AWS. AWS se pondrá en contacto con usted, mediante esta dirección de correo
electrónico, para informarle sobre los problemas de seguridad que surjan y que pudieran afectarle.

Los problemas operativos de AWS con gran alcance se publican en elpanel de estado del servicio de
AWS. Los problemas operativos también se publican en las cuentas individuales a través del panel de
estado personal. Para obtener más información, consulte la documentación de AWS Health.

Versión de API 2006-03-01


485
Amazon Simple Storage Service Guía del desarrollador
Terminología

Realización de operaciones por lotes


Puede utilizar las operaciones por lotes de Amazon S3 para realizar operaciones por lotes a gran escala
en objetos de Amazon S3. Las operaciones por lotes de Amazon S3 pueden ejecutar la misma operación
en las listas de objetos de Amazon S3 que se especifiquen. Un único trabajo puede realizar la operación
especificada en miles de millones de objetos que contengan exabytes de datos. Amazon S3 hace un
seguimiento del progreso, envía notificaciones y guarda un informe de finalización detallado de todas las
acciones, lo que proporciona una experiencia sin servidor auditable y completamente administrada. Puede
usar operaciones por lotes de Amazon S3 hasta la Consola de administración de AWS, AWS CLI, los SDK
de AWS o la API de REST.

Utilice operaciones por lotes de Amazon S3 para copiar objetos y establecer etiquetas o listas de control
de acceso (ACL). También puede iniciar la restauración de objetos desde Amazon S3 Glacier o invocar
una función de AWS Lambda que realice acciones personalizadas con sus objetos. Puede realizar estas
operaciones en una lista personalizada de objetos o puede utilizar un informe de inventario de Amazon S3
para facilitar la generación de las listas de objetos, incluso las de mayor tamaño. Las operaciones por lotes
de Amazon S3 utilizan las mismas API de Amazon S3 que se utilizan con Amazon S3, por lo que la interfaz
le resultará familiar.

Temas
• Terminología (p. 486)
• Conceptos básicos: trabajos de las operaciones por lotes de Amazon S3 (p. 487)
• Creación de trabajos de operaciones por lotes de Amazon S3 (p. 488)
• Operaciones (p. 494)
• Administración de trabajos de operaciones por lotes (p. 504)
• Ejemplos de operaciones por lotes de Amazon S3 (p. 508)

Terminología
En esta sección, se utilizan los términos trabajo, operación y tarea, cuyas definiciones son las siguientes:

Trabajo

Un trabajo es la unidad de trabajo básica para operaciones por lotes de Amazon S3. Un trabajo
contiene toda la información necesaria para ejecutar la operación especificada en los objetos
enumerados en el manifiesto. Una vez que se proporciona esta información y se solicita que el trabajo
comience, el trabajo ejecuta la operación en cada objeto del manifiesto.
Operación

Una operación es un solo comando que quiere que un trabajo ejecute. Cada trabajo contiene
solamente un tipo de operación con un único conjunto de parámetros, que operaciones por lotes de
Amazon S3 ejecuta en cada objeto.
Tarea

Una tarea es la unidad de ejecución de un trabajo. Una tarea representa una llamada específica a una
operación de API de Amazon S3 o AWS Lambda para realizar la operación del trabajo en un único

Versión de API 2006-03-01


486
Amazon Simple Storage Service Guía del desarrollador
Conceptos básicos: trabajos

objeto. En el transcurso de la vida útil de un trabajo, operaciones por lotes de Amazon S3 crea una
tarea para cada objeto especificado en el manifiesto.

Conceptos básicos: trabajos de las operaciones por


lotes de Amazon S3
Puede utilizar las operaciones por lotes de Amazon S3 para realizar operaciones por lotes a gran escala en
objetos de Amazon S3. Las operaciones por lotes de Amazon S3 pueden ejecutar la misma operación en
las listas de objetos de Amazon S3 que se especifiquen.

Temas
• Cómo funciona un trabajo de operaciones por lotes de Amazon S3 (p. 487)
• Especificación de un manifiesto (p. 487)

Cómo funciona un trabajo de operaciones por lotes de


Amazon S3
Un trabajo es la unidad de trabajo básica para operaciones por lotes de Amazon S3. Un trabajo contiene
toda la información necesaria para ejecutar la operación especificada en una lista de objetos.

Para crear un trabajo, debe proporcionar a las operaciones por lotes de Amazon S3 una lista de objetos
y especificar la acción que se debe realizar con dichos objetos. Las operaciones por lotes de Amazon S3
admiten las siguientes operaciones:

• PUT copy object


• PUT object tagging
• PUT object ACL
• Iniciar restauración de Glacier
• Invocar una función de AWS Lambda

Los objetos sobre los que quiere que un trabajo actúe se enumeran en un objeto de manifiesto. Los
trabajos realizan la operación especificada en cada uno de los objetos incluidos en su manifiesto. Puede
utilizar un informe Inventario de Amazon S3 (p. 439) con formato CSV como manifiesto, lo cual facilita la
creación de grandes listas de objetos situados en un bucket. También puede especificar un manifiesto en
un formato CSV sencillo que le permite realizar operaciones por lotes en una lista personalizada de objetos
incluidos en un solo bucket.

Después de crear un trabajo, Amazon S3 procesa la lista de objetos del manifiesto y ejecuta la operación
especificada en cada objeto. Mientras el trabajo se está ejecutando, puede monitorizar su avance desde
un programa o a través de la consola Amazon S3. También puede configurar un trabajo para generar un
informe de finalización cuando haya terminado. En el informe de finalización, se describen los resultados
de cada una de las tareas ejecutadas por el trabajo. Para obtener más información sobre la monitorización
de trabajos, consulte Administración de trabajos de operaciones por lotes (p. 504).

Especificación de un manifiesto
Un manifiesto es un objeto de Amazon S3 que muestra las claves de objeto sobre las que desea que
Amazon S3 actúe. Si crea un manifiesto para un trabajo, debe especificar la clave de objeto del manifiesto,
una ETag y un ID de versión opcional. El contenido del manifiesto debe tener codificación URL. No se
admiten los manifiestos que utilizan cifrado en el servidor con claves proporcionadas por el cliente (SSE-C)

Versión de API 2006-03-01


487
Amazon Simple Storage Service Guía del desarrollador
Creación de un trabajo

o cifrado en el servidor con claves administradas por AWS KMS (SSE-KMS). El manifiesto debe contener
el nombre del bucket, la clave del objeto y, de manera opcional, la versión del objeto. Las operaciones por
lotes de Amazon S3 no utilizan ninguno de los demás campos.

Puede especificar un manifiesto en una solicitud de creación de trabajo utilizando uno de los dos formatos
siguientes.

• Informe de inventario de Amazon S3: debe ser un informe de inventario de Amazon S3 con formato
CSV. Debe especificar el archivo manifest.json que está asociado con el informe de inventario. Para
obtener más información sobre los informes de inventario, consulte Inventario de Amazon S3 (p. 439).
Si el informe de inventario incluye los identificadores de las versiones, las operaciones por lotes de
Amazon S3 se ejecutarán en las versiones del objeto especificadas.
• Archivo CSV: cada fila del archivo debe incluir el nombre del bucket, la clave del objeto y, de manera
opcional, la versión del objeto. Las claves de objeto deben estar codificadas como URL, tal y como
se muestra en los siguientes ejemplos. El manifiesto debe incluir los ID de versión de todos los
objetos u omitirlos. Para obtener más información acerca del formato CSV del manifiesto, consulte
JobManifestSpec en la Amazon Simple Storage Service API Reference.

A continuación se muestra un ejemplo de un manifiesto en formato CSV sin los ID de versión:

Examplebucket,objectkey1
Examplebucket,objectkey2
Examplebucket,objectkey3
Examplebucket,photos/jpgs/objectkey4
Examplebucket,photos/jpgs/newjersey/objectkey5
Examplebucket,object%20key%20with%20spaces

A continuación se muestra un ejemplo de un manifiesto en formato CSV que incluye los ID de versión:

Examplebucket,objectkey1,PZ9ibn9D5lP6p298B7S9_ceqx1n5EJ0p
Examplebucket,objectkey2,YY_ouuAJByNW1LRBfFMfxMge7XQWxMBF
Examplebucket,objectkey3,jbo9_jhdPEyB4RrmOxWS0kU0EoNrU_oI
Examplebucket,photos/jpgs/objectkey4,6EqlikJJxLTsHsnbZbSRffn24_eh5Ny4
Examplebucket,photos/jpgs/newjersey/objectkey5,imHf3FAiRsvBW_EHB8GOu.NHunHO1gVs
Examplebucket,object%20key%20with%20spaces,9HkPvDaZY5MVbMhn6TMn1YTb5ArQAo3w

Important

Si los objetos del manifiesto están en un bucket con control de versiones, debe especificar los
ID de versión de los objetos. Cuando se crea un objeto, las operaciones por lotes de Amazon
S3 analizan todo el manifiesto antes de ejecutar el trabajo. Sin embargo, no realizan una
"instantánea" del estado del bucket.
Debido a que los manifiestos pueden contener miles de millones de objetos, los trabajos podrían
tardar mucho tiempo en ejecutarse. Si sobrescribe un objeto con una versión nueva mientras un
trabajo está en ejecución y no especificó el ID de versión de ese objeto, Amazon S3 realizará la
operación en la última versión del objeto y no en la versión que existía cuando se creó el trabajo.
La única manera de evitar este comportamiento consiste en especificar los ID de versión de los
objetos que aparecen en el manifiesto.

Creación de trabajos de operaciones por lotes de


Amazon S3
Esta sección contiene la información que necesita para crear un trabajo de operaciones por lotes de
Amazon S3. También incluye los resultados de una solicitud Create Job.

Versión de API 2006-03-01


488
Amazon Simple Storage Service Guía del desarrollador
Creación de una solicitud de trabajo

Creación de una solicitud de trabajo


Para crear un trabajo, debe proporcionar la siguiente información:

Operación

Especifique la operación que quiere que operaciones por lotes de Amazon S3 ejecute en los objetos
del manifiesto. Cada tipo de operación acepta parámetros que son específicos de dicha operación,
lo que le permite realizar las mismas tareas que si la operación se realizara individualmente en cada
objeto.
Manifiesto

El manifiesto es una lista de todos los objetos en los que quiere que operaciones por lotes de Amazon
S3 ejecute la acción especificada. Puede utilizar un informe con formato CSV Inventario de Amazon
S3 (p. 439) como manifiesto o usar su propia lista CSV de objetos personalizada. Para obtener más
información sobre los manifiestos, consulte Especificación de un manifiesto (p. 487).
Prioridad

Utilice las prioridades de los trabajos para indicar la prioridad relativa de este trabajo con respecto
a otros que se estén ejecutando en la cuenta. Cuanto más elevado sea el número, mayor será la
prioridad.

Las prioridades de los trabajos solo tienen significado en relación con las prioridades establecidas
para otros trabajos de la misma cuenta y región, de modo que puede elegir el sistema de numeración
que mejor que le convenga. Por ejemplo, es posible que desee asignar la prioridad 1 a todos los
trabajos Initiate Restore Object, la prioridad 2 a todos los trabajos PUT Object Copy y la
prioridad 3 a todos los trabajos Put Object ACL. Las operaciones por lotes establecen la prioridad
de los trabajos en función de los números asignados, pero el orden no siempre se mantiene de forma
estricta. De este modo, no debería utilizar prioridades de trabajo para garantizar que cualquier trabajo
comenzará o finalizará antes que cualquier otro trabajo. Si necesita garantizar un orden estricto, debe
esperar hasta que un trabajo finalice para comenzar el siguiente.
RoleArn

Debe especificar un rol de IAM que ejecute el trabajo. El rol de IAM que utilice debe tener permisos
suficientes para realizar la operación especificada en el trabajo. Por ejemplo, para ejecutar un trabajo
PUT Object Copy, el rol de IAM debe tener permisos s3:GetObject en el bucket de origen y
permisos s3:PutObject en el bucket de destino. El rol también necesita permisos para leer el
manifiesto y escribir el informe de finalización del trabajo. Para obtener más información sobre los
roles de IAM, consulte Roles de IAM. Para obtener más información sobre los permisos de Amazon
S3, consulte Especificación de permisos en una política (p. 357).
Informe

Especifique si desea que operaciones por lotes de Amazon S3 genere un informe de finalización.
Si solicita un informe de finalización del trabajo, tiene que proporcionar los parámetros del informe
en este elemento. La información necesaria incluye el bucket donde quiere almacenar el informe, el
formato del informe, si quiere que el informe incluya detalles de todas las tareas o solo tareas con
error, y una cadena de prefijos opcional.
Descripción (opcional)

También puede proporcionar una descripción de hasta 256 caracteres que le ayude a monitorizar
y seguir el trabajo. Amazon S3 incluirá esta descripción siempre que devuelva información sobre el
trabajo o cuando muestre detalles del trabajo en la consola de Amazon S3. Puede ordenar y filtrar
los trabajos fácilmente en función de las descripciones asignadas. Las descripciones no tienen que
ser únicas, por lo que puede usar descripciones como categorías (por ejemplo, "trabajos de copia de
registros semanales") que le ayuden a hacer un seguimiento de los grupos de trabajos parecidos.

Versión de API 2006-03-01


489
Amazon Simple Storage Service Guía del desarrollador
Creación de una respuesta de trabajo

Creación de una respuesta de trabajo


Si la solicitud Create Job se realiza correctamente, Amazon S3 devuelve un ID de trabajo. El ID de
trabajo es un identificador único que Amazon S3 genera automáticamente para que pueda identificar el
trabajo de operaciones por lotes y monitorizar su estado.

Cuando cree un trabajo a través de la AWS CLI, los SDK de AWS o la API REST, puede definir
operaciones por lotes de Amazon S3 para comenzar a procesar el trabajo automáticamente. El trabajo se
ejecuta en cuanto está listo y no tiene que esperar a que se ejecuten otros trabajos de mayor prioridad.
Cuando cree un trabajo a través de la Consola de administración de AWS, tendrá que revisar los detalles
del trabajo y confirmar que desea ejecutarlo para que operaciones por lotes pueda comenzar a procesarlo.
Después de confirmar que desea ejecutar el trabajo, avanza como si lo hubiera creado a través de uno de
los otros métodos. Si un trabajo permanece suspendido durante más de 30 días, no se ejecutará.

Concesión de permisos para operaciones por lotes de


Amazon S3
Esta sección describe cómo conceder los permisos necesarios solicitados para crear y llevar acabo
trabajos de operaciones por lotes.

Temas
• Permisos necesarios para crear un trabajo de operaciones por lotes de Amazon S3 (p. 490)
• Creación de un rol de Amazon S3 de operaciones por lotes de IAM (p. 490)

Permisos necesarios para crear un trabajo de operaciones por


lotes de Amazon S3
Para crear un trabajo de operaciones por lotes de Amazon S3, el permiso s3:CreateJob es obligatorio.
La misma entidad que crea debe tener el permiso de iam:PassRole para pasar el rol de AWS Identity
and Access Management (IAM) especificado para el trabajo a las operaciones por lotes de Amazon S3.
Para obtener información acerca de la creación de este rol de IAM, consulte el siguiente tema Creación de
un rol de Amazon S3 de operaciones por lotes de IAM (p. 490).

Creación de un rol de Amazon S3 de operaciones por lotes de


IAM
Amazon S3 necesita su permiso para poder realizar operaciones por lotes en su nombre. Estos permisos
se conceden a través de un rol de AWS Identity and Access Management (IAM). Esta sección proporciona
ejemplos de las políticas de confianza y de permisos que se utilizan al crear un rol de IAM. Para obtener
más información, consulte Roles de IAM.

Política de confianza
Para que la entidad principal del servicio de operaciones por lotes de Amazon S3 pueda asumir el rol, debe
asociar al rol de IAM la siguiente política de confianza.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"

Versión de API 2006-03-01


490
Amazon Simple Storage Service Guía del desarrollador
Concesión de permisos para operaciones por lotes

},
"Action":"sts:AssumeRole"
}
]
}

Políticas de permisos
En función del tipo de operaciones, puede asociar una de estas políticas.
Note

• Con independencia de la operación que realice, Amazon S3 necesita permisos para leer el
objeto del manifiesto del bucket de S3 y, de forma opcional, escribir un informe en el bucket.
Por lo tanto, todas las políticas que se indican a continuación contienen estos permisos.
• Para los manifiestos de informe de inventario de Amazon S3, las operaciones por lotes de
Amazon S3 necesitan permiso para leer el objeto manifest.json, así como todos los archivos
CSV de datos asociados.
• Los permisos específicos de las versiones como s3:GetObjectVersion solo son obligatorios
cuando especifica el ID de la versión de los objetos.

• PUT copy object

{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::{{DestinationBucket}}/*"
},
{
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::{{SourceBucket}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetBucketLocation"
],

Versión de API 2006-03-01


491
Amazon Simple Storage Service Guía del desarrollador
Concesión de permisos para operaciones por lotes

"Resource": [
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}

• PUT object tagging

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectTagging",
"s3:PutObjectVersionTagging"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}

• PUT object ACL

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],

Versión de API 2006-03-01


492
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}

• Initiate Glacier restore

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:RestoreObject"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}

Recursos relacionados
• Conceptos básicos: trabajos de las operaciones por lotes de Amazon S3 (p. 487)
• Operaciones (p. 494)
• Administración de trabajos de operaciones por lotes (p. 504)

Versión de API 2006-03-01


493
Amazon Simple Storage Service Guía del desarrollador
Operaciones

Operaciones
operaciones por lotes de Amazon S3 admite cinco operaciones diferentes. En los temas de esta sección,
se describen las distintas operaciones.

Temas
• PUT Object Copy (p. 494)
• Initiate Restore Object (p. 494)
• Invocación de una función de Lambda desde operaciones por lotes de Amazon S3 (p. 496)
• Put Object ACL (p. 503)
• Put Object Tagging (p. 503)

PUT Object Copy


La operación PUT Object Copy copia cada uno de los objetos especificados en el manifiesto. Puede copiar
los objetos en un bucket diferente de la misma región de AWS o en un bucket de otra región. operaciones
por lotes de Amazon S3 admiten la mayoría de las opciones disponibles a través de Amazon S3 para
copiar objetos. Estas opciones incluyen la configuración de metadatos de objetos, la configuración de
permisos y el cambio de la clase de almacenamiento de los objetos. Para obtener más información sobre
la funcionalidad disponible a través de Amazon S3 para copiar objetos, consulte Copia de objetos (p. 219).

Restricciones y limitaciones
• Todos los objetos de origen deben estar en el mismo bucket.
• Todos los objetos de destino deben estar en el mismo bucket.
• Debe tener permisos de lectura en el bucket de origen y permisos de escritura en el bucket de destino.
• Los objetos que se van a copiar pueden tener un tamaño máximo de 5 GB.
• Los trabajos PUT Object Copy se deben crear mejor en la región de destino, por ejemplo, la región a la
que pretende copiar los objetos.
• Pueden utilizarse todas las opciones de PUT Object Copy, excepto las comprobaciones condicionales en
ETags y cifrado del lado de servidor con claves de cifrado que proporcionó el cliente.
• Si los buckets no tienen control de versiones, se sobrescribirán los objetos con el mismo nombre de
clave.
• Los objetos no se copian necesariamente en el mismo orden en el que aparecen en el manifiesto. Por
tanto, para los buckets con control de versiones, si es importante conservar el orden de versión actual/no
actual, debe copiar primero todas las versiones no actuales y copiar después las versiones actuales en
un trabajo posterior una vez completado el primer trabajo.

Initiate Restore Object


La operación InitiateRestore envía una solicitud de restauración a Amazon S3 Glacier para cada uno
de los objetos especificados en el manifiesto. Para crear un trabajo Initiate Restore Object, debe incluir dos
elementos con la solicitud:

• ExpirationInDays
Cuando se restaura un objeto desde S3 Glacier, el objeto restaurado es una copia temporal que
Amazon S3 elimina tras un periodo de tiempo establecido. Este elemento especifica cuánto tiempo
va a permanecer disponible la copia en Amazon S3. Una vez que venza la copia temporal, el objeto
solamente podrá recuperarse si se restaura de nuevo desde S3 Glacier. Para obtener más información
sobre la restauración de objetos, consulte Restaurar objetos archivados (p. 258).

Versión de API 2006-03-01


494
Amazon Simple Storage Service Guía del desarrollador
Initiate Restore Object

• GlacierJobTier
Amazon S3 puede restaurar objetos desde S3 Glacier en función de tres niveles diferentes de
recuperación: Expedited, Standard y Bulk. Las operaciones por lotes de Amazon S3 solo admiten
los niveles Standard y Bulk. Para obtener más información acerca de los niveles de recuperación de
S3 Glacier, consulte Opciones de recuperación de archivos (p. 259). Para obtener más información
acerca del precio de cada nivel, consulte la sección "Precios de recuperación" en Precios de Amazon
S3 Glacier.

Important

El trabajo Initiate Restore Object solamente inicia la solicitud para restaurar objetos. operaciones
por lotes de Amazon S3 notifica que el trabajo de un objeto se ha completado una vez que
se ha iniciado la solicitud de dicho objeto. Amazon S3 no actualiza el trabajo ni envía ninguna
notificación cuando los objetos se han restaurado. No obstante, puede utilizar las notificaciones
de eventos para recibir notificaciones cuando los objetos estén disponibles en Amazon S3.
Para obtener más información, consulte Configuración de notificaciones de eventos de Amazon
S3 (p. 551).

Solapamiento de restauraciones
Si un trabajo Initiate Restore Object intenta restaurar un objeto que ya está en proceso de restaurarse, las
operaciones por lotes de Amazon S3 se comportarán del modo siguiente:

La operación de restauración se realizará correctamente en el objeto si se da alguna de las siguientes


condiciones:

• En comparación con la solicitud de restauración que ya está en curso, el valor de ExpirationInDays


de este trabajo es igual y GlacierJobTier es más rápido.
• La solicitud de restauración anterior ya se ha completado y el objeto está disponible actualmente en
el modo Reduced Redundancy Storage (almacenamiento de redundancia reducida). En este caso, las
operaciones por lotes de Amazon S3 actualizan la fecha de vencimiento del objeto restaurado para que
coincida con el valor de ExpirationInDays especificado en este trabajo.

La operación de restauración del objeto no se realizará correctamente si se da alguna de las siguientes


condiciones:

• La solicitud de restauración ya está en curso pero aún no se ha completado y la duración de


restauración de este trabajo (especificada en ExpirationInDays) es diferente de la duración de la
restauración especificada en la solicitud de restauración en curso.
• El nivel de restauración de este trabajo (especificado mediante GlacierJobTier) es igual o más lento
que el que se especificó en la solicitud de restauración en curso.

Limitaciones
Los trabajos Initiate Restore Object tienen las limitaciones siguientes:

• Los trabajos Initiate Restore Object deben crearse en la misma región que los objetos archivados.
• operaciones por lotes de Amazon S3 no admite el comando SELECT de S3 Glacier.
• operaciones por lotes de Amazon S3 no admite el nivel de recuperación Expedited.

Versión de API 2006-03-01


495
Amazon Simple Storage Service Guía del desarrollador
Llamar a una función Lambda.

Invocación de una función de Lambda desde


operaciones por lotes de Amazon S3
Las operaciones por lotes de Amazon S3 pueden invocar funciones de AWS Lambda que realicen
acciones personalizadas en objetos que aparecen en un manifiesto. En esta sección se describe cómo
crear una función de Lambda para utilizarla con operaciones por lotes de Amazon S3 y cómo crear un
trabajo para invocar la función. El trabajo de operaciones por lotes de Amazon S3 utiliza la operación
LambdaInvoke para ejecutar una función de Lambda en cada objeto que aparece en un manifiesto.

Puede trabajar con operaciones por lotes de Amazon S3 para Lambda utilizando la Consola de
administración de AWS, AWS Command Line Interface (AWS CLI), los SDK de AWS o las API de REST.
Para obtener más información acerca del uso de Lambda, consulte Introducción a AWS Lambda en la
AWS Lambda Developer Guide.

En las secciones siguientes se explica cómo comenzar a utilizar operaciones por lotes de Amazon S3 con
Lambda.

Temas
• Uso de Lambda con operaciones por lotes de Amazon S3 (p. 496)
• Creación de una función de Lambda para utilizarla con operaciones por lotes de Amazon S3. (p. 497)
• Creación de un trabajo de operaciones por lotes de Amazon S3 que invoca una función de
Lambda (p. 500)
• Proporcionar información a nivel de tarea en los manifiestos de Lambda (p. 501)

Uso de Lambda con operaciones por lotes de Amazon S3


Cuando se utilizan operaciones por lotes de Amazon S3 con AWS Lambda, debe crear nuevas funciones
de Lambda específicamente para utilizarlas con operaciones por lotes de Amazon S3. No es posible
reutilizar funciones basadas en eventos de Amazon S3 con operaciones por lotes de Amazon S3. Las
funciones de eventos solo pueden recibir mensajes; no devuelven mensajes. Las funciones de Lambda
que se utilizan con operaciones por lotes de Amazon S3 deben aceptar y devolver mensajes. Para obtener
más información acerca de cómo utilizar Lambda con eventos de Amazon S3, consulte Uso de AWS
Lambda con Amazon S3 en la AWS Lambda Developer Guide.

Crea un trabajo de operaciones por lotes de Amazon S3 que invoca su función de Lambda. El trabajo
ejecuta la misma función de Lambda en todos los objetos que aparecen en el manifiesto. Puede controlar
las versiones de su función de Lambda que se utilizarán mientras se procesan los objetos del manifiesto.
Las operaciones por lotes de Amazon S3 admiten nombres de recursos de Amazon (ARN) incompletos,
alias y versiones específicas. Para obtener más información, consulte Introducción al control de versiones
de AWS Lambda en la AWS Lambda Developer Guide.

Si proporciona el trabajo de operaciones por lotes de Amazon S3 con un ARN de función que utiliza un
alias o el calificador $LATEST, y actualiza la versión a la que apunta cualquiera de ellos, las operaciones
por lotes de Amazon S3 comienzan por llamar a la nueva versión de su función de Lambda. Esto puede
resultar útil cuando se desea actualizar la funcionalidad en medio de un trabajo grande. Si no quiere que
las operaciones por lotes de Amazon S3 cambien la versión que se utiliza, facilite la versión específica en
el parámetro FunctionARN al crear el trabajo.

Códigos de respuesta y de resultados


Las operaciones por lotes de Amazon S3 esperan dos niveles de códigos de las funciones de Lambda. El
primero es el código de respuesta de toda la solicitud y el segundo es un código de resultados por tarea.
La siguiente tabla contiene los códigos de respuesta.

Versión de API 2006-03-01


496
Amazon Simple Storage Service Guía del desarrollador
Llamar a una función Lambda.

Código de respuesta Descripción

Succeeded La tarea se completó normalmente. Si solicitó un


informe de finalización de trabajos, la cadena de
resultados de la tarea se incluye en el informe.

TemporaryFailure Se detectó un error temporal en la tarea y esta se


redirigirá antes de que se complete el trabajo. La
cadena de resultados se pasa por alto. Si este es
el último redireccionamiento, el mensaje de error
se incluye en el informe final.

PermanentFailure Se detectó un error permanente en la tarea. Si


solicitó un informe de finalización de trabajos, la
tarea se marca como Failed e incluye la cadena
del mensaje de error. Las cadenas de resultados
de tareas con error se pasan por alto.

Creación de una función de Lambda para utilizarla con


operaciones por lotes de Amazon S3.
En esta sección se proporcionan ejemplos de permisos de AWS Identity and Access Management (IAM)
que debe utilizar con su función de Lambda. También contiene un ejemplo de función de Lambda para
usar con operaciones por lotes de Amazon S3. Si nunca antes ha creado una función de Lambda, consulte
Tutorial: Uso de AWS Lambda con Amazon S3 en la AWS Lambda Developer Guide.

Debe crear funciones de Lambda específicamente para su uso con las operaciones por lotes de Amazon
S3 No es posible reutilizar funciones de Lambda basadas en eventos de Amazon S3. Esto es debido a que
las funciones de Lambda que se utilizan para las operaciones por lotes de Amazon S3 deben aceptar y
devolver campos de datos especiales.

Ejemplo de permisos de IAM


A continuación se muestran ejemplos de los permisos de IAM necesarios para utilizar una función de
Lambda con las operaciones por lotes de Amazon S3.

Example — Política de confianza de operaciones por lotes de Amazon S3

El siguiente es un ejemplo de la política de confianza que puede usar para el rol de ejecución. Da a
Lambda permiso para ejecutar la función invocada por un trabajo operaciones por lotes de Amazon S3.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "batchoperations.s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

Versión de API 2006-03-01


497
Amazon Simple Storage Service Guía del desarrollador
Llamar a una función Lambda.

Example — Política de IAM de Lambda

A continuación, se muestra un ejemplo de una política de IAM que concede a las operaciones por lotes de
Amazon S3 permiso para invocar la función de Lambda y leer el manifiesto de entrada.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BatchOperationsLambdaPolicy",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"lambda:InvokeFunction"
],
"Resource": "*"
}
]
}

Solicitud y respuesta de ejemplo


Esta sección contiene ejemplos de solicitud y respuesta para la función de Lambda.

Example Solicitud

A continuación, se muestra un ejemplo de JSON de una solicitud para la función de Lambda.

{
"invocationSchemaVersion": "1.0",
"invocationId": "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo",
"job": {
"id": "f3cc4f60-61f6-4a2b-8a21-d07600c373ce"
},
"tasks": [
{
"taskId": "dGFza2lkZ29lc2hlcmUK",
"s3Key": "customerImage1.jpg",
"s3VersionId": "1",
"s3BucketArn": "arn:aws:s3:us-east-1:0123456788:awsexamplebucket"
}
]
}

Example Respuesta

A continuación, se muestra un ejemplo de JSON de una respuesta para la función de Lambda.

{
"invocationSchemaVersion": "1.0",
"treatMissingKeysAs" : "PermanentFailure",
"invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo",
"results": [
{
"taskId": "dGFza2lkZ29lc2hlcmUK",
"resultCode": "Succeeded",
"resultString": "[\"Mary Major", \"John Stiles\"]"
}
]

Versión de API 2006-03-01


498
Amazon Simple Storage Service Guía del desarrollador
Llamar a una función Lambda.

Función de Lambda de ejemplo para operaciones por lotes de Amazon S3


La siguiente función de ejemplo de Lambda de Python recorre en iteración el manifiesto, copiando y
cambiando el nombre de todos los objetos.

Como muestra el ejemplo, las claves de las operaciones por lotes de Amazon S3 están codificadas en
URL. Para utilizar Amazon S3 con otros servicios de AWS, es importante que decodifique la URL de la
clave que se pasa desde las operaciones por lotes de Amazon S3.

import boto3
import urllib
from botocore.exceptions import ClientError

def lambda_handler(event, context):


# Instantiate boto client
s3Client = boto3.client('s3')

# Parse job parameters from Amazon S3 batch operations


jobId = event['job']['id']
invocationId = event['invocationId']
invocationSchemaVersion = event['invocationSchemaVersion']

# Prepare results
results = []

# Parse Amazon S3 Key, Key Version, and Bucket ARN


taskId = event['tasks'][0]['taskId']
s3Key = urllib.unquote(event['tasks'][0]['s3Key']).decode('utf8')
s3VersionId = event['tasks'][0]['s3VersionId']
s3BucketArn = event['tasks'][0]['s3BucketArn']
s3Bucket = s3BucketArn.split(':::')[-1]

# Construct CopySource with VersionId


copySrc = {'Bucket': s3Bucket, 'Key': s3Key}
if s3VersionId is not None:
copySrc['VersionId'] = s3VersionId

# Copy object to new bucket with new key name


try:
# Prepare result code and string
resultCode = None
resultString = None

# Construct New Key


newKey = rename_key(s3Key)
newBucket = 'destination-bucket-name'

# Copy Object to New Bucket


response = s3Client.copy_object(
CopySource = copySrc,
Bucket = newBucket,
Key = newKey
)

# Mark as succeeded
resultCode = 'Succeeded'
resultString = str(response)
except ClientError as e:
# If request timed out, mark as a temp failure
# and Amason S3 batch operations will make the task for retry. If
# any other exceptions are received, mark as permanent failure.
errorCode = e.response['Error']['Code']

Versión de API 2006-03-01


499
Amazon Simple Storage Service Guía del desarrollador
Llamar a una función Lambda.

errorMessage = e.response['Error']['Message']
if errorCode == 'RequestTimeout':
resultCode = 'TemporaryFailure'
resultString = 'Retry request to Amazon S3 due to timeout.'
else:
resultCode = 'PermanentFailure'
resultString = '{}: {}'.format(errorCode, errorMessage)
except Exception as e:
# Catch all exceptions to permanently fail the task
resultCode = 'PermanentFailure'
resultString = 'Exception: {}'.format(e.message)
finally:
results.append({
'taskId': taskId,
'resultCode': resultCode,
'resultString': resultString
})

return {
'invocationSchemaVersion': invocationSchemaVersion,
'treatMissingKeysAs': 'PermanentFailure',
'invocationId': invocationId,
'results': results
}

def rename_key(s3Key):
# Rename the key by adding additional suffix
return s3Key + '_new_suffix'

Creación de un trabajo de operaciones por lotes de Amazon S3


que invoca una función de Lambda
Cuando cree un trabajo de operaciones por lotes de Amazon S3 para invocar una función de Lambda,
debe proporcionar lo siguiente:

• El ARN de la función de Lambda (que puede incluir el alias de la función o un número de versión
específico)
• Un rol de IAM con permiso para invocar la función
• El parámetro de acción LambdaInvokeFunction

Para obtener más información acerca de la creación de un trabajo de operaciones por lotes de Amazon S3,
consulte Creación de trabajos de operaciones por lotes de Amazon S3 (p. 488) y Operaciones (p. 494).

En el siguiente ejemplo se crea un trabajo de operaciones por lotes de Amazon S3 que invoca una función
de Lambda mediante la AWS CLI.

aws s3control create-job


--account-id <AccountID>
--operation '{"LambdaInvoke": { "FunctionArn":
"arn:aws:lambda:Region:AccountID:function:LambdaFunctionName" } }'
--manifest '{"Spec":{"Format":"S3BatchOperations_CSV_20180820","Fields":
["Bucket","Key"]},"Location":
{"ObjectArn":"arn:aws:s3:::ManifestLocation","ETag":"ManifestETag"}}'
--report
'{"Bucket":"arn:aws:s3:::awsexamplebucket","Format":"Report_CSV_20180820","Enabled":true,"Prefix":"Rep
--priority 2
--role-arn arn:aws:iam::AccountID:role/BatchOperationsRole
--region Region
--description “Lambda Function"

Versión de API 2006-03-01


500
Amazon Simple Storage Service Guía del desarrollador
Llamar a una función Lambda.

Proporcionar información a nivel de tarea en los manifiestos de


Lambda
Cuando utiliza funciones de AWS Lambda con operaciones por lotes de Amazon S3, es posible que
desee que se adjuntar datos adicionales a cada tarea/clave en la que se opera. Por ejemplo, es posible
que desee tener tanto una clave de objeto de origen como una nueva clave de objeto. Su función de
Lambda podría copiar la clave de origen en el nuevo bucket de S3 bajo un nuevo nombre. De forma
predeterminada, las operaciones por lotes de Amazon S3 le permiten especificar solo el bucket de destino
y una lista de claves de origen en el manifiesto de entrada para su trabajo. A continuación se describe
cómo puede incluir datos adicionales en su manifiesto para que pueda ejecutar funciones de Lambda más
complejas.

Para especificar parámetros por clave en su manifiesto de operaciones por lotes de Amazon S3 para su
uso en el código de su función de Lambda, use el siguiente formato JSON codificado en URL. El campo
key se pasa a su función de Lambda como si fuera una clave de objeto de Amazon S3. Pero la función de
Lambda puede interpretar que contiene otros valores o claves múltiples, como se muestra a continuación.
Note
El número máximo de caracteres para el campo key del manifiesto es 1024.

Example — Manifiesto que sustituye las "claves de Amazon S3" por cadenas JSON
La versión codificada en URL debe facilitarse a las operaciones por lotes de Amazon S3.

my-bucket,{"origKey": "object1key", "newKey": "newObject1Key"}


my-bucket,{"origKey": "object2key", "newKey": "newObject2Key"}
my-bucket,{"origKey": "object3key", "newKey": "newObject3Key"}

Example — Manifiesto codificado en URL


Esta versión codificada en URL debe facilitarse a las operaciones por lotes de Amazon S3. La versión no
codificada en URL no funciona.

my-bucket,%7B%22origKey%22%3A%20%22object1key%22%2C%20%22newKey%22%3A%20%22newObject1Key
%22%7D
my-bucket,%7B%22origKey%22%3A%20%22object2key%22%2C%20%22newKey%22%3A%20%22newObject2Key
%22%7D
my-bucket,%7B%22origKey%22%3A%20%22object3key%22%2C%20%22newKey%22%3A%20%22newObject3Key
%22%7D

Example — Función de Lambda con formato de manifiesto que escribe resultados en el informe
del trabajo

import json
from urllib.parse import unquote_plus

# This example Lambda function shows how to parse JSON that is encoded into the Amazon S3
batch
# operations manifest containing lines like this:
#
# bucket,encoded-json
# bucket,encoded-json
# bucket,encoded-json
#
# For example, if we wanted to send the following JSON to this Lambda function:
#

Versión de API 2006-03-01


501
Amazon Simple Storage Service Guía del desarrollador
Llamar a una función Lambda.

# bucket,{"origKey": "object1key", "newKey": "newObject1Key"}


# bucket,{"origKey": "object2key", "newKey": "newObject2Key"}
# bucket,{"origKey": "object3key", "newKey": "newObject3Key"}
#
# We would simply URL-encode the JSON like this to create the real manifest to create a
batch
# operations job with:
#
# my-bucket,%7B%22origKey%22%3A%20%22object1key%22%2C%20%22newKey%22%3A%20%22newObject1Key
%22%7D
# my-bucket,%7B%22origKey%22%3A%20%22object2key%22%2C%20%22newKey%22%3A%20%22newObject2Key
%22%7D
# my-bucket,%7B%22origKey%22%3A%20%22object3key%22%2C%20%22newKey%22%3A%20%22newObject3Key
%22%7D
#
def lambda_handler(event, context):
# Parse job parameters from Amazon S3 batch operations
jobId = event['job']['id']
invocationId = event['invocationId']
invocationSchemaVersion = event['invocationSchemaVersion']

# Prepare results
results = []

# S3 batch operations currently only passes a single task at a time in the array of
tasks.
task = event['tasks'][0]

# Extract the task values we might want to use


taskId = task['taskId']
s3Key = task['s3Key']
s3VersionId = task['s3VersionId']
s3BucketArn = task['s3BucketArn']
s3BucketName = s3BucketArn.split(':::')[-1]

try:
# Assume it will succeed for now
resultCode = 'Succeeded'
resultString = ''

# Decode the JSON string that was encoded into the S3 Key value and convert the
# resulting string into a JSON structure.
s3Key_decoded = unquote_plus(s3Key)
keyJson = json.loads(s3Key_decoded)

# Extract some values from the JSON that we might want to operate on. In this
example
# we won't do anything except return the concatenated string as a fake result.
newKey = keyJson['newKey']
origKey = keyJson['origKey']
resultString = origKey + " --> " + newKey

except Exception as e:
# If we run into any exceptions, fail this task so batch operations does retry it
and
# return the exception string so we can see the failure message in the final report
# created by batch operations.
resultCode = 'PermanentFailure'
resultString = 'Exception: {}'.format(e)
finally:
# Send back the results for this task.
results.append({
'taskId': taskId,
'resultCode': resultCode,
'resultString': resultString
})

Versión de API 2006-03-01


502
Amazon Simple Storage Service Guía del desarrollador
Put Object ACL

return {
'invocationSchemaVersion': invocationSchemaVersion,
'treatMissingKeysAs': 'PermanentFailure',
'invocationId': invocationId,
'results': results
}

Put Object ACL


La operación Put Object Acl sustituye a las listas de control de acceso (ACL) de Amazon S3 en cada
uno de los objetos que aparecen en el manifiesto. Con las ACL, es posible determinar quién puede tener
acceso a un objeto y qué acciones puede realizar.

Las operaciones por lotes de Amazon S3 permite utilizar ACL personalizadas que los usuarios pueden
definir y ACL predefinidas que están incluidas en Amazon S3 con un conjunto de permisos de acceso
preestablecidos.

Si los objetos del manifiesto están en un bucket con control de versiones, puede aplicar las ACL a
versiones específicas de cada objeto. Para ello, especifique un ID de versión para cada objeto del
manifiesto. Si no incluye el ID de versión de un objeto, las operaciones por lotes de Amazon S3 aplicarán
la ACL a la última versión del objeto.
Note
Si desea limitar el acceso público en todos los objetos de un bucket, debe utilizar el bloqueo
de acceso público de Amazon S3 en lugar de las operaciones por lotes de Amazon S3. Con el
bloqueo de acceso público, se puede limitar el acceso público en cada bucket o cuenta utilizando
una única y sencilla operación que surte efecto rápidamente. Esta opción es más adecuada
cuando el objetivo es controlar el acceso público en todos los objetos de un bucket o una cuenta.
Utilice las operaciones por lotes de Amazon S3 cuando necesite aplicar una ACL personalizada a
cada uno de los objetos del manifiesto. Para obtener más información sobre el bloqueo de acceso
público de Amazon S3, consulte Uso de Amazon S3 Block Public Access (p. 430).

Restricciones y limitaciones
• El rol que especifique para ejecutar el trabajo Put Object Acl debe tener permisos para realizar la
operación PUT Object acl de Amazon S3 subyacente. Para obtener más información sobre los permisos
necesarios, consulte PUT Object acl en la Amazon Simple Storage Service API Reference.
• Las operaciones por lotes de Amazon S3 utilizan la operación PUT Object acl de Amazon S3 para
aplicar la ACL especificada a cada uno de los objetos del manifiesto. Por tanto, todas las restricciones y
limitaciones que se aplican a la operación PUT Object acl subyacente también se aplicarán a los trabajos
Put Object Acl de las operaciones por lotes de Amazon S3. Para obtener más información, consulte la
sección Recursos relacionados (p. 503) de esta página.

Recursos relacionados
• Administración de acceso con ACL (p. 418)
• GET Object ACL en la Amazon Simple Storage Service API Reference

Put Object Tagging


Con la operación Put Object Tagging, ya no es necesario utilizar etiquetas de Amazon S3 en cada uno de
los objetos que aparecen en el manifiesto. Las etiquetas de objetos de Amazon S3 son pares de cadenas
clave-valor que se pueden utilizar para guardar metadatos de un objeto.

Versión de API 2006-03-01


503
Amazon Simple Storage Service Guía del desarrollador
Administración de trabajos

Para crear un trabajo Put Object Tagging, tiene que proporcionar el conjunto de etiquetas que desee
aplicar. Las operaciones por lotes de Amazon S3 aplican el mismo conjunto de etiquetas a todos los
objetos. El conjunto de etiquetas que proporcione sustituirá a los conjuntos que ya estén asociados con los
objetos del manifiesto. Las operaciones por lotes de Amazon S3 no permiten que se agreguen etiquetas a
los objetos mientras se mantienen las existentes.

Si los objetos del manifiesto están en un bucket con control de versiones, puede aplicar un conjunto
de etiquetas a versiones específicas de cada objeto. Para ello, especifique un ID de versión para cada
objeto del manifiesto. Si no incluye el ID de versión de un objeto, las operaciones por lotes de Amazon S3
aplicarán el conjunto de etiquetas a la última versión de cada objeto.

Restricciones y limitaciones
• El rol que especifique para ejecutar el trabajo Put Object Tagging debe tener permisos para realizar
la operación PUT Object tagging de Amazon S3 subyacente. Para obtener más información sobre los
permisos necesarios, consulte PUT Object tagging en la Amazon Simple Storage Service API Reference.
• Las operaciones por lotes de Amazon S3 utilizan la operación PUT Object tagging de Amazon S3
para aplicar etiquetas a cada uno de los objetos del manifiesto. Por tanto, todas las restricciones y
limitaciones que se aplican a la operación PUT Object tagging subyacente también se aplicarán a los
trabajos Put Object tagging de las operaciones por lotes de Amazon S3. Para obtener más información,
consulte la sección Recursos relacionados (p. 504) de esta página.

Recursos relacionados
• Etiquetado de objetos (p. 118)
• GET Object tagging en la Amazon Simple Storage Service API Reference
• PUT Object tagging en la Amazon Simple Storage Service API Reference

Administración de trabajos de operaciones por lotes


Amazon S3 cuenta con un sólido conjunto de herramientas que le ayudarán a administrar sus trabajos
de operaciones por lotes después de haberlos creado. En esta sección se describen las operaciones que
puede utilizar para administrar sus tareas. Puede realizar todas las operaciones enumeradas en esta
sección con la Consola de administración de AWS, la AWS CLI, los SDK de AWS o las API REST.

Temas
• Hacer un listado de trabajos (p. 504)
• Ver detalles del flujo de trabajo (p. 505)
• Asignación de la prioridad de los trabajos (p. 505)
• Estado del trabajo (p. 505)
• Seguimiento de los errores de los trabajos (p. 507)
• Notificaciones y registro (p. 508)
• Informes de finalización (p. 508)

Hacer un listado de trabajos


Puede recuperar una lista de los trabajos de operaciones por lotes. Esta lista incluirá los trabajos que aún
no han finalizado y los que finalizaron en los últimos 90 días. La lista contiene información de cada trabajo,
como el ID, la descripción, la prioridad, el estado actual y el número de trabajos realizados con éxito y que
han dado error. Puede filtrar la lista de trabajos por estado. Si obtiene la lista de trabajos a través de la
consola, también podrá buscar los trabajos por descripción o ID y filtrarlos por las regiones de AWS.

Versión de API 2006-03-01


504
Amazon Simple Storage Service Guía del desarrollador
Ver detalles del flujo de trabajo

Ver detalles del flujo de trabajo


Si desea más información sobre un trabajo que puede recuperar creando una lista de trabajos, puede ver
todos los detalles de un solo trabajo. Además de la información que aparece en la lista de trabajos, los
detalles de los trabajos contienen otros elementos; por ejemplo, los parámetros de la operación, detalles
sobre el manifiesto, información sobre el informe de finalización (si configuró uno al crear el trabajo) y el
nombre de recurso de Amazon (ARN) del rol de usuario que se asignó para ejecutar el trabajo. Al ver los
detalles de un trabajo individual, puede acceder a la configuración completa del trabajo.

Asignación de la prioridad de los trabajos


Puede asignar a cada trabajo una prioridad numérica; para ello, puede utilizar un número entero positivo.
operaciones por lotes de Amazon S3 prioriza los trabajos en función de la prioridad asignada. Los trabajos
con una prioridad mayor (o un valor numérico más elevado en el parámetro priority) se evalúan en primer
lugar. La prioridad se determina en orden descendente. Por ejemplo, una cola de trabajos con una
prioridad 10, tendrá mayor preferencia de programación que una cola de trabajos cuyo valor de prioridad
sea 1.

La prioridad de un trabajo se puede modificar mientras está en ejecución. Si se envía un nuevo trabajo con
una prioridad mayor mientras hay otro trabajo en ejecución, el trabajo con menor prioridad se detendrá
para permitir que se ejecute el de mayor prioridad.
Note

operaciones por lotes de Amazon S3 respeta las prioridades de los trabajos en la medida de lo
posible. Aunque por lo general los trabajos con mayor prioridad prevalecerán sobre los trabajos
con una prioridad más baja, Amazon S3 no garantiza un orden estricto de los trabajos.

Estado del trabajo


Cuando se crea un trabajo, este pasa por una serie de estados. En la tabla siguiente, se describen los
estados que pueden tener los trabajos y las transiciones posibles entre estados.

Estado Descripción Transiciones

New Cuando se crean, los trabajos Un trabajo pasa


tienen el estado New. automáticamente al estado
Preparing cuando Amazon S3
comienza a procesar el objeto del
manifiesto.

Preparing Amazon S3 está procesando Los trabajos pasan


el objeto del manifiesto y otros automáticamente al estado
parámetros del trabajo para Ready cuando Amazon S3
configurar y ejecutar el trabajo. termina de procesar el manifiesto
y otros parámetros. En ese
momento, el trabajo está listo
para ejecutar la operación
especificada sobre los objetos
que aparecen en el manifiesto.

Si el trabajo necesita
confirmación antes de ejecutarse
(por ejemplo, cuando se crea
un trabajo utilizando la consola
de Amazon S3), el trabajo pasa

Versión de API 2006-03-01


505
Amazon Simple Storage Service Guía del desarrollador
Estado del trabajo

Estado Descripción Transiciones


de Preparing a Suspended.
El trabajo permanecerá con el
estado Suspended hasta que
confirme que desea ejecutarlo.

Suspended El trabajo necesita confirmación, Cuando confirme que desea


pero aún no ha confirmado ejecutar el trabajo, el estado
que desea ejecutarlo. Los cambiará a Ready.
únicos trabajos que necesitan
confirmación son los que se
crean con la consola de Amazon
S3. Los trabajos que se crean
con la consola pasan al estado
Suspended inmediatamente
después de Preparing. Una
vez que confirme que desea
ejecutar el trabajo y este pase
al estado Ready, el trabajo
nunca volverá a tener el estado
Suspended.

Ready Amazon S3 está listo para Los trabajos pasan


comenzar a ejecutar las automáticamente al estado
operaciones solicitadas en los Active cuando Amazon S3
objetos. comienza a ejecutarlos. El tiempo
que un trabajo permanece en el
estado Ready depende de si hay
trabajos con una prioridad mayor
que ya estén en ejecución y de
lo que esos trabajos tarden en
completarse.

Active Amazon S3 está ejecutando Los trabajos pasan al estado


la operación solicitada sobre Active cuando ya no hay
los objetos que aparecen en el operaciones de objetos en
manifiesto. Mientras un trabajo ejecución. Esta transición se
tiene el estado Active, se realiza automáticamente; por
puede monitorizar su progreso ejemplo, cuando un trabajo
utilizando la consola de Amazon se completa correctamente o
S3 o la operación DescribeJob encuentra un error. La transición
a través de la API REST, la AWS también puede producirse como
CLI o los SDK de AWS. consecuencia de la acción
de un usuario; por ejemplo,
cuando un usuario cancela un
trabajo. El estado al que pasa el
trabajo depende del motivo de la
transición.

Pausing El trabajo tenía otro estado y ha Los trabajos pasan


pasado a Paused. automáticamente al estado
Paused cuando finaliza la etapa
de Pausing.

Versión de API 2006-03-01


506
Amazon Simple Storage Service Guía del desarrollador
Seguimiento de los errores de los trabajos

Estado Descripción Transiciones

Paused Los trabajos adoptan el estado Los trabajos con el estado


Paused si se envía un trabajo Paused pasan automáticamente
con una prioridad mayor a Active cuando otros trabajos
mientras el trabajo actual está en de mayor prioridad que impiden
ejecución. su ejecución se completan,
encuentran un error o se
suspenden.

Complete El trabajo ha terminado de Complete es un estado terminal.


ejecutar la operación solicitada Cuando un trabajo alcanza el
en todos los objetos del estado Complete, ya no adopta
manifiesto. La operación puede otros estados.
haberse ejecutado correctamente
o con errores en cada objeto.
Si configuró el trabajo para
que se generara un informe
de finalización, dicho informe
estará disponible tan pronto
como el trabajo adopte el estado
Complete.

Cancelling El trabajo ha adoptado el estado Los trabajos pasan


Cancelled. automáticamente al estado
Cancelled cuando finaliza la
etapa de Cancelling.

Cancelled Se ha solicitado la cancelación Cancelled es un estado


del trabajo y operaciones por terminal. Cuando un trabajo
lotes de Amazon S3 lo ha alcanza el estado Cancelled,
cancelado correctamente. El ya no adopta ningún otro estado.
trabajo ya no enviará ninguna
solicitud nueva a Amazon S3.

Failing El trabajo ha adoptado el estado Los trabajos pasan


Failed. automáticamente al estado
Failed cuando finaliza la etapa
de Failing.

Failed Se ha producido un error en Failed es un estado terminal.


el trabajo y ya no está en Cuando un trabajo alcanza el
ejecución. Para obtener más estado Failed, ya no adopta
información acerca de los ningún otro estado.
errores de los trabajos, consulte
Seguimiento de los errores de los
trabajos (p. 507).

Seguimiento de los errores de los trabajos


Si un trabajo de operaciones por lotes se encuentra con un problema que impide su correcta ejecución
(por ejemplo, no se puede leer el manifiesto especificado), se produce un error. Cuando el trabajo registra
un error, genera uno o varios códigos o motivos. operaciones por lotes de Amazon S3 almacena estos
códigos y motivos de error con el trabajo, por lo que podrá verlos si solicita los detalles del trabajo. Si
solicitó un informe de finalización para el trabajo, los códigos de error y los motivos también aparecen aquí.

Versión de API 2006-03-01


507
Amazon Simple Storage Service Guía del desarrollador
Notificaciones y registro

Para impedir que los trabajos ejecuten un número elevado de operaciones incorrectamente, Amazon
S3 impone un umbral de errores de tareas en cada trabajo de operaciones por lotes. Una vez que un
trabajo ha ejecutado al menos 1000 tareas, Amazon S3 monitoriza la tasa de errores de tareas. Si en algún
momento la tasa de errores (el número de tareas con error en comparación con el número total de tareas
ejecutadas) supera el 50 %, el trabajo deja de ejecutarse. Si el trabajo deja de ejecutarse porque se ha
superado el umbral de errores de tareas, es posible identificar la causa de dichos errores. Por ejemplo,
podría ocurrir que, por accidente, haya incluido en el manifiesto algunos objetos que no existen en el
bucket especificado. Después de solucionar los errores, podrá volver a enviar el trabajo.
Note

operaciones por lotes de Amazon S3 se ejecuta de forma asincrónica y las tareas no tienen que
ejecutarse necesariamente en el mismo orden en el que los objetos aparecen en el manifiesto.
Por tanto, no puede utilizar el orden del manifiesto para determinar qué tareas de los objetos se
ejecutaron o no correctamente. En su lugar, puede examinar el informe de finalización del trabajo
(si solicitó uno) o ver los registros de eventos de AWS CloudTrail para tratar de determinar el
origen de los errores.

Notificaciones y registro
Además de solicitar informes de finalización, también puede capturar, revisar y auditar la actividad de
operaciones por lotes con eventos de Amazon S3. A medida que el trabajo avanza, emite eventos que
se pueden capturar mediante AWS CloudTrail, Amazon Simple Notification Service (Amazon SNS) y
Amazon Simple Queue Service (Amazon SQS). Como las operaciones de lotes utilizan las API de Amazon
S3 existentes para realizar tareas, esas tareas también emiten los mismos eventos que si se las llamara
directamente. Así, puede hacer un seguimiento y registrar el avance de su trabajo y todas sus tareas
mediante la misma notificación, registrando y auditando herramientas y procesos que ya utiliza con
Amazon S3. Para obtener más información acerca de los eventos de Amazon S3, consulte Configuración
de notificaciones de eventos de Amazon S3 (p. 551).

Informes de finalización
Al crear un trabajo, puede solicitar un informe de finalización. Siempre que operaciones por lotes de
Amazon S3 invoque correctamente al menos una tarea, Amazon S3 generará un informe de finalización
cuando las tareas terminen de ejecutarse, encuentren algún error o se cancelen. Puede configurar el
informe de finalización para incluir todas las tareas o solo las tareas con error.

El informe de finalización incluye la configuración del trabajo, el estado y la información de cada tarea,
incluidas la clave y la versión del objeto, el estado, códigos de error y descripciones de los errores. Aunque
no se configure un informe de finalización, es posible monitorizar y auditar el trabajo y las tareas con
CloudTrail, Amazon CloudWatch, Amazon SNS y Amazon SQS. Sin embargo, los informes de finalización
constituyen un mecanismo sencillo para ver los resultados de las tareas en un formato unificado sin
necesidad de realizar ninguna configuración adicional. Para ver un ejemplo de un informe de finalización,
consulte Ejemplos de informes de finalización de las operaciones por lotes de Amazon S3 (p. 509).

Ejemplos de operaciones por lotes de Amazon S3


Temas
• Ejemplos de informes de finalización de las operaciones por lotes de Amazon S3 (p. 509)
• Ejemplos de copia entre cuentas para las operaciones por lotes de Amazon S3 (p. 510)
• Ejemplos de la AWS CLI para operaciones por lotes de Amazon S3 (p. 515)
• Ejemplos de Java para operaciones por lotes de Amazon S3 (p. 518)

Versión de API 2006-03-01


508
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de informes de finalización

Ejemplos de informes de finalización de las


operaciones por lotes de Amazon S3
Al crear un trabajo de las operaciones por lotes de Amazon S3, puede solicitar un informe de finalización
para todas las tareas o solo para las tareas que no se realicen. Siempre que se haya invocado
correctamente al menos una tarea, las operaciones por lotes de Amazon S3 generan un informe para los
trabajos que se han completado, que han fallado o que se han cancelado.

El informe de finalización contiene información adicional sobre cada tarea, incluidas la clave y la versión
del objeto, el estado, códigos de error y descripciones de los errores. La descripción de los errores de cada
tarea que ha fallado se puede utilizar para diagnosticar problemas durante la creación de trabajos, como
los permisos.

Example Archivo de resultados de manifiesto de nivel superior

El archivo manifest.json de nivel superior contiene las ubicaciones de cada informe correcto y (si el
trabajo tuvo algún fallo) la ubicación de los informes con errores, como se muestra en el siguiente ejemplo.

{
"Format": "Report_CSV_20180820",
"ReportCreationDate": "2019-04-05T17:48:39.725Z",
"Results": [
{
"TaskExecutionStatus": "succeeded",
"Bucket": "my-job-reports",
"MD5Checksum": "83b1c4cbe93fc893f54053697e10fd6e",
"Key": "job-f8fb9d89-a3aa-461d-bddc-ea6a1b131955/
results/6217b0fab0de85c408b4be96aeaca9b195a7daa5.csv"
},
{
"TaskExecutionStatus": "failed",
"Bucket": "my-job-reports",
"MD5Checksum": "22ee037f3515975f7719699e5c416eaa",
"Key": "job-f8fb9d89-a3aa-461d-bddc-ea6a1b131955/results/
b2ddad417e94331e9f37b44f1faf8c7ed5873f2e.csv"
}
],
"ReportSchema": "Bucket, Key, VersionId, TaskStatus, ErrorCode, HTTPStatusCode,
ResultMessage"
}

Example Informes de tareas con errores

Los informes de tareas con errores contienen los campos Bucket, Key, VersionId, TaskStatus,
ErrorCode, HTTPStatusCode y ResultMessage de todas las tareas con errores.

El siguiente informe de ejemplo muestra un caso en el que la función de AWS Lambda agotó el tiempo
de espera, provocando que se sobrepasara el umbral de errores. Esto hizo que se marcara como
PermanentFailure.

awsexamplebucket,image_14975,,failed,200,PermanentFailure,"Lambda returned function error:


{""errorMessage"":""2019-04-05T17:35:21.155Z 2845ca0d-38d9-4c4b-abcf-379dc749c452 Task
timed out after 3.00 seconds""}"
awsexamplebucket,image_15897,,failed,200,PermanentFailure,"Lambda returned function error:
{""errorMessage"":""2019-04-05T17:35:29.610Z 2d0a330b-de9b-425f-b511-29232fde5fe4 Task
timed out after 3.00 seconds""}"
awsexamplebucket,image_14819,,failed,200,PermanentFailure,"Lambda returned function error:
{""errorMessage"":""2019-04-05T17:35:22.362Z fcf5efde-74d4-4e6d-b37a-c7f18827f551 Task
timed out after 3.00 seconds""}"

Versión de API 2006-03-01


509
Amazon Simple Storage Service Guía del desarrollador
Copia entre cuentas

awsexamplebucket,image_15930,,failed,200,PermanentFailure,"Lambda returned function error:


{""errorMessage"":""2019-04-05T17:35:29.809Z 3dd5b57c-4a4a-48aa-8a35-cbf027b7957e Task
timed out after 3.00 seconds""}"
awsexamplebucket,image_17644,,failed,200,PermanentFailure,"Lambda returned function error:
{""errorMessage"":""2019-04-05T17:35:46.025Z 10a764e4-2b26-4d8c-9056-1e1072b4723f Task
timed out after 3.00 seconds""}"
awsexamplebucket,image_17398,,failed,200,PermanentFailure,"Lambda returned function error:
{""errorMessage"":""2019-04-05T17:35:44.661Z 1e306352-4c54-4eba-aee8-4d02f8c0235c Task
timed out after 3.00 seconds""}"

Example Informe de tareas correctas

Los informes de tareas correctas contienen los campos Bucket, Key, VersionId, TaskStatus,
ErrorCode, HTTPStatusCode y ResultMessage de todas las tareas finalizadas.

En el siguiente ejemplo, la función de Lambda copió correctamente el objeto de Amazon S3 en otro


bucket. La respuesta de Amazon S3 devuelta se envía a las operaciones por lotes de Amazon S3 y, a
continuación, se escribe en el informe de finalización final.

awsexamplebucket,image_17775,,succeeded,200,,"{u'CopySourceVersionId':
'xVR78haVKlRnurYofbTfYr3ufYbktF8h', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 39, tzinfo=tzlocal()), u'ETag':
'""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata': {'HTTPStatusCode':
200, 'RetryAttempts': 0, 'HostId': 'nXNaClIMxEJzWNmeMNQV2KpjbaCJLn0OGoXWZpuVOFS/
iQYWxb3QtTvzX9SVfx2lA3oTKLwImKw=', 'RequestId': '3ED5852152014362', 'HTTPHeaders':
{'content-length': '234', 'x-amz-id-2': 'nXNaClIMxEJzWNmeMNQV2KpjbaCJLn0OGoXWZpuVOFS/
iQYWxb3QtTvzX9SVfx2lA3oTKLwImKw=', 'x-amz-copy-source-version-id':
'xVR78haVKlRnurYofbTfYr3ufYbktF8h', 'server': 'AmazonS3', 'x-amz-request-id':
'3ED5852152014362', 'date': 'Fri, 05 Apr 2019 17:35:39 GMT', 'content-type': 'application/
xml'}}}"
awsexamplebucket,image_17763,,succeeded,200,,"{u'CopySourceVersionId':
'6HjOUSim4Wj6BTcbxToXW44pSZ.40pwq', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 39, tzinfo=tzlocal()),
u'ETag': '""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata':
{'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HostId': 'GiCZNYr8LHd/
Thyk6beTRP96IGZk2sYxujLe13TuuLpq6U2RD3we0YoluuIdm1PRvkMwnEW1aFc=', 'RequestId':
'1BC9F5B1B95D7000', 'HTTPHeaders': {'content-length': '234', 'x-amz-id-2': 'GiCZNYr8LHd/
Thyk6beTRP96IGZk2sYxujLe13TuuLpq6U2RD3we0YoluuIdm1PRvkMwnEW1aFc=', 'x-amz-copy-source-
version-id': '6HjOUSim4Wj6BTcbxToXW44pSZ.40pwq', 'server': 'AmazonS3', 'x-amz-request-id':
'1BC9F5B1B95D7000', 'date': 'Fri, 05 Apr 2019 17:35:39 GMT', 'content-type': 'application/
xml'}}}"
awsexamplebucket,image_17860,,succeeded,200,,"{u'CopySourceVersionId':
'm.MDD0g_QsUnYZ8TBzVFrp.TmjN8PJyX', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 40, tzinfo=tzlocal()), u'ETag':
'""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata': {'HTTPStatusCode':
200, 'RetryAttempts': 0, 'HostId': 'F9ooZOgpE5g9sNgBZxjdiPHqB4+0DNWgj3qbsir
+sKai4fv7rQEcF2fBN1VeeFc2WH45a9ygb2g=', 'RequestId': '8D9CA56A56813DF3', 'HTTPHeaders':
{'content-length': '234', 'x-amz-id-2': 'F9ooZOgpE5g9sNgBZxjdiPHqB4+0DNWgj3qbsir
+sKai4fv7rQEcF2fBN1VeeFc2WH45a9ygb2g=', 'x-amz-copy-source-version-id':
'm.MDD0g_QsUnYZ8TBzVFrp.TmjN8PJyX', 'server': 'AmazonS3', 'x-amz-request-id':
'8D9CA56A56813DF3', 'date': 'Fri, 05 Apr 2019 17:35:40 GMT', 'content-type': 'application/
xml'}}}"

Ejemplos de copia entre cuentas para las operaciones


por lotes de Amazon S3
Puede utilizar las operaciones por lotes de Amazon S3 para crear un trabajo de copia PUT para copiar
objetos en otra cuenta de AWS (la cuenta de destino). Al hacerlo, puede utilizar el inventario de Amazon
S3 para entregar el informe de inventario a la cuenta de destino para utilizarlo durante la creación de
trabajos o puede utilizar un manifiesto de valores separados por comas (CSV) en la cuenta de origen o de

Versión de API 2006-03-01


510
Amazon Simple Storage Service Guía del desarrollador
Copia entre cuentas

destino. En las secciones siguientes, se explica cómo almacenar y utilizar un manifiesto que se encuentra
en otra cuenta de AWS.

Temas
• Mediante un informe de inventario entregado a la cuenta de AWS de destino (p. 511)
• Uso de un manifiesto CSV almacenado en la cuenta de AWS de origen (p. 513)

Mediante un informe de inventario entregado a la cuenta de AWS


de destino
El inventario de Amazon S3 genera inventarios de los objetos de un bucket. La lista resultante se publica
en un archivo saliente. El bucket cuyo inventario se crea se denomina bucket de origen y el bucket donde
se almacena el archivo de informe de inventario se denomina bucket de destino. El informe de inventario
de Amazon S3 se puede configurar para que se entregue en otra cuenta de AWS. Esto permite a las
operaciones por lotes de Amazon S3 leer el informe de inventario cuando se crea el trabajo en la cuenta de
AWS de destino. Para obtener más información sobre los buckets de origen y de destino del inventario de
Amazon S3, consulte ¿Cómo configuro el inventario de Amazon S3? (p. 440).

La forma más sencilla de configurar un inventario es a través de la Consola de administración de AWS,


pero también puede utilizar la API de REST, la AWS CLI o los SDK de AWS.

En el siguiente procedimiento de la consola, se configuran los permisos para que un trabajo de las
operaciones por lotes de Amazon S3 copie objetos desde una cuenta de origen a una cuenta de destino, y
el informe de inventario se almacena en la cuenta de AWS de destino.

Para configurar el inventario de Amazon S3 para buckets de origen y destino que pertenecen a
distintas cuentas de AWS

1. Elija el bucket de destino en el que desea almacenar el informe de inventario.

Elija un bucket de manifiestos de destino para almacenar el informe de inventario. En este


procedimiento, la cuenta de destino es la cuenta a la que pertenecen tanto el bucket de manifiestos de
destino como el bucket en el que se copian los objetos.
2. Configure un inventario para enumerar los objetos de un bucket de origen y publicar la lista en el
bucket de manifiestos de destino.

Configure una lista de inventario para un bucket de origen. Cuando lo haga, especifique el bucket de
destino donde desea que se almacene la lista. El informe de inventario para el bucket de origen se
publica en el bucket de destino. En este procedimiento, la cuenta de origen es la cuenta propietaria del
bucket de origen.

Para obtener información sobre cómo utilizar la consola para configurar un inventario, consulte ¿Cómo
puedo configurar el inventario de Amazon S3? en la Guía del usuario de la consola de Amazon Simple
Storage Service.

Elija CSV para el formato de salida.

Cuando introduzca la información del bucket de destino, elija Buckets in another account (Los buckets
de otra cuenta). A continuación, introduzca el nombre del bucket de manifiestos de destino. Si lo
desea, puede introducir el ID de la cuenta de destino.

Cuando se guarda la configuración de inventario, la consola muestra un mensaje similar al siguiente:

Amazon S3 could not create a bucket policy on the destination bucket. Ask the destination bucket
owner to add the following bucket policy to allow Amazon S3 to place data in that bucket (Amazon S3
no pudo crear una política de bucket en el bucket de destino. Pida al propietario del bucket de destino
que añada la siguiente política de bucket para permitir que Amazon S3 coloque datos en ese bucket).

Versión de API 2006-03-01


511
Amazon Simple Storage Service Guía del desarrollador
Copia entre cuentas

A continuación, la consola muestra una política de bucket que se puede utilizar para el bucket de
destino.
3. Copie la política de bucket de destino que aparece en la consola.
4. En la cuenta de destino, añada la política de bucket que ha copiado al bucket de manifiestos de
destino donde se almacena el informe de inventario.
5. En la cuenta de destino, cree un rol basado en la política de confianza de las operaciones por lotes
de Amazon S3. Para obtener más información sobre la política de confianza, consulte Política de
confianza (p. 490). Para obtener más información sobre cómo crear un rol, consulte Creación de un
rol para delegar permisos a un servicio de AWS en la Guía del usuario de IAM.

Introduzca un nombre para el rol (el rol de ejemplo utiliza el nombre


BatchOperationsDestinationRoleCOPY). Elija el servicio S3 y, a continuación, elija el caso de
uso S3 bucket Batch Operations (Operaciones por lotes de bucket de S3), que aplica la política de
confianza al rol.

A continuación, elija Create policy (Crear política) para asociar la política siguiente al rol.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsDestinationObjectCOPY",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectVersionAcl",
"s3:PutObjectAcl",
"s3:PutObjectVersionTagging",
"s3:PutObjectTagging",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::ObjectDestinationBucket/*",
"arn:aws:s3:::ObjectSourceBucket/*",
"arn:aws:s3:::ObjectDestinationManifestBucket/*"
]
}
]
}

El rol utiliza la política para conceder permiso a batchoperations.s3.amazonaws.com para leer


el manifiesto en el bucket de destino. También concede permisos GET para objetos, listas de control
de acceso (ACL), etiquetas y versiones en el bucket de objetos de origen. Y concede permisos PUT
para objetos, ACL, etiquetas y versiones en el bucket de objetos de destino.
6. En la cuenta de origen, cree una política de bucket para el bucket de origen que otorgue el rol que
creó en el paso anterior para obtener (GET) objetos, ACL, etiquetas y versiones en el bucket de
origen. Este paso permite a las operaciones por lotes de Amazon S3 obtener objetos del bucket de
origen a través del rol de confianza.

A continuación, se muestra un ejemplo de política de bucket para la cuenta de origen.

{
"Version": "2012-10-17",

Versión de API 2006-03-01


512
Amazon Simple Storage Service Guía del desarrollador
Copia entre cuentas

"Statement": [
{
"Sid": "AllowBatchOperationsSourceObjectCOPY",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DestinationAccountNumber:role/
BatchOperationsDestinationRoleCOPY"
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": "arn:aws:s3:::ObjectSourceBucket/*"
}
]
}

7. Una vez que el informe de inventario esté disponible, cree un trabajo de copia del objeto PUT de las
operaciones por lotes de Amazon S3 en la cuenta de destino y seleccione el informe de inventario en
el bucket de manifiestos de destino. Necesita el ARN del rol que creó en la cuenta de destino.

Para obtener información general sobre cómo crear un trabajo, consulte Creación de trabajos de
operaciones por lotes de Amazon S3 (p. 488). Para obtener información sobre cómo crear un trabajo
utilizando la consola, consulte Creación de trabajos de operaciones por lotes de Amazon S3 en la
Guía del usuario de la consola de Amazon Simple Storage Service.

Uso de un manifiesto CSV almacenado en la cuenta de AWS de


origen
Puede utilizar un archivo CSV almacenado en otra cuenta de AWS como manifiesto para un trabajo de las
operaciones por lotes de Amazon S3.

En el siguiente procedimiento, se muestra cómo configurar los permisos cuando se utiliza un trabajo de
las operaciones por lotes de Amazon S3 para copiar objetos desde una cuenta de origen a una cuenta de
destino con el archivo de manifiesto CSV almacenado en la cuenta de origen.

Para configurar un archivo de manifiesto CSV almacenado en otra cuenta de AWS

1. En la cuenta de destino, cree un rol basado en la política de confianza de las operaciones por lotes de
Amazon S3. En este procedimiento, la cuenta de destino es la cuenta en la que se copian los objetos.

Para obtener más información sobre la política de confianza, consulte Política de confianza (p. 490).
Para obtener más información sobre cómo crear un rol, consulte Creación de un rol para delegar
permisos a un servicio de AWS en la Guía del usuario de IAM.

Si crea el rol utilizando la consola, introduzca un nombre para el rol (el rol de ejemplo utiliza el nombre
BatchOperationsDestinationRoleCOPY). Elija el servicio S3 y, a continuación, elija el caso de
uso S3 bucket Batch Operations (Operaciones por lotes de bucket de S3), que aplica la política de
confianza al rol. A continuación, elija Create policy (Crear política) para asociar la política siguiente al
rol.

{
"Version": "2012-10-17",
"Statement": [
{

Versión de API 2006-03-01


513
Amazon Simple Storage Service Guía del desarrollador
Copia entre cuentas

"Sid": "AllowBatchOperationsDestinationObjectCOPY",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectVersionAcl",
"s3:PutObjectAcl",
"s3:PutObjectVersionTagging",
"s3:PutObjectTagging",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": [
"arn:aws:s3:::ObjectDestinationBucket/*",
"arn:aws:s3:::ObjectSourceBucket/*",
"arn:aws:s3:::ObjectSourceManifestBucket/*"
]
}
]
}

Mediante la política, el rol concede permiso a batchoperations.s3.amazonaws.com para leer el


manifiesto en el bucket de manifiestos de origen. Concede permisos GET para objetos, ACL, etiquetas
y versiones en el bucket de objetos de origen. También concede permisos PUT para objetos, ACL,
etiquetas y versiones en el bucket de objetos de destino.
2. En la cuenta de origen, cree una política de bucket para el bucket que contenga el manifiesto para
conceder el rol que creó en el paso anterior para obtener (GET) objetos y versiones en el bucket de
manifiestos de origen. Este paso permite a las operaciones por lotes de Amazon S3 leer el manifiesto
utilizando el rol de confianza. Aplique la política de bucket al bucket que contiene el manifiesto.

A continuación, se muestra un ejemplo de política de bucket que puede aplicarse al bucket de


manifiestos de origen.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceManfiestRead",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::DestinationAccountNumber:user/
ConsoleUserCreatingJob",
"arn:aws:iam::DestinationAccountNumber:role/
BatchOperationsDestinationRoleCOPY"
]
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::ObjectSourceManifestBucket/*"
}
]
}

Esta política también concede permisos para permitir a un usuario de la consola que esté creando un
trabajo en la cuenta de destino los mismos permisos en el bucket de manifiestos de origen a través de
la misma política de bucket.

Versión de API 2006-03-01


514
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de la CLI de AWS

3. En la cuenta de origen, cree una política de bucket para el bucket de origen que conceda el rol que
creó para obtener (GET) objetos, ACL, etiquetas y versiones en el bucket de origen. operaciones por
lotes de Amazon S3 podrá obtener objetos del bucket de origen a través del rol de confianza.

A continuación, se muestra un ejemplo de política de bucket para el bucket que contiene los objetos
de origen.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceObjectCOPY",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DestinationAccountNumber:role/
BatchOperationsDestinationRoleCOPY"
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": "arn:aws:s3:::ObjectSourceBucket/*"
}
]
}

4. Cree un trabajo de las operaciones por lotes de Amazon S3 en la cuenta de destino. Necesita el ARN
del rol que creó en la cuenta de destino.

Para obtener información general sobre cómo crear un trabajo, consulte Creación de trabajos de
operaciones por lotes de Amazon S3 (p. 488). Para obtener información sobre cómo crear un trabajo
utilizando la consola, consulte Creación de trabajos de operaciones por lotes de Amazon S3 en la
Guía del usuario de la consola de Amazon Simple Storage Service.

Ejemplos de la AWS CLI para operaciones por lotes


de Amazon S3
El siguiente ejemplo crea un trabajo S3PutObjectTagging con las operaciones por lotes de Amazon S3
mediante la AWS Command Line Interface (AWS CLI).

1. Cree un rol de IAM y asígnele permisos. Este rol concede a Amazon S3 permiso para añadir las
etiquetas de objetos para las que se crea un trabajo en el próximo paso.

a. Cree un rol de IAM tal y como se indica a continuación:

aws iam create-role \


--role-name S3BatchJobRole \
--assume-role-policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},

Versión de API 2006-03-01


515
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de la CLI de AWS

"Action":"sts:AssumeRole"
}
]
}'

Registre el nombre de recurso de Amazon (ARN) del rol. Lo necesitará para poder crear los
trabajos.
b. Cree una política de IAM con permisos y asóciela al rol de IAM que creó en el paso anterior. Para
obtener más información sobre los permisos, consulte Concesión de permisos para operaciones
por lotes de Amazon S3 (p. 490).

aws iam put-role-policy \


--role-name S3BatchJobRole \
--policy-name PutObjectTaggingBatchJobPolicy \
--policy-document '{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObjectTagging",
"s3:PutObjectVersionTagging"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}'

2. Cree un trabajo S3PutObjectTagging. El archivo manifest.csv proporciona una lista de valores


de claves de objetos y buckets. El trabajo aplica las etiquetas especificadas a los objetos identificados
en el manifiesto. La ETag es la del objeto manifest.csv, que puede obtenerse desde la consola de
Amazon S3. La solicitud especifica el parámetro no-confirmation-required. Por tanto, Amazon
S3 establece que el trabajo es apto para ejecutarse sin que sea necesario confirmarlo con el comando
udpate-job-status.

aws s3control create-job \


--region us-west-2 \
--account-id acct-id \
--operation '{"S3PutObjectTagging": { "TagSet": [{"Key":"keyOne",
"Value":"ValueOne"}] }}' \

Versión de API 2006-03-01


516
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de la CLI de AWS

--manifest '{"Spec":{"Format":"S3BatchOperations_CSV_20180820","Fields":
["Bucket","Key"]},"Location":{"ObjectArn":"arn:aws:s3:::my_manifests/
manifest.csv","ETag":"60e460c9d1046e73f7dde5043ac3ae85"}}' \
--report '{"Bucket":"arn:aws:s3:::bucket-where-
completion-report-goes","Prefix":"final-reports",
"Format":"Report_CSV_20180820","Enabled":true,"ReportScope":"AllTasks"}' \
--priority 42 \
--role-arn IAM-role \
--client-request-token $(uuidgen) \
--description "job Description" \
--no-confirmation-required

Como respuesta, Amazon S3 devuelve el ID del trabajo (por ejemplo, 00e123a4-c0d8-41f4-a0eb-


b46f9ba5b07c). Necesitará este ID para utilizarlo en los siguientes comandos
3. Obtenga la descripción del trabajo.

aws s3control describe-job \


--region us-west-2 \
--account-id acct-id \
--job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c

4. Obtenga una lista de trabajos Active y Complete.

aws s3control list-jobs \


--region us-west-2 \
--account-id acct-id \
--job-statuses '["Active","Complete"]' \
--max-results 20

5. Actualice la prioridad del trabajo (cuanto más elevado sea el número, mayor será la prioridad de
ejecución).

aws s3control update-job-priority \


--region us-west-2 \
--account-id acct-id \
--priority 98 \
--job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c

6. Si no especificó el parámetro --no-confirmation-required en create-job, el trabajo


permanece suspendido hasta que lo confirme estableciendo su estado en Ready. A continuación,
Amazon S3 indicará que el trabajo es apto para ejecutarse.

aws s3control update-job-status \


--region us-west-2 \
--account-id 181572960644 \
--job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c \
--requested-job-status 'Ready'

7. Para cancelar el trabajo, establezca su estado en Cancelled.

aws s3control update-job-status \


--region us-west-2 \
--account-id 181572960644 \
--job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c \
--status-update-reason "No longer needed" \
--requested-job-status Cancelled

Versión de API 2006-03-01


517
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Java

Ejemplos de Java para operaciones por lotes de


Amazon S3
En esta sección se ofrecen ejemplos acerca de cómo crear y administrar trabajos de operaciones por lotes
de Amazon S3 utilizando AWS SDK for Java. Para obtener instrucciones sobre la creación y comprobación
de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).

Temas
• Creación de un trabajo de operaciones por lotes de Amazon S3 utilizando AWS SDK for
Java (p. 518)
• Cancelación de un trabajo de operaciones por lotes de Amazon S3 utilizando AWS SDK for
Java (p. 519)
• Actualización del estado de un trabajo de operaciones por lotes de Amazon S3 utilizando AWS SDK for
Java (p. 520)
• Actualización de la prioridad de un trabajo de operaciones por lotes de Amazon S3 utilizando AWS
SDK for Java (p. 521)

Creación de un trabajo de operaciones por lotes de Amazon S3


utilizando AWS SDK for Java
En el ejemplo siguiente se muestra cómo crear un trabajo de operaciones por lotes de Amazon S3. Para
obtener información acerca de cómo crear un trabajo, consulte Creación de trabajos de operaciones por
lotes de Amazon S3 (p. 488).

Para obtener información acerca de la configuración de permisos que necesita para crear un trabajo,
consulte Concesión de permisos para operaciones por lotes de Amazon S3 (p. 490).

Example

package aws.example.s3control;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.*;

import java.util.UUID;
import java.util.ArrayList;

import static com.amazonaws.regions.Regions.US_WEST_2;

public class CreateJob {


public static void main(String[] args) {
String accountId = "Account ID";
String iamRoleArn = "IAM Role ARN";
String reportBucketName = "arn:aws:s3:::bucket-where-completion-report-goes";
String uuid = UUID.randomUUID().toString();

ArrayList tagSet = new ArrayList<S3Tag>();


tagSet.add(new S3Tag().withKey("keyOne").withValue("ValueOne"));

Versión de API 2006-03-01


518
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Java

try {
JobOperation jobOperation = new JobOperation()
.withS3PutObjectTagging(new S3SetObjectTaggingOperation()
.withTagSet(tagSet)
);

JobManifest manifest = new JobManifest()


.withSpec(new JobManifestSpec()
.withFormat("S3BatchOperations_CSV_20180820")
.withFields(new String[]{
"Bucket", "Key"
}))
.withLocation(new JobManifestLocation()
.withObjectArn("arn:aws:s3:::my_manifests/manifest.csv")
.withETag("60e460c9d1046e73f7dde5043ac3ae85"));
JobReport jobReport = new JobReport()
.withBucket(reportBucketName)
.withPrefix("reports")
.withFormat("Report_CSV_20180820")
.withEnabled(true)
.withReportScope("AllTasks");

AWSS3Control s3ControlClient = AWSS3ControlClient.builder()


.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();

s3ControlClient.createJob(new CreateJobRequest()
.withAccountId(accountId)
.withOperation(jobOperation)
.withManifest(manifest)
.withReport(jobReport)
.withPriority(42)
.withRoleArn(iamRoleArn)
.withClientRequestToken(uuid)
.withDescription("job description")
.withConfirmationRequired(false)
);

} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and 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();
}
}
}

Cancelación de un trabajo de operaciones por lotes de Amazon


S3 utilizando AWS SDK for Java
En el ejemplo siguiente se muestra cómo cancelar un trabajo de operaciones por lotes de Amazon S3.

Example

package aws.example.s3control;

Versión de API 2006-03-01


519
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Java

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.UpdateJobStatusRequest;

import static com.amazonaws.regions.Regions.US_WEST_2;

public class CancelJob {


public static void main(String[] args) {
String accountId = "Account ID";
String jobId = "00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c";

try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();

s3ControlClient.updateJobStatus(new UpdateJobStatusRequest()
.withAccountId(accountId)
.withJobId(jobId)
.withStatusUpdateReason("No longer needed")
.withRequestedJobStatus("Cancelled"));

} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and 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();
}
}
}

Actualización del estado de un trabajo de operaciones por lotes


de Amazon S3 utilizando AWS SDK for Java
En el ejemplo siguiente se muestra cómo actualizar el estado de un trabajo de operaciones por lotes
de Amazon S3. Para obtener más información acerca del estado de un trabajo, consulte Estado del
trabajo (p. 505).

Example

package aws.example.s3control;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.UpdateJobStatusRequest;

import static com.amazonaws.regions.Regions.US_WEST_2;

public class UpdateJobStatus {


public static void main(String[] args) {

Versión de API 2006-03-01


520
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Java

String accountId = "Account ID";


String jobId = "00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c";

try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();

s3ControlClient.updateJobStatus(new UpdateJobStatusRequest()
.withAccountId(accountId)
.withJobId(jobId)
.withRequestedJobStatus("Ready"));

} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and 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();
}
}
}

Actualización de la prioridad de un trabajo de operaciones por


lotes de Amazon S3 utilizando AWS SDK for Java
En el ejemplo siguiente se muestra cómo actualizar la prioridad de un trabajo de operaciones por lotes de
Amazon S3. Para obtener más información acerca de la prioridad de un trabajo, consulte Asignación de la
prioridad de los trabajos (p. 505).

Example

package aws.example.s3control;

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.UpdateJobPriorityRequest;

import static com.amazonaws.regions.Regions.US_WEST_2;

public class UpdateJobPriority {


public static void main(String[] args) {
String accountId = "Account ID";
String jobId = "00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c";

try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();

s3ControlClient.updateJobPriority(new UpdateJobPriorityRequest()
.withAccountId(accountId)

Versión de API 2006-03-01


521
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Java

.withJobId(jobId)
.withPriority(98));

} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and 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();
}
}
}

Versión de API 2006-03-01


522
Amazon Simple Storage Service Guía del desarrollador

Alojamiento de un sitio web estático


en Amazon S3
Puede alojar un sitio web estático en Amazon Simple Storage Service (Amazon S3). En un sitio web
estático, cada página web incluye contenido estático. También pueden contener scripts del lado del cliente.
Por el contrario, un sitio web dinámico depende del procesamiento en el lado del servidor, incluidos los
scripts del lado del servidor, como en PHP, JSP o ASP.NET. Amazon S3 no es compatible con el uso
de scripts del lado del servidor. Amazon Web Services (AWS) también tiene recursos de alojamiento de
sitios web dinámicos. Para obtener más información acerca del alojamiento de sitio web en AWS, consulte
Hospedaje web.

Temas
• Punto de enlace de sitio web (p. 524)
• Configuración de un bucket para alojamiento de sitios web (p. 526)
• Tutoriales de ejemplo: alojamiento de sitios web en Amazon S3 (p. 538)

Para alojar un sitio web estático; debe configurar un bucket de Amazon S3 para el alojamiento de sitio web
y cargar el contenido del sitio web en el bucket. Este bucket debe tener acceso de lectura público. El hecho
de que todo el mundo tenga acceso de lectura a este bucket es intencionado. El sitio web está entonces
disponible en el punto de enlace del sitio web específico de la región AWS del bucket, que está en uno de
los formatos siguientes:

<bucket-name>.s3-website-<AWS-region>.amazonaws.com

<bucket-name>.s3-website.<AWS-region>.amazonaws.com

Para ver una lista de los puntos de enlace de sitio web específicos por región de AWS para Amazon S3,
consulte Punto de enlace de sitio web (p. 524). Por ejemplo, supongamos que crea un bucket llamado
examplebucket en Región EE.UU. Oeste (Oregón) y lo configura como sitio web. En los siguientes
Uniform Resource Locators (URL, Localizadores uniformes de recursos) de ejemplo, se provee el acceso
al contenido del sitio web:

• Este URL devuelve un documento de índice predeterminado que configuró para el sitio web.

http://examplebucket.s3-website-us-west-2.amazonaws.com/

• Este URL solicita el objeto photo.jpg, que está almacenado en el nivel raíz del bucket.

http://examplebucket.s3-website-us-west-2.amazonaws.com/photo.jpg

• Este URL solicita el objeto docs/doc1.html en su bucket.

http://examplebucket.s3-website-us-west-2.amazonaws.com/docs/doc1.html

Uso de dominio propio

Versión de API 2006-03-01


523
Amazon Simple Storage Service Guía del desarrollador
Punto de enlace de sitio web

En lugar de obtener acceso al sitio web con el punto de enlace de sitio web de Amazon S3, puede usar su
propio dominio, como example.com, para alojar su contenido. Amazon S3, junto con Amazon Route 53,
permite alojar un sitio web en el dominio raíz. Por ejemplo, si tiene el dominio raíz example.com y aloja
el sitio web en Amazon S3, los visitantes podrán obtener acceso al sitio web desde cualquier navegador al
escribir http://www.example.com o http://example.com. Para ver un tutorial de ejemplo, consulte
Ejemplo: configuración de un sitio web estático con un dominio personalizado (p. 540).

Para configurar un bucket para el alojamiento de un sitio web, debe añadir la configuración de sitio web
al bucket. Para obtener más información, consulte Configuración de un bucket para alojamiento de sitios
web (p. 526).
Note

Los puntos de enlace de sitio web de Amazon S3 no admiten HTTPS. Para obtener información
acerca de cómo utilizar HTTPS con un bucket de Amazon S3, consulte la sección sobre cómo se
usa CloudFront para atender solicitudes HTTPS para mi bucket de Amazon S3 y Exigir HTTPS
para la comunicación entre CloudFront y su origen de Amazon S3.

Punto de enlace de sitio web


Cuando configura un bucket para un alojamiento de sitio web, el sitio web estará disponible mediante el
punto de enlace del sitio web específico de la región. Los puntos de enlace de sitio web son distintos de los
puntos de enlace a donde envía las solicitudes de la Application Programming Interface (API, Interfaz de
programación de aplicaciones) de REST. Para obtener más información acerca de las diferencias entre los
puntos de enlace, consulte Diferencias clave entre el punto de enlace del sitio web de Amazon y de la API
de REST (p. 525).
Note

Los puntos de enlace de sitio web de Amazon S3 no admiten HTTPS. Para obtener información
acerca de cómo utilizar HTTPS con un bucket de Amazon S3, consulte la sección sobre cómo se
usa CloudFront para atender solicitudes HTTPS para mi bucket de Amazon S3 y Exigir HTTPS
para la comunicación entre CloudFront y su origen de Amazon S3.

A continuación, se muestran las dos formas generales de un punto de enlace de sitio web de Amazon S3.

bucket-name.s3-website-region.amazonaws.com

bucket-name.s3-website.region.amazonaws.com

El uso de una forma u otra de punto de enlace depende de la región donde se encuentre el bucket. Por
ejemplo, si el bucket se llama example-bucket y se encuentra en la región EE.UU. Oeste (Oregón), el
sitio web estará disponible en el siguiente punto de enlace de sitio web de Amazon S3:

http://example-bucket.s3-website-us-west-2.amazonaws.com/

Si el bucket se llama example-bucket y se encuentra en la región UE (Fráncfort), el sitio web estará


disponible en el siguiente punto de enlace de sitio web de Amazon S3:

http://example-bucket.s3-website.eu-central-1.amazonaws.com/

Para ver una lista de puntos de enlace de Amazon S3 por región, consulte Puntos de enlace de sitios web
de Amazon Simple Storage Service en la Referencia general de AWS.

Versión de API 2006-03-01


524
Amazon Simple Storage Service Guía del desarrollador
Diferencias clave entre el punto de enlace del
sitio web de Amazon y de la API de REST

Para que sus clientes puedan obtener acceso al contenido en el punto de enlace de sitio web, debe
configurar el contenido para poder leerlo públicamente. Para ello, puede utilizar una política de bucket
o una Access Control List (ACL, Lista de control de acceso) en un objeto para conceder los permisos
necesarios.
Note

Los buckets de pago por solicitante no permiten el acceso mediante puntos de enlace de sitio
web. Cualquier solicitud a este tipo de bucket recibirá una respuesta 403 Access Denied. Para
obtener más información, consulte Buckets de pago por solicitante (p. 83).

Si tiene un dominio registrado, puede añadir una entrada CNAME de DNS para asociar el punto de enlace
del sitio web de Amazon S3. Por ejemplo, si ha registrado el dominio www.example-bucket.com,
puede crear un bucket www.example-bucket.com y añadir un registro CNAME de DNS que se asocie
a www.example-bucket.com.s3-website-<region>.amazonaws.com. Todas las solicitudes
a http://www.example-bucket.com serán direccionadas a www.example-bucket.com.s3-
website-<region>.amazonaws.com. Para obtener más información, consulte Alojamiento virtual de
buckets (p. 46).

Diferencias clave entre el punto de enlace del sitio


web de Amazon y de la API de REST
El punto de enlace de sitio web está optimizado para obtener acceso desde un navegador web. En la
siguiente tabla se describen las diferencias clave entre el punto de enlace de la API de REST y el punto de
enlace del sitio web de Amazon.

Diferencia clave Punto de enlace de la API de REST Punto de conexión de sitio web

Control de acceso Admite contenido público y privado. Admite solo contenido público que se
puede leer.

Gestión de Devuelve una respuesta de error con Devuelve un documento HTML.


mensaje de error formato XML.

Compatibilidad de No aplicable Admite el redireccionamiento en el nivel


redireccionamiento de objeto y de bucket.

Solicitudes Admite todas las operaciones de bucket Solamente admite solicitudes GET y
admitidas y objeto. HEAD en los objetos.

Respuestas a las Devuelve una lista de todas las claves Devuelve un documento de índice que
solicitudes GET y de objetos en el bucket. se especificó en la configuración del sitio
HEAD en la raíz de web.
un bucket

Compatibilidad Admite conexiones SSL. No admite conexiones SSL.


con la Secure
Sockets Layer
(SSL, Capa de
conexión segura)

Para ver una lista con los puntos de enlace de Amazon S3, consulte Puntos de enlace de solicitud (p. 12).

Versión de API 2006-03-01


525
Amazon Simple Storage Service Guía del desarrollador
Configuración de un bucket para alojamiento de sitios web

Configuración de un bucket para alojamiento de


sitios web
Puede alojar un sitio web estático en un bucket de Amazon Simple Storage Service (Amazon S3). Sin
embargo, para hacerlo es necesario configurar algunas opciones. También existen algunas opciones que
puede configurar opcionalmente en función de los requisitos del sitio web.

Opciones de configuración necesarias:

• Activación del alojamiento de sitios web (p. 526)


• Configuración para el uso de documentos de índice (p. 526)
• Permisos requeridos para obtener acceso a un sitio web (p. 528)

Opciones de configuración opcionales:

• Configuración del registro de tráfico web (opcional) (p. 529)


• (Opcional) Soporte para documento de error personalizado (p. 530)
• (Opcional) Configuración del redireccionamiento de páginas web (p. 531)

Activación del alojamiento de sitios web


Siga estos pasos para activar el alojamiento de sitios web para los buckets de Amazon S3 usando la
consola de Amazon S3:

Para activar el alojamiento de sitios web para un bucket de Amazon S3

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
2. En la lista, elija la bucket que desea utilizar para el sitio web alojado.
3. Elija la pestaña Properties (Propiedades).
4. Elija Static website hosting (Alojamiento de sitios web estáticos) y, a continuación, elija Use this bucket
to host a website (Usar este bucket para alojar un sitio web).
5. Se le pedirá que proporcione el documento de índice y los documentos de error y las reglas de
redirección opcionales que se necesiten.

Para obtener información acerca de lo que es un documento de índice, consulte Configuración para el
uso de documentos de índice (p. 526).

Configuración para el uso de documentos de índice


El documento de índice es una página web que devuelve Amazon S3 cuando se realiza una solicitud
a la raíz de un sitio web o cualquier subcarpeta. Por ejemplo, si un usuario introduce http://
www.example.com en el navegador, el usuario no solicita ninguna página específica. En ese caso,
Amazon S3 ofrece el documento de índice, al que a veces se denomina la página predeterminada.

Cuando configura el bucket como un sitio web, debe proporcionar el nombre del documento de índice.
Luego debe cargar un objeto con este nombre y configurarlo para que se pueda leer públicamente.

La barra diagonal en el URL raíz es opcional. Por ejemplo, si configura el sitio web con index.html como
un documento de índice, cualquier de los siguientes dos URL devuelve index.html.

Versión de API 2006-03-01


526
Amazon Simple Storage Service Guía del desarrollador
Configuración para el uso de documentos de índice

http://example-bucket.s3-website-region.amazonaws.com/
http://example-bucket.s3-website-region.amazonaws.com

Para obtener más información acerca de los puntos de enlace de sitio web de Amazon S3, consulte Punto
de enlace de sitio web (p. 524).

Documentos de índice y carpetas


En Amazon S3, un bucket es un contenedor plano de objetos: no provee una organización jerárquica como
la organización del sistema de archivo en su equipo. Puede crear una jerarquía lógica al usar los nombres
de clave de objeto que implican una estructura de carpeta. Por ejemplo, tomemos el caso de un bucket con
tres objetos y los siguientes nombres de clave.

• sample1.jpg
• photos/2006/Jan/sample2.jpg
• photos/2006/Feb/sample3.jpg

Aunque están almacenados sin una organización jerárquica, puede inferir la siguiente estructura lógica de
carpeta de los nombres de clave.

• El objeto sample1.jpg es la raíz del bucket.


• El objeto sample2.jpg se encuentra en la subcarpeta photos/2006/Jan.
• El objeto sample3.jpg se encuentra en la subcarpeta photos/2006/Feb.

El concepto de carpeta que admite la consola de Amazon S3 está basado en los nombres de clave de
objetos. Para continuar con el ejemplo anterior, la consola muestra el bucket examplebucket con una
carpeta photos.

Puede cargar objetos en el bucket o en la carpeta photos dentro del bucket. Si añade el objeto
sample.jpg al bucket, el nombre de clave será sample.jpg. Si carga el objeto a la carpeta photos, el
nombre de clave del objeto será photos/sample.jpg.

Versión de API 2006-03-01


527
Amazon Simple Storage Service Guía del desarrollador
Permisos requeridos para obtener acceso a un sitio web

Si crea esa estructura de carpeta en el bucket, debe tener un documento de índice en cada nivel. Cuando
un usuario especifica un URL que es similar a la búsqueda de una carpeta, la presencia o ausencia de una
barra diagonal determina el comportamiento del sitio web. Por ejemplo, el siguiente URL, con una barra
diagonal, devuelve el documento de índice photos/index.html.

http://example-bucket.s3-website-region.amazonaws.com/photos/

No obstante, si excluye la barra diagonal de la dirección URL anterior, Amazon S3 buscará primero un
objeto photos en el bucket. Si no encuentra el objeto photos, busca un documento de índice photos/
index.html. Si se encuentra el documento, Amazon S3 devuelve un mensaje 302 Found y apunta
a la clave photos/. Para las solicitudes subsiguientes a photos/, Amazon S3 devuelve photos/
index.html. Si no encuentra el documento de índice, Amazon S3 devuelve un error.

Permisos requeridos para obtener acceso a un sitio


web
Al configurar un bucket como sitio web, debe hacer que los objetos que quiera servir se puedan leer
públicamente. Para ello, cree una política de bucket que conceda a todos los usuarios el permiso
s3:GetObject. En el punto de enlace de sitio web, si un usuario solicita un objeto que no existe,
Amazon S3 devuelve el código de respuesta HTTP 404 (Not Found). Si el objeto existe, pero no se ha
concedido el permiso de lectura para él, el punto de enlace del sitio web devuelve el código de respuesta
HTTP 403 (Access Denied). El usuario puede utilizar el código de respuesta para inferir si existe un
objeto específico. Si no desea que esto suceda, no debe activar el soporte de sitio web para el bucket.

La siguiente política de bucket de ejemplo concede a todos los usuarios el acceso a los objetos en la
carpeta especificada. Para obtener más información acerca de las políticas de bucket, consulte Uso de
políticas de bucket y usuario (p. 353).

{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]

Versión de API 2006-03-01


528
Amazon Simple Storage Service Guía del desarrollador
Configuración del registro de tráfico web (opcional)

Note

Tenga en cuenta lo siguiente:

• Para alojar un sitio web, el bucket debe tener acceso de lectura público. El hecho de que todo el
mundo tenga acceso de lectura a este bucket es intencionado.
• La política de bucket solo se aplica a los objetos que pertenecen al propietario del bucket.
Si el bucket contiene objetos que no pertenecen al propietario del bucket, se debe conceder
el permiso READ público para esos objetos mediante la lista de control de acceso (ACL) de
objetos.

Puede conceder el permiso de lectura pública para sus objetos con una política de bucket o una ACL
de objetos. Para que un objeto tenga permiso de lectura pública mediante una ACL, conceda el permiso
READ al grupo AllUsers, como se muestra en el siguiente elemento concedido. Añada el siguiente
elemento concedido a la ACL de objetos. Para obtener más información sobre la administración de las
ACL, consulte Administración de acceso con ACL (p. 418).

<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>

Configuración del registro de tráfico web (opcional)


Si desea registrar la cantidad de visitantes que ingresan a su sitio web, debe habilitar el registro en el
bucket del dominio raíz. La habilitación de registro es opcional.

Para habilitar el registro en el bucket del dominio raíz

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. Cree un bucket para registro denominado logs.example.com en la misma región de AWS donde se
crearon los buckets example.com y www.example.com.
3. Cree dos carpetas en el bucket logs.example.com, una denominada root y la otra denominada
cdn. Si configura Amazon CloudFront para acelerar el sitio web, deberá utilizar la carpeta cdn.
4. En la lista Bucket name (Nombre del bucket), elija el bucket de dominio raíz, elija Properties
(Propiedades) y, a continuación, elija Server access logging (Registro de acceso del servidor).
5. Elija Enable logging (Habilitar el registro).
6. En Target bucket (Bucket de destino), elija el bucket que creó para los archivos de registro, es decir,
logs.example.com.
7. En Target prefix (Prefijo de destino), escriba root/. Con esta configuración, se agrupan los archivos
de datos de registro en un bucket que contiene una carpeta denominada root para que sean fáciles
de localizar.
8. Seleccione Save.

Ahora puede revisar los registros en el bucket de logs.example.com, tanto en root como en cdn
folders.

Versión de API 2006-03-01


529
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Soporte para documento de error personalizado

(Opcional) Soporte para documento de error


personalizado
En la siguiente tabla se muestra el subconjunto de los códigos de respuesta HTTP que Amazon S3
devuelve cuando ocurre un error.

Código de error Descripción


HTTP

301 Moved Cuando un usuario envía una solicitud directamente a los puntos de enlace de
Permanently sitio web de Amazon S3 (http://s3-website-<region>.amazonaws.com/),
(Desplazado Amazon S3 devuelve una respuesta 301 Moved Permanently (Desplazado
permanentemente) permanentemente) y redirige esas solicitudes a https://aws.amazon.com/
s3/.

302 Found Cuando Amazon S3 recibe una solicitud para una clave x, http://
(Encontrado) <bucket>.s3-website-<region>.amazonaws.com/x, sin barra diagonal,
primero busca el objeto con el nombre de clave x. Si no encuentra el objeto,
Amazon S3 determina que la solicitud es para una subcarpeta x, redirige la
solicitud, añade una barra al final y devuelve el código 302 Found (Encontrado).

304 Not Modified Los usuarios de Amazon S3 solicitan encabezados If-Modified-Since, If-
(No modificado) Unmodified-Since, If-Match y/o If-None-Match para determinar si el
objeto solicitado es el mismo que la copia almacenada que conserva el cliente.
Si el objeto es el mismo, el punto de enlace del sitio web devuelve una respuesta
304 Not Modified (No modificado).

400 Malformed El punto de enlace de sitio web devuelve una respuesta 400 Malformed Request
Request (Solicitud (Solicitud con formato incorrecto) cuando un usuario intenta obtener acceso a un
con formato bucket con el punto de enlace regional incorrecto.
incorrecto)

403 Forbidden El punto de enlace de sitio web devuelve una respuesta 403 Forbidden (Prohibido)
cuando la solicitud de un usuario se traduce en un objeto que no se puede leer
públicamente. El propietario del objeto debe permitir la lectura pública del objeto
mediante una política de bucket o una ACL.

404 Not Found (No El punto de enlace de sitio web devuelve una respuesta 404 Not Found (No
encontrado) encontrado) por las razones siguientes:

• Amazon S3 determina que el URL del sitio web hace referencia a una clave de
objeto que no existe.
• Amazon infiere que la solicitud es para un documento de índice que no existe.
• Un bucket especificado en el URL no existe.
• Un bucket especificado en el URL existe pero no está configurado como sitio
web.

Puede crear un documento personalizado que se devuelve para 404 Not Found
(No encontrado). Asegúrese de que el documento esté cargado al bucket
configurado como sitio web y que la configuración de alojamiento del sitio web
utilice el documento.

Para obtener información acerca de cómo interpreta Amazon S3 una URL como
una solicitud de objeto o un documento de índice, consulte Configuración para el
uso de documentos de índice (p. 526).

Versión de API 2006-03-01


530
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configuración del redireccionamiento

Código de error Descripción


HTTP

500 Service Error El punto de enlace del sitio web devuelve una respuesta 500 Service Error (Error
(Error de servicio) de servicio) cuando ocurre un error interno del servidor.

503 Service El punto de enlace de sitio web devuelve una respuesta 503 Service Unavailable
Unavailable (Servicio no disponible) cuando Amazon S3 determina que debe reducir la
velocidad de solicitudes.

Para cada uno de estos errores, Amazon S3 devuelve un mensaje HTML predefinido. A continuación, se
muestra un ejemplo de un mensaje HTML devuelto para la respuesta 403 Forbidden (Prohibido).

Documento de error personalizado

Si lo desea, puede proporcionar un documento de error personalizado que contenga un mensaje de


error sencillo y ayuda adicional. Debe proporcionar este documento de error personalizado como parte
de la configuración adicional de sitio web para su bucket. Amazon S3 devuelve el documento de error
personalizado para las clase de códigos de error HTTP 4XX únicamente.

Comportamiento de los documentos de error y el navegador

Si se produce un error, Amazon S3 devuelve un documento de error HTML. Si ha configurado su sitio web
con un documento de error personalizado, Amazon S3 devolverá ese documento. Sin embargo, algunos
navegadores muestran su propio mensaje de error cuando se produce un error, y omiten el documento
de error de Amazon S3. Por ejemplo, cuando se produce un error HTTP 404 Not Found, Google Chrome
puede omitir el documento de error de Amazon S3 y mostrar su propio error.

(Opcional) Configuración del redireccionamiento de


páginas web
Si su bucket de Amazon S3 está configurado como alojamiento de sitio web, puede redireccionar las
solicitudes de un objeto a otro objeto en el mismo bucket o a un URL externo.

Temas
• Soporte de redireccionamiento de página en la consola de Amazon S3 (p. 532)
• Configuración de redireccionamiento de página desde la API de REST (p. 533)
• Redireccionamientos condicionales avanzados (p. 534)

Para configurar el redireccionamiento, debe añadir la propiedad x-amz-website-redirect-location


a los metadatos del objeto. Luego, el sitio web interpreta el objeto como un redireccionamiento 301. Para

Versión de API 2006-03-01


531
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configuración del redireccionamiento

redireccionar una solicitud a otro objeto, debe establecer la ubicación de redireccionamiento para la clave
del objeto de destino. Para redireccionar una solicitud a un URL externo, debe establecer la ubicación de
redireccionamiento para el URL que desee. Para obtener más información acerca de los metadatos del
objeto, consulte Metadatos de objetos definidos por el sistema (p. 108).

Un bucket configurado para un alojamiento de sitio web contiene el punto de enlace de sitio web y el punto
de enlace REST. Una solicitud para una página que está configurada como un redireccionamiento 301
tiene los siguientes resultados posibles, en función del punto de enlace de la solicitud:

• Punto de enlace de sitio web en región específica: Amazon S3 redirige la solicitud de página según el
valor de la propiedad x-amz-website-redirect-location.
• Punto de enlace REST: Amazon S3 no redirige la solicitud de página. Devuelve el objeto solicitado.

Para obtener más información acerca de los puntos de enlace, consulte Diferencias clave entre el punto de
enlace del sitio web de Amazon y de la API de REST (p. 525).

Puede establecer el redireccionamiento de la página desde la consola de Amazon S3 o utilizar la API


REST de Amazon S3.

Soporte de redireccionamiento de página en la consola de


Amazon S3
Puede utilizar la consola de Amazon S3 para establecer la ubicación del redireccionamiento de un sitio
web en los metadatos del objeto. Cuando establece un redireccionamiento de página, puede conservar o
eliminar el contenido del objeto de destino. Por ejemplo, supongamos que tiene un objeto page1.html en
el bucket. Para redireccionar cualquier solicitud destinada a esta página a otro objeto, page2.html, puede
realizar una de las siguientes acciones:

• Para conservar el contenido del objeto page1.html y solo redireccionar las solicitudes de la página,
seleccione el objeto page1.html.

Seleccione la pestaña Properties (Propiedades) de page1.html y, luego, marque la casilla Metadata


(Metadatos). Añada Website Redirect Location a los metadatos, como se muestra en el siguiente
ejemplo, y configure su valor en /page2.html. Se necesita el prefijo / en el valor.

Versión de API 2006-03-01


532
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configuración del redireccionamiento

También puede establecer el valor para un URL externo, como http://www.example.com. Por
ejemplo, si su dominio raíz es example.com, y desea enviar solicitudes para http://example.com
y para http://www.example.com, puede crear dos buckets denominados example.com y
www.example.com. A continuación, mantenga el contenido en uno de los buckets (por ejemplo,
example.com), y configure el otro bucket para redirigir todas las solicitudes al bucket example.com.
• Para eliminar el contenido del objeto page1.html y redireccionar solicitudes, puede cargar un nuevo
objeto de cero bytes con la misma clave, page1.html, para reemplazar el objeto existente. Luego,
debe especificar Website Redirect Location para page1.html en el proceso de carga. Para
obtener más información acerca de cómo cargar un objeto, consulte Carga de objetos en S3 en la Guía
del usuario de la consola de Amazon Simple Storage Service.

Configuración de redireccionamiento de página desde la API de


REST
Las siguientes acciones de API de Amazon S3 admiten el encabezado x-amz-website-redirect-
location en la solicitud. Amazon S3 almacena el valor del encabezado en los metadatos del objeto como
x-amz-website-redirect-location.

• PUT Object
• Initiate Multipart Upload
• POST Object
• PUT Object - Copy

Cuando establece un redireccionamiento de página, puede conservar o eliminar el contenido del objeto.
Por ejemplo, supongamos que tiene un objeto page1.html en el bucket.

• Para conservar el contenido de page1.html y redirigir solo las solicitudes de página, puede enviar
una solicitud PUT Object - Copy para crear un nuevo objeto page1.html que utilice el objeto existente
page1.html como origen. Debe establecer el encabezado x-amz-website-redirect-location
en su solicitud. Cuando se completa la solicitud, la página original tendrá su contenido sin cambios, pero
Amazon S3 redireccionará cualquier solicitud a esa página a la ubicación de redireccionamiento que
especificó.
• Para eliminar el contenido del objeto page1.html y redireccionar solicitudes a la página, puede
enviar una solicitud PUT Object para cargar un objeto de cero bytes con la misma clave de objeto:

Versión de API 2006-03-01


533
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configuración del redireccionamiento

page1.html. En la solicitud PUT, debe establecer x-amz-website-redirect-location para


page1.html para el nuevo objeto. Cuando se completa la solicitud, page1.html no tendrá contenido
y las solicitudes serán redireccionadas a la ubicación especificada por x-amz-website-redirect-
location.

Cuando recupera el objeto con la acción GET Object, junto con otros metadatos de objeto, Amazon S3
devuelve el encabezado x-amz-website-redirect-location en la respuesta.

Redireccionamientos condicionales avanzados


Utilizando reglas avanzadas de redireccionamiento, puede dirigir condicionalmente las solicitudes según
nombres de clave de objeto, prefijos en la solicitud o códigos de respuesta específicos. Por ejemplo,
supongamos que elimina o cambia el nombre de un objeto en el bucket. Puede añadir una regla de
enrutamiento que redireccione la solicitud a otro objeto. Si desea que una carpeta no esté disponible,
puede añadir una regla de enrutamiento para redirigir la solicitud a otra página web. Además, puede añadir
una regla de enrutamiento para gestionar condiciones de error dirigiendo las solicitudes que devuelven un
error a otro dominio cuando se procesa el error.

Al configurar un bucket para el alojamiento de un sitio web, tiene la opción de especificar reglas avanzadas
de redireccionamiento.

Para redireccionar a otro host todas las solicitudes dirigidas al punto de enlace del sitio web del bucket,
solo necesita proporcionar el nombre de host.

Versión de API 2006-03-01


534
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configuración del redireccionamiento

Debe describir las reglas con XML. En la sección siguiente se proveen ejemplos de la sintaxis general para
especificar reglas de redireccionamiento.

Sintaxis general para especificar reglas de enrutamiento


A continuación, se describe una sintaxis general para definir las reglas de enrutamiento para la
configuración de un sitio web.

<RoutingRules> =
<RoutingRules>
<RoutingRule>...</RoutingRule>
[<RoutingRule>...</RoutingRule>
...]
</RoutingRules>

<RoutingRule> =
<RoutingRule>
[ <Condition>...</Condition> ]
<Redirect>...</Redirect>
</RoutingRule>

<Condition> =
<Condition>
[ <KeyPrefixEquals>...</KeyPrefixEquals> ]
[ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ]
</Condition>
Note: <Condition> must have at least one child element.

<Redirect> =
<Redirect>
[ <HostName>...</HostName> ]
[ <Protocol>...</Protocol> ]
[ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ]
[ <ReplaceKeyWith>...</ReplaceKeyWith> ]

Versión de API 2006-03-01


535
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configuración del redireccionamiento

[ <HttpRedirectCode>...</HttpRedirectCode> ]
</Redirect>
Note: <Redirect> must have at least one child element.
Also, you can have either ReplaceKeyPrefix with or ReplaceKeyWith,
but not both.

En la siguiente tabla se describen los elementos en la regla de enrutamiento.

Nombre Descripción

RoutingRules Contenedor de una colección de elementos RoutingRule.

RoutingRule Una regla que identifica una condición y el redireccionamiento que se


aplica cuando se cumple la condición.

Condición: un contenedor RoutingRules debe tener una regla de


enrutamiento como mínimo.

Condition Contenedor para describir una condición que debe cumplirse para
la aplicación de un redireccionamiento específico. Si la regla de
enrutamiento no incluye una condición, esta regla se aplicará a todas
las solicitudes.

KeyPrefixEquals El prefijo de un nombre de clave de objeto desde el que se


redireccionan las solicitudes.

El KeyPrefixEquals será necesario si no se especifica


HttpErrorCodeReturnedEquals. Si se especifican los elementos
KeyPrefixEquals y HttpErrorCodeReturnedEquals, ambos
deben ser verdaderos para que se cumpla la condición.

El código de error HTTP que debe coincidir para que se aplique


HttpErrorCodeReturnedEquals
el redireccionamiento. Si se produce un error y el código del error
coincide con este valor, se aplicará el redireccionamiento especificado.

El HttpErrorCodeReturnedEquals será necesario si no se


especifica KeyPrefixEquals. Si se especifican los elementos
KeyPrefixEquals y HttpErrorCodeReturnedEquals, ambos
deben ser verdaderos para que se cumpla la condición.

Redirect Un elemento del contenedor que provee instrucciones para


redireccionar la solicitud. Puede redireccionar solicitudes a otro host
o a otra página, o puede especificar el uso de otro protocolo. Cada
RoutingRule debe tener un elemento Redirect. El elemento
Redirect debe tener uno de los siguientes elementos del mismo nivel
como mínimo: Protocol, HostName, ReplaceKeyPrefixWith,
ReplaceKeyWith o HttpRedirectCode.

Protocol Protocolo, HTTP o HTTPS, utilizado en el encabezado Location que


se devuelve en la respuesta.

No se requiere Protocol, si se provee uno de sus elementos del


mismo nivel.

HostName El nombre de host utilizado en el encabezado de ubicación que se


devuelve en la respuesta.

No se requiere HostName, si se provee uno de sus elementos del


mismo nivel.

Versión de API 2006-03-01


536
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configuración del redireccionamiento

Nombre Descripción

ReplaceKeyPrefixWith El prefijo del nombre de clave de objeto que sustituye al valor de


KeyPrefixEquals en la solicitud de redireccionamiento.

No se requiere ReplaceKeyPrefixWith, si se provee uno de


sus elementos del mismo nivel. Solo se puede proveer si no se
proporciona ReplaceKeyWith.

ReplaceKeyWith La clave del objeto utilizada en el encabezado de ubicación que se


devuelve en la solicitud.

No se requiere ReplaceKeyWith, si se provee uno de sus elementos


del mismo nivel. Solo se puede proveer si no se proporciona
ReplaceKeyPrefixWith.

HttpRedirectCode El código de redireccionamiento de HTTP utilizado en el encabezado


de ubicación que se devuelve en la solicitud.

No se requiere HttpRedirectCode, si se provee uno de sus


elementos del mismo nivel.

En los siguientes ejemplos se explican las tareas de redireccionamiento más comunes:

Example 1: redireccionamiento luego de cambiar el nombre de un prefijo de clave.

Supongamos que el bucket contiene los siguientes objetos:

• index.html
• docs/article1.html
• docs/article2.html

Ha decidido cambiar el nombre de la carpeta docs/ a documents/. Después de hacer este cambio,
deberá redireccionar las solicitudes para el prefijo docs/ a documents/. Por ejemplo, la solicitud para
docs/article1.html se redireccionará a documents/article1.html.

En este caso, debe añadir la siguiente regla de enrutamiento a la configuración del sitio web:

<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>docs/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>

Example 2: redireccionamiento de solicitudes de una carpeta eliminada a una página.

Supongamos que elimina la carpeta images/ (es decir, que elimina todos los objetos con el prefijo de
clave images/). Puede añadir una regla de enrutamiento que redireccione las solicitudes de cualquier
objeto con el prefijo de clave images/ a una página denominada folderdeleted.html.

<RoutingRules>
<RoutingRule>

Versión de API 2006-03-01


537
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo

<Condition>
<KeyPrefixEquals>images/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyWith>folderdeleted.html</ReplaceKeyWith>
</Redirect>
</RoutingRule>
</RoutingRules>

Example 3: redireccionamiento de error de HTTP.

Supongamos que cuando no se encuentra un objeto solicitado, desea redirigir las solicitudes a una
instancia de Amazon Elastic Compute Cloud (Amazon EC2). Debe añadir una regla de redireccionamiento
para que, cuando se devuelva el código de estado HTTP 404 (No encontrado), se redireccione al visitante
del sitio a una instancia Amazon EC2 que se encarga de la solicitud. En el siguiente ejemplo, también
se inserta el prefijo de clave de objeto report-404/ en el redireccionamiento. Por ejemplo, si solicita
la página ExamplePage.html y se traduce en un error HTTP 404, la solicitud se redirige a la página
report-404/ExamplePage.html en la instancia Amazon EC2 especificada. Si no hay una regla de
enrutamiento y se produce un error HTTP 404, se devolverá el documento de error especificado en la
configuración.

<RoutingRules>
<RoutingRule>
<Condition>
<HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals >
</Condition>
<Redirect>
<HostName>ec2-11-22-333-44.compute-1.amazonaws.com</HostName>
<ReplaceKeyPrefixWith>report-404/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>

Tutoriales de ejemplo: alojamiento de sitios web en


Amazon S3
Temas
• Ejemplo: configuración para sitio web estático. (p. 538)
• Ejemplo: configuración de un sitio web estático con un dominio personalizado (p. 540)
• Ejemplo: Aumento de la velocidad del sitio web con Amazon CloudFront (p. 546)
• Limpiar los recursos de ejemplo (p. 549)

En esta sección se presentan dos ejemplos. En el primer ejemplo, debe configurar un bucket para el
alojamiento de sitio web, cargar un documento de índice de muestra y probar el punto de enlace del sitio
web de Amazon S3 para el bucket. En el segundo ejemplo, se muestra cómo puede utilizar su propio
dominio, como, por ejemplo, example.com, en vez del punto de enlace del sitio web del bucket de S3, y
distribuir contenido desde el bucket de Amazon S3 configurado como un sitio web. En el ejemplo, solo se
muestra cómo Amazon S3 ofrece el soporte para el dominio raíz.

Ejemplo: configuración para sitio web estático.


Puede configurar un bucket de Amazon S3 para que funcione como un sitio web. En este ejemplo se
muestran los pasos para el alojamiento de un sitio web en Amazon S3.

Versión de API 2006-03-01


538
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: configuración para sitio web estático.

Temas
• Paso 1: crear un bucket y configurarlo como un sitio web. (p. 539)
• Paso 2: añadir una política de bucket para que el contenido del bucket sea público. (p. 539)
• Paso 3: cargar un documento de índice. (p. 540)
• Paso 4: probar el sitio web. (p. 540)

Paso 1: crear un bucket y configurarlo como un sitio web.


1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://
console.aws.amazon.com/s3/.
2. Cree un bucket.

Para ver instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en Guía del
usuario de la consola de Amazon Simple Storage Service

Para conocer las directrices de nomenclatura de buckets, consulte Restricciones y limitaciones de los
buckets (p. 60). Para obtener información adicional acerca de la nomenclatura de buckets, si tiene un
nombre de dominio registrado, consulte Personalización de URL de Amazon S3 con CNAME (p. 49).
3. Abra el bucket en el panel Properties (Propiedades), seleccione Static Website Hosting (Alojamiento
de un sitio web estático) y realice los siguientes pasos:

a. Elija Use this bucket to host a website (Usar este bucket para alojar un sitio web).
b. En la casilla Index Document (Documento de índice), escriba el nombre de su documento de
índice. Generalmente, el nombre es index.html.
c. Seleccione Save (Guardar) para guardar la configuración del sitio web.
d. Escriba el valor Endpoint (Punto de enlace).

Este es un punto de enlace de sitio web proporcionado por Amazon S3 para su bucket. Para
probar el sitio web, utilice el punto de enlace en los siguientes pasos.

Paso 2: añadir una política de bucket para que el contenido del


bucket sea público.
1. En el panel Properties (Propiedades) del bucket, seleccione Permissions (Permisos).
2. Seleccione Add bucket policy (Añadir política de bucket).
3. Para alojar un sitio web, el bucket debe tener acceso de lectura público. El hecho de que todo el
mundo tenga acceso de lectura a este bucket es intencionado. Copie la siguiente política de bucket y
péguela en el Bucket Policy Editor.

{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadForGetBucketObjects",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]
}

4. En la política, reemplace example-bucket por el nombre de su bucket.


Versión de API 2006-03-01
539
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: configuración de un sitio web
estático con un dominio personalizado

5. Seleccione Save.

Paso 3: cargar un documento de índice.


1. Cree un documento. Denomine el documento con el mismo nombre del documento de índice anterior.
2. Con la consola, cargue el documento de índice en el bucket.

Para ver instrucciones, consulte Carga de objetos en S3 en la Guía del usuario de la consola de
Amazon Simple Storage Service.

Paso 4: probar el sitio web.


Escriba la siguiente URL en el navegador y reemplace el nombre example-bucket por el nombre de
su bucket y website-region por el nombre de la región de AWS donde implementó su bucket. Para
obtener más información acerca de los nombres de regiones de AWS, consulte Punto de enlace de sitio
web (p. 524) ).

A continuación, se muestran las dos formas generales de un punto de enlace de sitio web de Amazon S3.

http://example-bucket.s3-website-region.amazonaws.com

http://example-bucket.s3-website.region.amazonaws.com

El sitio web estará implementado correctamente, si el navegador muestra la página index.html.


Note

No se admite el acceso HTTPS para el sitio web.

Ahora puede alojar un sitio web en Amazon S3. Este sitio web está disponible en el punto de enlace
del sitio web de Amazon S3. Sin embargo, es posible que tenga un dominio, como example.com, que
desee utilizar para distribuir el contenido del sitio web creado. Es posible que también desee hacer
uso de la funcionalidad de dominio raíz de Amazon S3 para distribuir las solicitudes para http://
www.example.com y http://example.com. Esto requiere pasos adicionales. Para ver un ejemplo,
consulte Ejemplo: configuración de un sitio web estático con un dominio personalizado (p. 540).

Ejemplo: configuración de un sitio web estático con un


dominio personalizado
Suponga que desea alojar su sitio web estático en Amazon S3. Usted registró un dominio (por ejemplo,
example.com) y desea que las solicitudes para http://www.example.com y http://example.com
se atiendan desde su contenido de Amazon S3. Ya sea que tenga un sitio web estático que desea alojar
en Amazon S3 o empiece de cero, utilice este ejemplo para aprender a alojar sitios web en Amazon S3.

Temas
• Antes de comenzar (p. 541)
• Paso 1: Registro de un dominio (p. 541)
• Paso 2: Creación y configuración de buckets, y carga de datos (p. 541)
• Paso 3: Adición de registros de alias para example.com y www.example.com (p. 544)
• Paso 4: Pruebas (p. 546)

Versión de API 2006-03-01


540
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: configuración de un sitio web
estático con un dominio personalizado

Antes de comenzar
A medida que siga los pasos de este ejemplo, trabajará con los siguientes servicios:

Amazon Route 53: puede utilizar Route 53 para registrar dominios y para definir a dónde quiere dirigir el
tráfico de Internet para su dominio. Explicamos cómo crear los registros de alias de Route 53 que dirigen el
tráfico para su dominio (example.com) y subdominio (www.example.com) a un bucket de Amazon S3 que
contiene un archivo HTML.

Amazon S3: usted utiliza Amazon S3 para crear buckets, cargar una página de sitio web de muestra,
configurar permisos para que todos puedan ver el contenido y configurar los buckets para el alojamiento en
el sitio web.

Paso 1: Registro de un dominio


Si todavía no tiene un nombre de dominio registrado, como example.com, registre uno con Route 53.
Para obtener más información, consulte Registro de un nuevo dominio en la Guía para desarrolladores de
Amazon Route 53. Una vez que tenga un nombre de dominio registrado, las siguientes tareas consisten en
crear y configurar buckets de Amazon S3 para el alojamientos del sitio web y cargar el contenido del sitio
web.

Paso 2: Creación y configuración de buckets, y carga de datos


Para admitir solicitudes desde el dominio raíz, como example.com, y del subdominio, como
www.example.com, usted crea dos buckets. Un bucket almacena el contenido. Usted configura el otro
bucket para redireccionar las solicitudes.

Paso 2.1: Creación de dos buckets


Los nombres de los buckets deben coincidir con los nombres del sitio web que aloja. Por ejemplo,
para alojar su sitio web example.com en Amazon S3, usted crearía un bucket denominado
example.com. Para alojar un sitio web en www.example.com, el nombre que le asignaría al bucket
sería www.example.com. En este ejemplo, su sitio web admite solicitudes de example.com y
www.example.com.

En este paso, usted inicia sesión en la consola de Amazon S3 con sus credenciales de cuenta de AWS y
crea los dos buckets siguientes.

• example.com
• www.example.com

Note

Al igual que los dominios, los subdominios deben tener sus propios buckets S3, y los buckets
deben compartir los mismos nombres que los subdominios. En este ejemplo, creamos el
subdominio www.example.com; por lo tanto, también necesitamos un bucket de S3 denominado
www.example.com.

Para crear sus buckets y cargar el contenido de su sitio web para el alojamiento

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
2. Cree dos buckets que coincidan con el nombre de dominio y el subdominio. Por ejemplo,
example.com y www.example.com.

Para obtener instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service

Versión de API 2006-03-01


541
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: configuración de un sitio web
estático con un dominio personalizado

3. Cargue los datos de su sitio web en el bucket example.com.

Alojará el contenido fuera del bucket de dominio raíz (example.com) y redireccionará las solicitudes
para www.example.com al bucket de dominio raíz. Puede almacenar contenido en cualquiera de los
buckets. Para este ejemplo, aloja contenido en el bucket example.com. El contenido puede incluir
archivos de texto, fotos familiares, vídeos; lo que desee. Si todavía no creó un sitio web, solo necesita
un archivo para este ejemplo. Puede cargar cualquier archivo. Por ejemplo, puede crear un archivo
con la siguiente HTML y cargarlo en el bucket. El nombre del archivo de la página de inicio de un sitio
web por lo general es index.html, pero puede brindarle cualquier nombre. En un paso posterior, usted
proporciona este nombre de archivo como el nombre del documento de índice para su sitio web.

<html xmlns="http://www.w3.org/1999/xhtml" >


<head>
<title>My Website Home Page</title>
</head>
<body>
<h1>Welcome to my website</h1>
<p>Now hosted on Amazon S3!</p>
</body>
</html>

Para obtener instrucciones paso a paso, consulte ¿Cómo puedo cargar archivos y carpetas en un
bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service
4. Para alojar un sitio web, el bucket debe tener acceso de lectura público. El hecho de que todo el
mundo tenga acceso de lectura a este bucket es intencionado. Para conceder acceso de lectura
público, adjunte la siguiente política de bucket al bucket example.com, sustituyendo example.com
por el nombre de su bucket. Para obtener instrucciones paso a paso para adjuntar una política de
bucket, consulte ¿Cómo agrego una política de bucket en S3? en la Guía del usuario de la consola de
Amazon Simple Storage Service

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal":"*",
"Action":[
"s3:GetObject"
],
"Resource":[
"arn:aws:s3:::example.com/*"
]
}
]
}

Ahora tiene dos buckets, example.com y www.example.com y cargó el contenido de su sitio web
al bucket example.com. En el siguiente paso, configura www.example.com para redireccionar
solicitudes a su bucket example.com. Al redireccionar las solicitudes, puede conservar solo una
copia del contenido de su sitio web. Tanto los visitantes que escriben www en los navegadores como
aquellos que especifican solo el dominio raíz se direccionan al mismo contenido de sitio web en su
bucket example.com. 

Paso 2.2: Configuración de buckets para el alojamiento de sitio web


Cuando configura un bucket para el alojamiento de sitio web, puede acceder al sitio web a través del punto
de enlace de sitio web del bucket asignado de Amazon S3.
Versión de API 2006-03-01
542
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: configuración de un sitio web
estático con un dominio personalizado

En este paso, usted configura ambos buckets para el alojamiento de sitio web. Primero, configura
example.com como un sitio web y luego configura www.example.com para redireccionar todas las
solicitudes al bucket example.com.

Para configurar sus buckets para el alojamiento de sitio web

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
2. En la lista Bucket name (Nombre del bucket), seleccione el nombre del bucket para el que desea
habilitar el alojamiento de sitios web estáticos.
3. Seleccione Properties (Propiedades).
4. Seleccione Static website hosting (Alojamiento de sitio web estático).
5. Configure el bucket example.com para el alojamiento de sitio web. En el cuadro Index Document
(Documento de índice), escriba el nombre que asignó a su página de índice.

6. Seleccione Save.

Paso 2.3: Configuración del redireccionamiento de su sitio web


Ahora que configuró su bucket para el alojamiento de sitio web, configure el bucket www.example.com
para redireccionar todas las solicitudes para www.example.com a example.com.

Para redireccionar las solicitudes de www.example.com a example.com.

1. En la consola de Amazon S3, en la lista Buckets, seleccione su bucket (www.example.com, en este


ejemplo).
2. Seleccione Properties (Propiedades).
3. Seleccione Static website hosting (Alojamiento de sitio web estático).
4. Seleccione Redirect requests (Redirigir solicitudes). En el cuadro Target bucket or domain (Dominio o
bucket de origen), escriba example.com.
5. Seleccione Save.

Versión de API 2006-03-01


543
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: configuración de un sitio web
estático con un dominio personalizado

Paso 2.4: Configuración de registros para tráfico de sitio web


Si lo desea, puede configurar los registros para rastrear el número de visitantes que acceden a su sitio
web. Para eso, debe habilitar los registros para el bucket de dominio raíz. Para obtener más información,
consulte Configuración del registro de tráfico web (opcional) (p. 529).

Paso 2.5: Prueba del punto de enlace y el redireccionamiento


Para probar el sitio web, escriba el URL del punto de enlace en el navegador. Su solicitud se redirecciona y
el navegador muestra el documento de índice para example.com.

En el siguiente paso, utiliza Amazon Route 53 para permitir a los clientes utilizar todos los URL para
navegar a su sitio.

Paso 3: Adición de registros de alias para example.com y


www.example.com
En este paso, se crean los registros de alias que añade a la zona hospedada para su dominio que
vinculan example.com y www.example.com a los buckets de S3 correspondientes. En lugar de utilizar
direcciones IP, los registros de alias utilizan puntos de enlace de sitio web de Amazon S3. Amazon
Route 53 mantiene el mapeo entre los registros de alias y las direcciones IP donde residen los buckets de
Amazon S3.

Para dirigir el tráfico a su sitio web

1. Abra la consola de Route 53 en https://console.aws.amazon.com/route53/.


Note

Si todavía no utiliza Amazon Route 53, puede comenzar a utilizarlo aquí. Una vez que lo
tenga configurado, podrá continuar con las instrucciones que se indican a continuación.
2. En la lista de zonas hospedadas, elija el nombre de su dominio.
3. Elija Create Record Set (Crear conjunto de registros).

Versión de API 2006-03-01


544
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: configuración de un sitio web
estático con un dominio personalizado

Note

Cada registro contiene información acerca de cómo desea dirigir el tráfico de un dominio
(example.com) o subdominio (www.example.com). Los registros se almacenan en la zona
hospedada del dominio.
4. Especifique los valores siguientes:

Nombre

Para el primer registro que cree, acepte el valor predeterminado, que es el nombre de la zona
hospedada y el dominio. De este modo se dirigirá el tráfico de Internet al bucket que tiene el
mismo nombre que el dominio.

Repita este paso para crear otro registro para su subdominio. En el segundo registro, escriba
www. De este modo se dirigirá el tráfico de Internet al bucket de www.example.com.
Tipo

Elija A – IPv4 address (A - Dirección IPv4).


Alias

Seleccione Yes.
Alias Target

Escriba el nombre de su punto de enlace de Amazon S3, por ejemplo example.com (s3-
website-us-west-2).
Note

Especifique el mismo valor de Alias Target (Destino de alias) para ambos registros.
Route 53 averigua a qué bucket dirigirá el tráfico en función del nombre del registro.
Routing Policy

Acepte el valor predeterminado de Simple.


Evaluate Target Health

Acepte el valor predeterminado de No.


5. Seleccione Create (Crear).
6. Para www.example.com, repita los pasos del 3 al 5 para crear un registro.

En la siguiente captura de pantalla se muestra el registro de alias para example.com como ejemplo.
También debe crear un registro de alias para www.example.com.

Versión de API 2006-03-01


545
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: Aumento de la velocidad
del sitio web con Amazon CloudFront

Note

Al crear, cambiar y eliminar conjuntos de registros de recursos se tarda algún tiempo en


propagarse a los servidores DNS de Route 53. Por lo general, los cambios se propagan a todos
los servidores de nombres de Route 53 en un par de minutos. En circunstancias excepcionales, la
propagación podría durar hasta 30 minutos.

Paso 4: Pruebas
Para verificar que el sitio web funcione correctamente, en su navegador, pruebe los siguientes URL:

• http://example.com: muestra el documento de índice en el bucket example.com.


• http://www.example.com: redirecciona su solicitud a http://example.com.

En algunos casos, posiblemente deba eliminar el caché de su navegador web para ver el comportamiento
esperado.

Ejemplo: Aumento de la velocidad del sitio web con


Amazon CloudFront
Puede usar Amazon CloudFront para mejorar el rendimiento del sitio web. CloudFront pone los archivos
de su sitio web (archivos HTML, imágenes y vídeos) a disposición desde los centros de datos de todo el
mundo. Estos centros de datos se conocen como ubicaciones de borde. Cuando un visitante solicita un
archivo de su sitio web, CloudFront redirecciona automáticamente la solicitud a una copia del archivo en la
ubicación de borde más cercana. Esto genera tiempos de descarga menores que los que se obtendrían si
el visitante solicitara el contenido desde un centro de datos más lejano.

Versión de API 2006-03-01


546
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: Aumento de la velocidad
del sitio web con Amazon CloudFront

CloudFront copia en caché el contenido en las ubicaciones de borde durante el período que usted
especifique. Si un visitante solicita contenido que se ha copiado en caché y ha excedido la fecha de
vencimiento, CloudFront accede al servidor de origen para verificar si hay disponible una versión más
reciente del contenido. Si se encuentra una versión más reciente, CloudFront copiará esta nueva versión
en la ubicación de borde. Los cambios que realice en el contenido original se replicarán en las ubicaciones
de borde a medida que los visitantes soliciten el contenido.

Para aumentar la velocidad del sitio, use CloudFront para completar las siguientes tareas.

Tareas
• Creación de una distribución de CloudFront (p. 547)
• Actualización de los registros para su dominio y subdominio (p. 548)
• (Opcional) Verificación de los archivos de registro (p. 549)

Creación de una distribución de CloudFront


Primero, cree una distribución de CloudFront. Esto habilita el acceso a su sitio web desde los centros de
datos de todo el mundo.

Para crear una distribución con un origen de Amazon S3

1. Abra la consola de CloudFront en https://console.aws.amazon.com/cloudformation/.


2. Seleccione Create Distribution (Crear distribución).
3. En la página Select a delivery method for your content (Seleccionar un método de entrega de su
contenido), en Web, haga clic en Get Started (Comenzar).
4. En la página Create Distribution (Crear distribución), sección Origin Settings (Configuración
del origen), en Origin Domain Name (Nombre de dominio de origen) escriba el punto de
enlace de alojamiento del sitio web estático de Amazon S3 para su bucket. Por ejemplo,
example.com.s3.amazonaws.com.

CloudFront completa el campo Origin ID (ID de origen) por usted.


5. En Default Cache Behavior Settings (Configuración predeterminada de comportamiento de caché),
conserve los valores predeterminados. Para obtener más información acerca de estas opciones de
configuración, consulte Valores que deben especificarse al crear o actualizar una distribución web en
la Guía para desarrolladores de Amazon CloudFront.
6. En Distribution Settings (Configuración de distribución), haga lo siguiente:

a. En Price Class (Clase de precio), deje la opción Use All Edge Locations (Best Performance) (Usar
todas las ubicaciones de borde [mejor rendimiento]).
b. Seleccione Alternate Domain Names (CNAMEs) (Nombres de dominio alternativos [CNAME])
como el dominio raíz y el subdominio www; en este tutorial, estos son example.com y
www.example.com, respectivamente. Estos valores deben establecerse antes de crear alias
para los registros A que conectan los nombres de dominios específicos a la distribución de
CloudFront.
Important

Antes de realizar este paso, tenga en cuenta los requisitos para el uso de nombres de
dominio alternativos, en concreto la necesidad de tener un certificado SSL/TLS válido.
c. En Default Root Object (Objeto raíz predeterminado), establezca el objeto raíz como
index.html. Esta es la página predeterminada que la distribución de CloudFront devuelve si el
URL que se utilizó para acceder a la distribución no contiene el nombre del archivo. Este valor
debe corresponder al valor del documento de índice que establece en Configuración de un bucket
para alojamiento de sitios web (p. 526).
d. En Logging (Registro), seleccione la opción On (Activado).

Versión de API 2006-03-01


547
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: Aumento de la velocidad
del sitio web con Amazon CloudFront

e. En Bucket for Logs (Bucket para registros), seleccione el bucket de registro que creó.
f. Para almacenar los registros generados según el tráfico a la distribución de CloudFront en una
carpeta llamada cdn en el bucket de registro, escriba cdn/ en Log Prefix (Prefijo de registro).
g. No cambie los demás valores predeterminados.
7. Seleccione Create Distribution (Crear distribución).

Para ver el estado de la distribución, busque la distribución en la consola y revise la columna Status
(Estado). El estado InProgress indica que la implementación de la distribución no ha finalizado aún.

Una vez que haya implementado la distribución, puede hacer referencia al contenido con el nuevo
nombre del dominio de CloudFront. Registre el valor de Domain Name (Nombre de dominio) que se
muestra en la consola de CloudFront. Lo necesitará en el siguiente paso. En este ejemplo, el valor es
dj4p1rv6mvubz.cloudfront.net.

Para verificar que la distribución de CloudFront funcione correctamente, escriba el nombre del dominio de
la distribución en el navegador web. Si funciona, su sitio web es visible.

Actualización de los registros para su dominio y subdominio


Como ya ha creado con éxito una distribución de CloudFront, actualice los registros A en Route 53 para
que se asocien a la nueva distribución de CloudFront.

Para actualizar los registros A para que se asocien a una distribución de CloudFront

1. Abra la consola de Route 53 en https://console.aws.amazon.com/route53/.


2. En la página Hosted Zones (Zonas alojadas), seleccione la zona alojada que creó para su dominio.
3. Seleccione Go to Record Sets (Ir a conjuntos de registros).
4. Seleccione el registro A que creó para el subdominio www.
5. En Alias Target (Destino de alias), seleccione la distribución de CloudFront.
6. Seleccione la opción Save Record Set (Guardar conjunto de registros).
7. Para redirigir el registro A desde el dominio raíz a la distribución de CloudFront, repita este
procedimiento.

La actualización de los conjuntos de registros se realiza entre 2 y 48 horas. Para ver si los nuevos
registros A funcionan, en un navegador web escriba http://www.example.com. Si el navegador ya no
lo redirige a http://example.com, significa que se aplicaron los nuevos registros A.

Este cambio de conducta se debe a que el tráfico redirigido por el registro A antiguo al bucket de S3 del
subdominio www se redirige según los ajustes realizados en Amazon S3 al dominio raíz. Cuando se haya
aplicado el nuevo registro A, el tráfico redirigido por el nuevo registro A a la distribución de CloudFront no
se redirige al dominio raíz.
Tip
Los navegadores pueden copiar en caché los ajustes de redirección. Si cree que se deberían
haber aplicado los ajustes del nuevo registro A, pero el navegador aún redirige http://
www.example.com a http://example.com, intente borrar el historial de navegador y las
copias en caché y, luego, cierre y vuelva a abrir el navegador. También puede intentar con otro
navegador web.

Con los nuevos registros A vigentes, todos los visitantes que hagan referencia al sitio mediante http://
example.com o http://www.example.com se redirigen a la ubicación de borde de CloudFront más
cercana. De esta manera, los tiempos de descarga serán más rápidos.

Si creó un sitio web como parte de un ejercicio de aprendizaje únicamente, puede eliminar los recursos de
AWS que asignó para dejar de acumular cargos. Para eliminar los recursos, siga con la sección Limpiar los

Versión de API 2006-03-01


548
Amazon Simple Storage Service Guía del desarrollador
Borrar recursos de ejemplo

recursos de ejemplo (p. 549). Después de que haya eliminado los recursos de AWS, el sitio web ya no
estará disponible.

(Opcional) Verificación de los archivos de registro


Los registros de acceso le informan cuántas personas visitan el sitio web. También contienen datos
comerciales valiosos que puede analizar con otros servicios, como Amazon EMR.

En su bucket, los archivos de registros de Amazon S3 anteriores se ubican en la carpeta root. Los
nuevos archivos de registro, que deben ser registros de CloudFront, se ubican en la carpeta cdn. Amazon
S3 escribe los registros de acceso al sitio web en su bucket de registro cada dos horas. CloudFront
escribe registros en su bucket de registro dentro de las 24 horas en las que se realizaron las solicitudes
correspondientes.

Para ver los archivos de registro de su sitio web

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. Seleccione el bucket de registro para su sitio web.
3. Para ver los archivos de registro almacenados dentro de la carpeta cdn o root, seleccione cdn o
root.
4. Abra los archivos de registro de Amazon S3, que son archivos de texto, en un navegador. Descargue
los archivos .gzip escritos por CloudFront antes de abrirlos.

Limpiar los recursos de ejemplo


Si creó un sitio web estático como parte de un ejercicio de aprendizaje únicamente, asegúrese de que
elimine los recursos de AWS que asignó para dejar de acumular cargos. Después de que haya eliminado
los recursos de AWS, el sitio web ya no estará disponible.

Tareas
• Eliminar la distribución de Amazon CloudFront (p. 549)
• Eliminación de la zona alojada en Route 53 (p. 549)
• Eliminación del bucket de S3 (p. 550)

Eliminar la distribución de Amazon CloudFront


Antes de eliminar una distribución de Amazon CloudFront, debe deshabilitarla. Una distribución
deshabilitada ya no es funcional y no acumula cargos. Puede habilitar una distribución deshabilitada en
cualquier momento. Después de eliminar una distribución deshabilitada, ya no estará disponible.

Para deshabilitar y eliminar una distribución de CloudFront

1. Abra la consola de CloudFront en https://console.aws.amazon.com/cloudformation/.


2. Seleccione la distribución que desea deshabilitar y elija Disable (Deshabilitar).
3. Cuando se le indique que confirme, seleccione Yes, Disable (Sí, deshabilitar).
4. Seleccione la distribución desactivada y después Delete (Eliminar).
5. Cuando se le indique que confirme, seleccione Yes, Delete.

Eliminación de la zona alojada en Route 53


Antes de eliminar la zona alojada, debe eliminar los registros que creó. No es necesario que elimine los
registros NS o SOA, ya que se eliminarán automáticamente cuando elimine la zona alojada.

Versión de API 2006-03-01


549
Amazon Simple Storage Service Guía del desarrollador
Borrar recursos de ejemplo

Para eliminar el conjunto de registros

1. Abra la consola de Route 53 en https://console.aws.amazon.com/route53/.


2. En la lista de nombres de dominio, seleccione su nombre de dominio y después Go to Record Sets (Ir
a conjuntos de registros).
3. En la lista de conjuntos de registros, seleccione los registros A que haya creado. El tipo de cada
conjunto de registro está detallado en la columna Type (Tipo).
4. Seleccione la opción Delete Record Set (Eliminar conjunto de registros).
5. Cuando deba confirmar la selección, haga clic en Confirm (Confirmar).

Para eliminar la zona alojada en Route 53

1. Al finalizar el procedimiento anterior, seleccione la opción Back to Hosted Zones (Volver a zonas
alojadas).
2. Seleccione el nombre de su dominio y, después, seleccione Delete Hosted Zone (Eliminar zona
alojada).
3. Cuando deba confirmar la selección, haga clic en Confirm (Confirmar).

Eliminación del bucket de S3


Antes de eliminar su bucket de S3, asegúrese de que la función de registro esté desactivada para el
bucket. De lo contrario, AWS seguirá escribiendo registros en su bucket mientras lo elimina.

Para deshabilitar el registro en el bucket

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. Seleccione el bucket y, luego, seleccione Properties (Propiedades).
3. En Properties (Propiedades), elija Logging (Registro).
4. Elimine la selección del recuadro Enabled (Habilitado).
5. Seleccione Save.

Ahora ya puede eliminar el bucket. Para obtener más información, consulte ¿Cómo elimino un bucket en
S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Versión de API 2006-03-01


550
Amazon Simple Storage Service Guía del desarrollador
Información general

Configuración de notificaciones de
eventos de Amazon S3
La función de notificaciones de Amazon S3 le permite recibir notificaciones cuando se producen ciertos
eventos en su bucket. Para habilitar las notificaciones, primero debe añadir una configuración de
notificación que identifique los eventos que desea que Amazon S3 publique y los destinos a los que desea
que Amazon S3 envíe las notificaciones de eventos. Debe guardar esta configuración en el subrecurso
notificación (consulte Opciones de configuración de buckets (p. 58)) asociado con un bucket. Amazon S3
proporciona una API para que administre este subrecurso.
Important

Las notificaciones de eventos de Amazon S3 suelen enviar los eventos en cuestión de segundos,
pero a veces pueden tardar un minuto o más. En muy raras ocasiones, se pueden perder eventos.
Si su aplicación requiere una semántica determinada (por ejemplo, asegurarse de que no se
pierdan eventos o de que las operaciones se ejecuten solo una vez), le recomendamos que tenga
en cuenta los eventos perdidos y duplicados al diseñar la aplicación. Puede auditar los eventos
perdidos mediante la API LIST Objects o informes Inventario de Amazon S3 (p. 439). La API LIST
Objects y los informes de inventario de Amazon S3 están sujetos a la consistencia final y podrían
no reflejar los objetos agregados o eliminados recientemente.

Temas
• Información general (p. 551)
• Cómo habilitar las notificaciones de eventos (p. 553)
• Tipos y destinos de las notificaciones de eventos (p. 554)
• Configuración de notificaciones con filtrado de nombre de clave de objeto (p. 556)
• Concesión de permisos para publicar mensajes de notificación de eventos a un destino (p. 560)
• Tutorial de ejemplo 1: Configuración de un bucket para notificaciones (destino de mensaje: tema de
SNS y cola de SQS) (p. 562)
• Tutorial de ejemplo 2: Configuración de un bucket para notificaciones (destino de mensaje: AWS
Lambda) (p. 568)
• Estructura de mensaje de evento (p. 568)

Información general
Actualmente, Amazon S3 puede publicar notificaciones para los siguientes eventos:

• Un evento de creación de objeto nuevo: Amazon S3 admite varias API para crear objetos. Puede
solicitar una notificación cuando solo se utiliza una API específica (p. ej., s3:ObjectCreated:Put) o
puede utilizar un comodín (p. ej., s3:ObjectCreated:*) para solicitar una notificación cuando se crea
un objeto independientemente de la API utilizada.

 
• Un evento de eliminación de objeto: Amazon S3 admite eliminaciones de objetos con control de
versiones y sin control de versiones. Para obtener información acerca del control de versiones de
objetos, consulte Control de versiones de objetos (p. 115) y Uso del control de versiones (p. 449).

Puede solicitar una notificación cuando un objeto se elimina o un objeto con control de versiones se
elimina de forma permanente con el tipo de evento s3:ObjectRemoved:Delete. O bien, puede

Versión de API 2006-03-01


551
Amazon Simple Storage Service Guía del desarrollador
Información general

solicitar una notificación cuando se crea un marcador de eliminación para un objeto con control de
versiones con s3:ObjectRemoved:DeleteMarkerCreated. También puede utilizar un comodín
s3:ObjectRemoved:* para solicitar una notificación cada vez que se elimina un objeto. Para obtener
información acerca de la eliminación de objetos con control de versiones, consulte Eliminación de
versiones de objetos (p. 463).

 
• Eventos de restauración de objeto: Amazon S3 admite la restauración de objetos archivados en la clase
de almacenamiento GLACIER. Puede solicitar recibir notificaciones de la finalización de la restauración
de un objeto mediante s3:ObjectRestore:Completed. Puede utilizar s3:ObjectRestore:Post
para solicitar la notificación del inicio de una restauración.

 
• Un evento de pérdida de objeto de Almacenamiento de redundancia reducida (RRS): Amazon S3 envía
un mensaje de notificación cuando detecta que se perdió un objeto de la clase de almacenamiento RRS.

Para ver una lista de los tipos de eventos admitidos, consulte Tipos de eventos admitidos (p. 554).

Amazon S3 admite los siguientes destinos para publicar eventos:

• Tema de Amazon Simple Notification Service (Amazon SNS)

Amazon SNS es un servicio de mensajería push flexible y totalmente administrado. Al utilizar este
servicio, usted puede insertar mensajes en los dispositivos móviles o los servicios distribuidos. Con
Simple Notification Service (SNS, Servicio de notificación simple) puede publicar un mensaje una vez y
enviarlo una o más veces. Un tema de SNS es un punto de acceso al que los destinatarios se pueden
suscribir en forma dinámica para recibir notificaciones de eventos. Para obtener más información acerca
del SNS, consulte la página de detalles del producto Amazon SNS.

 
• Cola de Amazon Simple Queue Service (Amazon SQS)

Amazon SQS es un servicio de colas de mensajes escalable y totalmente administrado. Puede utilizar
Simple Queue Service (SQS, Servicio de cola simple) para enviar cualquier volumen de datos sin
la necesidad de que otros servicios tengan que estar siempre disponibles. En su configuración de
notificación puede solicitar que Amazon S3 publique eventos en una cola de SQS. En la actualidad, la
cola estándar de SQS solo se permite como destino de notificación de eventos de Amazon S3, mientras
que la cola FIFO de SQS no se permite. Para obtener más información acerca del SQS, consulte la
página de detalles del producto Amazon SQS.

 
• AWS Lambda

AWS Lambda es un servicio informático que le facilita la creación de aplicaciones que respondan
rápidamente a nueva información. AWS Lambda ejecuta su código en respuesta a eventos como cargas
de una imagen, la actividad in-app, clics en un sitio web o resultados de dispositivos conectados. Puede
utilizar AWS Lambda para ampliar otros servicios de AWS con lógica personalizada o crear su propio
backend que opera con el nivel de seguridad, desempeño y escala de AWS. Con AWS Lambda, puede
crear fácilmente aplicaciones discretas basadas en eventos que se ejecuten solo cuando sea necesario
y aumenten automáticamente de unas pocas solicitudes al día a miles de solicitudes por segundo.

AWS Lambda puede ejecutar un código personalizado en respuesta a eventos de un bucket de Amazon
S3. Usted carga su código personalizado en AWS Lambda y crea lo que se denomina una función
Lambda. Cuando Amazon S3 detecta un evento de un tipo específico (por ejemplo, un evento de objeto
creado) puede publicar el evento en AWS Lambda e invocar su función en Lambda. En respuesta, AWS
Lambda ejecuta su función. Para obtener más información, consulte la página de detalles del producto
AWS Lambda.
Versión de API 2006-03-01
552
Amazon Simple Storage Service Guía del desarrollador
Cómo habilitar las notificaciones de eventos

En las siguientes secciones se ofrecen más detalles acerca de cómo habilitar las notificaciones de eventos
en un bucket. Los subtemas también brindan tutoriales de ejemplo para ayudarlo a explorar la función de
notificaciones.

• Tutorial de ejemplo 1: Configuración de un bucket para notificaciones (destino de mensaje: tema de SNS
y cola de SQS) (p. 562)
• Tutorial de ejemplo 2: Configuración de un bucket para notificaciones (destino de mensaje: AWS
Lambda) (p. 568)

Cómo habilitar las notificaciones de eventos


La habilitación de las notificaciones es una operación a nivel del bucket; es decir, usted guarda información
de configuración de notificación en el subrecurso notificación asociado a un bucket. Puede utilizar
cualquiera de los siguientes métodos para administrar la configuración de notificación:

• Uso de la consola de Amazon S3

La User Interface (UI, Interfaz de usuario) de la consola le permite establecer una configuración de
notificación en un bucket sin tener que escribir ningún código. Para obtener instrucciones, consulte
¿Cómo puedo habilitar y configurar notificaciones de eventos para un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service.
• Mediante programación con los SDK de AWS
Note

Si lo necesita, también puede realizar las llamadas a la API REST de Amazon S3 directamente
desde su código. Sin embargo, esto puede ser engorroso porque debe escribir el código para
autenticar las solicitudes.

Internamente, tanto la consola como los SDK llaman a la API REST de Amazon S3 para administrar los
subrecursos de notificación asociados al bucket. Para la configuración de notificación con los ejemplos
de SDK de AWS, consulte el enlace del tutorial provisto en la sección anterior.

Independientemente del método que utilice, Amazon S3 guarda la configuración de notificación


como XML en el subrecurso notificación asociado a un bucket. Para obtener información acerca
de los subrecursos de bucket, consulte Opciones de configuración de buckets (p. 58). De forma
predeterminada, las notificaciones no están habilitadas para ningún tipo de evento. Por lo tanto, al
principio el subrecurso notificación guarda las configuraciones vacías.

<NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</NotificationConfiguration>

Para permitir las notificaciones de eventos de determinado tipo, debe reemplazar el XML con la
configuración adecuada que identifique los tipos de eventos que desea que Amazon S3 publique y
el destino donde desea publicar los eventos. Para cada destino, debe añadir la configuración XML
correspondiente. Por ejemplo:
• Publicar mensajes de eventos en una cola de SQS: para configurar una cola de SQS como el destino
de la notificación para uno o más tipos de eventos, añada la QueueConfiguration.

<NotificationConfiguration>
<QueueConfiguration>
<Id>optional-id-string</Id>

Versión de API 2006-03-01


553
Amazon Simple Storage Service Guía del desarrollador
Tipos y destinos de las notificaciones de eventos

<Queue>sqs-queue-arn</Queue>
<Event>event-type</Event>
<Event>event-type</Event>
...
</QueueConfiguration>
...
</NotificationConfiguration>

• Publicar mensajes de eventos en un tema de SNS: para configurar un tema de SNS como el destino
de la notificación para tipos de eventos específicos, añada la TopicConfiguration.

<NotificationConfiguration>
<TopicConfiguration>
<Id>optional-id-string</Id>
<Topic>sns-topic-arn</Topic>
<Event>event-type</Event>
<Event>event-type</Event>
...
</TopicConfiguration>
...
</NotificationConfiguration>

• Invocar la función AWS Lambda y proporcionar un mensaje de evento como argumento: para
configurar una función Lambda como el destino de la notificación para tipos de eventos específicos,
añada la CloudFunctionConfiguration.

<NotificationConfiguration>
<CloudFunctionConfiguration>   
<Id>optional-id-string</Id>   
<Cloudcode>cloud-function-arn</Cloudcode>        
<Event>event-type</Event>      
<Event>event-type</Event>      
...  
</CloudFunctionConfiguration>
...
</NotificationConfiguration>

Para eliminar todas las notificaciones configuradas en un bucket, debe guardar un elemento
<NotificationConfiguration/> vacío en el subrecurso notificación.

Cuando Amazon S3 detecta un evento del tipo específico, publica un mensaje con la información del
evento. Para obtener más información, consulte Estructura de mensaje de evento (p. 568).

Tipos y destinos de las notificaciones de eventos


En esta sección se describen los tipos de notificaciones de eventos admitidos por Amazon S3 y los tipos
de destinos donde se pueden publicar las notificaciones.

Tipos de eventos admitidos


Amazon S3 puede publicar eventos de los siguientes tipos. Debe especificar estos tipos de eventos en la
configuración de notificación.

Tipos de eventos Descripción

s3:ObjectCreated:* Las API de Amazon S3 tales como PUT, POST y COPY pueden
crear un objeto. Con estos tipos de eventos, usted puede
s3:ObjectCreated:Put habilitar la notificación cuando se crea un objeto con una API

Versión de API 2006-03-01


554
Amazon Simple Storage Service Guía del desarrollador
Destinos admitidos

Tipos de eventos Descripción


s3:ObjectCreated:Post específica o puede utilizar el tipo de evento s3:ObjectCreated:*
para solicitar una notificación independientemente de la API que
s3:ObjectCreated:Copy se utilizó para crear un objeto.

s3:ObjectCreated:CompleteMultipartUpload
No recibirá notificaciones de eventos de operaciones no
efectuadas correctamente.

s3:ObjectRemoved:* Con los tipos de eventos ObjectRemoved, puede habilitar la


notificación cuando se elimina un objeto o un lote de objetos de
s3:ObjectRemoved:Delete un bucket.

s3:ObjectRemoved:DeleteMarkerCreatedPuede solicitar una notificación cuando un objeto se elimina


o un objeto con control de versiones se elimina de forma
permanente con el tipo de evento s3:ObjectRemoved:Delete.
O bien, puede solicitar una notificación cuando se crea
un marcador de eliminación para un objeto con control de
versiones con s3:ObjectRemoved:DeleteMarkerCreated.
Para obtener información acerca de la eliminación de objetos
con control de versiones, consulte Eliminación de versiones
de objetos (p. 463). También puede utilizar un comodín
s3:ObjectRemoved:* para solicitar una notificación cada vez
que se elimina un objeto.

No recibirá notificaciones de eventos de eliminaciones


automáticas de políticas de ciclo de vida ni de operaciones no
efectuadas correctamente.

s3:ObjectRestore:Post Mediante los tipos de eventos de restauración de objetos


puede recibir notificaciones cuando se inicia y se completa
s3:ObjectRestore:Completed la restauración de un objeto de la clase de almacenamiento
GLACIER.

Puede utilizar s3:ObjectRestore:Post para solicitar la


notificación del inicio de la restauración de los objetos. Puede
usar s3:ObjectRestore:Completed para solicitar la
notificación de la finalización de una restauración.

s3:ReducedRedundancyLostObject Puede utilizar este tipo de evento para solicitar a Amazon S3


que envíe un mensaje de notificación cuando Amazon S3
detecta que se perdió un objeto de la clase de almacenamiento
RRS.

Destinos admitidos
Amazon S3 puede enviar mensajes de notificación de eventos a los siguientes destinos. Debe especificar
el valor del Amazon Resource Name (ARN, Nombre de recurso de Amazon) de estos destinos en la
configuración de la notificación.

• Publicar mensajes de eventos en un tema de Amazon Simple Notification Service (Amazon SNS)
• Publicar mensajes de eventos en una cola de Amazon Simple Queue Service (Amazon SQS)
Note

Si la cola de destino o el tema tiene habilitado SSE, Amazon S3 necesitará tener acceso a la
clave de KMS asociada para habilitar el cifrado de mensajes.

Versión de API 2006-03-01


555
Amazon Simple Storage Service Guía del desarrollador
Configuración de notificaciones con
filtrado de nombre de clave de objeto

• Publicar mensajes de eventos en AWS Lambda al invocar una función Lambda y proporcionar el
mensaje de evento como un argumento

Amazon S3 debe recibir permisos para publicar mensajes en un tema de Amazon SNS o una cola de
Amazon SQS. Amazon S3 también debe recibir permiso para invocar una función AWS Lambda en
su nombre. Para obtener información acerca de cómo otorgar estos permisos, consulte Concesión de
permisos para publicar mensajes de notificación de eventos a un destino (p. 560).

Configuración de notificaciones con filtrado de


nombre de clave de objeto
Puede configurar las notificaciones para que se filtren por el prefijo y el sufijo del nombre de clave de
objetos. Por ejemplo, puede establecer una configuración para recibir una notificación solo cuando
se añaden archivos de imagen con una extensión “.jpg” a un bucket. O bien, puede establecer una
configuración para enviar una notificación a un tema de Amazon SNS cuando se añade un objeto con el
prefijo "images/" a un bucket y, al mismo tiempo, para enviar notificaciones para objetos con un prefijo
"logs/" en el mismo bucket a una función AWS Lambda.

Puede establecer configuraciones de notificación que utilicen el filtrado de nombre de clave de objeto
en la consola de Amazon S3 y con las API de Amazon S3 a través de los SDK de AWS o las API REST
directamente. Para obtener información acerca de cómo utilizar la IU de la consola para establecer una
configuración de notificación en un bucket, consulte ¿Cómo puedo habilitar y configurar notificaciones de
eventos para un bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Amazon S3 guarda la configuración de notificación como XML en el subrecurso notificación asociado a


un bucket según lo descrito en Cómo habilitar las notificaciones de eventos (p. 553). Puede utilizar la
estructura XML Filter para definir las reglas para filtrar las notificaciones según el prefijo o sufijo de
un nombre de clave de objeto. Para obtener información acerca de los detalles de la estructura XML de
Filter, consulte PUT Bucket notification en la Amazon Simple Storage Service API Reference.

Las configuraciones de notificaciones que utilizan Filter no pueden definir las reglas de filtrado con
prefijos superpuestos, sufijos superpuestos o superposición de prefijo y sufijo. Las siguientes secciones
incluyen ejemplos de configuraciones de notificaciones válidas con filtrado de nombre de clave de objeto y
ejemplos de configuraciones de notificación no válidas debido a la superposición de prefijo/sufijo.

Ejemplos de configuraciones de notificaciones válidas


con filtrado de nombre de clave de objeto
La siguiente configuración de notificación incluye una configuración de cola que identifica una cola de
Amazon SQS donde Amazon S3 puede publicar eventos del tipo s3:ObjectCreated:Put. Los eventos
se publicarán siempre que se envíe una solicitud PUT para un objeto con un prefijo de images/ y un sufijo
jpg a un bucket.

<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images/</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>

Versión de API 2006-03-01


556
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuraciones de notificaciones
válidas con filtrado de nombre de clave de objeto

</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:s3notificationqueue</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
</NotificationConfiguration>

La siguiente configuración de notificación tiene varios prefijos no superpuestos. La configuración define


que las notificaciones para solicitudes PUT en la carpeta images/ irán a la cola A, mientas que las
notificaciones para solicitudes PUT en la carpeta logs/ irán a la cola B.

<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images/</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
<QueueConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>logs/</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
</NotificationConfiguration>

La siguiente configuración de notificación tiene varios sufijos no superpuestos. La configuración define que
todas las imágenes .jpg recientemente añadidas al bucket serán procesadas por la función de nube A de
Lambda y todas las imágenes .png recientemente añadidas serán procesadas por la función de nube B.
Los sufijos .png y .jpg no se superponen aunque tengan la misma última letra. Dos sufijos se consideran
superpuestos si una determinada cadena puede finalizar con ambos sufijos. Una cadena no puede finalizar
con .png y .jpg; por lo que los sufijos en la configuración de ejemplo no son sufijos superpuestos.

<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>.jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</Cloudcode>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
<CloudFunctionConfiguration>

Versión de API 2006-03-01


557
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuraciones de notificación
con superposición de prefijo/sufijo no válida

<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>.png</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</Cloudcode>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
</NotificationConfiguration>

Las configuraciones de notificación que utilizan Filter no pueden definir reglas de filtrado con prefijos
superpuestos para los mismos tipos de eventos, a menos que los prefijos superpuestos se utilicen con
sufijos que no se superponen. La siguiente configuración de ejemplo muestra cómo los objetos creados
con un prefijo común pero sufijos no superpuestos se pueden enviar a diferentes destinos.

<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>.jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</Cloudcode>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
<CloudFunctionConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>.png</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</Cloudcode>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
</NotificationConfiguration>

Ejemplos de configuraciones de notificación con


superposición de prefijo/sufijo no válida
Las configuraciones de notificación que utilizan Filter, en su mayoría, no pueden definir reglas de filtrado
con prefijos superpuestos, sufijos superpuestos o combinaciones de prefijos y sufijos superpuestos para

Versión de API 2006-03-01


558
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuraciones de notificación
con superposición de prefijo/sufijo no válida

los mismos tipos de eventos. (Puede incluir prefijos superpuestos siempre y cuando los sufijos no se
superpongan. Para ver un ejemplo, consulte Configuración de notificaciones con filtrado de nombre de
clave de objeto (p. 556)).

Puede utilizar filtros de nombre de clave de objeto superpuestos con diferentes tipos de eventos. Por
ejemplo, puede crear una configuración de notificación que utilice el prefijo image/ para el tipo de evento
ObjectCreated:Put y el prefijo image/ para el tipo de evento ObjectDeleted:*.

Recibirá un mensaje de error si intenta guardar una configuración de notificación que tiene filtros
de nombre superpuestos no válidos para los mismos tipos de eventos, cuando utiliza la consola de
Amazon S3 de AWS o cuando utiliza la API de Amazon S3. En esta sección se muestran ejemplos de
configuraciones de notificación que no son válidas debido a los filtros de nombre superpuestos.

Se asume que cualquier regla de configuración de notificación existente tiene un prefijo y un sufijo
predeterminados que coinciden con cualquier otro prefijo y sufijo respectivamente. La siguiente
configuración de notificación no es válida ya que tiene prefijos superpuestos, donde el prefijo raíz se
superpone con cualquier otro prefijo. (Lo mismo sucedería si utilizáramos un sufijo en lugar de un prefijo en
este ejemplo. El sufijo raíz se superpone con cualquier otro sufijo).

<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic>
<Event>s3:ObjectCreated:*</Event>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>

La siguiente configuración de notificación no es válida dado que incluye sufijos superpuestos. Dos sufijos
se consideran superpuestos si una determinada cadena puede finalizar con ambos sufijos. Una cadena
puede finalizar con jpg y pg, por lo que los sufijos se superponen. (Lo mismo sucede para los prefijos, dos
prefijos se consideran superpuestos si una determinada cadena puede comenzar con ambos prefijos).

<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
<Event>s3:ObjectCreated:Put</Event>
<Filter>
<S3Key>
<FilterRule>

Versión de API 2006-03-01


559
Amazon Simple Storage Service Guía del desarrollador
Concesión de permisos para publicar mensajes
de notificación de eventos a un destino

<Name>suffix</Name>
<Value>pg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration

La siguiente configuración de notificación no es válida dado que incluye prefijos y sufijos superpuestos.

<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
<Event>s3:ObjectCreated:Put</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>

Concesión de permisos para publicar mensajes de


notificación de eventos a un destino
Antes de que Amazon S3 pueda publicar mensajes en un destino, debe concederle al principal de Amazon
S3 los permisos necesarios para llamar a la API relevante para que publique mensajes en un tema de
SNS, una cola de SQS o una función Lambda.

Concesión de permisos para invocar una función AWS


Lambda
Amazon S3 publica mensajes de eventos en AWS Lambda al invocar una función Lambda y proporcionar
el mensaje de evento como un argumento.

Cuando utiliza la consola de Amazon S3 para configurar notificaciones de eventos en un bucket de


Amazon S3 para una función Lambda, la consola de Amazon S3 configura los permisos necesarios en la

Versión de API 2006-03-01


560
Amazon Simple Storage Service Guía del desarrollador
Concesión de permisos para publicar mensajes
en un tema de SNS o una cola de SQS

función Lambda para que Amazon S3 tenga permisos para invocar la función en el bucket. Para obtener
más información, consulte ¿Cómo puedo habilitar y configurar notificaciones de eventos para un bucket de
S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.

También puede otorgarle a Amazon S3 permisos de AWS Lambda para invocar su función Lambda. Para
obtener más información, consulte Tutorial: uso de AWS Lambda con Amazon S3 en la AWS Lambda
Developer Guide.

Concesión de permisos para publicar mensajes en un


tema de SNS o una cola de SQS
Debe asociar una política de IAM al tema de SNS o la cola de SQS de destino para otorgarle a Amazon S3
permisos para publicar mensajes en el tema de SNS o la cola de SQS.

Ejemplo de una política de IAM para asociar al tema de SNS de destino.

{
"Version": "2008-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SNS:Publish"
],
"Resource": "arn:aws:sns:REGION:ACCOUNT-ID:TOPICNAME",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
}
]
}

Ejemplo de una política de IAM para asociar a la cola de SQS de destino.

{
"Version": "2008-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "arn:aws:sqs:REGION:ACCOUNT-ID:QUEUENAMEHERE",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
}
]
}

Versión de API 2006-03-01


561
Amazon Simple Storage Service Guía del desarrollador
Tutorial de ejemplo 1

Tenga en cuenta que tanto para las políticas de IAM de Amazon SNS como de Amazon SQS, puede
especificar la condición StringLike en la política, en lugar de la condición ArnLike.

"Condition": {       
"StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}

Ejemplo de política de claves que se asocia a la clave de KMS asociada si la cola de SQS tiene habilitado
SSE.

{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}

La política concede a la entidad principal del servicio de Amazon S3 permiso para las acciones específicas
de KMS que son necesarias para cifrar los mensajes que se añaden a la cola.

Para ver un ejemplo de cómo asociar una política a un tema de SNS o una cola de SQS, consulte Tutorial
de ejemplo 1: Configuración de un bucket para notificaciones (destino de mensaje: tema de SNS y cola de
SQS) (p. 562).

Para obtener más información acerca de estos permisos, consulte los siguientes temas:

• Ejemplos de control de acceso de Amazon SNS en la Guía para desarrolladores de Amazon Simple
Notification Service
• Control de acceso mediante AWS Identity and Access Management (IAM) en la Guía para
desarrolladores de Amazon Simple Queue Service

Tutorial de ejemplo 1: Configuración de un bucket


para notificaciones (destino de mensaje: tema de
SNS y cola de SQS)
Temas
• Resumen de tutorial (p. 563)
• Paso 1: Creación de un tema de Amazon SNS (p. 563)
• Paso 2: Creación de una cola de Amazon SQS (p. 564)
• Paso 3: Adición de una configuración de notificación a su bucket (p. 565)
• Paso 4: Prueba de la configuración (p. 568)

Versión de API 2006-03-01


562
Amazon Simple Storage Service Guía del desarrollador
Resumen de tutorial

Resumen de tutorial
En este tutorial usted añade una configuración de notificación en un bucket donde le solicita lo siguiente a
Amazon S3:

• que publique eventos de tipo s3:ObjectCreated:* en una cola de Amazon SQS.


• que publique eventos de tipo s3:ReducedRedundancyLostObject en un tema de Amazon SNS.

Para obtener información acerca de la configuración de notificación, consulte Configuración de


notificaciones de eventos de Amazon S3 (p. 551).

Puede realizar todos estos pasos con la consola sin escribir ningún código. Además, se brindan ejemplos
de códigos, mediante el uso de los SDK de AWS para Java y .NET para que pueda añadir configuraciones
de notificación mediante programación.

En este tutorial hará lo siguiente:

1. Crear un tema de Amazon SNS.

Con la consola de Amazon SNS debe crear un tema de SNS y suscribirse al tema para recibir cualquier
evento que se publique allí. Debe especificar el correo electrónico como protocolo de comunicación.
Después de crear un tema, Amazon SNS enviará un correo electrónico. Debe hacer clic en el enlace del
correo electrónico para confirmar la suscripción al tema.

Debe asociar una política de acceso al tema para otorgarle a Amazon S3 permiso para publicar
mensajes.
2. Cree una cola de Amazon SQS.

Con la consola de Amazon SQS, cree una cola de SQS. Puede acceder a cualquier mensaje que
Amazon S3 envía a la cola mediante programación. Pero para este tutorial, usted verificará los
mensajes de notificación en la consola.

Debe asociar una política de acceso al tema para otorgarle a Amazon S3 permiso para publicar
mensajes.
3. Añada una configuración de notificación a un bucket.

Paso 1: Creación de un tema de Amazon SNS


Siga estos pasos para crear y suscribirse a un tema de Amazon Simple Notification Service (Amazon
SNS).

1. Use la consola de Amazon SNS, para crear un tema. Para obtener instrucciones, consulte Creación de
un tema en la Guía para desarrolladores de Amazon Simple Notification Service.
2. Suscríbase al tema. Para este ejercicio, utilice el correo electrónico como el protocolo de
comunicación. Para obtener instrucciones, consulte Suscripción a un tema en la Guía para
desarrolladores de Amazon Simple Notification Service.

Recibirá un correo electrónico donde deberá confirmar su suscripción al tema. Confirme la suscripción.
3. Sustituya la política de acceso asociada al tema por la siguiente política. Debe proporcionar el nombre
de recurso de Amazon (ARN) del tema de SNS y el nombre del bucket para actualizar la política:

{
"Version": "2008-10-17",
"Id": "example-ID",

Versión de API 2006-03-01


563
Amazon Simple Storage Service Guía del desarrollador
Paso 2: Creación de una cola de Amazon SQS

"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"AWS":"*"
},
"Action": [
"SNS:Publish"
],
"Resource": "SNS-topic-ARN",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
}
]
}

4. Apunte el ARN del tema.

El tema de SNS que creó es otro recurso en su cuenta de AWS y tiene un Amazon Resource Name
(ARN, Nombre de recurso de Amazon) único. Necesitará este ARN en el siguiente paso. El ARN
tendrá el siguiente formato:

arn:aws:sns:aws-region:account-id:topic-name

Paso 2: Creación de una cola de Amazon SQS


Siga estos pasos para crear y suscribirse a una cola de Amazon Simple Queue Service (Amazon SQS).

1. Use la consola de Amazon SQS, para crear una cola. Para obtener instrucciones, consulte
Introducción a Amazon SQS en la Guía para desarrolladores de Amazon Simple Queue Service.
2. Reemplace la política de acceso asociada a la cola con la siguiente política: en la consola de
SQS, seleccione la cola y en la pestaña Permissions (Permisos) haga clic en Edit Policy Document
(Advanced) (Editar documento de política [avanzado]).

{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"AWS":"*"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "SQS-queue-ARN",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
}
]
}

3. (Opcional) Si la cola de Amazon SQS tiene habilitado el cifrado del lado del servidor (SSE), añada
la siguiente política a la clave maestra del cliente (CMK) del AWS Key Management Service
personalizado asociado (AWS KMS). Debe añadir la política a una CMK personalizada, ya que la CMK

Versión de API 2006-03-01


564
Amazon Simple Storage Service Guía del desarrollador
Paso 3: Adición de una configuración
de notificación a su bucket

administrada por AWS predeterminada de Amazon SQS no se puede modificar. Para obtener más
información acerca del uso de SSE para Amazon SQS con AWS KMS, consulte Protección de datos
con el cifrado en el servidor (SSE) y AWS KMS.

{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}

4. Anote el ARN de la cola.

La cola de SQS que creó es otro recurso en su cuenta de AWS y tiene un nombre de recurso de
Amazon (ARN) único. Necesitará este ARN en el siguiente paso. El ARN tendrá el siguiente formato:

arn:aws:sqs:aws-region:account-id:queue-name

Paso 3: Adición de una configuración de notificación a


su bucket
Puede habilitar las notificaciones del bucket con la consola de Amazon S3 o mediante programación con
los SDK de AWS. Seleccione cualquiera de las opciones para configurar las notificaciones en su bucket.
En esta sección se brindan ejemplos de códigos en los que se utilizan los SDK de AWS para Java y .NET.

Paso 3 (opción a): Activación de las notificaciones en un bucket


mediante el uso de la consola
Con la consola de Amazon S3, añada una configuración de notificación para solicitarle a Amazon S3 que
haga lo siguiente:

• Publique eventos de tipo s3:ObjectCreated:* en su cola de Amazon SQS.


• Publique eventos de tipo s3:ReducedRedundancyLostObject en su tema de Amazon SNS.

Después de guardar la configuración de notificación, Amazon S3 publicará un mensaje de prueba que


recibirá por correo electrónico.

Para obtener instrucciones, consulte ¿Cómo puedo habilitar y configurar notificaciones de eventos para un
bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Versión de API 2006-03-01


565
Amazon Simple Storage Service Guía del desarrollador
Paso 3: Adición de una configuración
de notificación a su bucket

Paso 3 (opción b): Activación de las notificaciones en un bucket


mediante el uso de AWS SDK para .NET
El siguiente ejemplo de código C# brinda un listado completo de códigos que añade una configuración de
notificación a un bucket. Deberá actualizar el código y proporcionar el nombre de su bucket y el ARN del
tema de SNS. Para obtener información acerca de cómo crear y probar una muestra funcional, consulte
Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

Example

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class EnableNotificationsTest
{
private const string bucketName = "*** bucket name ***";
private const string snsTopic = "*** SNS topic ARN ***";
private const string sqsQueue = "*** SQS topic ARN ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
EnableNotificationAsync().Wait();
}

static async Task EnableNotificationAsync()


{
try
{
PutBucketNotificationRequest request = new PutBucketNotificationRequest
{
BucketName = bucketName
};

TopicConfiguration c = new TopicConfiguration


{
Events = new List<EventType> { EventType.ObjectCreatedCopy },
Topic = snsTopic
};
request.TopicConfigurations = new List<TopicConfiguration>();
request.TopicConfigurations.Add(c);
request.QueueConfigurations = new List<QueueConfiguration>();
request.QueueConfigurations.Add(new QueueConfiguration()
{
Events = new List<EventType> { EventType.ObjectCreatedPut },
Queue = sqsQueue
});

PutBucketNotificationResponse response = await


client.PutBucketNotificationAsync(request);
}
catch (AmazonS3Exception e)
{

Versión de API 2006-03-01


566
Amazon Simple Storage Service Guía del desarrollador
Paso 3: Adición de una configuración
de notificación a su bucket

Console.WriteLine("Error encountered on server. Message:'{0}' ",


e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown error encountered on server. Message:'{0}' ",
e.Message);
}
}
}
}

Paso 3 (opción c): Activación de notificaciones en un bucket con


AWS SDK for Java
El siguiente ejemplo muestra cómo añadir una configuración de notificación a un bucket. Para obtener
instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de ejemplos de
código Java de Amazon S3 (p. 706).

Example

import com.amazonaws.AmazonServiceException;
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.*;

import java.io.IOException;
import java.util.EnumSet;

public class EnableNotificationOnABucket {

public static void main(String[] args) throws IOException {


String bucketName = "*** Bucket name ***";
Regions clientRegion = Regions.DEFAULT_REGION;
String snsTopicARN = "*** SNS Topic ARN ***";
String sqsQueueARN = "*** SQS Queue ARN ***";

try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
BucketNotificationConfiguration notificationConfiguration = new
BucketNotificationConfiguration();

// Add an SNS topic notification.


notificationConfiguration.addConfiguration("snsTopicConfig",
new TopicConfiguration(snsTopicARN,
EnumSet.of(S3Event.ObjectCreated)));

// Add an SQS queue notification.


notificationConfiguration.addConfiguration("sqsQueueConfig",
new QueueConfiguration(sqsQueueARN,
EnumSet.of(S3Event.ObjectCreated)));

// Create the notification configuration request and set the bucket


notification configuration.
SetBucketNotificationConfigurationRequest request = new
SetBucketNotificationConfigurationRequest(

Versión de API 2006-03-01


567
Amazon Simple Storage Service Guía del desarrollador
Paso 4: Prueba de la configuración

bucketName, notificationConfiguration);
s3Client.setBucketNotificationConfiguration(request);
} 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();
}
}
}

Paso 4: Prueba de la configuración


Ahora puede cargar un objeto en su bucket y verificar la notificación de eventos en la consola de Amazon
SQS para probar la configuración. Para obtener instrucciones, consulte Recibir un mensaje en la sección
"Introducción" de la Guía para desarrolladores de Amazon Simple Queue Service.

Tutorial de ejemplo 2: Configuración de un bucket


para notificaciones (destino de mensaje: AWS
Lambda)
Para ver un ejemplo de uso de las notificaciones de Amazon S3 con AWS Lambda, consulte Uso de AWS
Lambda con Amazon S3 en la AWS Lambda Developer Guide.

Estructura de mensaje de evento


El mensaje de notificación que Amazon S3 envía para publicar un evento está en formato JSON. La
estructura del mensaje JSON se muestra en el ejemplo siguiente.

Tenga en cuenta lo siguiente sobre el ejemplo:

• El valor de clave eventVersion contiene una versión principal y una versión secundaria con el formato
<major>.<minor>.

La versión principal se incrementa si Amazon S3 realiza un cambio en la estructura del evento que no es
compatible con versiones anteriores. Esto incluye eliminar un campo JSON existente o cambiar la forma
en que se representa el contenido de un campo (por ejemplo, un formato de fecha).

La versión secundaria se incrementa si Amazon S3 añade campos a la estructura del evento. Esto
puede ocurrir si se proporciona información nueva para algunos o todos los eventos existentes o
si la información nueva solo se proporciona para los tipos de eventos nuevos que se añaden. Las
aplicaciones deben pasar por alto los campos nuevos para mantener la compatibilidad con versiones
secundarias posteriores de la estructura de eventos.

Si se introducen tipos de eventos nuevos, pero la estructura del evento no se modifica de ninguna otra
forma, la versión del evento no cambia.

Para asegurarse de que las aplicaciones pueden analizar la estructura de eventos correctamente, le
recomendamos que haga una comparación de igualdad con el número de la versión principal. Para

Versión de API 2006-03-01


568
Amazon Simple Storage Service Guía del desarrollador
Estructura de mensaje de evento

asegurarse de que los campos previstos por la aplicación están presentes, también recomendamos
realizar una comparación mayor o igual que con la versión secundaria.

 
• El valor de clave responseElements es útil si desea realizar un seguimiento de una solicitud con
la ayuda de AWS Support. Tanto x-amz-request-id como x-amz-id-2 ayudan a Amazon S3 a
rastrear una solicitud individual. Estos valores son los mismos que los que devuelve Amazon S3 en
respuesta a la solicitud que inicia los eventos, por lo que se pueden utilizar para emparejar el evento con
la solicitud.

 
• La clave s3 brinda información acerca del bucket y el objeto involucrados en el evento. El valor del
nombre de la clave de objeto está codificado como URL. Por ejemplo, "red flower.jpg" se convierte en
"red+flower.jpg" (Amazon S3 devuelve "application/x-www-form-urlencoded" como tipo de
contenido en la respuesta).

 
• La clave sequencer permite determinar la secuencia de los eventos. No se garantiza que las
notificaciones de eventos lleguen en el orden en que se produjeron los eventos. Sin embargo, las
notificaciones de eventos que crean objetos (PUT) y eliminan objetos incluyen un sequencer, que se
puede utilizar para determinar el orden de los eventos para una determinada clave de objeto.

Si compara las cadenas de sequencer de dos notificaciones de eventos en la misma clave de objeto,
la notificación del evento con el mayor valor hexadecimal de sequencer es el evento que se produjo
más tarde. Si utiliza notificaciones de eventos para mantener otra base de datos u otro índice de sus
objetos de Amazon S3, probablemente desee comparar y guardar los valores de sequencer a medida
que procesa cada notificación de evento.

Tenga en cuenta lo siguiente:


• No es posible utilizar sequencer para determinar el orden de los eventos en diferentes claves de
objetos.
• El secuenciador puede ser de diferentes longitudes. Por lo tanto, para comparar estos valores, primero
debe agregar ceros a la izquierda del valor más corto y, a continuación, realizar una comparación
lexicográfica.

 
• La clave glacierEventData solo es visible de los eventos s3:ObjectRestore:Completed.

 
• La clave restoreEventData contiene atributos relacionados con la solicitud de restauración.

El siguiente ejemplo muestra la versión 2.1 de la estructura JSON del mensaje de eventos, que es la
versión que actualmente usa Amazon S3.

{
"Records":[
{
"eventVersion":"2.1",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z,
when Amazon S3 finished processing the request,
"eventName":"event-type",
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
"requestParameters":{

Versión de API 2006-03-01


569
Amazon Simple Storage Service Guía del desarrollador
Estructura de mensaje de evento

"sourceIPAddress":"ip-address-where-request-came-from"
},
"responseElements":{
"x-amz-request-id":"Amazon S3 generated request ID",
"x-amz-id-2":"Amazon S3 host that processed the request"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"ID found in the bucket notification configuration",
"bucket":{
"name":"bucket-name",
"ownerIdentity":{
"principalId":"Amazon-customer-ID-of-the-bucket-owner"
},
"arn":"bucket-ARN"
},
"object":{
"key":"object-key",
"size":object-size,
"eTag":"object eTag",
"versionId":"object version if bucket is versioning-enabled, otherwise
null",
"sequencer": "a string representation of a hexadecimal value used to
determine event sequence,
only used with PUTs and DELETEs"
}
},
"glacierEventData": {
"restoreEventData": {
"lifecycleRestorationExpiryTime": "The time, in ISO-8601 format, for
example, 1970-01-01T00:00:00.000Z, of Restore Expiry",
"lifecycleRestoreStorageClass": "Source storage class for restore"
}
}
}
]
}

El siguiente ejemplo muestra la versión 2.0 de la estructura del mensaje de eventos, que ya no se utiliza en
Amazon S3.

{
"Records":[
{
"eventVersion":"2.0",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z,
when S3 finished processing the request,
"eventName":"event-type",
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
"requestParameters":{
"sourceIPAddress":"ip-address-where-request-came-from"
},
"responseElements":{
"x-amz-request-id":"Amazon S3 generated request ID",
"x-amz-id-2":"Amazon S3 host that processed the request"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"ID found in the bucket notification configuration",
"bucket":{

Versión de API 2006-03-01


570
Amazon Simple Storage Service Guía del desarrollador
Estructura de mensaje de evento

"name":"bucket-name",
"ownerIdentity":{
"principalId":"Amazon-customer-ID-of-the-bucket-owner"
},
"arn":"bucket-ARN"
},
"object":{
"key":"object-key",
"size":object-size,
"eTag":"object eTag",
"versionId":"object version if bucket is versioning-enabled, otherwise
null",
"sequencer": "a string representation of a hexadecimal value used to
determine event sequence,
only used with PUTs and DELETEs"
}
}
}
]
}

A continuación se brindan mensajes de ejemplo:

• Mensaje de prueba: cuando configura una notificación de evento en un bucket, Amazon S3 envía el
siguiente mensaje de prueba:

{
"Service":"Amazon S3",
"Event":"s3:TestEvent",
"Time":"2014-10-13T15:57:02.089Z",
"Bucket":"bucketname",
"RequestId":"5582815E1AEA5ADF",
"HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE"
}

• Mensaje de ejemplo cuando se crea un objeto con la solicitud PUT: el siguiente mensaje es un ejemplo
de un mensaje que Amazon S3 envía para publicar un evento s3:ObjectCreated:Put:

{
"Records":[
{
"eventVersion":"2.1",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":"1970-01-01T00:00:00.000Z",
"eventName":"ObjectCreated:Put",
"userIdentity":{
"principalId":"AIDAJDPLRKLG7UEXAMPLE"
},
"requestParameters":{
"sourceIPAddress":"127.0.0.1"
},
"responseElements":{
"x-amz-request-id":"C3D13FE58DE4C810",
"x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/
JRWeUWerMUE5JgHvANOjpD"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"testConfigRule",
"bucket":{
"name":"mybucket",
"ownerIdentity":{

Versión de API 2006-03-01


571
Amazon Simple Storage Service Guía del desarrollador
Estructura de mensaje de evento

"principalId":"A3NL1KOZZKExample"
},
"arn":"arn:aws:s3:::mybucket"
},
"object":{
"key":"HappyFace.jpg",
"size":1024,
"eTag":"d41d8cd98f00b204e9800998ecf8427e",
"versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
"sequencer":"0055AED6DCD90281E5"
}
}
}
]
}

Versión de API 2006-03-01


572
Amazon Simple Storage Service Guía del desarrollador
Tipos de replicación de objetos

Replicación
La replicación habilita la copia asincrónica y automática de los objetos entre buckets. Los buckets que
están configurados para replicación de objetos pueden pertenecer a la misma cuenta de o a cuentas
diferentes. Puede copiar objetos entre diferentes regiones de AWS o dentro de la misma región.

Para permitir la replicación de objetos, utilice una configuración de nivel de bucket. Añada la configuración
de replicación al bucket de origen. La configuración mínima, debe proporcionar lo siguiente:

• El bucket de destino donde desea que Amazon S3 replique los objetos


• En AWS Identity and Access Management (IAM) una función de que Amazon S3 pueda asumir para
replicar objetos en su nombre

Están disponibles opciones de configuración adicionales. Para obtener más información, consulte
Configuraciones de replicación adicionales (p. 590).

Tipos de replicación de objetos


Puede replicar objetos entre diferentes regiones de AWS o dentro de la misma región de AWS.

• Replicación entre regiones (CRR) se utiliza para copiar objetos entre buckets de Amazon S3 en
diferentes regiones de AWS.
• Replicación en la misma región (SRR) se utiliza para copiar objetos entre buckets de Amazon S3 en la
misma región de AWS.

Cuando utilizar la replicación


La replicación puede ayudarle a hacer lo siguiente:

• Replicar objetos mientras se retienen metadatos—Replicar objetos a través de funciones de AWS


Lambda puede resultar de utilidad. No obstante, no retienen metadatos de objetos como la hora
de creación del objeto original y los ID de versión La replicación ofrece una forma más simple y
automatizada de replicar objetos que retienen estos metadatos.

 
• Replicar objetos en diferentes clases de almacenamiento—Puede utilizar la replicación colocando
objetos directamente en Glacier, DEEP ARCHIVE u otra clase de almacenamiento en el bucket de
destino. También puede replicar sus datos en la misma clase de almacenamiento y utilizar las políticas
de ciclo de vida en el bucket de destino para mover objetos a una clase de almacenamiento con menos
actividad conforme adquiere antigüedad.

 
• Mantener copias de objetos con distintos propietarios: independientemente de quién sea el propietario
del bucket de origen o del objeto de origen, puede indicar a Amazon S3 que cambie la titularidad de
la réplica a la cuenta de AWS que posee el bucket de destino. Esto se conoce como la opción de
invalidación del propietario. Puede usar esta opción para restringir el acceso a las réplicas de objetos.

Cuándo se debe usar la CRR


La replicación entre regiones puede ayudarle a hacer lo siguiente:

Versión de API 2006-03-01


573
Amazon Simple Storage Service Guía del desarrollador
Cuándo se debe usar la SRR

• Cumplir requisitos de cumplimiento: aunque Amazon S3 almacena sus datos en diversas zonas de
disponibilidad alejadas geográficamente, de forma predeterminada los requisitos de conformidad pueden
exigir que almacene los datos en ubicaciones aún más alejadas. La replicación entre regiones permite
replicar los datos entre regiones de AWS alejadas para cumplir con estos requisitos de conformidad.

 
• Minimizar latencia: si sus clientes están en dos ubicaciones geográficas, puede minimizar la latencia
en el acceso a los objetos manteniendo copias de los objetos en regiones de AWS que estén
geográficamente más cerca de sus usuarios.

 
• Aumentar la eficiencia operativa: si tiene clústeres informáticos en dos regiones diferentes de AWS que
analizan el mismo conjunto de objetos, puede elegir mantener copias de objetos en dichas regiones.

Cuándo se debe usar la SRR


La replicación en la misma región puede ayudarle a hacer lo siguiente:

• Agregar registros en un solo bucket—Si almacena registros en varios buckets o en varias cuentas,
puede fácilmente replicar registros en un solo bucket en la región. Esto permite un procesamiento más
simple de los registros por parte de una sola cuenta

 
• Configurar replicación en directo entre las cuentas del desarrollador y de prueba: si usted o sus clientes
tienen cuentas de prueba o de desarrollador que utilizan los mismos datos, puede replicar objetos entre
varias cuentas al mismo tiempo que mantiene metadatos de objetos implementando reglas de SRR.

 
• Cumplir con las leyes de soberanía de datos: con frecuencia a los clientes se les exige que almacenen
datos en cuentas de AWS separadas al mismo tiempo que es les prohíbe dejar que los datos salgan
de una determinada región. La replicación en la misma región puede ayudarle a hacer una copia de
seguridad de los datos críticos cuando las regulaciones de cumplimiento no permiten que los datos
salgan de su país.

Requisitos de replicación
La replicación requiere lo siguiente:

• El propietario del bucket de origen debe tener habilitadas las regiones de AWS de origen y de destino en
su cuenta. El propietario del bucket de destino debe tener la región de destino habilitada en su cuenta.
Para obtener más información sobre cómo habilitar y deshabilitar una región de AWS, consulte Regiones
y puntos de enlace de AWS en la AWS General Reference.
• Ambos buckets de origen y destino deben tener habilitado el control de versiones.
• Amazon S3 debe tener permisos para replicar objetos en su nombre desde el bucket de origen en el
bucket de destino.
• Si el propietario del bucket de origen no posee el objeto en el bucket, el propietario del objeto debe
conceder al propietario del bucket los permisos READ y READ_ACP con la lista de control de acceso ACL
del objeto. Para obtener más información, consulte Administración de acceso con ACL (p. 418).
• Si el bucket de origen tiene habilitado un bloqueo de objeto de Amazon S3, el bucket de destino debe
tener también el bloqueo de objeto habilitado. Para obtener más información, consulte Bloqueo de
objetos mediante el bloqueo de objetos de Amazon S3 (p. 472).

Versión de API 2006-03-01


574
Amazon Simple Storage Service Guía del desarrollador
¿Qué replica Amazon S3?

Para habilitar la replicación en un bucket que tiene habilitado el bloqueo de objetos, póngase en contacto
con AWS Support.

Para obtener más información, consulte Información general de configuración de la replicación (p. 578).

Si va a definir la configuración de replicación en un escenario de replicación entre cuentas en el que los


buckets de origen y destino pertenecen a diferentes cuentas de AWS, se aplica el siguiente requisito:

• El propietario del bucket de destino debe otorgar al propietario del bucket de origen permisos para
replicar objetos con una política de bucket. Para obtener más información, consulte Concesión
de permisos cuando los buckets de origen y destino son propiedad de diferentes cuentas de
AWS (p. 589).

¿Qué replica Amazon S3?


Amazon S3 replica solo elementos específicos en buckets que están configurados para la replicación.

¿Qué se replica?
Amazon S3 replica los siguientes elementos:

• Objetos creados después de añadir una configuración de replicación, con las excepciones que se
describen en la próxima sección.

 
• Objetos no cifrados y objetos cifrados con claves administradas por Amazon S3 (SSE-S3) o claves
administradas por AWS KMS (SSE-KMS), aunque debe habilitar explícitamente la opción para replicar
objetos cifrados con las claves de KMS. La copia replicada del objeto también se cifra con el mismo tipo
de cifrado del lado del servidor que se utilizó para el objeto de origen. Para obtener más información
acerca del cifrado del lado del servidor, consulte Protección de datos con el cifrado del lado del
servidor (p. 275).

 
• Metadatos de objetos.

 
• Solo los objetos en el bucket de origen para los que el propietario del bucket tiene permisos para leer
objetos y listas de control de acceso (ACL). Para obtener más información acerca de la propiedad de
recursos, consulte Propiedad de los buckets y objetos de Amazon S3 (p. 313).

 
• El objeto ACL se actualiza, a menos que ordene a Amazon S3 que cambie la propiedad de la réplica
cuando los buckets de origen y destino no son propiedad de las mismas cuentas. Para obtener
más información, consulte Configuración de replicación adicional: cambiar el propietario de la
réplica (p. 591)).

Amazon S3 puede tardar tiempo en sincronizar las dos ACL. Esto se aplica solo a los objetos creados
luego de añadir una configuración de replicación al bucket.

Versión de API 2006-03-01


575
Amazon Simple Storage Service Guía del desarrollador
Elementos que no se replican

• Etiquetas de objeto, si las hay.

 
• Información de retención de bloqueo de objetos Amazon S3, si la hay. Cuando Amazon S3 replica los
objetos que tienen aplicada información de retención, aplica estos mismos controles de retención a
las réplicas, anulando el período de retención predeterminado configurado en el bucket de destino. Si
no tiene controles de retención aplicados a los objetos en el bucket de origen y replica en un bucket
de destino que tiene establecido un período de retención predeterminado, el período de retención
predeterminado del bucket de destino se aplica a las réplicas del objeto. Para obtener más información,
consulte Bloqueo de objetos mediante el bloqueo de objetos de Amazon S3 (p. 472).

Cómo afectan las operaciones de eliminación a la replicación


Si elimina un objeto del bucket de origen, ocurre lo siguiente:

• Si realiza una solicitud DELETE sin especificar un ID de versión del objeto, Amazon S3 añade un
marcador de eliminación. Amazon S3 se ocupa del marcador de eliminación de la siguiente manera:
• Si utiliza la última versión de la configuración de replicación (es decir, si especifica el elemento
Filter en una regla de configuración de replicación), Amazon S3 no replica el marcador de
eliminación.
• Si no especifica el elemento Filter, Amazon S3 da por hecho que la configuración de la replicación
es una versión anterior V1. En la versión anterior, Amazon S3 realizaba la replicación de marcadores
de eliminación de manera diferente. Para obtener más información, consulte Compatibilidad con
versiones anteriores (p. 586).
• Si especifica un ID de versión de objeto para eliminar en una solicitud DELETE, Amazon S3 elimina
esa versión del objeto en el bucket de origen. Pero no replica la eliminación en el bucket de destino. En
otras palabras, no elimina la misma versión del objeto del bucket de destino. Esto protege los datos de
eliminaciones malintencionadas.

Elementos que no se replican


Amazon S3 no replica lo siguiente:

• Los objetos ya existentes antes de añadir la configuración de replicación al bucket. En otras palabras,
Amazon S3 no replica los objetos retroactivamente.

 
• Los objetos cifrados siguientes:
• Los objetos creados con cifrado de lado servidor mediante claves de cifrado proporcionadas por los
clientes (SSE-C).
• Los objetos creados con el cifrado del lado del servidor mediante las claves de cifrado administradas
por AWS KMS (SSE-KMS). De forma predeterminada, Amazon S3 no replica los objetos cifrados
con claves de KMS. Sin embargo, puede habilitar explícitamente la replicación de estos objetos en la
configuración de replicación y proporcionar información relevante para que Amazon S3 pueda replicar
estos objetos.

Para obtener más información acerca del cifrado del lado del servidor, consulte Protección de datos con
el cifrado del lado del servidor (p. 275).

 
• Objetos que se almacenan en clases de almacenamiento GLACIER o DEEP_ARCHIVE. Para obtener
más información acerca del servicio Amazon S3 Glacier, consulte la Guía para desarrolladores de
Amazon S3 Glacier.
Versión de API 2006-03-01
576
Amazon Simple Storage Service Guía del desarrollador
Temas relacionados

 
• Los objetos del bucket de origen para los que el propietario del bucket no tienen permisos (cuando el
propietario del bucket no es el propietario del objeto). Para obtener información sobre cómo el propietario
de un objeto puede conceder permisos al propietario de un bucket, consulte Concesión de permisos
entre cuentas para cargar objetos al mismo tiempo que se garantiza que el propietario del bucket tenga
el control total (p. 393).

 
• Actualiza a subrecursos de nivel de bucket. Por ejemplo, si cambia la configuración del ciclo de vida en
una configuración de notificación al bucket de origen, estos cambios no se aplican al bucket de destino.
Esto posibilita tener diferentes configuraciones en los buckets de origen y destino.

 
• Acciones realizadas por la configuración del ciclo de vida.

Por ejemplo, si la configuración del ciclo de vida está habilitada solo en el bucket de origen, Amazon S3
crea marcadores de eliminación para los objetos que han vencido, pero no replica esos marcadores. Si
desea que se aplique la misma configuración de ciclo de vida a los buckets de origen y destino, habilite
la misma configuración de ciclo de vida en ambos.

Para obtener más información acerca de la configuración del ciclo de vida, consulte Administración del
ciclo de vida de los objetos (p. 127).
Note

Si utiliza la última versión de la configuración de replicación, (el XML especifica Filter


como elemento secundario de Rule), los marcadores de eliminación creados por una acción
del usuario o por Amazon S3 como parte de la acción del ciclo de vida no se replican. Sin
embargo, si utiliza una versión anterior de la configuración de replicación, (el XML especifica
Prefix como elemento secundario de Rule), los marcadores de eliminación resultantes de las
acciones del usuario se replican. Para obtener más información, consulte Compatibilidad con
versiones anteriores (p. 586).
• Los objetos en el bucket de origen que son réplicas, creadas por otra regla de replicación.

Puede replicar objetos desde un bucket de origen en un solo bucket de destino. Después de que
Amazon S3 replica un objeto, este no se puede volver a replicar. Por ejemplo, si cambia el bucket de
destino en una configuración de replicación existente, pero Amazon S3 no replicará de nuevo el objeto.

Otro ejemplo: supongamos que configura una replicación donde el bucket A es el de origen y el bucket B
es el de destino. Ahora, supongamos que añade otra configuración de replicación donde el bucket B es
el de origen y el bucket C es el de destino. En este caso, los objetos en el bucket B que son réplicas de
objetos en el bucket A no se replican en el bucket C.

Temas relacionados
Replicación (p. 573)

Información general de configuración de la replicación (p. 578)

Información del estado de replicación (p. 618)

Versión de API 2006-03-01


577
Amazon Simple Storage Service Guía del desarrollador
Información general de configuración de la replicación

Información general de configuración de la


replicación
Para habilitar la replicación, simplemente añada una configuración de replicación a su bucket de origen. La
configuración indica a Amazon S3 que replique los objetos de la forma especificada. En la configuración de
replicación, debe proporcionar lo siguiente:

• El bucket de destino: el bucket donde desea que Amazon S3 replique los objetos.

 
• Los objetos que quiera replicar: puede replicar todos los objetos del bucket de origen o un subconjunto.
Usted identifica el subconjunto proporcionando un prefijo de nombre de clave, una o más etiquetas de
objeto, o ambos en la configuración. Por ejemplo, si configura una regla de replicación para replicar solo
objetos con el prefijo de nombre de clave Tax/, Amazon S3 replica objetos con claves como Tax/doc1
o Tax/doc2. Pero no un objeto con la clave Legal/doc3. Si especifica el prefijo y una o más etiquetas,
Amazon S3 replica solo los objetos que tienen un prefijo de clave específico y las etiquetas.

Una réplica tiene los mismos nombres de clave y metadatos (por ejemplo, hora de creación, metadatos
definidos por el usuario e ID de versión) que el objeto original. Amazon S3 cifra todos los datos en tránsito
usando Secure Sockets Layer (SSL).

Además de estos requisitos mínimos, puede elegir las siguientes opciones:

• De forma predeterminada, Amazon S3 almacena réplicas de objetos usando la misma clase de


almacenamiento que el objeto de origen. Puede especificar una clase de almacenamiento diferente para
las réplicas.

 
• Amazon S3 supone que la réplica del objeto sigue siendo titularidad del propietario del objeto de
origen. Por tanto, cuando replica objetos, también replica la lista de control de acceso (ACL) del objeto
correspondiente. Si los buckets de origen y destino pertenecen a dos cuentas diferentes de AWS, puede
configurar la replicación para cambiar el propietario de una réplica en la cuenta de AWS que pertenece
al bucket de destino.

Están disponibles opciones de configuración adicionales. Para obtener más información, consulte
Configuraciones de replicación adicionales (p. 590).
Important
Si cuenta con una política de ciclo de vida para la caducidad de un objeto en el bucket sin
versiones y quiere mantener el mismo comportamiento de eliminación cuando habilite el control
de versiones, debe agregar una política de vencimiento no actual. La política de vencimiento
no actual administrará las eliminaciones de las versiones de objetos no actuales en el bucket
habilitado para el control de versiones. (Un bucket con habilitación de versiones mantiene la
versión actual y cero o más versiones objeto no actuales). Para obtener más información, consulte
How Do I Create a Lifecycle Policy for an S3 Bucket? en la Guía del usuario de la consola de
Amazon Simple Storage Service.

Amazon S3 también proporciona API para que admita la configuración de reglas de replicación. Para
obtener más información, consulte los siguientes temas en la Amazon Simple Storage Service API
Reference:

• PUT Bucket replication


• GET Bucket replication
• DELETE Bucket replication

Versión de API 2006-03-01


578
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

En lugar de hacer estas llamadas a la API directamente desde su código, puede agregar una configuración
de replicación a un bucket con el SDK de AWS, AWS CLI o la consola de Amazon S3. Lo más
fácil es utilizar la consola. Para ver ejemplos con instrucciones paso a paso, consulte Tutoriales de
replicación (p. 598).

Si no está familiarizado con la configuración de la replicación, le recomendamos que lea las siguientes
secciones antes de explorar los ejemplos y las configuraciones opcionales. Para ejemplos que
proporcionan instrucciones paso a paso para realizar las configuraciones básicas de la replicación,
consulte Información general de la configuración de replicación (p. 579).

Temas
• Información general de la configuración de replicación (p. 579)
• Configuración de permisos para la replicación (p. 587)

Información general de la configuración de replicación


Amazon S3 almacena una configuración de replicación como XML. En el archivo XML de configuración de
replicación, usted especifica un rol de AWS Identity and Access Management (IAM) y una o más reglas.

<ReplicationConfiguration>
<Role>IAM-role-ARN</Role>
<Rule>
...
</Rule>
<Rule>
...
</Rule>
...
</ReplicationConfiguration>

Amazon S3 no puede replicar objetos sin su permiso. Usted otorga permisos con el rol de IAM que
especifique en la configuración de replicación. Amazon S3 asume el rol de IAM para replicar objetos en
su nombre. Debe conceder primero los permisos necesarios al rol de IAM. Para obtener más información
acerca de la administración de permisos, consulte Configuración de permisos para la replicación (p. 587).

Usted agrega una regla en la configuración de replicación en los siguientes escenarios:

• Desea replicar todos los objetos.


• Desea replicar todos un subconjunto de objetos. Identifica el subconjunto de objetos añadiendo un filtro
en la regla. En el filtro, usted especifica un prefijo de clave de objeto, etiquetas o una combinación de
ambos, para identificar el subconjunto de objetos a los que se aplica la regla.

Añada varias reglas en una configuración de replicación si desea seleccionar un subconjunto diferente
de objetos. En cada regla, se especifica un filtro que selecciona un subconjunto diferente de objetos. Por
ejemplo, puede elegir replicar objetos que tengan prefijos de clave tax/ o document/. Agregaría dos
reglas y se especificaría el filtro de prefijo de clave tax/ en una regla y el prefijo de clave document/ en
la otra.

Las secciones siguientes facilitarán información adicional.

Temas
• Configuración básica de reglas (p. 580)
• Opcional: especificación de un filtro (p. 580)
• Configuraciones de destino adicionales (p. 581)
• Ejemplo de configuraciones de replicación (p. 582)

Versión de API 2006-03-01


579
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

• Compatibilidad con versiones anteriores (p. 586)

Configuración básica de reglas


Cada regla debe incluir el estado y la prioridad de la regla e indicar si se deben replicar los marcadores de
eliminación.

• Status indica si la regla está habilitada o deshabilitada. Si una regla está deshabilitada, Amazon S3 no
realiza las acciones especificadas en ella.
• Priority indica qué regla tiene prioridad cuando se aplican varias reglas a un objeto.
• Actualmente, los marcadores de eliminación no se replican, por lo que debe establecer
DeleteMarkerReplication en Disabled.

En la configuración de destino, debe proporcionar el nombre del bucket donde desea que Amazon S3
replique los objetos.

El siguiente código muestra los requisitos mínimos para una regla.

...
<Rule>
<ID>Rule-1</ID>
<Status>rule-Enabled-or-Disabled</Status>
<Priority>integer</Priority>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Destination>      
<Bucket>arn:aws:s3:::bucket-name</Bucket>
</Destination>
</Rule>
<Rule>
...
</Rule>
...
...

También puede especificar otras opciones de configuración. Por ejemplo, puede elegir utilizar una clase de
almacenamiento para réplicas de objetos que difieran de la clase para el objeto de origen.

Opcional: especificación de un filtro


Para elegir un subconjunto de objetos a los que se aplica la regla, añada un filtro opcional. Puede
especificar un filtro utilizando un prefijo de clave de objeto, etiquetas de objeto o una combinación de
ambos. Si filtra en un prefijo de clave y en etiquetas de objeto, Amazon S3 combina los filtros utilizando un
operador lógico AND. En otras palabras la regla se aplica a un subconjunto de objetos con un prefijo de
clave específico y etiquetas específicas.

Para especificar una regla con un filtro basado en un prefijo de la clave de un objeto, utilice el siguiente
código. Puede especificar solo un prefijo.

<Rule>
...
<Filter>
<Prefix>key-prefix</Prefix>
</Filter>
...
</Rule>

Versión de API 2006-03-01


580
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

...

Para especificar una regla con un filtro basado en etiquetas del objeto, utilice el siguiente código. También
puede especificar una o varias etiquetas del objeto.

<Rule>
...
<Filter>
<And>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</And>
</Filter>
...
</Rule>
...

Para especificar un filtro de reglas con una combinación de un prefijo de clave y etiquetas del objeto, use
este código. Usted incluye estos filtros en un elemento principal AND. Amazon S3 realiza la operación
lógica AND para combinar estos filtros. En otras palabras la regla se aplica a un subconjunto de objetos con
un prefijo de clave específico y etiquetas específicas.

<Rule>
...
<Filter>
<And>
<Prefix>key-prefix</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</Filter>
...
</Rule>
...

Configuraciones de destino adicionales


En la configuración de destino, especifique el nombre del bucket donde desea que Amazon S3 replique los
objetos. Puede establecer configuraciones para replicar objetos desde un bucket de origen en un bucket
de destino. Si añade varias reglas en una configuración de replicación, todas las reglas deben especificar
el mismo bucket de destino.

...
<Destination>
<Bucket>arn:aws:s3:::destination-bucket</Bucket>
</Destination>
...

Versión de API 2006-03-01


581
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

Puede añadir las siguientes opciones en el elemento <Destination>:

• Puede especificar la clase de almacenamiento para las réplicas de objetos. De forma predeterminada,
Amazon S3 utiliza la clase de almacenamiento del objeto de origen para crear réplicas de objetos, como
en el ejemplo siguiente.

...
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<StorageClass>storage-class</StorageClass>
</Destination>
...

• Cuando los buckets de origen y destino no pertenecen a la misma cuenta, puede cambiar el propietario
de la réplica en la cuenta de AWS que pertenece al bucket de destino añadiendo el elemento
AccessControlTranslation.

...
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<Account>destination-bucket-owner-account-id</Account>
<AccessControlTranslation>
<Owner>Destination</Owner>
</AccessControlTranslation>
</Destination>
...

Si no añade este elemento a la configuración de replicación, las réplicas pertenecen a la misma cuenta
de AWS a la que pertenece el objeto de origen. Para obtener más información, consulte Configuración
de replicación adicional: cambiar el propietario de la réplica (p. 591).
• Es posible que su bucket de origen contenga objetos creados con cifrado en el servidor mediante
claves almacenadas en AWS KMS. De forma predeterminada, Amazon S3 no replica estos objetos.
Opcionalmente, puede indicar a Amazon S3 que replique estos objetos si primero opta explícitamente
por esta función agregando el elemento SourceSelectionCriteria y luego proporcionando la clave AWS
KMS (para la región de AWS del bucket de destino) que se usará para cifrar réplicas de objetos.

...
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
<Bucket>arn:aws:s3:::dest-bucket-name</Bucket>
<EncryptionConfiguration>
<ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</
ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
...

Para obtener más información, consulte Configuración adicional de replicación: replicar objetos creados
con el cifrado en el servidor (SSE) mediante claves de cifrado almacenadas en AWS KMS (p. 593).

Ejemplo de configuraciones de replicación


Para comenzar, puede añadir los siguientes ejemplos de configuraciones de replicación a su bucket, según
corresponda.

Versión de API 2006-03-01


582
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

Important
Para añadir una configuración de replicación a un bucket, debe tener el permiso iam:PassRole.
Este permiso le permite pasar el rol de IAM que otorga permisos de replicación Amazon S3. Usted
especifica el rol de IAM proporcionando el Nombre de recurso de Amazon (ARN) que se usa
en el elemento Role en el XML de configuración de replicación. Para obtener más información,
consulte Concesión de permisos a un usuario para transferir una función a un servicio de AWS en
la Guía del usuario de IAM.

Example 1: Configuración de replicación con una sola regla


La siguiente configuración de replicación básica especifica una regla. La regla especifica un rol de IAM que
Amazon S3 puede admitir y un bucket de destino para réplicas de objetos. La regla Status indica que la
regla está en vigor.

<?xml version="1.0" encoding="UTF-8"?>


<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::AcctID:role/role-name</Role>
<Rule>
<Status>Enabled</Status>

<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>

</Rule>
</ReplicationConfiguration>

Para elegir un subconjunto de objetos para replicar, puede añadir un filtro. En la siguiente configuración,
el filtro especifica un prefijo de clave de objeto. Esta regla se aplica a objetos que tienen el prefijo Tax/ en
sus nombres de clave.

<?xml version="1.0" encoding="UTF-8"?>


<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::AcctID:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>

<Filter>
<Prefix>Tax/</Prefix>
</Filter>

<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>

</Rule>
</ReplicationConfiguration>

Si especifica el elemento Filter, también debe incluir los elementos Priority y


DeleteMarkerReplication. En este ejemplo, la prioridad es irrelevante porque solo hay una regla.

En la siguiente configuración, el filtro especifica un prefijo y dos etiquetas. La regla se aplica al subconjunto
de objetos que tengan el prefijo de clave y las etiquetas especificados. Específicamente, se aplica al
objeto que tiene el prefijo Tax/ en sus nombres de clave y las dos etiquetas de objetos especificadas. La
prioridad no se aplica porque solo hay una regla.

<?xml version="1.0" encoding="UTF-8"?>


<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::AcctID:role/role-name</Role>
<Rule>

Versión de API 2006-03-01


583
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>

<Filter>
<And>
<Prefix>Tax/</Prefix>
<Tag>
<Tag>
<Key>tagA</Key>
<Value>valueA</Value>
</Tag>
</Tag>
<Tag>
<Tag>
<Key>tagB</Key>
<Value>valueB</Value>
</Tag>
</Tag>
</And>

</Filter>

<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>

</Rule>
</ReplicationConfiguration>

Puede especificar una clase de almacenamiento para las réplicas de objetos como se indica a
continuación:

<?xml version="1.0" encoding="UTF-8"?>

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::account-id:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<StorageClass>storage-class</StorageClass>
</Destination>
</Rule>
</ReplicationConfiguration>

Puede especificar cualquier clase de almacenamiento compatible con Amazon S3.

Example 2: Configuración de replicación con dos reglas

Example
En la siguiente configuración de replicación:

• Cada regla filtra en un prefijo de clave diferente para que cada regla se aplique a un subconjunto
diferenciado de objetos. Amazon S3 replica los objetos con los nombres de clave Tax/doc1.pdf
y Project/project1.txt, pero no replica los objetos con el nombre de clave PersonalDoc/
documentA.
• La prioridad de regla es irrelevante porque las reglas se aplican a dos conjuntos de objetos distintos. El
siguiente ejemplo muestra lo que ocurre cuando se aplica una prioridad de regla.
• La segunda regla especifica una clase de almacenamiento para réplicas de objetos. Amazon S3 utiliza la
clase de almacenamiento especificada para dichas réplicas de objetos.

Versión de API 2006-03-01


584
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

• Ambas reglas especifican el mismo bucket de destino. Solo puede especificar un bucket de destino,
independientemente del número de reglas que especifique.

<?xml version="1.0" encoding="UTF-8"?>

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::account-id:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Status>Enabled</Status>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
</Destination>
...
</Rule>
<Rule>
<Status>Enabled</Status>
<Priority>2</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Project</Prefix>
</Filter>
<Status>Enabled</Status>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<StorageClass>STANDARD_IA</StorageClass>
</Destination>
...
</Rule>

</ReplicationConfiguration>

Example 3: Configuración de replicación con dos reglas con superposición de prefijos

En esta configuración, las dos reglas especifican filtros con superposición de prefijos de clave, star/
y starship. Ambas reglas se aplican a objetos con el nombre de clave starship-x. En este caso,
Amazon S3 usará la prioridad de la regla para determinar la regla que se va a aplicar.

<ReplicationConfiguration>

<Role>arn:aws:iam::AcctID:role/role-name</Role>

<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>star</Prefix>
</Filter>
<Destination>

Versión de API 2006-03-01


585
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

<Bucket>arn:aws:s3:::destinationbucket</Bucket>
</Destination>
</Rule>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>starship</Prefix>
</Filter>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
</Destination>
</Rule>
</ReplicationConfiguration>

Example 4: Tutoriales de ejemplo


Para ver tutoriales de ejemplo, consulte Tutoriales de replicación (p. 598).

Para obtener más información acerca de la estructura de XML de configuración de replicación, consulte
PutBucketReplication en la Amazon Simple Storage Service API Reference.

Compatibilidad con versiones anteriores


La última versión del XML de la configuración de replicación es V2. Para compatibilidad con versiones
anteriores, Amazon S3 sigue admitiendo la configuración V1. Si ha utilizado la configuración de replicación
XML V1, considere los siguientes problemas que afectan a la compatibilidad con versiones anteriores:

• El XML de configuración de replicación V2 incluye el elemento Filter para reglas. Con el elemento
Filter, puede especificar filtros de objetos basados en el prefijo de la clave del objeto, etiquetas o
ambos para abarcar los objetos a los que se aplica la regla. El filtrado de configuración de réplica XML
V1 admitido se basa solo en el prefijo de clave. En tal caso, añade el Prefix directamente como un
elemento secundario del elemento Rule, como en el ejemplo siguiente.

<?xml version="1.0" encoding="UTF-8"?>


<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::AcctID:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Prefix>key-prefix</Prefix>
<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>

</Rule>
</ReplicationConfiguration>

Para compatibilidad con versiones anteriores, Amazon S3 sigue admitiendo la configuración V1.
• Cuando elimina un objeto de su bucket de origen sin especificar un ID de versión del objeto, Amazon
S3 agrega un marcador de eliminación. Si usa la V1 del XML de configuración de replicación, Amazon
S3 replica los marcadores de eliminación resultantes de las acciones de usuario. En otras palabras, si el
usuario eliminó el objeto, y no si Amazon S3 lo eliminó porque el objeto caducó como parte de la acción
del ciclo de vida. En V2, Amazon S3 no replica marcadores de eliminación. Por tanto, debe establecer el
elemento DeleteMarkerReplication en Disabled.

...
<Rule>
<ID>Rule-1</ID>
<Status>rule-Enabled-or-Disabled</Priority>

Versión de API 2006-03-01


586
Amazon Simple Storage Service Guía del desarrollador
Configuración de permisos para la replicación

<Priority>integer</Status>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Destination>
<Bucket>arn:aws:s3:::bucket-name</Bucket>
</Destination>
</Rule>
...

Configuración de permisos para la replicación


Al configurar la replicación , debe adquirir los permisos necesarios de la siguiente manera:

• Cree un rol de IAM: Amazon S3 necesita permisos para replicar objetos en su nombre. Puede conceder
estos permisos creando un rol de IAM y especificar el rol en la configuración de replicación.
• Cuando los buckets de origen y destino no pertenecen a las mismas cuentas, el propietario del bucket de
destino debe otorgar al propietario del bucket de origen permisos para almacenar las réplicas.

Temas
• Creación de un rol de IAM (p. 587)
• Concesión de permisos cuando los buckets de origen y destino son propiedad de diferentes cuentas
de AWS (p. 589)

Creación de un rol de IAM


De forma predeterminada, todos los recursos de Amazon S3 (buckets, objetos y subrecursos relacionados)
son privados: solo el propietario del recurso puede obtener acceso al recurso. Para leer objetos del
bucket de origen y replicarlos en el bucket de destino, Amazon S3 necesita permiso para realizar estas
tareas. Puede conceder estos permisos creando un rol de IAM y especificar el rol en la configuración de
replicación.

En esta sección se explica la política de confianza y la política de permisos mínimos necesarios. Los
tutoriales de ejemplo proporcionan instrucciones paso a paso para crear un rol de IAM. Para obtener más
información, consulte Tutoriales de replicación (p. 598).

• A continuación se muestra una política de confianza donde identifica a Amazon S3 como la entidad
principal del servicio que puede asumir el rol.

"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}

Para obtener más información sobre los roles de IAM, consulte Roles de IAM en la Guía del usuario de
IAM.

Versión de API 2006-03-01


587
Amazon Simple Storage Service Guía del desarrollador
Configuración de permisos para la replicación

• A continuación se muestra una política de acceso donde usted concede al rol permisos para realizar
tareas de replicación en su nombre. Cuando Amazon S3 asume el rol, adopta los permisos que
especifique en esta política.

"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetReplicationConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::source-bucket"
]
},
{
"Effect":"Allow",
"Action":[

"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"

],
"Resource":[
"arn:aws:s3:::source-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
]
}

La política de acceso concede permisos para las siguientes acciones:


• s3:GetReplicationConfiguration y s3:ListBucket: los permisos para estas acciones
en el bucket de origen permiten a Amazon S3 recuperar la configuración de replicación y mostrar
el contenido del bucket (el modelo de permisos actual requiere el permiso s3:ListBucket para
obtener acceso a los marcadores de eliminación).
• s3:GetObjectVersion y s3:GetObjectVersionAcl: los permisos para estas acciones
concedidos en todos los objetos permiten que Amazon S3 obtenga una versión de objeto específica y
tenga acceso a la lista de control de acceso (ACL) asociada con los objetos.
• s3:ReplicateObject y s3:ReplicateDelete: los permisos para estas acciones en objetos del
bucket de destino permiten que Amazon S3 replique los objetos o marcadores de eliminación en el
bucket de destino. Para obtener información acerca de los marcadores de eliminación, consulte Cómo
afectan las operaciones de eliminación a la replicación (p. 576).

Versión de API 2006-03-01


588
Amazon Simple Storage Service Guía del desarrollador
Configuración de permisos para la replicación

Note

Los permisos para la acción s3:ReplicateObject en el bucket de destino, también


permiten la replicación de etiquetas de objetos de forma que no es necesario conceder el
permiso explícitamente para la acción s3:ReplicateTags.
• s3:GetObjectVersionTagging: los permisos para esta acción en los objetos del bucket de origen
permite que Amazon S3 lea las etiquetas de objetos para la replicación (consulte Etiquetado de
objetos (p. 118)). Si Amazon S3 no tiene estos permisos, replica los objetos pero no las etiquetas de
objetos.

Para ver la lista de acciones de Amazon S3, consulte Especificación de permisos en una
política (p. 357).
Important

La cuenta de AWS propietaria del rol de IAM debe tener los permisos para las acciones que
concede al rol de IAM.
Suponga, por ejemplo, que el bucket de origen contiene objetos que pertenecen a otra
cuenta de AWS. El propietario de los objetos debe conceder explícitamente a la cuenta de
AWS propietaria del rol de IAM, los permisos necesarios a través de la ACL del objeto. De lo
contrario, Amazon S3 no puede acceder a los objetos y la replicación de los objetos dará un
error. Para obtener más información acerca de los permisos de ACL, consulte Información
general de las Access Control Lists (ACL, Listas de control de acceso) (p. 419).
Los permisos aquí descritos están relacionados con la configuración de replicación mínima.
Si elige agregar configuraciones de replicación opcionales, debe otorgar permisos adicionales
a Amazon S3. Para obtener más información, consulte Configuraciones de replicación
adicionales (p. 590).

Concesión de permisos cuando los buckets de origen y destino


son propiedad de diferentes cuentas de AWS
Cuando los buckets de origen y destino no pertenecen a la misma cuenta, el propietario del bucket de
destino también debe añadir una política de bucket para conceder al propietario los permisos de propietario
del bucket de origen para realizar las acciones de replicación de la siguiente manera:

{
"Version":"2008-10-17",
"Id":"PolicyForDestinationBucket",
"Statement":[
{
"Sid":"1",
"Effect":"Allow",
"Principal":{
"AWS":"SourceBucket-AcctID"
},
"Action":[
"s3:ReplicateDelete",
"s3:ReplicateObject"
],
"Resource":"arn:aws:s3:::destinationbucket/*"
},
{
"Sid":"2",
"Effect":"Allow",
"Principal":{
"AWS":"SourceBucket-AcctID"
},
"Action":"s3:List*",
Versión de API 2006-03-01
589
Amazon Simple Storage Service Guía del desarrollador
Configuraciones de replicación adicionales

"Resource":"arn:aws:s3:::destinationbucket"
}
]
}

Para ver un ejemplo, consulte Ejemplo 2: Configuración de la replicación cuando los buckets de origen y
destino son propiedad de cuentas diferentes (p. 608).

Si los objetos en el bucket de origen tienen etiquetas, tenga en cuenta lo siguiente:

• Si el propietario del bucket de origen concede permisos a Amazon S3 para las acciones
s3:GetObjectVersionTagging y s3:ReplicateTags para replicar las etiquetas de los objetos (a
través del rol de IAM), Amazon S3 replicará las etiquetas junto con los objetos. Para obtener información
acerca del rol de IAM, consulte Creación de un rol de IAM (p. 587).
• Si el propietario del bucket de destino no desea replicar las etiquetas, puede añadir la siguiente
instrucción a la política del bucket de destino para denegar el permiso explícitamente para la acción
s3:ReplicateTags:

...
"Statement":[
{
"Effect":"Deny",
"Principal":{
"AWS":"arn:aws:iam::SourceBucket-AcctID:root"
},
"Action":["s3:ReplicateTags"],
"Resource":"arn:aws:s3:::destinationbucket/*"
}
]
...

Cambio de la titularidad de la réplica


Cuando las diferentes cuentas de AWS son propietarias de los buckets de origen y de destino, puede
indicar a Amazon S3 que cambie la titularidad de la una réplica para la cuenta de AWS que pertenece al
bucket de destino. Esto se denomina opción de invalidación del propietario. Para obtener más información,
consulte Configuración de replicación adicional: cambiar el propietario de la réplica (p. 591).

Configuraciones de replicación adicionales


En esta sección se describen opciones de configuración de replicación adicionales que están disponibles
en Amazon S3. Para obtener información acerca de la configuración de replicación, consulte Información
general de configuración de la replicación (p. 578).

Temas
• Configuración de replicación adicional: cambiar el propietario de la réplica (p. 591)
• Configuración adicional de replicación: replicar objetos creados con el cifrado en el servidor (SSE)
mediante claves de cifrado almacenadas en AWS KMS (p. 593)

Versión de API 2006-03-01


590
Amazon Simple Storage Service Guía del desarrollador
Cambio del propietario de la réplica

Configuración de replicación adicional: cambiar el


propietario de la réplica
En la replicación, el propietario del objeto de origen también es propietario de la réplica de manera
predeterminada. Cuando los buckets de origen y de destino son propiedad de diferentes cuentas de
AWS, puede agregar ajustes de configuración opcionales para cambiar la titularidad de la réplica a
la cuenta de AWS propietaria del bucket de destino. Podría hacer esto, por ejemplo, para restringir
el acceso a las réplicas de objetos. Esta opción recibe el nombre también de invalidación del
propietario en la configuración de replicación. Esta sección solo explica las opciones de configuración
adicionales relevantes. Para obtener información acerca de la configuración de replicación, consulte
Replicación (p. 573).

Para configurar la invalidación del propietario, haga lo siguiente:

• Añada la opción de invalidación del propietario a la configuración de replicación para indicar a Amazon
S3 que cambie la titularidad de la réplica.
• Conceda a Amazon S3 permisos para cambiar la titularidad de la réplica.
• Añada permiso en la política del bucket de destino para permitir el cambio de titularidad de la réplica.
Esto permite al propietario del bucket de destino aceptar la propiedad de las réplicas de objetos.

Las siguientes secciones describen cómo realizar estas tareas. Para ver un ejemplo práctico con
instrucciones paso a paso, consulte Ejemplo 3: Cambio del propietario de la réplica cuando los buckets de
origen y de destino son propiedad de cuentas diferentes (p. 609).

Adición de la opción de invalidación del propietario a la


configuración de replicación
Warning
Añada la opción de invalidación del propietario solo cuando los buckets de origen y de destino son
propiedad de diferentes cuentas de AWS. Amazon S3 no comprueba si los buckets son propiedad
de la misma cuenta o de cuentas diferentes. Si añade la opción de invalidación del propietario
cuando ambos buckets pertenecen a la misma cuenta de AWS, Amazon S3 aplica la opción de
invalidación del propietario. Concede permisos completos al propietario del bucket de destino y no
replica las actualizaciones que se realicen posteriormente en la lista de control de acceso (ACL)
del objeto de origen. El propietario de la réplica puede cambiar directamente la ACL asociada a
una réplica con una solicitud PUT ACL, pero no a través de la replicación.

Para especificar la opción de invalidación del propietario, añada lo siguiente al elemento Destination:

• El elemento AccessControlTranslation, que indica a Amazon S3 que cambie la titularidad de la


réplica.
• El elemento Account, que especifica la cuenta de AWS del propietario del bucket de destino.

<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
...
<Destination>
...
<AccessControlTranslation>
<Owner>Destination</Owner>
</AccessControlTranslation>
<Account>destination-bucket-owner-account-id</Account>
</Destination>
</Rule>
</ReplicationConfiguration>

Versión de API 2006-03-01


591
Amazon Simple Storage Service Guía del desarrollador
Cambio del propietario de la réplica

La siguiente configuración de replicación de ejemplo, indica a Amazon S3 que replique objetos que tiene el
prefijo de clave Tax en el bucket de destino y cambie la propiedad de las réplicas.

<?xml version="1.0" encoding="UTF-8"?>


<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::account-id:role/role-name</Role>
<Rule>
<ID>Rule-1</ID>
<Priority>1</Priority>
<Status>Enabled</Status>
<Status>Enabled</Status>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Destination>
<Bucket>arn:aws:s3:::destination-bucket</Bucket>
<Account>destination-bucket-owner-account-id</Account>
<AccessControlTranslation>
<Owner>Destination</Owner>
</AccessControlTranslation>
</Destination>
</Rule>
</ReplicationConfiguration>

Concesión de permiso a Amazon S3 para cambiar la titularidad


de la réplica.
Conceda a Amazon S3 permisos para cambiar la titularidad de la réplica añadiendo permiso para la acción
s3:ObjectOwnerOverrideToBucketOwner en la política de permisos asociada con el rol de IAM. Se
trata del rol de IAM que especificó en la configuración de replicación que permite a Amazon S3 asumir y
replicar objetos en su nombre.

...
{
"Effect":"Allow",
"Action":[
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
...

Adición de permiso en la política del bucket de destino para


permitir cambiar la titularidad de la réplica
El propietario del bucket de destino debe otorgar al propietario del bucket de origen permiso para cambiar
la titularidad de la réplica. El propietario del bucket de destino otorga al propietario del bucket de origen
permiso para la acción s3:ObjectOwnerOverrideToBucketOwner. Esto permite al propietario del
bucket de destino aceptar la propiedad de las réplicas de objetos. En el siguiente ejemplo de instrucción de
política de buckets se muestra cómo se hace esto.

...
{
"Sid":"1",
"Effect":"Allow",

Versión de API 2006-03-01


592
Amazon Simple Storage Service Guía del desarrollador
Replicación de objetos cifrados

"Principal":{"AWS":"source-bucket-account-id"},
"Action":["s3:ObjectOwnerOverrideToBucketOwner"],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
...

Consideraciones adicionales
Al configurar la opción de anulación de propiedad, se aplican las siguientes consideraciones:

• De manera predeterminada, el propietario del objeto de origen también es propietario de la réplica.


Amazon S3 replica la versión del objeto y la ACL asociada.

Si añade la invalidación del propietario, Amazon S3 replica solo la versión del objeto, no la ACL.
Además, Amazon S3 no replica cambios subsiguientes a la ACL de objetos de origen. Amazon S3
establece la ACL en la réplica que concede control absoluto al propietario del bucket de destino.

 
• Al actualizar una configuración de replicación para habilitar o inhabilitar la invalidación del propietario,
sucede lo siguiente.

 
• Si añade la opción de invalidación del propietario a la configuración de replicación:

Cuando Amazon S3 replica una versión del objeto, descarta la ACL asociada al objeto de origen. En
su lugar, establece la ACL de la réplica de forma que se conceda control completo al propietario del
bucket de destino. No replica los cambios que se realicen posteriormente en la ACL del objeto de
origen. No obstante, este cambio a la ACL no se aplica a las versiones de objetos que se replicaron
antes de configurar la opción de invalidación del propietario. Las actualizaciones de las ACL de
los objetos de origen que se replicaron antes de que se configurara la opción de invalidación
del propietario se seguirán replicando (porque el objeto y sus réplicas siguen teniendo el mismo
propietario).

 
• Si elimina la opción de invalidación del propietario de la configuración de replicación:

Amazon S3 replica objetos nuevos que aparecen en el bucket de origen y las ACL asociadas al
bucket de destino. Para objetos que se replicaron antes de que eliminar la invalidación del propietario,
Amazon S3 no replica las ACL porque el cambio de titularidad del objeto que realizó Amazon S3
permanece en vigor. Es decir, las ACL aplicadas a la versión del objeto que se replicaban cuando se
estableció la opción de invalidación del propietario siguen sin replicarse.

Configuración adicional de replicación: replicar objetos


creados con el cifrado en el servidor (SSE) mediante
claves de cifrado almacenadas en AWS KMS
De forma predeterminada, Amazon S3 no replica los objetos almacenados en reposo con el cifrado en el
servidor mediante claves almacenadas en AWS KMS. Esta sección explica la configuración adicional que
se agrega para indicar a Amazon S3 que replique estos objetos.

Versión de API 2006-03-01


593
Amazon Simple Storage Service Guía del desarrollador
Replicación de objetos cifrados

Para ver un ejemplo con instrucciones paso a paso, consulte Ejemplo 4: Replicación de objetos
cifrados (p. 613). Para obtener información acerca de la configuración de replicación, consulte
Replicación (p. 573).

Temas
• Especificación de información adicional en la configuración de replication (p. 594)
• Concesión de permisos adicionales para el rol de IAM (p. 595)
• Concesión de permisos adicionales para escenarios que afectan a varias cuentas (p. 597)
• Consideraciones de límite de transacciones de AWS KMS (p. 598)

Especificación de información adicional en la configuración de


replication
En la configuración de replicación, haga lo siguiente:

• En la configuración Destination, añada la clave de AWS KMS que quiere que Amazon S3 utilice para
cifrar réplicas de objetos.
• Opte explícitamente por habilitar la replicación de objetos cifrados usando las claves de AWS KMS
agregando el elemento SourceSelectionCriteria.

<ReplicationConfiguration>
<Rule>
...
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>

<Destination>
...
<EncryptionConfiguration>
<ReplicaKmsKeyID>AWS KMS key ID for the AWS region of the destination
bucket.</ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
...
</Rule>
</ReplicationConfiguration>

Important
La clave de AWS KMS debe haberse creado en la misma región de AWS que el bucket de
destino.
La clave de AWS KMS debe ser válida. La API de replicación de bucket PUT no comprueba la
validez de las claves de AWS KMS. Si usa una clave no válida, recibe el código de estado 200 OK
en respuesta, pero la replicación genera un error.

En el siguiente ejemplo se muestra un ejemplo de configuración de replicación que incluye los elementos
de configuración opcionales.

<?xml version="1.0" encoding="UTF-8"?>


<ReplicationConfiguration>
<Role>arn:aws:iam::account-id:role/role-name</Role>
<Rule>
<ID>Rule-1</ID>
<Priority>1</Priority>

Versión de API 2006-03-01


594
Amazon Simple Storage Service Guía del desarrollador
Replicación de objetos cifrados

<Status>Enabled</Status>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Destination>
<Bucket>arn:aws:s3:::destination-bucket</Bucket>
<EncryptionConfiguration>
<ReplicaKmsKeyID>The AWS KMS key ID for the AWS region of the destination
bucket (S3 uses it to encrypt object replicas).</ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
</Rule>
</ReplicationConfiguration>

Esta configuración de replicación tiene una regla. La regla se aplica a los objetos con el prefijo de clave
Tax. Amazon S3 utiliza el ID de clave de AWS KMS para cifrar estas réplicas de objetos.

Concesión de permisos adicionales para el rol de IAM


Para replicar los objetos creados con el cifrado en el servidor mediante claves almacenadas en AWS
KMS, conceda los siguientes permisos adicionales al rol de IAM que especifique en la configuración de
replicación. Otorga estos permisos actualizando la política de permisos asociada con el rol de IAM:

• Permiso para la acción s3:GetObjectVersionForReplication para los objetos de origen. El


permiso para esta acción permite a Amazon S3 replicar ambos objetos sin cifrar y los objetos creados
con el cifrado del lado del servidor mediante claves de cifrado administradas por Amazon S3 (SSE-S3) o
claves de cifrado administradas por AWS KMS (SSE-KMS).
Note
Le recomendamos que utilice la acción s3:GetObjectVersionForReplication en lugar
de la acción s3:GetObjectVersion, ya que esta acción proporciona a Amazon S3 solo
los permisos mínimos necesarios para la replicación. Además, el permiso para la acción
s3:GetObjectVersion permite la replicación de objetos no cifrados y cifrados con SSE-S3,
pero ningún objeto creado con una clave de cifrado administrada con AWS KMS.
• Permisos para las siguientes acciones de AWS KMS:
• Permisos kms:Decrypt para la clave de AWS KMS que se utilizó para cifrar el objeto de origen
• Permisos kms:Encrypt para la clave de AWS KMS que se utilizó para cifrar la réplica del objeto

Le recomendamos que restrinja estos permisos para especificar buckets y objetos específicos mediante
las claves de condición de AWS KMS que se muestran en las siguientes instrucciones de política de
ejemplo.

{
"Action": ["kms:Decrypt"],
"Effect": "Allow",
"Condition": {
"StringLike": {
"kms:ViaService": "s3.source-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn": [
"arn:aws:s3:::source-bucket-name/key-prefix1*",
]
}

Versión de API 2006-03-01


595
Amazon Simple Storage Service Guía del desarrollador
Replicación de objetos cifrados

},
"Resource": [
"List of AWS KMS key IDs used to encrypt source objects.",
]
},
{
"Action": ["kms:Encrypt"],
"Effect": "Allow",
"Condition": {
"StringLike": {
"kms:ViaService": "s3.destination-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn": [
"arn:aws:s3:::destination-bucket-name/key-prefix1*",
]
}
},
"Resource": [
"AWS KMS key IDs (for the AWS region of the destination bucket). S3 uses it to
encrypt object replicas",
]
}

La cuenta de AWS que posea el rol de IAM debe tener permisos para esta acciones de AWS KMS
(kms:Encrypt y kms:Decrypt) para las claves de AWS KMS que se indican en la política. Si las
claves de AWS KMS pertenecen a otra cuenta de AWS, el propietario de las claves debe conceder
estos permisos a la cuenta de AWS que posee el rol de IAM. Para obtener más información sobre cómo
administrar el acceso a estas claves, consulte Uso de políticas de IAM con AWS KMS en la AWS Key
Management Service Developer Guide.

A continuación, se muestra una política de IAM completa que concede los permisos necesarios para
replicar objetos sin cifrar creados con el cifrado del lado del servidor mediante claves de cifrado
administradas por Amazon S3 y claves de cifrado administradas por AWS KMS.
Note

Los objetos creados con cifrado de lado servidor mediante claves de cifrado proporcionadas por
los clientes (SSE-C) no se replican.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetReplicationConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::source-bucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Resource":[
"arn:aws:s3:::source-bucket/key-prefix1*"
]
},
{

Versión de API 2006-03-01


596
Amazon Simple Storage Service Guía del desarrollador
Replicación de objetos cifrados

"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Resource":"arn:aws:s3:::destination-bucket/key-prefix1*"
},
{
"Action":[
"kms:Decrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.source-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::source-bucket-name/key-prefix1*"
]
}
},
"Resource":[
"List of AWS KMS key IDs used to encrypt source objects."
]
},
{
"Action":[
"kms:Encrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.destination-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::destination-bucket-name/prefix1*"
]
}
},
"Resource":[
"AWS KMS key IDs (for the AWS region of the destination bucket) to use for
encrypting object replicas"
]
}
]
}

Concesión de permisos adicionales para escenarios que afectan


a varias cuentas
En un escenario de replicación entre cuentas en el que los buckets de origen y destino pertenecen
a diferentes cuentas de AWS, la clave de AWS KMS para cifrar réplicas de objetos debe ser una clave
maestra del cliente (CMK): El propietario de clave debe conceder al propietario del bucket de origen
permiso para usar la clave.

Para conceder permiso al propietario del bucket de origen para usar la clave (consola de IAM)

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https://


console.aws.amazon.com/iam/.
2. Elija Encryption keys (Claves de cifrado).
3. Elija la clave AWS KMS.
4. En Key Policy (Política de claves), Key Users (Usuarios de clave), External Accounts (Cuentas
externas), elija Add External Account (Añadir cuenta externa).

Versión de API 2006-03-01


597
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de replicación

5. Para arn:aws:iam::, introduzca el ID de cuenta del bucket de origen.


6. Elija Guardar cambios.

Para conceder permiso al propietario del bucket para usar la clave (CLI de AWS)

• Para obtener información, consulte put-key-policy en la Referencia de comandos de la AWS CLI. Para
obtener información acerca de la API subyacente, consulte PutKeyPolicy en la AWS Key Management
Service API Reference.

Consideraciones de límite de transacciones de AWS KMS


Cuando añada muchos objetos nuevos con cifrado de AWS KMS después de habilitar la replicación,
puede que experimente problemas de lentitud (errores HTTP 503 Slow Down). La limitación controlada
se produce cuando el número de transacciones de AWS KMS por segundo supera el límite actual. Para
obtener más información, consulte Límites en la AWS Key Management Service Developer Guide.

Para solicitar un aumento de este límite de velocidad de API de AWS KMS, póngase en contacto con AWS
Support.

Tutoriales de replicación
Los siguientes ejemplos muestran cómo configurar la replicación para casos de uso comunes. Los
ejemplos demuestran la configuración de replicación utilizando la consola de Amazon S3, AWS Command
Line Interface (AWS CLI), y los SDK de AWS (se muestran ejemplos de Java y .NET SDK). Para obtener
más información sobre cómo instalar y configurar la AWS CLI, consulte los siguientes temas en la AWS
Command Line Interface Guía del usuario.

• Instalación de la interfaz de línea de comandos de AWS


• Configuración de la CLI de AWS: debe configurar al menos un perfil. Si está explorando escenarios que
afectan a varias cuentas, configure dos perfiles.

Para obtener información acerca de los SDK de AWS, consulte AWS SDK para Java y AWS SDK
para .NET.

Temas
• Ejemplo 1: Configuración de la replicación cuando los buckets de origen y destino son propiedad de la
misma cuenta (p. 599)
• Ejemplo 2: Configuración de la replicación cuando los buckets de origen y destino son propiedad de
cuentas diferentes (p. 608)
• Ejemplo 3: Cambio del propietario de la réplica cuando los buckets de origen y de destino son
propiedad de cuentas diferentes (p. 609)
• Ejemplo 4: Replicación de objetos cifrados (p. 613)

Versión de API 2006-03-01


598
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

Ejemplo 1: Configuración de la replicación cuando


los buckets de origen y destino son propiedad de la
misma cuenta
En este ejemplo, configurará la replicación de los buckets de origen y destino que son propiedad de
la misma cuentas de AWS. Se proporcionan ejemplos de uso de la consola de Amazon S3, la AWS
Command Line Interface (AWS CLI), AWS SDK for Java y AWS SDK para .NET.

Configurar la replicación cuando los buckets son propiedad de la misma cuenta


(consola)
Para obtener instrucciones paso a paso, consulte ¿Cómo puedo añadir una regla de replicación a un
bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service. Este tema
proporciona instrucciones para establecer la configuración de replicación cuando los buckets son
propiedad de la misma cuenta de AWS y de cuentas diferentes.

Configurar la replicación cuando los buckets son propiedad de la misma cuenta


(CLI de AWS)
Para usar la AWS CLI para configurar la replicación cuando los buckets de origen y destino son propiedad
de la misma cuenta de AWS, deberá crear buckets de origen y de destino, habilitar el control de versiones
en los buckets, crear un rol de IAM que conceda permiso a Amazon S3 para replicar objetos y añadir la
configuración de replicación al bucket de origen. Para verificar la configuración, debe probarla.

Para configurar la replicación cuando los buckets de origen y destino son propiedad de la misma
cuenta de AWS

1. Configure un perfil de credenciales para la AWS CLI. En este ejemplo, usamos el nombre de perfil
acctA. Para obtener información acerca de la configuración de perfiles de credenciales, consulte
Perfiles con nombre en la AWS Command Line Interface Guía del usuario.
Important

El perfil utilizado para este ejercicio tiene que tener los permisos necesarios. Por ejemplo, en
la configuración de replicación especifica el rol de IAM que Amazon S3 puede asumir. Solo
puede hacer esto si el perfil que utiliza tiene el permiso iam:PassRole. Para obtener más
información, consulte Concesión de permisos a un usuario para transferir un rol a un servicio
de AWS en la Guía del usuario de IAM. Si utiliza credenciales de usuario de administrador
para crear un perfil con nombre, puede realizar todas las tareas.
2. Cree un bucket de origen y habilite el control de versiones. El siguiente código crear un bucket de
origen en la región US East (N. Virginia) (us-east-1).

aws s3api create-bucket \


--bucket source \
--region us-east-1 \
--profile acctA

aws s3api put-bucket-versioning \


--bucket source \
--versioning-configuration Status=Enabled \
--profile acctA

3. Cree un bucket de destino y habilite el control de versiones. El siguiente código crear un bucket de
destino en la región EE.UU. Oeste (Oregón) (us-west-2).

Versión de API 2006-03-01


599
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

Note

Para establecer la configuración de replicación cuando los buckets de origen y de destino


están en la misma cuenta de AWS, utilice el mismo perfil. En este ejemplo se utiliza acctA.
Para probar la configuración de replicación cuando los buckets son propiedad de diferentes
cuentas de AWS, debe especificar diferentes perfiles para cada uno. En este ejemplo se usa
el perfil acctB para el bucket de destino.

aws s3api create-bucket \


--bucket destination \
--region us-west-2 \
--create-bucket-configuration LocationConstraint=us-west-2 \
--profile acctA

aws s3api put-bucket-versioning \


--bucket destination \
--versioning-configuration Status=Enabled \
--profile acctA

4. Cree un rol de IAM. Usted especifica este rol en la configuración de replicación que añade al bucket de
origen más adelante. Amazon S3 asume este rol para replicar objetos en su nombre. Crea el rol IAM
en dos pasos:

• Crear un rol.
• Asocie una política de permisos al rol.

a. Cree el rol IAM.

i. Copie la siguiente política de confianza y guárdela en un archivo llamado S3-role-trust-


policy.json en el directorio actual en su equipo local. Esta política concede a la entidad
principal de servicio de Amazon S3 permisos para asumir el rol.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}

ii. Ejecute el siguiente comando para crear un rol.

$ aws iam create-role \


--role-name replicationRole \
--assume-role-policy-document file://s3-role-trust-policy.json \
--profile acctA

b. Asocie una política de permisos al rol.

i. Copie la siguiente política de permisos y guárdela en un archivo llamado S3-role-


permissions-policy.json en el directorio actual en su equipo local. Esta política
concede permisos para varias acciones de buckets y objetos de Amazon S3.

Versión de API 2006-03-01


600
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Resource":[
"arn:aws:s3:::source-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetReplicationConfiguration"
],
"Resource":[
"arn:aws:s3:::source-bucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging"

],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
]
}

ii. Ejecute el siguiente comando para crear una política y asociarla al rol.

$ aws iam put-role-policy \


--role-name replicationRole \
--policy-document file://s3-role-permissions-policy.json \
--policy-name replicationRolePolicy \
--profile acctA

5. Añada la configuración de replicación al bucket de origen.

a. Si bien la API de Amazon S3 requiere la configuración de replicación XML, la AWS CLI requiere
que especifique la configuración de replicación como JSON. Guarde la siguiente JSON en un
archivo denominado replication.json en el directorio local en su equipo.

{
"Role": "IAM-role-ARN",
"Rules": [
{
"Status": "Enabled",
"Priority": 1,
"DeleteMarkerReplication": { "Status": "Disabled" },
"Filter" : { "Prefix": "Tax"},
"Destination": {
"Bucket": "arn:aws:s3:::destination-bucket"
}

Versión de API 2006-03-01


601
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

}
]
}

b. Actualice la JSON proporcionando valores para el bucket de destino y ARN-rol-IAM.


Guarde los cambios.
c. Ejecute el siguiente comando para añadir la configuración de replicación al bucket de origen.
Asegúrese de proporcionar el nombre del bucket de origen.

$ aws s3api put-bucket-replication \


--replication-configuration file://replication.json \
--bucket source \
--profile acctA

Para recuperar la configuración de replicación, utilice el comando get-bucket-replication.

$ aws s3api get-bucket-replication \


--bucket source \
--profile acctA

6. Pruebe la configuración en la consola de Amazon S3:

a. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
b. En el bucket de origen, cree una carpeta llamada Tax.
c. Añada objetos de ejemplo a la carpeta Tax en el bucket de origen.
Note

La cantidad de tiempo que Amazon S3 tarda en replicar un objeto depende del tamaño
del objeto. Para obtener más información sobre cómo ver el estado de la replicación,
consulte Información del estado de replicación (p. 618).

En el bucket de destino, compruebe lo siguiente:

• Ese Amazon S3 replicó los objetos.


• En las propiedades del objeto, que Replication Status está establecido en Replica (lo que lo
identifica como un objeto de réplica).
• En propiedades del objeto, que la sección de permisos no muestra ningún permiso. Esto
significa que la réplica sigue siendo propiedad del propietario del bucket de origen y que el
propietario del bucket de destino no tiene permisos en la réplica del objeto. Puede añadir
opciones de configuración adicionales para indicar a Amazon S3 que cambie la titularidad de la
réplica. Para ver un ejemplo, consulte Ejemplo 3: Cambio del propietario de la réplica cuando
los buckets de origen y de destino son propiedad de cuentas diferentes (p. 609).

Versión de API 2006-03-01


602
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

d. Actualice la ACL de un objeto en el bucket de origen y compruebe que los cambios se reflejen
en el bucket de destino.

Para obtener instrucciones, consulte ¿Cómo puedo configurar permisos en un objeto? en la Guía
del usuario de la consola de Amazon Simple Storage Service.

Configurar la replicación cuando los buckets son propiedad de la misma cuenta


(SDK de AWS)
Utilice los siguientes ejemplos de código para añadir una configuración de replicación a un bucket con
AWS SDK for Java y AWS SDK para .NET, respectivamente.

Java

El siguiente ejemplo añade una configuración de replicación a un bucket y luego recupera y verifica la
configuración. Para obtener instrucciones sobre la creación y comprobación de una muestra funcional,
consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.CreateRoleRequest;
import com.amazonaws.services.identitymanagement.model.PutRolePolicyRequest;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.BucketReplicationConfiguration;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.CreateBucketRequest;
import com.amazonaws.services.s3.model.DeleteMarkerReplication;
import com.amazonaws.services.s3.model.DeleteMarkerReplicationStatus;
import com.amazonaws.services.s3.model.ReplicationDestinationConfig;
import com.amazonaws.services.s3.model.ReplicationRule;
import com.amazonaws.services.s3.model.ReplicationRuleStatus;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;
import com.amazonaws.services.s3.model.StorageClass;
import com.amazonaws.services.s3.model.replication.ReplicationFilter;
import com.amazonaws.services.s3.model.replication.ReplicationFilterPredicate;

Versión de API 2006-03-01


603
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

import com.amazonaws.services.s3.model.replication.ReplicationPrefixPredicate;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class CrossRegionReplication {

public static void main(String[] args) throws IOException {


Regions clientRegion = Regions.DEFAULT_REGION;
String accountId = "*** Account ID ***";
String roleName = "*** Role name ***";
String sourceBucketName = "*** Source bucket name ***";
String destBucketName = "*** Destination bucket name ***";
String prefix = "Tax/";

String roleARN = String.format("arn:aws:iam::%s:role/%s", accountId, roleName);


String destinationBucketARN = "arn:aws:s3:::" + destBucketName;

AmazonS3 s3Client = AmazonS3Client.builder()


.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

createBucket(s3Client, clientRegion, sourceBucketName);


createBucket(s3Client, clientRegion, destBucketName);
assignRole(roleName, clientRegion, sourceBucketName, destBucketName);

try {

// Create the replication rule.


List<ReplicationFilterPredicate> andOperands = new
ArrayList<ReplicationFilterPredicate>();
andOperands.add(new ReplicationPrefixPredicate(prefix));

Map<String, ReplicationRule> replicationRules = new HashMap<String,


ReplicationRule>();
replicationRules.put("ReplicationRule1",
new ReplicationRule()
.withPriority(0)
.withStatus(ReplicationRuleStatus.Enabled)
.withDeleteMarkerReplication(new
DeleteMarkerReplication().withStatus(DeleteMarkerReplicationStatus.DISABLED))
.withFilter(new ReplicationFilter().withPredicate(new
ReplicationPrefixPredicate(prefix)))
.withDestinationConfig(new ReplicationDestinationConfig()
.withBucketARN(destinationBucketARN)
.withStorageClass(StorageClass.Standard)));

// Save the replication rule to the source bucket.


s3Client.setBucketReplicationConfiguration(sourceBucketName,
new BucketReplicationConfiguration()
.withRoleARN(roleARN)
.withRules(replicationRules));

// Retrieve the replication configuration and verify that the configuration


// matches the rule we just set.
BucketReplicationConfiguration replicationConfig =
s3Client.getBucketReplicationConfiguration(sourceBucketName);
ReplicationRule rule = replicationConfig.getRule("ReplicationRule1");

Versión de API 2006-03-01


604
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

System.out.println("Retrieved destination bucket ARN: " +


rule.getDestinationConfig().getBucketARN());
System.out.println("Retrieved priority: " + rule.getPriority());
System.out.println("Retrieved source-bucket replication rule status: " +
rule.getStatus());
} 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();
}
}

private static void createBucket(AmazonS3 s3Client, Regions region, String


bucketName) {
CreateBucketRequest request = new CreateBucketRequest(bucketName,
region.getName());
s3Client.createBucket(request);
BucketVersioningConfiguration configuration = new
BucketVersioningConfiguration().withStatus(BucketVersioningConfiguration.ENABLED);

SetBucketVersioningConfigurationRequest enableVersioningRequest = new


SetBucketVersioningConfigurationRequest(bucketName, configuration);
s3Client.setBucketVersioningConfiguration(enableVersioningRequest);

private static void assignRole(String roleName, Regions region, String


sourceBucket, String destinationBucket) {
AmazonIdentityManagement iamClient =
AmazonIdentityManagementClientBuilder.standard()
.withRegion(region)
.withCredentials(new ProfileCredentialsProvider())
.build();
StringBuilder trustPolicy = new StringBuilder();
trustPolicy.append("{\\r\\n ");
trustPolicy.append("\\\"Version\\\":\\\"2012-10-17\\\",\\r\\n ");
trustPolicy.append("\\\"Statement\\\":[\\r\\n {\\r\\n ");
trustPolicy.append("\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Principal\\
\":{\\r\\n ");
trustPolicy.append("\\\"Service\\\":\\\"s3.amazonaws.com\\\"\\r\\n },\
\r\\n ");
trustPolicy.append("\\\"Action\\\":\\\"sts:AssumeRole\\\"\\r\\n }\\r\\n
]\\r\\n}");

CreateRoleRequest createRoleRequest = new CreateRoleRequest()


.withRoleName(roleName)
.withAssumeRolePolicyDocument(trustPolicy.toString());

iamClient.createRole(createRoleRequest);

StringBuilder permissionPolicy = new StringBuilder();


permissionPolicy.append("{\\r\\n \\\"Version\\\":\\\"2012-10-17\\\",\\r\\n
\\\"Statement\\\":[\\r\\n {\\r\\n ");
permissionPolicy.append("\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Action
\\\":[\\r\\n ");
permissionPolicy.append("\\\"s3:GetObjectVersionForReplication\\\",\\r\\n
");
permissionPolicy.append("\\\"s3:GetObjectVersionAcl\\\"\\r\\n ],\\r\\n
\\\"Resource\\\":[\\r\\n ");
permissionPolicy.append("\\\"arn:aws:s3:::");
permissionPolicy.append(sourceBucket);

Versión de API 2006-03-01


605
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

permissionPolicy.append("/*\\\"\\r\\n ]\\r\\n },\\r\\n {\\r\


\n ");
permissionPolicy.append("\\\"Effect\\\":\\\"Allow\\\",\\r\\n \\\"Action
\\\":[\\r\\n ");
permissionPolicy.append("\\\"s3:ListBucket\\\",\\r\\n \\
\"s3:GetReplicationConfiguration\\\"\\r\\n ");
permissionPolicy.append("],\\r\\n \\\"Resource\\\":[\\r\\n \
\\"arn:aws:s3:::");
permissionPolicy.append(sourceBucket);
permissionPolicy.append("\\r\\n ");
permissionPolicy.append("]\\r\\n },\\r\\n {\\r\\n \\\"Effect\
\\":\\\"Allow\\\",\\r\\n ");
permissionPolicy.append("\\\"Action\\\":[\\r\\n \\
\"s3:ReplicateObject\\\",\\r\\n ");
permissionPolicy.append("\\\"s3:ReplicateDelete\\\",\\r\\n \\
\"s3:ReplicateTags\\\",\\r\\n ");
permissionPolicy.append("\\\"s3:GetObjectVersionTagging\\\"\\r\\n\\r\\n
],\\r\\n ");
permissionPolicy.append("\\\"Resource\\\":\\\"arn:aws:s3:::");
permissionPolicy.append(destinationBucket);
permissionPolicy.append("/*\\\"\\r\\n }\\r\\n ]\\r\\n}");

PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest()


.withRoleName(roleName)
.withPolicyDocument(permissionPolicy.toString())
.withPolicyName("crrRolePolicy");

iamClient.putRolePolicy(putRolePolicyRequest);

}
}

C#

El siguiente código de ejemplo de AWS SDK para .NET añade una configuración de replicación a
un bucket y luego la recupera. Para usar este código, proporcione los nombres de los buckets y el
nombre de recurso de Amazon (ARN) para el rol de IAM. Para obtener instrucciones acerca de cómo
crear y probar una muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon
S3 (p. 708).

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class CrossRegionReplicationTest
{
private const string sourceBucket = "*** source bucket ***";
// Bucket ARN example - arn:aws:s3:::destinationbucket
private const string destinationBucketArn = "*** destination bucket ARN ***";
private const string roleArn = "*** IAM Role ARN ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint sourceBucketRegion =
RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
public static void Main()
{
s3Client = new AmazonS3Client(sourceBucketRegion);
EnableReplicationAsync().Wait();

Versión de API 2006-03-01


606
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configuración de buckets en la misma cuenta

}
static async Task EnableReplicationAsync()
{
try
{
ReplicationConfiguration replConfig = new ReplicationConfiguration
{
Role = roleArn,
Rules =
{
new ReplicationRule
{
Prefix = "Tax",
Status = ReplicationRuleStatus.Enabled,
Destination = new ReplicationDestination
{
BucketArn = destinationBucketArn
}
}
}
};

PutBucketReplicationRequest putRequest = new


PutBucketReplicationRequest
{
BucketName = sourceBucket,
Configuration = replConfig
};

PutBucketReplicationResponse putResponse = await


s3Client.PutBucketReplicationAsync(putRequest);

// Verify configuration by retrieving it.


await RetrieveReplicationConfigurationAsync(s3Client);
}
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);
}
}
private static async Task RetrieveReplicationConfigurationAsync(IAmazonS3
client)
{
// Retrieve the configuration.
GetBucketReplicationRequest getRequest = new GetBucketReplicationRequest
{
BucketName = sourceBucket
};
GetBucketReplicationResponse getResponse = await
client.GetBucketReplicationAsync(getRequest);
// Print.
Console.WriteLine("Printing replication configuration information...");
Console.WriteLine("Role ARN: {0}", getResponse.Configuration.Role);
foreach (var rule in getResponse.Configuration.Rules)
{
Console.WriteLine("ID: {0}", rule.Id);
Console.WriteLine("Prefix: {0}", rule.Prefix);
Console.WriteLine("Status: {0}", rule.Status);
}
}

Versión de API 2006-03-01


607
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 2: Configuración de buckets en cuentas diferentes

}
}

Ejemplo 2: Configuración de la replicación cuando los


buckets de origen y destino son propiedad de cuentas
diferentes
La configuración de replicación cuando los buckets de origen y de destino son propiedad de diferentes
cuentas de AWS es similar a la configuración de replicación cuando los dos buckets son propiedad de la
misma cuenta. La única diferencia es que el propietario del bucket de destino debe otorgar al propietario
del bucket de origen permiso para replicar objetos añadiendo una política de bucket.

Para configurar la replicación cuando los buckets de origen y destino son propiedad de cuentas
diferentes de AWS

1. En este ejemplo, crea los bucket de origen y de destino en la dos cuentas de AWS diferentes.
Tiene que tener dos perfiles de credenciales configurados para la CLI de AWS (en este ejemplo,
utilizamos acctA y acctB para los nombres de perfil). Para obtener más información acerca de la
configuración de perfiles de credenciales, consulte Perfiles con nombre en la AWS Command Line
Interface Guía del usuario.
2. Siga las instrucciones paso a paso en Ejemplo 1: Configuración de buckets en la misma
cuenta (p. 599) con los siguientes cambios:

• Para todos los comandos de la AWS CLI relacionados con actividades del bucket de origen (para
crear el bucket de origen, habilitar el control de versiones y crear el rol de IAM), utilice el perfil
acctA. Utilice el perfil acctB para crear el bucket de destino.
• Asegúrese de que la política de permisos especifica los bucket de origen y de destino creados
para este ejemplo.
3. En la consola, añada la siguiente política de bucket al bucket de destino para permitir al propietario
del bucket de origen replicar objetos: Asegúrese de editar la política proporcionando el ID de cuenta
de AWS del propietario del bucket de origen y el nombre del bucket de destino.

{
"Version":"2008-10-17",
"Id":"",
"Statement":[
{
"Sid":"Stmt123",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::source-bucket-owner-AWS-acct-ID:root"
},
"Action":["s3:ReplicateObject", "s3:ReplicateDelete"],
"Resource":"arn:aws:s3:::destination/*"
}
]
}

Elija el bucket y añada la política de buckets. Para obtener instrucciones, consulte ¿Cómo agrego una
política de bucket en S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Versión de API 2006-03-01


608
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 3: Cambio del propietario de la réplica

Ejemplo 3: Cambio del propietario de la réplica cuando


los buckets de origen y de destino son propiedad de
cuentas diferentes
Cuando los buckets de origen y de destino de una configuración de replicación son propiedad de
diferentes cuentas de AWS, puede indicar a Amazon S3 que cambie la titularidad de la réplica a la cuenta
de AWS propietaria del bucket de destino. En este ejemplo se explica cómo utilizar la consola de
Amazon S3 y la AWS CLI para cambiar la propiedad de la réplica. Para obtener más información, consulte
Configuración de replicación adicional: cambiar el propietario de la réplica (p. 591).

Cambiar el propietario de la réplica cuando los buckets de origen y de destino son


propiedad de cuentas diferentes (consola)
Para obtener instrucciones paso a paso, consulte Configuración de una regla de replicación cuando el
bucket de destino está en otra cuenta de AWS en la Guía del usuario de la consola de Amazon Simple
Storage Service.

Cambiar el propietario de la réplica cuando los buckets de origen y de destino son


propiedad de cuentas diferentes (CLI de AWS)
Para cambiar la propiedad de la réplica con la AWS CLI, es necesario crear buckets, habilitar el control de
versiones en los buckets, crear un rol de IAM que dé a Amazon S3 permiso para replicar objetos y agregar
la configuración de replicación al bucket de origen. En la configuración de replicación indica a Amazon S3
que cambie la titularidad de la réplica. Ahora puede probar la configuración.

Parar cambiar la titularidad de la réplica cuando los buckets de origen y de destino son propiedad
de cuentas de AWS diferentes (CLI de AWS)

1. En este ejemplo, crea los buckets de origen y de destino en dos cuentas de AWS diferentes.
Configure la CLI de AWS con dos perfiles con nombre. Este ejemplo usa los nombres de perfil acctA
y acctB respectivamente. Para obtener más información acerca de la configuración de perfiles de
credenciales, consulte Perfiles con nombre en la AWS Command Line Interface Guía del usuario.
Important

Los perfiles utilizados para este ejercicio tienen que tener los permisos necesarios. Por
ejemplo, en la configuración de replicación especifica el rol de IAM que Amazon S3 puede
asumir. Solo puede hacer esto si el perfil que utiliza tiene el permiso iam:PassRole. Si
utiliza credenciales de usuario de administrador para crear un perfil con nombre, puede
realizar todas las tareas. Para obtener más información, consulte Concesión de permisos a
un usuario para transferir un rol a un servicio de AWS en la Guía del usuario de IAM.

Tendrá que asegurarse de que estos permisos tengan los permisos necesarios. Por ejemplo, la
configuración de replicación incluye un rol de IAM que Amazon S3 puede asumir. El perfil con
nombre utilizado para asociar dicha configuración a un bucket solo puede hacerlo si tiene el permiso
iam:PassRole. Si especifica credenciales de usuario de administrador al crear estos perfiles con
nombre, entonces tienen todos los permisos. Para obtener más información, consulte Concesión de
permisos a un usuario para transferir un rol a un servicio de AWS en la Guía del usuario de IAM.
2. Cree el bucket de origen y habilite el control de versiones. En este ejemplo, se crea el bucket de
origen en la región US East (N. Virginia) (us-east-1).

aws s3api create-bucket \


--bucket source \
--region us-east-1 \

Versión de API 2006-03-01


609
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 3: Cambio del propietario de la réplica

--profile acctA

aws s3api put-bucket-versioning \


--bucket source \
--versioning-configuration Status=Enabled \
--profile acctA

3. Cree un bucket de destino y habilite el control de versiones. En este ejemplo, se crea el bucket
de destino en la región EE.UU. Oeste (Oregón) (us-west-2). Utilice un perfil de cuenta de AWS
diferente al utilizado para el bucket de origen.

aws s3api create-bucket \


--bucket destination \
--region us-west-2 \
--create-bucket-configuration LocationConstraint=us-west-2 \
--profile acctB

aws s3api put-bucket-versioning \


--bucket destination \
--versioning-configuration Status=Enabled \
--profile acctB

4. Debe añadir permisos a la política del bucket de destino para permitir el cambio de titularidad de la
réplica.

a. Guarde la siguiente política en destination-bucket-policy.json

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "<destination_bucket_policy_sid>",
"Principal": {
"AWS": "<src_account>"
},
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Effect": "Allow",
"Resource": [
"arn:<partition>:s3:::<destination_bucket_name>/*"
]
}
]
}

b. Coloque la política anterior en el bucket de destino:

aws s3api put-bucket-policy --region ${destination_region} --bucket


${destination_bucket_name} --policy file://destination_bucket_policy.json

5. Cree de un rol de IAM. Usted especifica este rol en la configuración de replicación que añade al bucket
de origen más adelante. Amazon S3 asume este rol para replicar objetos en su nombre. Crea el rol
IAM en dos pasos:

• Crear un rol.
• Asocie una política de permisos al rol.

Versión de API 2006-03-01


610
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 3: Cambio del propietario de la réplica

a. Cree un rol de IAM.

i. Copie la siguiente política de confianza y guárdela en un archivo llamado S3-role-trust-


policy.json en el directorio actual en su equipo local. Esta política concede a Amazon S3
permisos para asumir el rol.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}

ii. Ejecute el siguiente comando de AWS CLI para crear un rol.

$ aws iam create-role \


--role-name replicationRole \
--assume-role-policy-document file://s3-role-trust-policy.json \
--profile acctA

b. Asocie una política de permisos al rol.

i. Copie la siguiente política de permisos y guárdela en un archivo llamado s3-role-perm-


pol-changeowner.json en el directorio actual en su equipo local. Esta política concede
permisos para varias acciones de buckets y objetos de Amazon S3. En los siguientes pasos,
crea un rol de IAM y asocia esta política al rol.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Resource":[
"arn:aws:s3:::source/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetReplicationConfiguration"
],
"Resource":[
"arn:aws:s3:::source"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",

Versión de API 2006-03-01


611
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 3: Cambio del propietario de la réplica

"s3:ObjectOwnerOverrideToBucketOwner",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging"
],
"Resource":"arn:aws:s3:::destination/*"
}
]
}

ii. Para crear una política y asociarla al rol, ejecute el siguiente comando.

$ aws iam put-role-policy \


--role-name replicationRole \
--policy-document file://s3-role-perm-pol-changeowner.json \
--policy-name replicationRolechangeownerPolicy \
--profile acctA

6. Añadir una configuración de replicación al bucket de origen.

a. La AWS CLI requiere que especifique la configuración de replicación como JSON. Guarde la
siguiente JSON en un archivo denominado replication.json en el directorio actual en su
equipo local. En la configuración, la adición de AccessControlTranslation para indicar un
cambio en la titularidad de la réplica.

{
"Role":"IAM-role-ARN",
"Rules":[
{
"Status":"Enabled",
"Priority":"1",
"DeleteMarkerReplication":{
"Status":"Disabled"
},
"Filter":{
"Prefix":"Tax"
},
"Status":"Enabled",
"Destination":{
"Bucket":"arn:aws:s3:::destination",
"Account":"destination-bucket-owner-account-id",
"AccessControlTranslation":{
"Owner":"Destination"
}
}
}
]
}

b. Edite la JSON proporcionando valores para el ID de la cuenta del propietario del bucket de
destino y ARN-rol-IAM. Guarde los cambios.
c. Para añadir la configuración de replicación al bucket de origen, ejecute el siguiente comando.
Proporcione el nombre del bucket de origen.

$ aws s3api put-bucket-replication \


--replication-configuration file://replication-changeowner.json \
--bucket source \
--profile acctA

7. Compruebe la propiedad de la réplica en la consola de Amazon S3.

a. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
Versión de API 2006-03-01
612
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicación de objetos cifrados

b. En el bucket de origen, cree una carpeta llamada Tax.


c. Añada objetos a la carpeta en el bucket de origen. Compruebe que el bucket de destino
contiene réplicas de objetos y que la titularidad de las réplicas ha cambiado a la cuenta de AWS
propietaria del bucket de destino.

Cambiar el propietario de la réplica cuando los buckets de origen y de destino son


propiedad de cuentas diferentes (SDK de AWS)
Para informarse sobre un ejemplo de código que añadir a la configuración de replicación, consulte
Configurar la replicación cuando los buckets son propiedad de la misma cuenta (SDK de AWS) (p. 603).
Tiene que modificar la configuración de replicación en concordancia. Para obtener información conceptual,
consulte Configuración de replicación adicional: cambiar el propietario de la réplica (p. 591).

Ejemplo 4: Replicación de objetos cifrados


De forma predeterminada, Amazon S3 no replica los objetos almacenados en reposo mediante cifrado
del lado del servidor con claves administradas por AWS KMS. Para replicar objetos cifrados, es necesario
modificar la configuración de replicación del bucket para indicar a Amazon S3 que replique estos objetos.
Este ejemplo explica cómo usar la consola de Amazon S3 y la AWS Command Line Interface (AWS CLI)
para cambiar la configuración de replicación del bucket para habilitar objetos cifrados. Para obtener más
información, consulte Configuración adicional de replicación: replicar objetos creados con el cifrado en el
servidor (SSE) mediante claves de cifrado almacenadas en AWS KMS (p. 593).

Replicar objetos cifrados (consola)


Para obtener instrucciones paso a paso, consulte ¿Cómo puedo añadir una regla de replicación a un
bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service. Este tema
proporciona instrucciones para establecer la configuración de replicación cuando los buckets son
propiedad de la misma cuenta de AWS y de cuentas diferentes.

Replicar objetos cifrados (CLI de AWS)


Para replicar objetos cifrados con la AWS CLI, es necesario crear buckets, habilitar el control de versiones
en los buckets, crear un rol de IAM que dé a Amazon S3 permiso para replicar objetos y agregar la
configuración de replicación al bucket de origen. La configuración de replicación proporciona información
relacionada con objetos de replicación cifrados mediante claves de KMS. Los permisos del rol de IAM
incluye los permisos necesarios para replicar los objetos cifrados. Ahora puede probar la configuración.

Para replicar objetos cifrados (CLI de AWS)

1. En este ejemplo, creamos los bucket de origen y de destino en la misma cuenta de AWS.
Configure un perfil de credenciales para la AWS CLI. En este ejemplo, usamos el nombre de perfil
acctA. Para obtener más información acerca de la configuración de perfiles de credenciales, consulte
Perfiles con nombre en la AWS Command Line Interface Guía del usuario.
2. Cree el bucket de origen y habilite el control de versiones. En este ejemplo, creamos el bucket de
origen en la región US East (N. Virginia) (us-east-1).

aws s3api create-bucket \


--bucket source \
--region us-east-1 \
--profile acctA

aws s3api put-bucket-versioning \


--bucket source \
--versioning-configuration Status=Enabled \

Versión de API 2006-03-01


613
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicación de objetos cifrados

--profile acctA

3. Cree el bucket de destino y habilite el control de versiones. En este ejemplo, creamos el bucket de
destino en la región EE.UU. Oeste (Oregón) (us-west-2).
Note

Para establecer la configuración de replicación cuando los buckets de origen y de destino


están en la misma cuenta de AWS, utilice el mismo perfil. En este ejemplo, usaremos acctA.
Para probar la configuración de replicación cuando los buckets son propiedad de diferentes
cuentas de AWS, debe especificar diferentes perfiles para cada uno.

aws s3api create-bucket \


--bucket destination \
--region us-west-2 \
--create-bucket-configuration LocationConstraint=us-west-2 \
--profile acctA

aws s3api put-bucket-versioning \


--bucket destination \
--versioning-configuration Status=Enabled \
--profile acctA

4. Cree un rol de IAM. Usted especifica este rol en la configuración de replicación que añade al bucket de
origen más adelante. Amazon S3 asume este rol para replicar objetos en su nombre. Crea el rol IAM
en dos pasos:

• Cree un rol
• Asocie una política de permisos al rol

a. Cree un rol de IAM.

i. Copie la siguiente política de confianza y guárdela en un archivo llamado s3-role-trust-


policy-kmsobj.json en el directorio actual en su equipo local. Esta política concede
permisos a la entidad principal de servicio Amazon S3 a asumir el rol para que Amazon S3
puede realizar tareas en su nombre.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}

ii. Crear un rol:

$ aws iam create-role \


--role-name replicationRolekmsobj \
--assume-role-policy-document file://s3-role-trust-policy-kmsobj.json \
--profile acctA

b. Asocie una política de permisos al rol. Esta política concede permisos para varias acciones de
buckets y objetos de Amazon S3.
Versión de API 2006-03-01
614
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicación de objetos cifrados

i. Copie la siguiente política de permisos y guárdela en un archivo llamado s3-role-


permissions-policykmsobj.json en el directorio actual en su equipo local. Cree un rol
de IAM y asóciele la política más adelante.
Important

En la política de permisos especifica la clave de los ID de AWS KMS que se


empleará para el cifrado del origen y los buckets de destination. Debe crear dos
claves de KMS independientes para el source y los buckets de destination. Las
claves de KMS nunca se comparten fuera de la región de AWS en la que se crearon.

{
"Version":"2012-10-17",
"Statement":[
{
"Action":[
"s3:ListBucket",
"s3:GetReplicationConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::source",
"arn:aws:s3:::source/*"
]
},
{
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging"
],
"Effect":"Allow",
"Condition":{
"StringLikeIfExists":{
"s3:x-amz-server-side-encryption":[
"aws:kms",
"AES256"
],
"s3:x-amz-server-side-encryption-aws-kms-key-id":[
"AWS KMS key IDs(in ARN format) to use for encrypting object
replicas"
]
}
},
"Resource":"arn:aws:s3:::destination/*"
},
{
"Action":[
"kms:Decrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.us-east-1.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::source/*"
]
}
},
"Resource":[

Versión de API 2006-03-01


615
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicación de objetos cifrados

"AWS KMS key IDs(in ARN format) used to encrypt source objects."
]
},
{
"Action":[
"kms:Encrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.us-west-2.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::destination/*"
]
}
},
"Resource":[
"AWS KMS key IDs(in ARN format) to use for encrypting object
replicas"
]
}
]
}

ii. Cree una política y asóciela al rol:

$ aws iam put-role-policy \


--role-name replicationRolekmsobj \
--policy-document file://s3-role-permissions-policykmsobj.json \
--policy-name replicationRolechangeownerPolicy \
--profile acctA

5. Añada la siguiente configuración de replicación al bucket de origen. Le indica a Amazon S3 que


replique todos los objetos con el prefijo Tax/ al bucket de destino.
Important

En la configuración de replicación especifica el rol de IAM que Amazon S3 puede asumir.


Solo puede hacer esto si tiene el permiso iam:PassRole. El perfil que especifique el
comando de la CLI tiene que tener el permiso. Para obtener más información, consulte
Concesión de permisos a un usuario para transferir una función a un servicio de AWS en la
Guía del usuario de IAM.

<ReplicationConfiguration>
<Role>IAM-Role-ARN</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Status>Enabled</Status>
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
<Bucket>arn:aws:s3:::dest-bucket-name</Bucket>
<EncryptionConfiguration>

Versión de API 2006-03-01


616
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicación de objetos cifrados

<ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</


ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
</Rule>
</ReplicationConfiguration>

Para añadir la configuración de replicación al bucket de origen, haga lo siguiente:

a. La AWS CLI requiere que especifique la configuración de replicación como JSON. Guarde la
siguiente JSON en un archivo (replication.json) en el directorio actual en su equipo local.

{
"Role":"IAM-Role-ARN",
"Rules":[
{
"Status":"Enabled",
"Priority":1,
"DeleteMarkerReplication":{
"Status":"Disabled"
},
"Filter":{
"Prefix":"Tax"
},
"Destination":{
"Bucket":"arn:aws:s3:::destination",
"EncryptionConfiguration":{
"ReplicaKmsKeyID":"AWS KMS key IDs(in ARN format) to use for
encrypting object replicas"
}
},
"SourceSelectionCriteria":{
"SseKmsEncryptedObjects":{
"Status":"Enabled"
}
}
}
]
}

b. Edite la JSON para proporcionar valores para el bucket de destino, ARN del ID de KMS y
IAM-rol-ARN Guarde los cambios.
c. Añada la configuración de replicación al bucket de origen. Asegúrese de proporcionar el nombre
del bucket de origen.

$ aws s3api put-bucket-replication \


--replication-configuration file://replication.json \
--bucket source \
--profile acctA

6. Compruebe la configuración para verificar que se han replicado los objetos cifrados. En la consola de
Amazon S3:

a. Inicie sesión en la consola de administración de AWS y abra la consola de Amazon S3 en https://


console.aws.amazon.com/s3/.
b. En el bucket de origen, cree una carpeta llamada Tax.
c. Añada objetos de ejemplo a la carpeta. Asegúrese de elegir la opción de cifrado y especifique su
clave de KMS para cifrar los objetos.
d. Verifique que el bucket de destino contiene las réplicas de objeto y se cifran con la clave de
cifrado de KMS que especificó en la configuración.
Versión de API 2006-03-01
617
Amazon Simple Storage Service Guía del desarrollador
Información del estado de replicación

Para replicar objetos cifrados (SDK de AWS)


Para informarse sobre un ejemplo de código que añadir a la configuración de replicación, consulte
Configurar la replicación cuando los buckets son propiedad de la misma cuenta (SDK de AWS) (p. 603).
Tiene que modificar la configuración de replicación en concordancia.

Para obtener información conceptual, consulte Configuración adicional de replicación: replicar


objetos creados con el cifrado en el servidor (SSE) mediante claves de cifrado almacenadas en AWS
KMS (p. 593).

Información del estado de replicación


Para obtener el estado de replicación de los objetos en un bucket, use la herramienta de inventario de
Amazon S3. Amazon S3 envía un archivo CSV al bucket de destino que especifique en la configuración
de inventario. También puede usar Amazon Athena para consultar el estado de replicación en el informe
de inventario. Para obtener más información acerca del inventario de Amazon S3, consulte Inventario de
Amazon S3 (p. 439).

En la replicación, tiene un bucket de origen en el que se configura la replicación y un bucket de destino


donde Amazon S3 replica los objetos. Cuando solicita un objeto (utilizando el objeto GET) o los metadatos
de un objeto (utilizando el objeto HEAD) de estos buckets, Amazon S3 devuelve el encabezado x-amz-
replication-status en la respuesta, como se indica a continuación:

• Al solicitar un objeto del bucket de origen, Amazon S3 devuelve el encabezado x-amz-replication-


status si el objeto de su solicitud cumple los requisitos para la replicación.

Por ejemplo, supongamos que en la configuración de replicación, usted especifica el prefijo del objeto
TaxDocs en la configuración de replicación para indicar a Amazon S3 que replique objetos con el prefijo
de nombre de clave TaxDocs. Cualquier objeto que cargue que tenga este prefijo de nombre de clave,
por ejemplo, TaxDocs/document1.pdf, se replicará. Para solicitudes de objetos con este prefijo de
nombre de clave, Amazon S3 devuelve el encabezado x-amz-replication-status con uno de los
siguientes valores para el estado de replicación del objeto: PENDING, COMPLETED o FAILED.
Note
Si la replicación de objetos genera un error después de cargar un objeto, no puede volver a
intentar la replicación. Deberá cargar de nuevo el objeto.
• Cuando solicite un objeto del bucket de destino, si el objeto que solicitó es una réplica que creó Amazon
S3, Amazon S3 devuelve el encabezado x-amz-replication-status con el valor REPLICA.

Puede buscar el estado de replicación de un objeto utilizando la consola, la AWS Command Line Interface
(AWS CLI) o el SDK de AWS.

• Consola: seleccione el objeto y seleccione Properties (Propiedades) para ver las propiedades del objeto
y el estado de replicación.
• AWS CLI: utilice el comando head-object de la AWS CLI para recuperar los metadatos del objeto.

aws s3api head-object --bucket source-bucket --key object-key --version-id object-


version-id

El comando devuelve los metadatos del objeto, incluido el ReplicationStatus como se muestra en el
siguiente ejemplo de respuesta.

{
"AcceptRanges":"bytes",
"ContentType":"image/jpeg",

Versión de API 2006-03-01


618
Amazon Simple Storage Service Guía del desarrollador
Temas relacionados

"LastModified":"Mon, 23 Mar 2015 21:02:29 GMT",


"ContentLength":3191,
"ReplicationStatus":"COMPLETED",
"VersionId":"jfnW.HIMOfYiD_9rGbSkmroXsFj3fqZ.",
"ETag":"\"6805f2cfc46c0f04559748bb039d69ae\"",
"Metadata":{

}
}

• SDK de AWS: los siguientes fragmentos de código obtienen el estado de replicación con AWS SDK for
Java y AWS SDK para .NET, respectivamente.
• AWS SDK for Java

GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest(bucketName,


key);
ObjectMetadata metadata = s3Client.getObjectMetadata(metadataRequest);

System.out.println("Replication Status : " +


metadata.getRawMetadataValue(Headers.OBJECT_REPLICATION_STATUS));

• AWS SDK para .NET

GetObjectMetadataRequest getmetadataRequest = new GetObjectMetadataRequest


{
BucketName = sourceBucket,
Key = objectKey
};

GetObjectMetadataResponse getmetadataResponse =
client.GetObjectMetadata(getmetadataRequest);
Console.WriteLine("Object replication status: {0}",
getmetadataResponse.ReplicationStatus);

Note
Antes de eliminar un objeto del bucket de origen que tiene activada la replicación, revise el estado
de replicación del objeto para asegurarse de que el objeto haya sido replicado.
Si la configuración del ciclo de vida está activada en el bucket de origen, Amazon S3 suspende
las acciones de ciclo de vida hasta que marque el estado de los objetos como COMPLETED o
FAILED.

Temas relacionados
Replicación (p. 573)

Solución de problemas de replicación


Si las réplicas de objetos no aparecen en el bucket de destino después de configurar la replicación, use
estos consejos de solución de problemas para identificar y solucionar los problemas.

• El tiempo que Amazon S3 tarda en replicar un objeto depende del tamaño del objeto. La replicación
puede tardar varias horas para los objetos grandes. Si el objeto que se está replicando es grande, vuelva
a revisar posteriormente para ver si aparece en el bucket de destino. También puede comprobar el
estado de replicación del objeto de origen. Si el estado de replicación de objetos está pendiente, sabe
que Amazon S3 no ha completado la replicación. Si el estado de la replicación de objetos genera un
error, verifique la configuración de replicación definida en el bucket de origen.

Versión de API 2006-03-01


619
Amazon Simple Storage Service Guía del desarrollador
Temas relacionados

• En la configuración de replicación en el bucket de origen, verifique lo siguiente:


• El Nombre de recurso de Amazon (ARN) del bucket de destino es correcto.
• El prefijo de nombre de clave sea correcto. Por ejemplo, si establece la configuración para replicar
objetos con el prefijo Tax, entonces, solo se replicarán los objetos con nombres de clave como Tax/
document1 o Tax/document2. No se replicará un objeto con el nombre de clave document3.
• El estado es enabled.
• Si el bucket de destino pertenece a otra cuenta de AWS, compruebe que el propietario del bucket tenga
una política de bucket en el bucket de destino que permita al propietario del bucket de origen replicar
objetos. Para ver un ejemplo, consulte Ejemplo 2: Configuración de la replicación cuando los buckets de
origen y destino son propiedad de cuentas diferentes (p. 608).
• Si la réplica de un objeto no aparece en el bucket de destino, lo siguiente podría haber impedido la
replicación:
• Amazon S3 no replica los objetos de un bucket de origen si son una réplica creada por otra
configuración de replicación. Por ejemplo, si establece la configuración de replicación del bucket A en
el bucket B y, luego, en el bucket C, Amazon S3 no replica las réplicas de objetos del bucket B en el
bucket C.
• Un propietario de bucket de origen puede conceder permisos a otras cuentas de AWS para cargar
objetos. De forma predeterminada, el propietario del bucket de origen no tiene permisos sobre los
objetos creados por otras cuentas. La configuración de replicación solo replica los objetos para
los que el propietario del bucket de origen tiene permisos de acceso. El propietario del bucket de
origen puede conceder permisos a otras cuentas de AWS para crear objetos con la condición de que
tengan permisos de acceso explícitos para esos objetos. Para ver una política de ejemplo, consulte
Concesión de permisos entre cuentas para cargar objetos al mismo tiempo que se garantiza que el
propietario del bucket tenga el control total (p. 393).
• Supongamos que en la configuración de replicación añade una regla para replicar un subconjunto de
objetos que tengan una etiqueta específica. En este caso, debe asignar la clave de etiqueta y el valor
específicos en el momento de crear el objeto para que Amazon S3 replique el objeto. Si primero crea un
objeto y luego agrega la etiqueta al objeto existente, Amazon S3 no replica el objeto.

Temas relacionados
Replicación (p. 573)

Replicación: consideraciones adicionales


Amazon S3 también admite configuraciones de bucket para lo siguiente:

• Control de versiones: para obtener más información, consulte Uso del control de versiones (p. 449).
• Alojamiento en sitio web: para obtener más información, consulte Alojamiento de un sitio web estático en
Amazon S3 (p. 523).
• Acceso al bucket a través de una política de bucket o una lista de control de acceso (ACL): para obtener
más información, consulte Uso de políticas de bucket y usuario (p. 353) y Administración de acceso con
ACL (p. 418).
• Almacenamiento de registros: para obtener más información, Registro de acceso al servidor de Amazon
S3 (p. 674).
• Gestión del ciclo de vida de objetos en un bucket: para obtener más información, consulte
Administración del ciclo de vida de los objetos (p. 127)

En este tema se explica cómo la configuración de replicación de un bucket afecta a comportamiento de


estas configuraciones de bucket.

Versión de API 2006-03-01


620
Amazon Simple Storage Service Guía del desarrollador
Configuración de ciclo de vida y réplicas de objetos

Temas
• Configuración de ciclo de vida y réplicas de objetos (p. 621)
• Configuración del control de versión y la replicación (p. 621)
• Configuración de registro y replicación (p. 621)
• CRR y la región de destino (p. 622)
• Interrupción temporal de replicación (p. 622)
• Temas relacionados (p. 622)

Configuración de ciclo de vida y réplicas de objetos


El tiempo que Amazon S3 tarda en replicar un objeto depende del tamaño del objeto. Si los objetos
son grandes, puede tardar varias horas. Aunque puede pasar un tiempo antes de que una réplica
esté disponible en el bucket de destino, se tarda lo mismo en crear la réplica que en crear el objeto
correspondiente en el bucket de destino. Si se habilita una política de ciclo de vida en el bucket de destino,
las reglas de ciclo de vida respetan la hora de creación original del objeto y no la hora en que la réplica
estuvo disponible en el bucket de destino.

Si cuenta con una política de ciclo de vida para la caducidad de un objeto en el bucket sin control de
versiones y quiere mantener el mismo comportamiento de eliminación cuando habilite el control de
versiones, debe agregar una política de vencimiento no actual para administrar las eliminaciones de
versiones de objetos no actuales en el bucket con control de versiones.

La configuración de replicación requiere que el bucket tenga habilitado el control de versiones. Cuando
habilite el control de versiones en un bucket, tenga en cuenta lo siguiente:

• Si dispone de una política de ciclo de vida de expiración de objeto, después de habilitar el control
de versiones, debe añadir una política NonCurrentVersionExpiration para mantener el mismo
comportamiento de eliminación permanente que antes de habilitar el control de versiones.
• Si tiene una política de ciclo de vida de transición, después de habilitar el control de versiones, considere
la posibilidad de añadir la política NonCurrentVersionTransition.

Configuración del control de versión y la replicación


Cuando configura la replicación en un bucket, los buckets de origen y destino deben tener el control de
versiones habilitado. Después de habilitar el control de versiones en los buckets de origen y destino, y de
configurar la replicación en el bucket de origen, encontrará los siguientes problemas:

• Si intenta deshabilitar el control de versiones en el bucket de origen, Amazon S3 devolverá un error.


Debe eliminar la configuración replicación antes de poder deshabilitar el control de versiones en el
bucket de origen.
• Si deshabilita el control de versiones en el bucket de destino, la replicación generará un error. El objeto
de origen tiene el estado de replicación Failed.

Configuración de registro y replicación


Si Amazon S3 distribuye registros a un bucket que tiene la replicación habilitada, replica los objetos del
registro.

Si los registros de acceso al servidor (Registro de acceso al servidor de Amazon S3 (p. 674)) o registros
de AWS CloudTrail (Registro de llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 647))
están habilitados en el bucket de origen o de destino, Amazon S3 incluye las solicitudes relacionadas con
la replicación en los registros. Por ejemplo, Amazon S3 registra cada objeto que replica.

Versión de API 2006-03-01


621
Amazon Simple Storage Service Guía del desarrollador
CRR y la región de destino

CRR y la región de destino


En la configuración de replicación entre regiones (CRR), los buckets de origen y destino deben estar en
diferentes regiones de AWS. Puede elegir la región del bucket de destino en función de sus necesidades
empresariales o consideraciones económicas. Por ejemplo, los cargos por transferencia de datos entre
regiones varían en función de las regiones que elija. Suponga que ha elegido US East (N. Virginia) (us-
east-1) como la región para su bucket de origen. Si elige EE.UU. Oeste (Oregón) (us-west-2) como la
región del bucket de destino, pagará más que si elige la región EE.UU. Este (Ohio) (us-east-2). Para
obtener información sobre los precios, consulte la sección "Precios de transferencia de datos" en Precios
de Amazon S3. No existen cargos de transferencia de datos asociados a la replicación entre regiones
(SRR)

Interrupción temporal de replicación


Para detener temporalmente la replicación, deshabilite la regla correspondiente en la configuración de
replicación.

Si la replicación está habilitada y elimina el rol de IAM que concede a Amazon S3 los permisos necesarios,
la replicación genera un error. Amazon S3 notificará el estado de replicación de los objetos afectados como
Failed.

Temas relacionados
Replicación (p. 573)

Versión de API 2006-03-01


622
Amazon Simple Storage Service Guía del desarrollador
Solicitudes de redireccionamiento en la API REST

Direccionamiento de solicitudes
Temas
• Solicitudes de redireccionamiento en la API REST (p. 623)
• Consideraciones acerca del DNS (p. 627)

Los programas que realizan solicitudes a buckets creados con la API <CreateBucketConfiguration> deben
admitir el redireccionamiento. Además, algunos clientes que no respetan los TTL de DNS podrían producir
problemas.

En esta sección se describe el direccionamiento y algunas cuestiones sobre DNS que se deben tener en
cuenta al usar Amazon S3.

Solicitudes de redireccionamiento en la API REST


Amazon S3 utiliza el Domain Name System (DNS, Sistema de nombres de dominio) para dirigir las
solicitudes a las ubicaciones que pueden procesarlas. Este sistema es eficaz, pero se pueden producir
errores de direccionamiento temporal. Si una solicitud llega a la ubicación incorrecta de Amazon S3,
Amazon S3 responde con un redireccionamiento temporal que le indica al solicitante que debe volver a
enviar la solicitud a un nuevo punto de enlace. Si una solicitud se realiza incorrectamente, Amazon S3
utiliza el redireccionamiento permanente para proporcionar instrucciones sobre cómo realizar la solicitud
correctamente.
Important

Para utilizar esta característica, debe tener una aplicación que pueda gestionar las respuestas
de redirección de Amazon S3. La única excepción es para las aplicaciones que funcionan
exclusivamente con buckets creados sin <CreateBucketConfiguration>. Para obtener más
información acerca de las restricciones de ubicación, consulte Acceso a un bucket (p. 57).
Para todas las regiones que se lanzaron después del 20 de marzo de 2019, si una solicitud llega
a la ubicación de Amazon S3 incorrecta, Amazon S3 devuelve un error de solicitud errónea HTTP
400.
Para obtener más información sobre cómo habilitar y deshabilitar una región de AWS, consulte
Regiones y puntos de enlace de AWS en la AWS General Reference.

Temas
• Direccionamiento de DNS (p. 623)
• Redireccionamiento de solicitud temporal (p. 624)
• Redireccionamiento de solicitud permanente (p. 626)
• Ejemplos de redireccionamiento de solicitud (p. 626)

Direccionamiento de DNS
El direccionamiento de Domain Name System (DNS, Sistema de nombres de dominio) dirige las solicitudes
a las ubicaciones correctas de Amazon S3. En la figura y el procedimiento siguientes se muestra un
ejemplo de direccionamiento de DNS.

Versión de API 2006-03-01


623
Amazon Simple Storage Service Guía del desarrollador
Redireccionamiento de solicitud temporal

Pasos de la solicitud de direccionamiento de DNS

1. El cliente realiza una solicitud de DNS para obtener un objeto almacenado en Amazon S3.
2. El cliente recibe una o más direcciones IP para las ubicaciones que pueden procesar la solicitud. En
este ejemplo, la dirección IP es para la ubicación B.
3. El cliente realiza una solicitud a la ubicación B de Amazon S3.
4. La ubicación B devuelve una copia del objeto al cliente.

Redireccionamiento de solicitud temporal


Un redireccionamiento temporal es un tipo de respuesta de error que indica al solicitante que debe volver
a enviar la solicitud a otro punto de enlace. Debido a las características de distribución de Amazon S3,
las solicitudes pueden dirigirse temporalmente a la ubicación incorrecta. Es posible que esto ocurra
inmediatamente después de crear o eliminar buckets.

Por ejemplo, si crea un bucket nuevo y realiza una solicitud al bucket de inmediato, es posible que reciba
un redireccionamiento temporal, según la restricción de ubicación del bucket. Si creó el bucket en la región
de AWS US East (N. Virginia), no verá el redireccionamiento, ya que este también es el punto de enlace
predeterminado de Amazon S3.

Versión de API 2006-03-01


624
Amazon Simple Storage Service Guía del desarrollador
Redireccionamiento de solicitud temporal

Sin embargo, si el bucket se creó en otra región, cualquier solicitud para el bucket se dirigirá al punto
de enlace predeterminado mientras la entrada de DNS del bucket se propaga. El punto de enlace
predeterminado redirige la solicitud al punto de enlace correcto con una respuesta HTTP 302. El
redireccionamiento temporal contiene un Uniform Resource Identifier (URI, Identificador de recursos
uniforme) en la ubicación correcta, que usted puede utilizar para volver a enviar la solicitud de inmediato.
Important

No vuelva a utilizar un punto de enlace proporcionado por una respuesta de redireccionamiento


anterior. Puede parecer que funciona (incluso durante largos períodos de tiempo), pero podría
proporcionar resultados impredecibles y fallar sin previo aviso.

En la figura y el procedimiento siguientes se muestra un ejemplo de un redireccionamiento temporal.

Pasos del redireccionamiento de solicitud temporal

1. El cliente realiza una solicitud de DNS para obtener un objeto almacenado en Amazon S3.
2. El cliente recibe una o más direcciones IP para las ubicaciones que pueden procesar la solicitud.
3. El cliente realiza una solicitud a la ubicación B de Amazon S3.
4. La ubicación B devuelve un redireccionamiento que indica que el objeto está disponible en la
ubicación C.
5. El cliente vuelve a enviar la solicitud a la ubicación C.
6. La ubicación C devuelve una copia del objeto.

Versión de API 2006-03-01


625
Amazon Simple Storage Service Guía del desarrollador
Redireccionamiento de solicitud permanente

Redireccionamiento de solicitud permanente


Un redireccionamiento permanente indica que su solicitud se dirigió a un recurso de forma incorrecta. Por
ejemplo, el redireccionamiento permanente se produce si utiliza una solicitud de tipo ruta para obtener
acceso a un bucket creado con <CreateBucketConfiguration>. Para obtener más información,
consulte Acceso a un bucket (p. 57).

Para ayudar a detectar estos errores durante el desarrollo, este tipo de redireccionamiento no contiene
un encabezado HTTP de ubicación que le permita seguir automáticamente la solicitud en la ubicación
correcta. Consulte el documento de errores XML obtenidos para obtener ayuda con el uso del punto de
enlace correcto de Amazon S3.

Ejemplos de redireccionamiento de solicitud


A continuación se proporcionan ejemplos de respuestas de redireccionamiento de solicitud temporal.

Respuesta de redireccionamiento temporal de la API REST

HTTP/1.1 307 Temporary Redirect


Location: http://johnsmith.s3-gztb4pa9sq.amazonaws.com/photos/puppy.jpg?rk=e2c69a31
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Fri, 12 Oct 2007 01:12:56 GMT
Server: AmazonS3

<?xml version="1.0" encoding="UTF-8"?>


<Error>
<Code>TemporaryRedirect</Code>
<Message>Please re-send this request to the specified temporary endpoint.
Continue to use the original request endpoint for future requests.</Message>
<Endpoint>johnsmith.s3-gztb4pa9sq.amazonaws.com</Endpoint>
</Error>

Respuesta de redireccionamiento temporal de la API SOAP


Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

<soapenv:Body>
<soapenv:Fault>
<Faultcode>soapenv:Client.TemporaryRedirect</Faultcode>
<Faultstring>Please re-send this request to the specified temporary endpoint.
Continue to use the original request endpoint for future requests.</Faultstring>
<Detail>
<Bucket>images</Bucket>
<Endpoint>s3-gztb4pa9sq.amazonaws.com</Endpoint>
</Detail>
</soapenv:Fault>
</soapenv:Body>

Versión de API 2006-03-01


626
Amazon Simple Storage Service Guía del desarrollador
Consideraciones acerca del DNS

Consideraciones acerca del DNS


Uno de los requisitos de diseño de Amazon S3 es la disponibilidad extremadamente alta. Una de las
maneras de cumplir con este requisito es mediante la actualización de las direcciones IP asociadas
con el punto de enlace de Amazon S3 en el DNS según sea necesario. Estos cambios se reflejan
automáticamente en los clientes cuya vida útil es corta, pero no en algunos clientes cuya vida útil es
larga. Aquellos clientes cuya vida útil es larga deben realizar acciones especiales para volver a resolver el
punto de enlace de Amazon S3 periódicamente a fin de beneficiarse de estos cambios. Para obtener más
información acerca de las máquinas virtuales (VM), consulte lo siguiente:

• Para Java, la Java Virtual Machine (JVM, Máquina virtual de Java) de Sun almacena en caché las
búsquedas del DNS para siempre de forma predeterminada; consulte la sección de “InetAddress
Caching” de la documentación de InetAddress para obtener información acerca de cómo cambiar este
comportamiento.
• Para PHP, la VM persistente de PHP que ejecuta las más populares configuraciones de implementación
almacena en caché las búsquedas del DNS hasta que la VM se reinicia. Consulte los documentos de
PHP de getHostByName.

Versión de API 2006-03-01


627
Amazon Simple Storage Service Guía del desarrollador

Patrones de diseño de prácticas


recomendadas: optimización del
rendimiento de Amazon S3
Sus aplicaciones pueden lograr fácilmente miles de transacciones por segundo en el rendimiento de las
solicitudes al cargar y recuperar almacenamiento de Amazon S3. Amazon S3 escala automáticamente
a altas velocidades de solicitudes. Por ejemplo, la aplicación puede conseguir al menos 3500 solicitudes
PUT/COPY/POST/DELETE y 5500 solicitudes GET/HEAD por segundo y prefijo en un bucket. No existe
ningún límite en cuanto al número de prefijos dentro de un bucket. Puede aumentar el rendimiento de
lectura o escritura ejecutando en paralelo las operaciones de lectura. Por ejemplo, si crea 10 prefijos en un
bucket de Amazon S3 para ejecutar en paralelo las operaciones de lectura, podría escalar el rendimiento
de lectura a 55 000 solicitudes de lectura por segundo.

Por ejemplo, algunas aplicaciones de data lake en Amazon S3 analizan millones o miles de millones
de objetos para consultas que ejecutan petabytes de datos. Estas aplicaciones de data lake logran
velocidades de transferencia de una sola instancia que maximizan el uso de la interfaz de red para su
instancia Amazon EC2, que puede alcanzar hasta los 100 GB/s en una sola instancia. A continuación,
estas aplicaciones agregan rendimiento en varias instancias para obtener varios terabits por segundo.

Otras aplicaciones son sensibles a la latencia, como las aplicaciones de mensajería de las redes sociales.
Estas aplicaciones pueden lograr latencias para objetos pequeños coherentes (y latencias de «first-byte-
out» para objetos más grandes) de entre aproximadamente 100 y 200 milisegundos.

Otros servicios de AWS también pueden ayudar a acelerar el rendimiento para otras arquitecturas de
aplicaciones. Por ejemplo, si desea velocidades de transferencia mayores a través de una conexión HTTP
única o latencias de milisegundos de un solo dígito, use Amazon CloudFront o Amazon ElastiCache para el
almacenamiento en caché con Amazon S3.

De forma adicional, si desea un transporte rápido de los datos a largas distancias entre un cliente y
un bucket de S3, use Aceleración de transferencia de Amazon S3 (p. 76). Transfer Acceleration usa
las ubicaciones de borde distribuidas globalmente en CloudFront para acelerar el transporte de los
datos a través de distancias geográficas. Si su carga de trabajo de Amazon S3 utiliza el cifrado de lado
servidor con AWS Key Management Service (SSE-KMS), consulte Límites de AWS KMS en la Guía para
desarrolladores de AWS Key Management Service para obtener información sobre las velocidades de
solicitudes admitidas para su caso de uso.

En los siguientes temas se describen las directrices y patrones de diseño recomendados a fin de optimizar
el rendimiento para las aplicaciones que usan Amazon S3. Estas instrucciones sustituyen a cualquier
instrucción anterior acerca de la optimización del rendimiento de Amazon S3. Por ejemplo, anteriormente,
las instrucciones de rendimiento de Amazon S3 recomendaban utilizar nombre de prefijos aleatorios
con caracteres de almohadilla para optimizar el rendimiento de las recuperaciones de datos frecuentes.
Ya no tiene que utilizar nombres de prefijo aleatorios para obtener un buen rendimiento; puede usar
nombres secuenciales basados en fecha para los prefijos. Consulte Directrices de rendimiento de Amazon
S3 (p. 629) y Patrones de diseño de rendimiento para Amazon S3 (p. 631) para obtener la información
más reciente sobre la optimización del rendimiento de Amazon S3.

Temas
• Directrices de rendimiento de Amazon S3 (p. 629)
• Patrones de diseño de rendimiento para Amazon S3 (p. 631)

Versión de API 2006-03-01


628
Amazon Simple Storage Service Guía del desarrollador
Directrices de rendimiento

Directrices de rendimiento de Amazon S3


Al crear aplicaciones que cargan y recuperan almacenamiento de Amazon S3, siga nuestras directrices
de prácticas recomendadas para optimizar el rendimiento. También ofrecemos Patrones de diseño de
rendimiento (p. 631) con más detalle.

Para obtener el mejor rendimiento para su aplicación en Amazon S3, recomendamos las siguientes
directrices.

Temas
• Medición del rendimiento (p. 629)
• Escalado horizontal de las conexiones de almacenamiento (p. 629)
• Uso de recuperaciones de rango de byte (p. 629)
• Reintento de solicitudes de aplicaciones sensibles a la latencia (p. 630)
• Combinación de Amazon S3 (almacenamiento) y Amazon EC2 (informática) en la misma región de
AWS (p. 630)
• Uso de Amazon S3 Transfer Acceleration para minimizar la latencia generada por la
distancia (p. 630)
• Uso de la versión más reciente de los SDK de AWS (p. 630)

Medición del rendimiento


Al optimizar el rendimiento, fíjese en los requisitos de rendimiento de red, CPU y DRAM. Dependiendo de
la combinación de demandas de estos otros recursos, es posible que merezca la pena evaluar otros tipos
de instancia Amazon EC2. Para obtener más información acerca de los tipos de instancia, consulte Tipos
de instancia en la Guía del usuario de Amazon EC2 para instancias de Linux.

También es útil fijarse en el tiempo de búsqueda de DNS, la latencia y la velocidad de transferencia de


datos mediante herramientas de análisis HTTP al medir el rendimiento.

Escalado horizontal de las conexiones de


almacenamiento
La distribución de las solicitudes entre muchas conexiones es un patrón de diseño habitual para escalar
horizontalmente el rendimiento. Al crear aplicaciones de alto rendimiento, piense en Amazon S3 como
un sistema distribuido muy grande, no como un punto de enlace de una sola red como un servidor de
almacenamiento tradicional. Puede lograr el mejor rendimiento emitiendo varias solicitudes simultáneas
a Amazon S3. Distribuya estas solicitudes a través de conexiones independientes para maximizar el
ancho de banda accesible desde Amazon S3. Amazon S3 no tiene límites para el número de conexiones
realizadas a su bucket.

Uso de recuperaciones de rango de byte


Al usar el encabezado HTTP Range en una solicitud GET Object, puede recuperar un rango de byte de
un objeto, transfiriendo solo la parte especificada. Puede usar conexiones simultáneas a Amazon S3 para
recuperar otros rangos de byte desde dentro del mismo objeto. Esto le ayuda a lograr un rendimiento total
mayor frente a una sola solicitud de todo el objeto. La recuperación de rangos más pequeños de un objeto
grande también permite que su aplicación mejore los tiempos de reintento al interrumpirse las solicitudes.
Para obtener más información, consulte Obtención de objetos (p. 173).

Los tamaños típicos para las solicitudes de rango de byte son 8 MB o 16 MB. Si los objetos aplican PUT
mediante una carga multiparte, aplicarles GET en los mismos tamaños de parte (o al menos alinearlos con

Versión de API 2006-03-01


629
Amazon Simple Storage Service Guía del desarrollador
Reintento de solicitudes

los límites de parte) es una buena práctica para lograr el mejor rendimiento. Las solicitudes GET pueden
ocuparse directamente de partes individuales; por ejemplo, GET ?partNumber=N.

Reintento de solicitudes de aplicaciones sensibles a la


latencia
Los reintentos y tiempos de espera agresivos contribuyen a potenciar una latencia coherente. Teniendo en
cuenta la gran escala de Amazon S3, si la primera solicitud es lenta, es probable que una solicitud que se
ha intentado tome otra ruta y se realice correctamente. Los SDK de AWS cuentan con un tiempo de espera
configurable y valores de reintento que puede ajustar a las tolerancias de su aplicación específica.

Combinación de Amazon S3 (almacenamiento) y


Amazon EC2 (informática) en la misma región de
AWS
Aunque los nombres del bucket de S3 son únicos a nivel global, cada uno de los buckets se almacena en
una región que selecciona al crear estos. Para optimizar el rendimiento, recomendamos que tenga acceso
al bucket desde las instancias Amazon EC2 en la misma región de AWS cuando sea posible. Esto ayuda a
reducir los costos de la transferencia de datos y la latencia de red.

Para obtener más información acerca de los costos de las transferencias de datos, consulte Precios de
Amazon S3.

Uso de Amazon S3 Transfer Acceleration para


minimizar la latencia generada por la distancia
Aceleración de transferencia de Amazon S3 (p. 76) administra transferencias de archivos rápidas,
fáciles y seguras a través de grandes distancias geográficas entre el cliente y un bucket de S3. Transfer
Acceleration aprovecha las ubicaciones de borde distribuidas globalmente en Amazon CloudFront. A
medida que los datos llegan a una ubicación de borde, se redirigen a Amazon S3 a través de una ruta de
red optimizada. Transfer Acceleration es ideal para transferir desde gigabytes hasta terabytes de datos con
frecuencia entre continentes. También resulta útil para los clientes que cargan en un bucket centralizado
desde todo el mundo.

Puede utilizar la herramienta Comparación de velocidad de Aceleración de transferencia de Amazon


S3 para comparar velocidades de carga aceleradas y no aceleradas en regiones de Amazon S3. La
herramienta Comparación de velocidad utiliza cargas multiparte para transferir un archivo desde su
navegador hacia diversas regiones de Amazon S3 con Amazon S3 Transfer Acceleration y sin esta
herramienta.

Uso de la versión más reciente de los SDK de AWS


Los SDK de AWS ofrecen compatibilidad integrada con muchas de las directrices recomendadas
para optimizar el rendimiento de Amazon S3. Asimismo, proporcionan una API más sencilla para
aprovechar Amazon S3 desde dentro de una aplicación y se actualizan con frecuencia para seguir las
prácticas recomendadas más recientes. Por ejemplo, los SDK incluyen lógica para reintentar solicitudes
automáticamente en errores HTTP 503 e invierten en código para responder a las conexiones lentas y
adaptarse a ellas.

Los SDK también ofrecen el Gestor de transferencias, que automatiza el escalado horizontal de
conexiones para lograr miles de solicitudes por segundo, empleando solicitudes de rango de byte si

Versión de API 2006-03-01


630
Amazon Simple Storage Service Guía del desarrollador
Patrones de diseño de rendimiento

procede. Es importante usar la versión más reciente de los SDK de AWS para obtener las características
de optimización de rendimiento más recientes.

También puede optimizar el rendimiento al usar solicitudes de la API de REST de HTTP. Al usar la API
de REST, debe seguir las mismas prácticas recomendadas que forman parte de los SDK. Permita los
tiempos de espera y los reintentos en las solicitudes lentas y varias conexiones para que la recuperación
de datos de objeto en paralelo sea posible. Para obtener más información acerca del uso de la API de
REST, consulte la Amazon Simple Storage Service API Reference.

Patrones de diseño de rendimiento para Amazon


S3
Al diseñar aplicaciones para cargar y recuperar almacenamiento de Amazon S3, use nuestros patrones
de diseño de prácticas recomendadas a fin de lograr el mejor rendimiento para su aplicación. También
ofrecemos Directrices de rendimiento (p. 629) para que las tenga en cuenta cuando planee su
arquitectura de aplicaciones.

Para optimizar el rendimiento, puede usar los siguientes patrones de diseño.

Temas
• Uso del almacenamiento en caché para el contenido de acceso frecuente (p. 631)
• Tiempos de espera y reintentos de aplicaciones sensibles a la latencia (p. 632)
• Escalado horizontal y uso en paralelo de solicitudes para lograr un alto rendimiento (p. 632)
• Uso de Amazon S3 para acelerar las transferencias de datos dispares en sentido geográfico (p. 633)

Uso del almacenamiento en caché para el contenido


de acceso frecuente
Muchas aplicaciones que almacenan datos en Amazon S3 ofrecen un "conjunto de trabajo" que los
usuarios solicitan continuamente. Si una carga de trabajo envía solicitudes GET repetidas para un
conjunto de objetos común, puede usar una caché como Amazon CloudFront, Amazon ElastiCache o
AWS Elemental MediaStore para optimizar el rendimiento. La adopción correcta de la caché puede dar
lugar a una baja latencia y a velocidades de transferencias de datos altas. Las aplicaciones que usan
el almacenamiento en caché también envían menos solicitudes directas a Amazon S3, lo que puede
contribuir a reducir los costos de solicitud.

Amazon CloudFront es una red de entrega de contenido (CDN) rápida que almacena datos en caché de
forma transparente desde Amazon S3 en un gran conjunto de puntos de presencia (PoP) distribuidos
geográficamente. Cuando se puede tener acceso a los objetos desde varias regiones o a través de
Internet, CloudFront permite que los datos se almacenen en caché cerca de los usuarios con acceso a
los objetos. Esto puede dar como resultado la entrega de alto rendimiento de contenido de Amazon S3
popular. Para obtener información acerca de CloudFront, consulte la Guía para desarrolladores de Amazon
CloudFront.

Amazon ElastiCache es una caché en memoria administrada. Con ElastiCache, puede aprovisionar
instancias Amazon EC2 que almacenan en caché objetos en memoria. Este almacenamiento en caché
se traduce en pedidos de reducción de la magnitud en la latencia GET y aumentos sustanciales en el
rendimiento de descarga. Para usar ElastiCache, debe modificar la lógica de la aplicación tanto para
rellenar la caché con objetos activos como para comprobar la caché en busca de estos objetos antes de
solicitarlos en Amazon S3. Para ver ejemplos del uso de ElastiCache para mejorar el rendimiento GET de
Amazon S3, consulte la publicación de blog Turbocharge Amazon S3 with Amazon ElastiCache for Redis
(Aumento del rendimiento de Amazon S3 con Amazon ElastiCache para Redis).

Versión de API 2006-03-01


631
Amazon Simple Storage Service Guía del desarrollador
Tiempos de espera y reintentos de
aplicaciones sensibles a la latencia

AWS Elemental MediaStore es un sistema de distribución de contenido y almacenamiento en caché


diseñado de forma específica para flujos de trabajo de vídeo y la entrega de contenido desde Amazon
S3. MediaStore proporciona API de almacenamiento integrales de forma específica para vídeo y se
recomienda para las cargas de trabajo de vídeo sensibles al rendimiento. Para obtener información acerca
de MediaStore, consulte la Guía del usuario de AWS Elemental MediaStore.

Tiempos de espera y reintentos de aplicaciones


sensibles a la latencia
Existen determinadas situaciones en las que una aplicación recibe una respuesta de Amazon S3 que
indica que es necesario un reintento. Amazon S3 asigna nombres de objeto y bucket a los datos de objeto
asociados a ellos. Si una aplicación genera velocidades de solicitudes altas (normalmente velocidades
sostenidas de más de 5000 solicitudes por segundo a un pequeño número de objetos), podría recibir
respuestas de ralentización HTTP 503. Si se producen estos errores, cada SDK de AWS implementa la
lógica de reintentos automática mediante el retardo exponencial. Si no está usando un SDK de AWS, debe
implementar la lógica de reintentos al recibir el error HTTP 503. Para obtener información acerca de las
técnicas de retardo, consulte Reintentos de error y retardo exponencial en AWS en la Referencia general
de Amazon Web Services.

Amazon S3 se escala automáticamente como respuesta a las nuevas velocidades de solicitudes


sostenidas, optimizando el rendimiento de forma dinámica. Aunque Amazon S3 se está optimizando
internamente para una nueva velocidad de solicitudes, recibirá respuestas a las solicitudes HTTP 503 de
forma temporal hasta que se complete la optimización. Una vez que Amazon S3 optimice internamente el
rendimiento para la nueva velocidad de solicitudes, todas las solicitudes se atienden de forma general sin
reintentos.

Para las aplicaciones sensibles a la latencia, Amazon S3 advierte del seguimiento y el reintento agresivo
de operaciones más lentas. Siempre que reintente una solicitud, recomendamos que se use una nueva
conexión a Amazon S3 y que se vuelva a realizar una búsqueda de DNS.

Si realiza solicitudes de tamaño grande y variable (por ejemplo, más de 128 MB), aconsejamos que se
realice un seguimiento del rendimiento logrado y que se reintente el 5 % más lento de las solicitudes. Al
realizar solicitudes más pequeñas (por ejemplo, menos de 512 KB), donde las latencias medias suelen
situarse en el rango de las decenas de milisegundos, una buena directriz es reintentar una operación GET
o PUT transcurridos 2 segundos. Si son necesarios reintentos adicionales, la práctica recomendada es el
retardo. Por ejemplo, recomendamos que se emita un reintento transcurridos 2 segundos y un segundo
reintento después de 4 segundos adicionales.

Si su aplicación realiza solicitudes de tamaño fijo a Amazon S3, debe esperar unos tiempos de respuesta
más coherentes para cada una de estas solicitudes. En este caso, una estrategia sencilla consiste en
identificar el 1 % más lento de las solicitudes y reintentarlas. Incluso un único reintento suele ser eficaz
reduciendo la latencia.

Si está usando AWS Key Management Service (AWS KMS) para el cifrado del lado del servidor, consulte
Límites de en la AWS Key Management Service Developer Guide para obtener información acerca de las
velocidades de solicitudes admitidas para su caso de uso.

Escalado horizontal y uso en paralelo de solicitudes


para lograr un alto rendimiento
Amazon S3 es un sistema distribuido muy grande. Para ayudarle a aprovechar su escala, le animamos a
escalar horizontalmente solicitudes paralelas a los puntos de enlace de servicio de Amazon S3. Además
de distribuir las solicitudes en Amazon S3, este tipo de enfoque de escalado ayuda a distribuir la carga
mediante varias rutas a través de la red.

Versión de API 2006-03-01


632
Amazon Simple Storage Service Guía del desarrollador
Aceleración de las transferencias de
datos dispares en sentido geográfico

Para las transferencias de alto rendimiento, Amazon S3 aconseja que se usen aplicaciones que a su
vez usen varias conexiones a los datos de GET o PUT en paralelo. Por ejemplo, esto cuenta con el
respaldo del Gestor de transferencias de Amazon S3 en el SDK para Java de AWS. Además, la mayoría
de los otros SDK de AWS proporcionan construcciones similares. Para algunas aplicaciones, puede
lograr conexiones paralelas lanzando varias solicitudes simultáneamente en diferentes subprocesos de
aplicación, o bien en diferentes instancias de aplicación. El mejor enfoque que adoptar depende de su
aplicación y la estructura de los objetos a los que tiene acceso.

Puede usar los SDK de AWS para emitir las solicitudes GET y PUT directamente en lugar de emplear
la administración de las transferencias en el SDK de AWS. Este enfoque le permite ajustar su carga
de trabajo de forma más directa, mientras sigue beneficiándose de la compatibilidad del SDK con los
reintentos y su control de cualquier respuesta HTTP 503 que pueda surgir. Como regla general, al
descargar objetos grandes dentro de una región desde Amazon S3 hasta Amazon EC2, recomendamos
que se realicen solicitudes simultáneas de rangos de byte de un objeto en la granularidad de 8 a 16 MB.
Realice una solicitud simultánea de cada valor comprendido entre 85 y 90 MB/s del rendimiento de red
deseado. Para saturar una tarjeta de interfaz de red (NIC), puede usar unas 15 solicitudes simultáneas a
través de conexiones independientes. Puede escalar de forma ascendente las solicitudes simultáneas a
través de más conexiones para saturar las NIC con mayor rapidez, como NIC de 25 GB/s y de 100 GB/s.

Medir el rendimiento es importante cuando ajusta el número de solicitudes que se van a emitir
simultáneamente. Recomendamos comenzar con una sola solicitud cada vez. Mida el ancho de banda
de red logrado y el uso de otros recursos utilizados por su aplicación durante el procesamiento de los
datos. A partir de ese momento, podrá identificar el recurso de cuello de botella (es decir, el recurso más
usado) y, por tanto, el número de solicitudes con probabilidades de resultar de utilidad. Por ejemplo, si el
procesamiento de una solicitud cada vez se traduce a un uso del 25 % de la CPU, sugiere que se pueden
atender hasta cuatro solicitudes simultáneas. La medición es fundamental y merece la pena confirmar el
uso de recursos a medida que aumenta la velocidad de solicitudes.

Si su aplicación emite solicitudes directamente a Amazon S3 mediante la API de REST, recomendamos


usar un grupo de conexiones HTTP y volver a utilizar cada conexión para una serie de solicitudes. Al
evitarse la configuración de la conexión por solicitud, desaparece la necesidad de llevar a cabo protocolos
de enlace de Capa de conexión segura (SSL) y TCP de inicio lento. Para obtener información acerca del
uso de la API de REST, consulte la Amazon Simple Storage Service API Reference.

Por último, merece la pena prestar atención a DNS y volver a comprobar que las solicitudes se distribuyen
mediante un amplio grupo de direcciones IP de Amazon S3. DNS consulta el ciclo Amazon S3 a través de
una gran lista de puntos de enlace de IP. Sin embargo, el almacenamiento en caché de los solucionadores
o el código de aplicación que vuelve a usar una sola dirección IP no se beneficia de la diversidad de
direcciones y el balanceo de carga que se produce a continuación. Las herramientas de utilidad de red,
como, por ejemplo, la herramienta de línea de comandos netstat, pueden mostrar las direcciones
IP usadas para la comunicación con Amazon S3. Además, proporcionamos directrices acerca de las
configuraciones de DNS que se deben emplear. Para obtener más información acerca de estas directrices,
consulte Consideraciones acerca del DNS (p. 627).

Uso de Amazon S3 para acelerar las transferencias de


datos dispares en sentido geográfico
Aceleración de transferencia de Amazon S3 (p. 76) resulta eficaz a la hora de minimizar o eliminar la
latencia generada por la distancia geográfica existente entre los clientes, repartidos por todo el mundo,
y una aplicación regional mediante Amazon S3. Transfer Acceleration usa las ubicaciones de borde
distribuidas globalmente enCloudFront para el transporte de los datos. La red de borde de AWS se
encuentra presente en más de 50 ubicaciones. Actualmente, se usa para distribuir el contenido a través de
CloudFront y proporcionar respuestas rápidas a las consultas DNS realizadas a Amazon Route 53.

La red de borde también ayuda a acelerar las transferencias de datos tanto dentro como fuera de Amazon
S3. Resulta ideal para las aplicaciones que transfieren datos en o entre continentes, tienen una conexión
a Internet rápida, usan objetos grandes o tienen mucho contenido que cargar. A medida que los datos

Versión de API 2006-03-01


633
Amazon Simple Storage Service Guía del desarrollador
Aceleración de las transferencias de
datos dispares en sentido geográfico

llegan a una ubicación de borde, se redirigen a Amazon S3 a través de una ruta de red optimizada. En
general, cuanto más lejos esté de una región de Amazon S3, mayor será la mejora de la velocidad que
puede esperar del uso de Transfer Acceleration.

Puede configurar Transfer Acceleration en buckets nuevos o ya existentes. Puede usar un punto de enlace
de Amazon S3 Transfer Acceleration independiente para utilizar las ubicaciones de borde de AWS. La
mejor forma de probar si Transfer Acceleration contribuye al rendimiento de las solicitudes de los clientes
es usar la herramienta Comparación de velocidad de Aceleración de transferencia de Amazon S3. Las
condiciones y configuraciones de red varían de cuando en cuando y de ubicación a ubicación. Así pues,
solo se le cobrarán las transferencias en las que Amazon S3 Transfer Acceleration pueda mejorar de forma
potencial su rendimiento de carga. Para obtener información acerca del uso de Transfer Acceleration con
diferentes SDK de AWS, consulte Aceleración de transferencia de Amazon S3 Ejemplos (p. 79).

Versión de API 2006-03-01


634
Amazon Simple Storage Service Guía del desarrollador
Herramientas de monitorización

Monitorización de Amazon S3
La monitorización es una parte importante del mantenimiento de la fiabilidad, la disponibilidad y el
rendimiento de Amazon S3; y sus soluciones de AWS. Debe recopilar datos de monitorización de todas
las partes de su solución de AWS para que le resulte más sencillo depurar un error que se produce en
distintos puntos, en caso de que ocurra. Antes de empezar a monitorizar Amazon S3, debe crear un plan
de monitorización que incluya respuestas a las siguientes preguntas:

• ¿Cuáles son los objetivos de la monitorización?


• ¿Qué recursos va a monitorizar?
• ¿Con qué frecuencia va a monitorizar estos recursos?
• ¿Qué herramientas de monitorización va a utilizar?
• ¿Quién se encargará de realizar las tareas de monitorización?
• ¿Quién debería recibir una notificación cuando surjan problemas?

Temas
• Herramientas de monitorización (p. 635)
• Monitorización de métricas con Amazon CloudWatch (p. 636)
• Configuraciones de métricas para buckets (p. 643)
• Registro con Amazon S3 (p. 645)
• Registro de llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 647)
• Uso de AWS CloudTrail para identificar solicitudes de Amazon S3 (p. 655)

Herramientas de monitorización
AWS proporciona varias herramientas que puede utilizar para monitorizar Amazon S3. Puede configurar
algunas de estas herramientas para que monitoricen por usted, pero otras herramientas requieren
intervención manual. Le recomendamos que automatice las tareas de monitorización en la medida de lo
posible.

Herramientas de monitorización automatizadas


Puede utilizar las siguientes herramientas de monitorización automatizado para vigilar Amazon S3 e
informar cuando haya algún problema:

• Amazon CloudWatch Alarms (Alarmas de Amazon CloudWatch): observe una sola métrica durante
el periodo que especifique y realice una o varias acciones según el valor de la métrica relativo a un
determinado umbral durante varios periodos de tiempo. La acción es una notificación que se envía
a un tema de Amazon Simple Notification Service (Amazon SNS) o a una política de Amazon EC2
Auto Scaling. Las alarmas de CloudWatch no invocan acciones simplemente por tener un estado
determinado. El estado debe haber cambiado y debe mantenerse durante el número de periodos
especificado. Para obtener más información, consulte Monitorización de métricas con Amazon
CloudWatch (p. 636).
• AWS CloudTrail Log Monitoring (Monitorización de registros de &CTlong;): compartir archivos de
registro entre cuentas, monitorizar archivos de registro de CloudTrail en tiempo real mediante su envío
a CloudWatch Logs, escribir aplicaciones de procesamiento de registros en Java y validar que sus
archivos de registro no hayan cambiado después de que CloudTrail los entregue. Para obtener más
información, consulte Registro de llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 647).

Versión de API 2006-03-01


635
Amazon Simple Storage Service Guía del desarrollador
Herramientas manuales

Herramientas de monitorización manual


Otra parte importante de la monitorización de Amazon S3 implica la monitorización manual de los
elementos que no cubren las alarmas de CloudWatch. Los paneles de Amazon S3, CloudWatch y Trusted
Advisor, y otros paneles de la Consola de administración de AWS proporcionan una vista rápida del estado
del entorno de AWS. Es posible que desee habilitar el registro de acceso del servidor, que realiza un
seguimiento de las solicitudes de acceso al bucket. Cada entrada del registro de acceso contiene detalles
de la solicitud de acceso tales como el solicitante, el nombre del bucket, la hora de la solicitud, la acción
solicitada, el estado de la respuesta y el código de error, si hay alguno. Para obtener más información,
consulte Registro de acceso al servidor de Amazon S3 (p. 674) en la Guía para desarrolladores de
Amazon Simple Storage Service.

• El panel de Amazon S3 muestra lo siguiente:


• Sus buckets y sus propiedades y objetos que contienen.
• La página de inicio de CloudWatch muestra:
• Alarmas y estado actual.
• Gráficos de alarmas y recursos.
• Estado de los servicios.

Además, puede utilizar CloudWatch para hacer lo siguiente:


• Crear paneles personalizados para monitorizar los servicios que le interesan.
• Realizar un gráfico con los datos de las métricas para resolver problemas y descubrir tendencias.
• Buscar y examinar todas sus métricas de recursos de AWS.
• Crear y editar las alarmas de notificación de problemas.
• AWS Trusted Advisor puede ayudarle a monitorizar sus recursos de AWS para mejorar el desempeño,
la fiabilidad, la seguridad y la rentabilidad. Hay disponibles cuatro comprobaciones de Trusted Advisor
para todos los usuarios; hay disponibles más de 50 comprobaciones para usuarios con plan de soporte
Business o Enterprise. Para obtener más información, consulte AWS Trusted Advisor.

Trusted Advisor cuenta con este tipo de comprobaciones relacionadas con Amazon S3:
• Comprobaciones de la configuración de registro de los buckets de Amazon S3.
• Comprobaciones de seguridad de los buckets de Amazon S3 que tienen permisos de acceso abierto.
• Comprobaciones de la tolerancia a errores de los buckets de Amazon S3 que no tienen activado el
control de versiones, o que lo tienen suspendido.

Monitorización de métricas con Amazon


CloudWatch
Las métricas de Amazon CloudWatch para Amazon S3 pueden ayudarle a comprender y mejorar el
rendimiento de las aplicaciones que usan Amazon S3. Hay dos maneras de usar CloudWatch con Amazon
S3.

• Métricas diarias de almacenamiento para buckets: puede monitorizar el almacenamiento de bucket


mediante CloudWatch, que recopila y procesa los datos de almacenamiento de Amazon S3 en métricas
legibles y diarias. El informe de estas métricas de almacenamiento para Amazon S3 se realiza una vez
al día, y se facilita a todos los clientes sin costo adicional.
• Métricas de solicitudes: puede seleccionar monitorizar las solicitudes en Amazon S3 para identificar
rápidamente los problemas operativos y actuar en consecuencia. Las métricas están disponibles en
intervalos de 1 minuto después de un breve periodo de latencia para procesarlas. Estas métricas de
CloudWatch se facturan con la misma tarifa que las métricas personalizadas de Amazon CloudWatch.
Para obtener información sobre los precios de CloudWatch, consulte Precios de Amazon CloudWatch.

Versión de API 2006-03-01


636
Amazon Simple Storage Service Guía del desarrollador
Dimensiones y métricas

Para saber cómo activar la obtención de estas métricas, consulte Configuraciones de métricas para
buckets (p. 643).

Cuando están habilitadas, se informa de las métricas de solicitudes para todas las operaciones con
objetos. De forma predeterminada, estas métricas de 1 minuto están disponibles en el nivel del bucket
de Amazon S3. También puede definir un filtro para las métricas recopiladas utilizando un prefijo
compartido o una etiqueta de objeto. Esto le permite crear distintos filtros de métricas para aplicaciones
empresariales, organizaciones internas o flujos de trabajo o específicos.

Todas las estadísticas de CloudWatch se retienen durante un periodo de 15 meses, lo que le permite
tener acceso a información histórica y obtener una mejor perspectiva sobre el rendimiento de su aplicación
o servicio web. Para obtener más información, consulte ¿Qué es Amazon CloudWatch? en la Guía del
usuario de Amazon CloudWatch.

Dimensiones y métricas
A continuación aparece una lista de las dimensiones y métricas de almacenamiento que envía Amazon S3
a CloudWatch.

Métricas diarias de almacenamiento para buckets de


Amazon S3 para CloudWatch
El espacio de nombres AWS/S3 incluye las siguientes métricas diarias de almacenamiento para los
buckets.

Métrica Descripción

BucketSizeBytes Es la cantidad de datos en bytes almacenados en un bucket en las clases


de almacenamiento STANDARD, INTELLIGENT_TIERING, Estándar:
acceso poco frecuente (STANDARD_IA), OneZone: acceso poco frecuente
(ONEZONE_IA), Almacenamiento de redundancia reducida (RRS), clase
Deep Archive Storage (DEEP_ARCHIVE) o Glacier (GLACIER). Este valor
se calcula sumando el tamaño de todos los objetos en el grupo (tanto los
objetos actuales como los no actuales), incluido el tamaño de todas las partes
correspondientes a todas las cargas multiparte incompletas en el grupo.

Filtros de tipo de almacenamiento válidos: StandardStorage,


IntelligentTieringStorage, StandardIAStorage,
StandardIASizeOverhead, StandardIAObjectOverhead,
OneZoneIAStorage, OneZoneIASizeOverhead,
ReducedRedundancyStorage, GlacierStorage,
GlacierStagingStorage, GlacierObjectOverhead,
GlacierS3ObjectOverhead, DeepArchiveStorage,
DeepArchiveObjectOverhead, DeepArchiveS3ObjectOverhead y,
DeepArchiveStagingStorage (consulte la dimensión StorageType)

Unidades: bytes

Estadísticas válidas: Average.

NumberOfObjects El número total de objetos almacenados en un bucket para todas las clases
de almacenamiento, excepto la clase de almacenamiento GLACIER. Este
valor se calcula contando todos los objetos en el bucket (objetos actuales y no
actuales) y el número total de partes correspondientes a todas las cargas de
multiparte incompletas en el bucket.

Versión de API 2006-03-01


637
Amazon Simple Storage Service Guía del desarrollador
Métricas de solicitudes de Amazon S3 para CloudWatch

Métrica Descripción
Filtros de tipos de almacenamiento válidos: AllStorageTypes (consulte la
dimensión StorageType)

Unidades: recuento

Estadísticas válidas: Average.

Métricas de solicitudes de Amazon S3 para


CloudWatch
El espacio de nombres AWS/S3 incluye las siguientes métricas de solicitudes.

Métrica Descripción

AllRequests Número total de solicitudes HTTP realizadas en un bucket de Amazon S3,


independientemente del tipo. Si usa una configuración de métricas con un
filtro, esta métrica devuelve únicamente las solicitudes HTTP realizadas en los
objetos del bucket que cumplen los requisitos del filtro.

Unidades: recuento

Estadísticas válidas: Sum

GetRequests Número de solicitudes HTTP GET realizadas para los objetos de un bucket de
Amazon S3. No incluye las operaciones de lista.

Unidades: recuento

Estadísticas válidas: Sum


Note

Las solicitudes relacionadas con listas paginadas, como List Multipart


Uploads, List Parts o Get Bucket Object Versions, entre otras, no se
incluyen en esta métrica.

PutRequests Número de solicitudes HTTP PUT realizadas para los objetos de un bucket de
Amazon S3.

Unidades: recuento

Estadísticas válidas: Sum

DeleteRequests Número de solicitudes HTTP DELETE realizadas para los objetos de un


bucket de Amazon S3. Incluye también las solicitudes Delete Multiple Objects.
Esta métrica indica el número de solicitudes, no el número de objetos
eliminados.

Unidades: recuento

Estadísticas válidas: Sum

HeadRequests Número de solicitudes HTTP HEAD realizadas a un bucket de Amazon S3.

Unidades: recuento

Versión de API 2006-03-01


638
Amazon Simple Storage Service Guía del desarrollador
Métricas de solicitudes de Amazon S3 para CloudWatch

Métrica Descripción
Estadísticas válidas: Sum

PostRequests Número de solicitudes HTTP POST realizadas a un bucket de Amazon S3.

Unidades: recuento

Estadísticas válidas: Sum


Note

Las solicitudes Delete Multiple Objects y SELECT Object Content no


se incluyen en esta métrica.

SelectRequests Es el número de solicitudes SELECT Object Content de Amazon S3


realizadas para los objetos de un bucket de Amazon S3.

Unidades: recuento

Estadísticas válidas: Sum

SelectScannedBytes Es el número de bytes de datos analizados con solicitudes SELECT Object


Content de Amazon S3 realizadas para los objetos en un bucket de Amazon
S3.

Unidades: bytes

Estadísticas válidas: Average (bytes por solicitud), Sum (bytes por periodo),
Sample Count, Min, Max (igual que p100) y cualquier percentil entre p 0,0 y
p 99,9.

SelectReturnedBytes Es el número de bytes de datos devueltos con solicitudes SELECT Object


Content de Amazon S3 realizadas para los objetos en un bucket de Amazon
S3.

Unidades: bytes

Estadísticas válidas: Average (bytes por solicitud), Sum (bytes por periodo),
Sample Count, Min, Max (igual que p100) y cualquier percentil entre p 0,0 y
p 99,9.

ListRequests Número de solicitudes HTTP que muestran el contenido de un bucket.

Unidades: recuento

Estadísticas válidas: Sum

BytesDownloaded Número de bytes descargados para las solicitudes realizadas a un bucket de


Amazon S3 en las que la respuesta contiene un cuerpo.

Unidades: bytes

Estadísticas válidas: Average (bytes por solicitud), Sum (bytes por periodo),
Sample Count, Min, Max (igual que p100) y cualquier percentil entre p 0,0 y
p 99,9.

Versión de API 2006-03-01


639
Amazon Simple Storage Service Guía del desarrollador
Dimensiones de Amazon S3 CloudWatch

Métrica Descripción

BytesUploaded Número de bytes cargados que contienen un cuerpo de solicitud realizada a


un bucket de Amazon S3.

Unidades: bytes

Estadísticas válidas: Average (bytes por solicitud), Sum (bytes por periodo),
Sample Count, Min, Max (igual que p100) y cualquier percentil entre p 0,0 y
p 99,9.

4xxErrors Número de solicitudes con el código de estado de error del cliente HTTP 4xx
realizadas a un bucket de Amazon S3 con un valor de 0 o 1. La estadística
average muestra el porcentaje de error y la estadística sum muestra las
veces que se ha producido el error durante cada periodo.

Unidades: recuento

Estadísticas válidas: Average (informes por solicitud), Sum (informes por


periodo), Min, Max, Sample Count.

5xxErrors Número de solicitudes con el código de estado de error del servidor HTTP 5xx
realizadas en un bucket de Amazon S3 con un valor de 0 o 1. La estadística
average muestra el porcentaje de error y la estadística sum muestra las
veces que se ha producido el error durante cada periodo.

Unidades: recuentos.

Estadísticas válidas: Average (informes por solicitud), Sum (informes por


periodo), Min, Max, Sample Count.

FirstByteLatency Tiempo por solicitud desde que un bucket de Amazon S3 recibe la solicitud
completa hasta que empieza a devolverse una respuesta.

Unidades: milisegundos

Estadísticas válidas: Average, Sum, Min, Max (igual que p100), Sample Count
y cualquier percentil entre p 0,0 y p100.

TotalRequestLatency Tiempo por solicitud transcurrido desde que se recibe el primer byte hasta que
se envía el último byte a un bucket de Amazon S3. Incluye el tiempo que se
tarda en recibir el cuerpo de la solicitud y en enviar el cuerpo de la respuesta,
que no se incluye en FirstByteLatency.

Unidades: milisegundos

Estadísticas válidas: Average, Sum, Min, Max (igual que p100), Sample Count
y cualquier percentil entre p 0,0 y p100.

Dimensiones de Amazon S3 CloudWatch


Las siguientes dimensiones se usan para filtrar métricas de Amazon S3.

Dimensión Descripción

BucketName Esta dimensión filtra únicamente los datos solicitados para el bucket
identificado.

Versión de API 2006-03-01


640
Amazon Simple Storage Service Guía del desarrollador
Dimensiones de Amazon S3 CloudWatch

Dimensión Descripción

StorageType Esta dimensión filtra los datos que ha almacenado en un bucket


mediante los siguientes tipos de almacenamiento:

• StandardStorage: es el número de bytes que se usan en los


objetos de la clase de almacenamiento STANDARD.
• IntelligentTieringFAStorage: es el número de bytes que
se usan en los objetos del nivel de acceso frecuente de la clase de
almacenamiento INTELLIGENT_TIERING.
• IntelligentTieringIAStorage: es el número de bytes que
se usan en los objetos del nivel de acceso frecuente de la clase de
almacenamiento INTELLIGENT_TIERING.
• StandardIAStorage: es el número de bytes que se usan para
los objetos de la clase de almacenamiento Standard - Infrequent
Access (STANDARD_IA).
• StandardIASizeOverhead: es el número de bytes que se
usan para objetos que tienen menos de 128 KB en la clase de
almacenamiento STANDARD_IA.
• OneZoneIAStorage: es el número de bytes que se usan en los
objetos de la clase de almacenamiento (ONEZONE_IA).
• OneZoneIASizeOverhead: es el número de bytes que se
usan en los objetos que tienen menos de 128 KB en la clase de
almacenamiento ONEZONE_IA.
• ReducedRedundancyStorage: es el número de bytes que se
usan en los objetos de la clase Reduced Redundancy Storage
(RRS).
• GlacierStorage: es el número de bytes que se usan en los
objetos de la clase de almacenamiento GLACIER.
• GlacierStagingStorage: el número de bytes utilizados
para partes de objetos Multipart antes de completar la
solicitud CompleteMultipartUpload en objetos de la clase de
almacenamiento GLACIER.
• GlacierObjectOverhead: por cada objeto que se archiva,
GLACIER añade 32 KB de almacenamiento para el índice y los
metadatos relacionados. Estos datos adicionales son necesarios
para identificar y restaurar su objeto. Se le cobrarán tarifas de tipo
GLACIER por este almacenamiento adicional.
• GlacierS3ObjectOverhead: por cada objeto que se archiva
en GLACIER, AMAZON S3 usa 8 KB de almacenamiento para el
nombre del objeto y otros metadatos. Por este almacenamiento
adicional se aplican las tarifas ESTÁNDAR.
• DeepArchiveStorage: es el número de bytes que se usan en
los objetos de la clase de almacenamiento DEEP_ARCHIVE.
• DeepArchiveObjectOverhead: por cada objeto que se
archiva, DEEP_ARCHIVE añade 32 KB de almacenamiento
para el índice y los metadatos relacionados. Estos datos
adicionales son necesarios para identificar y restaurar su objeto.
Por este almacenamiento adicional se aplican las tarifas de
DEEP_ARCHIVE.
• DeepArchiveS3ObjectOverhead: por cada objeto que
se archiva en DEEP_ARCHIVE, Amazon S3 usa 8 KB de

Versión de API 2006-03-01


641
Amazon Simple Storage Service Guía del desarrollador
Acceso a las métricas de CloudWatch

Dimensión Descripción
almacenamiento para el nombre del objeto y otros metadatos. Por
este almacenamiento adicional se aplican las tarifas ESTÁNDAR.
• DeepArchiveStagingStorage: el número de bytes
utilizados para partes de objetos Multipart antes de completar
la solicitud CompleteMultipartUpload en objetos en la clase de
almacenamiento DEEP_ARCHIVE.

FilterId Esta dimensión filtra las configuraciones de métricas especificadas


para las métricas de solicitudes en un bucket (por ejemplo, un
prefijo o una etiqueta). Cuando crea una configuración de métricas
especifica un ID de filtro. Para obtener más información, consulte
Metrics Configurations for Buckets (Configuración de métricas para
buckets).

Acceso a las métricas de CloudWatch


Puede seguir los siguientes procedimientos para ver las métricas de almacenamiento de Amazon S3.
Para obtener las métricas de Amazon S3 pertinentes, debe establecer marcas temporales de inicio y
finalización. Para las métricas correspondientes a cualquier periodo de 24 horas, establezca el periodo en
86400 segundos, el número de segundos que tiene un día. Recuerde también configurar las dimensiones
BucketName y StorageType.

Por ejemplo, si usa la AWS CLI para obtener el valor promedio del tamaño de un bucket específico en
bytes, puede usar este comando.

aws cloudwatch get-metric-statistics --metric-name BucketSizeBytes --namespace AWS/S3


--start-time 2016-10-19T00:00:00Z --end-time 2016-10-20T00:00:00Z --statistics Average
--unit Bytes --region us-west-2 --dimensions Name=BucketName,Value=ExampleBucket
Name=StorageType,Value=StandardStorage --period 86400 --output json

El ejemplo produce el siguiente resultado.

{
"Datapoints": [
{
"Timestamp": "2016-10-19T00:00:00Z",
"Average": 1025328.0,
"Unit": "Bytes"
}
],
"Label": "BucketSizeBytes"
}

Para consultar las métricas desde la consola de CloudWatch

1. Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.


2. En el panel de navegación, seleccione Metrics.
3. Elija el espacio de nombres de S3.
4. (Opcional) Para ver una métrica, escriba el nombre de la métrica en el campo de búsqueda.
5. (Opcional) Para filtrar por la dimensión StorageType (Tipo de almacenamiento), escriba el nombre de
la clase de almacenamiento en el campo de búsqueda.

Versión de API 2006-03-01


642
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

Para ver una lista de métricas válidas almacenadas en su cuenta de AWS con la CLI de AWS

• En el símbolo del sistema, ejecute el siguiente comando.

aws cloudwatch list-metrics --namespace "AWS/S3"

Recursos relacionados
• Amazon CloudWatch Logs API Reference
• Guía del usuario de Amazon CloudWatch
• Acción list-metrics en la AWS CLI Command Reference.
• Acción get-metric-statistics en la AWS CLI Command Reference.
• Configuraciones de métricas para buckets (p. 643).

Configuraciones de métricas para buckets


Las métricas de solicitudes de CloudWatch para Amazon S3 le permiten recibir métricas de un minuto de
CloudWatch, establecer alarmas de CloudWatch y tener acceso a los paneles de CloudWatch para ver las
operaciones y el rendimiento del almacenamiento de Amazon S3 casi en tiempo real. Para las aplicaciones
que dependen del almacenamiento en la nube, estas métricas le permiten identificar rápidamente los
problemas operativos y actuar en consecuencia. Cuando se activan, estas métricas de 1 minuto están
disponibles en el nivel del bucket de Amazon S3 de forma predeterminada.

Si desea obtener las métricas de solicitudes de CloudWatch para los objetos de un bucket, debe crear
una configuración de métricas para el bucket. También puede definir un filtro para las métricas recopiladas
utilizando un prefijo compartido o una etiqueta de objeto. Esto le permite crear distintos filtros de métricas
para aplicaciones empresariales, organizaciones internas o flujos de trabajo o específicos.

Para obtener más información sobre las métricas de CloudWatch disponibles y las diferencias entre
las métricas de almacenamiento y de solicitudes, consulte Monitorización de métricas con Amazon
CloudWatch (p. 636).

Tenga en cuenta las siguientes consideraciones al utilizar configuraciones de métricas:

• Puede tener un máximo de 1000 configuraciones de métricas por bucket.


• Puede seleccionar qué objetos de un bucket quiere incluir en las configuraciones de métricas mediante
el uso de filtros. La filtración mediante prefijos compartidos o etiquetas de objetos le permitirá alinear los
filtros de métricas a aplicaciones empresariales, flujos de trabajo u organizaciones internas específicos.
Para solicitar métricas para la totalidad del bucket, cree una configuración de métricas sin filtro.
• Las configuraciones de métricas solo son necesarias para habilitar las métricas de solicitudes. Las
métricas diarias de almacenamiento en el nivel de bucket siempre están activadas y se facilitan sin
costo adicional. En la actualidad no es posible obtener métricas diarias de almacenamiento para un
subconjunto filtrado de objetos.
• Cada configuración de métricas habilita el conjunto completo de métricas de solicitudes
disponibles (p. 638). Las métricas específicas de operaciones (como PostRequests) solo se generan
si hay solicitudes de ese tipo para el bucket o el filtro.
• Se generan métricas de solicitudes para las operaciones de nivel de objetos. También se generan para
las operaciones que enumeran el contenido de un bucket, como GET Bucket (List Objects), GET Bucket
Object Versions y List Multipart Uploads, pero no se generan para otras operaciones con los buckets.

Versión de API 2006-03-01


643
Amazon Simple Storage Service Guía del desarrollador
El "mejor esfuerzo" y la entrega de métricas en CloudWatch

• Las métricas de solicitudes admiten el filtrado por prefijos, pero las métricas de almacenamiento no.

El "mejor esfuerzo" y la entrega de métricas en


CloudWatch
Las métricas de CloudWatch se entregan según el "mejor esfuerzo", es decir, en la medida que sea
posible. La mayoría de las solicitudes para un objeto de Amazon S3 que tienen métricas de solicitudes
producen el envío de un punto de datos a CloudWatch.

No se garantiza que las métricas estén completas ni que lleguen de manera puntual. Es posible que el
punto de datos de una solicitud determinada se envíe con una marca temporal posterior al momento en
el que la solicitud se ha procesado realmente. O bien, el punto de datos para un minuto podría retrasarse
antes de estar disponible en CloudWatch, o podría no entregarse en absoluto. Las métricas de solicitudes
de CloudWatch le dan una idea de la naturaleza del tráfico al que se enfrenta un bucket en tiempo casi
real. No pretende ser un recuento completo de todas las solicitudes.

Dada la naturaleza de "mejor esfuerzo" de esta característica, los informes disponibles en el Panel de
gestión de facturación y costos podrían incluir una o varias solicitudes de acceso que no aparecen en las
métricas del bucket.

Filtrado de configuraciones de métricas


Al trabajar con configuraciones de métricas de CloudWatch, tendrá la opción de filtrar la configuración en
grupos de objetos relacionados en un único bucket. Puede filtrar los objetos de un bucket para incluirlos en
una configuración de métricas en función de uno o varios de los elementos siguientes:

• Prefijo de nombre de la clave de objeto: aunque el modelo de datos de Amazon S3 sea una estructura
plana, puede inferir su jerarquía mediante el uso de un prefijo. La consola de Amazon S3 admite estos
prefijos con el concepto de carpetas. Si filtra por prefijo, los objetos que tengan el mismo prefijo se
incluyen en la configuración de métricas.
• Etiqueta: puede añadir etiquetas, que son pares de nombre de clave-valor, a los objetos. Las etiquetas
le permiten encontrar y organizar los objetos fácilmente. También pueden utilizarlas como filtro para las
configuraciones de métricas.

Si especifica un filtro, únicamente las solicitudes que operen en objetos únicos pueden coincidir con el filtro
e incluirse entre las métricas de las que se informa. Las solicitudes como Delete Multiple Objects (Eliminar
varios objetos) y List no devuelven métricas para las configuraciones con filtros.

Para solicitar un filtrado más complejo, seleccione dos o más elementos. Solo los objetos que tengan todos
estos elementos se incluirán en la configuración de métricas. Si no configura filtros, todos los objetos del
bucket se incluirán en la configuración de métricas.

Cómo agregar configuraciones de métricas


Puede agregar configuraciones de métricas a un bucket a través de la consola de Amazon S3, con la AWS
CLI o con la API REST de Amazon S3. Para obtener información acerca de cómo hacerlo en la Consola de
administración de AWS, consulte ¿Cómo puedo configurar métricas de solicitudes para un bucket de S3?
en la Guía del usuario de la consola de Amazon Simple Storage Service.

Para añadir configuraciones de métricas con la AWS CLI

1. Instale y configure la AWS CLI. Para obtener instrucciones, consulte Instalación de la AWS Command
Line Interface en la AWS Command Line Interface Guía del usuario.
2. Abra un terminal.

Versión de API 2006-03-01


644
Amazon Simple Storage Service Guía del desarrollador
Registro con Amazon S3

3. Ejecute el siguiente comando para agregar una configuración de métricas.

aws s3api put-bucket-metrics-configuration --endpoint http://s3-us-west-2.amazonaws.com


--bucket bucket-name --id metrics-config-id --metrics-configuration '{"Id":"metrics-
config-id","Filter":{"Prefix":"prefix1"}}'

4. Para comprobar que se ha agregado la configuración, ejecute el siguiente comando.

aws s3api get-bucket-metrics-configuration --endpoint http://s3-us-west-2.amazonaws.com


--bucket bucket-name --id metrics-config-id

Este devolverá la siguiente respuesta.

{
"MetricsConfiguration": {
"Filter": {
"Prefix": "prefix1"
},
"Id": "metrics-config-id"
}
}

También puede agregar configuraciones de métricas mediante programación con la API REST de Amazon
S3. Para obtener más información, consulte los siguientes temas en la Amazon Simple Storage Service
API Reference:

• PUT Bucket Metric Configuration


• GET Bucket Metric Configuration
• List Bucket Metric Configuration
• DELETE Bucket Metric Configuration

Registro con Amazon S3


Puede registrar las acciones que realizan los usuarios, roles o servicios de AWS en recursos de Amazon
S3 y mantener registros para fines de auditoría y conformidad. Para ello, puede usar Registros de acceso
al servidor (p. 674), registros de AWS CloudTrail o una combinación de ambos. Le recomendamos que
utilice AWS CloudTrail para registrar las acciones de nivel de bucket y objeto para sus recursos de Amazon
S3.

En la tabla siguiente se indican las propiedades principales de los registros de AWS CloudTrail y los
registros de acceso al servidor de Amazon S3.

Propiedades del registro AWS CloudTrail Registros de


servidor de
Amazon S3

Se pueden reenviar a otros sistemas (CloudWatch Logs, Sí  


Eventos de CloudWatch)

Enviar los registros a varios destinos (por ejemplo, enviar los Sí  


mismos registros a dos buckets diferentes)

Habilitar los registros para un subconjunto de objetos (prefijo) Sí  

Versión de API 2006-03-01


645
Amazon Simple Storage Service Guía del desarrollador
Registro con Amazon S3

Propiedades del registro AWS CloudTrail Registros de


servidor de
Amazon S3

Envío de registros entre cuentas (bucket de origen y destino Sí  


propiedad de cuentas diferentes)

Validación de la integridad del archivo de registro mediante el Sí  


uso de firmas digitales/algoritmos hash

Selección del cifrado o uso del cifrado predeterminado para Sí  


los archivos de registro

Operaciones con objetos (mediante las API de Amazon S3) Sí Sí

Operaciones con buckets (mediante las API de Amazon S3) Sí Sí

Búsqueda de registros en la interfaz de usuario Sí  

Campos para parámetros de bloqueo de objetos, selección de Sí  


propiedades en Amazon S3 para los registros

Campos Object Size, Total Time, Turn-Around Time   Sí


y HTTP Referrer para los registros

Transiciones, finalizaciones, restauraciones del ciclo de vida   Sí

Registro de claves en una operación de eliminación por lotes   Sí


1
Errores de autenticación   Sí

Cuentas a las que se envían los registros Propietario Solo propietario


2
del bucket del bucket
y solicitante

Performance and Cost AWS CloudTrail Amazon S3


Server Logs

Precio Los eventos de No hay ningún


administración cargo adicional
(primera entrega) aparte del cargo
son gratuitos; se por almacenar
aplica un cargo los registros
a los eventos de
datos, además
del cargo de
almacenamiento
de registros

Velocidad de entrega de registros Eventos de Unas horas


datos: cada 5
minutos; eventos
de administración:
cada 15 minutos

Versión de API 2006-03-01


646
Amazon Simple Storage Service Guía del desarrollador
Registro de llamadas a la API con AWS CloudTrail

Propiedades del registro AWS CloudTrail Registros de


servidor de
Amazon S3

Formato de registro JSON Archivo de registro


con entradas
separadas por
espacios y
delimitadas por
una nueva línea

Notas:

1. CloudTrail no envía registros para las solicitudes que no superan la autenticación (en las que las
credenciales proporcionadas no son válidas). Sin embargo, sí incluye los registros de las solicitudes
que no superan el proceso de autorización (AccessDenied) y las solicitudes realizadas por usuarios
anónimos.
2. El propietario del bucket de S3 recibe registros de CloudTrail únicamente si la cuenta también
es propietaria del objeto de la solicitud o tiene acceso completo a dicho objeto. Para obtener
más información, consulte Acciones en el nivel de objeto en escenarios que afectan a varias
cuentas (p. 651).

Registro de llamadas a la API de Amazon S3


mediante AWS CloudTrail
Amazon S3 está integrado con AWS CloudTrail, un servicio que proporciona un registro de las acciones
realizadas por un usuario, un rol o un servicio de AWS en Amazon S3. CloudTrail captura un subconjunto
de llamadas a la API de Amazon S3 como eventos, incluidas las llamadas procedentes de la consola de
Amazon S3 y de las llamadas del código a las API de Amazon S3. Si crea un registro de seguimiento,
puede habilitar la entrega continua de eventos de CloudTrail a un bucket de Amazon S3, incluidos los
eventos de Amazon S3. Si no configura un registro de seguimiento, puede ver los eventos más recientes
en la consola de CloudTrail en el Event history (Historial de eventos). Mediante la información que recopila
CloudTrail, se puede determinar la solicitud que se envió a Amazon S3, la dirección IP desde la que se
realizó la solicitud, quién la realizó, cuándo la realizó y los detalles adicionales.

Para obtener más información sobre CloudTrail, incluido cómo configurarlo y habilitarlo, consulte la AWS
CloudTrail User Guide.

Información de Amazon S3 en CloudTrail


CloudTrail se habilita en una cuenta de AWS al crearla. Cuando se produce una actividad de eventos
compatible en Amazon S3, dicha actividad se registra en un evento de CloudTrail junto con los eventos
de los demás servicios de AWS en Event history (Historial de eventos). Puede ver, buscar y descargar los
últimos eventos de la cuenta de AWS. Para obtener más información, consulte Visualización de eventos
con el historial de eventos de CloudTrail.

Para mantener un registro continuo de los eventos de la cuenta de AWS, incluidos los eventos de Amazon
S3, cree un registro de seguimiento. Un registro de seguimiento permite a CloudTrail enviar archivos de
registro a un bucket de Amazon S3. De forma predeterminada, cuando se crea un registro de seguimiento
en la consola, este se aplica a todas las regiones. El registro de seguimiento registra los eventos de todas
las regiones de la partición de AWS y envía los archivos de registro al bucket de Amazon S3 especificado.
También puede configurar otros servicios de AWS para analizar y actuar en función de los datos de

Versión de API 2006-03-01


647
Amazon Simple Storage Service Guía del desarrollador
Información de Amazon S3 en CloudTrail

eventos recopilados en los registros de CloudTrail. Para obtener más información, consulte los siguientes
temas:

• Introducción a la creación de registros de seguimiento


• Servicios e integraciones compatibles con CloudTrail
• Configuración de notificaciones de Amazon SNS para CloudTrail
• Recibir archivos de registro de CloudTrail de varias regiones y Recepción de archivos de registro de
CloudTrail de varias cuentas

Cada entrada de registro o evento contiene información acerca de quién generó la solicitud. La información
de identidad del usuario le ayuda a determinar lo siguiente:

• Si la solicitud se realizó con las credenciales raíz o del usuario de IAM.


• Si la solicitud se realizó con credenciales de seguridad temporales de un rol o fue un usuario federado.
• Si la solicitud la realizó otro servicio de AWS.

Para obtener más información, consulte el elemento userIdentity de CloudTrail.

Puede almacenar los archivos de log en su bucket todo el tiempo que desee, y también puede definir
reglas de ciclo de vida de Amazon S3 para archivar o eliminar archivos de log automáticamente. De forma
predeterminada, los archivos de registro se cifran mediante cifrado en el lado de servidor de Amazon S3
(SSE).

Acciones en el nivel de bucket de Amazon S3 objetivo del


seguimiento del registro de CloudTrail
De manera predeterminada, CloudTrail registra acciones en el nivel de bucket. Los registros de Amazon
S3 se agrupan junto con otros registros de servicios de AWS en un archivo de registro. CloudTrail
determina cuándo se crea un archivo nuevo para usarlo como registro en función del período de tiempo y
el tamaño del archivo.

En las tablas de esta sección se enumeran las acciones en el nivel de bucket de Amazon S3 compatibles
con el registro por parte de CloudTrail.

Acciones en el nivel de bucket de Amazon S3 objetivo del seguimiento del registro de CloudTrail

Nombre de la API REST Nombre del evento de la API usado en el registro


de CloudTrail

DELETE Bucket DeleteBucket

DELETE Bucket cors DeleteBucketCors

DELETE Bucket encryption DeleteBucketEncryption

Ciclo de vida de DELETE Bucket DeleteBucketLifecycle

DELETE Bucket policy DeleteBucketPolicy

DELETE Bucket replication DeleteBucketReplication

DELETE Bucket tagging DeleteBucketTagging

DELETE Bucket website DeleteBucketWebsite

GET Bucket acl GetBucketAcl

Versión de API 2006-03-01


648
Amazon Simple Storage Service Guía del desarrollador
Información de Amazon S3 en CloudTrail

Nombre de la API REST Nombre del evento de la API usado en el registro


de CloudTrail

GET Bucket cors GetBucketCors

GET Bucket encryption GetBucketEncryption

Ciclo de vida de GET Bucket GetBucketLifecycle

GET Bucket location GetBucketLocation

GET Bucket logging GetBucketLogging

GET Bucket notification GetBucketNotification

GET Bucket policy GetBucketPolicy

GET Bucket replication GetBucketReplication

GET Bucket requestPayment GetBucketRequestPay

GET Bucket tagging GetBucketTagging

GET Bucket versioning GetBucketVersioning

GET Bucket website GetBucketWebsite

GET Service (List all buckets) ListBuckets

PUT Bucket CreateBucket

PUT Bucket acl PutBucketAcl

PUT Bucket cors PutBucketCors

PUT Bucket encryption PutBucketEncryption

Ciclo de vida de PUT Bucket PutBucketLifecycle

PUT Bucket logging PutBucketLogging

PUT Bucket notification PutBucketNotification

PUT Bucket policy PutBucketPolicy

PUT Bucket replication PutBucketReplication

PUT Bucket requestPayment PutBucketRequestPay

PUT Bucket tagging PutBucketTagging

PUT Bucket versioning PutBucketVersioning

PUT Bucket website PutBucketWebsite

Además de estas operaciones de la API, también puede usar la acción en el nivel de objeto OPTIONS
object. Esta acción se trata como una acción en el nivel de bucket en el registro de CloudTrail porque la
acción comprueba la configuración CORS de un bucket.

Versión de API 2006-03-01


649
Amazon Simple Storage Service Guía del desarrollador
Información de Amazon S3 en CloudTrail

Acciones en el nivel de objeto de Amazon S3 objetivo del


seguimiento del registro de CloudTrail
También puede recibir registros de CloudTrail para acciones de Amazon S3 en el nivel de objetos. Para
hacerlo, especifique el objeto de Amazon S3 al que quiera realizar un seguimiento. Cuando se produce
una acción en el nivel de objeto en su cuenta, CloudTrail evalúa su configuración de seguimiento. Si el
evento coincide con el objeto especificado en un seguimiento, se registra el evento. Para obtener más
información, consulte ¿Cómo puedo habilitar el registro en el nivel de objeto para un bucket de S3 con
eventos de datos de AWS CloudTrail? en la Guía del usuario de la consola de Amazon Simple Storage
Service y Eventos de datos en la AWS CloudTrail User Guide. En la siguiente tabla se muestran las
acciones en el nivel de objeto que puede registrar CloudTrail:

Nombre de la API REST Nombre del evento de la API usado en el registro


de CloudTrail

Abort Multipart Upload AbortMultipartUpload

Complete Multipart Upload CompleteMultipartUpload

Delete Multiple Objects DeleteObjects

DELETE Object DeleteObject

GET Object GetObject

GET Object ACL GetObjectAcl

GET Object tagging GetObjectTagging

GET Object torrent GetObjectTorrent

HEAD Object HeadObject

Initiate Multipart Upload CreateMultipartUpload

List Parts ListParts

POST Object PostObject

POST Object restore RestoreObject

PUT Object PutObject

PUT Object acl PutObjectAcl

PUT Object tagging PutObjectTagging

PUT Object - Copy CopyObject

SELECT Object Content SelectObjectContent

Upload Part UploadPart

Upload Part - Copy UploadPartCopy

Además de estas operaciones, puede usar las siguientes operaciones en el nivel de bucket para obtener
registros de CloudTrail como acciones en el nivel de objeto de Amazon S3 en determinadas condiciones:

• GET Bucket (List Objects) Versión 2: seleccione un prefijo especificado en el seguimiento.

Versión de API 2006-03-01


650
Amazon Simple Storage Service Guía del desarrollador
Información de Amazon S3 en CloudTrail

• GET Bucket Object versions: seleccione un prefijo especificado en el seguimiento.


• HEAD Bucket: especifique un bucket y un prefijo vacío.
• Delete Multiple Objects: especifique un bucket y un prefijo vacío.
Note

CloudTrail no registra los nombres de las claves eliminadas mediante la operación Delete
Multiple Objects (Eliminar varios objetos).

Acciones en el nivel de objeto en escenarios que afectan a varias cuentas


Los siguientes casos son casos de uso especiales relativos a las llamadas a la API de nivel de objeto en
escenarios que afectan a varias cuentas y a la forma de informar de los registros de CloudTrail. CloudTrail
siempre entrega los registros al solicitante (a quien realiza la llamada a la API). Al configurar el acceso a
varias cuentas, tenga en cuenta los ejemplos de esta sección.
Note

Los ejemplos presuponen que los registros de CloudTrail están configurados correctamente.

Ejemplo 1: CloudTrail entrega los registros de acceso al propietario del bucket

CloudTrail entrega los registros de acceso al propietario del bucket solo si este tiene permisos para la API
del mismo objeto. Piense en el siguiente escenario con varias cuentas:

• La cuenta A es la propietaria del bucket.


• La cuenta B (el solicitante) intenta tener acceso a un objeto de ese bucket.

CloudTrail siempre entrega los registros de acceso de la API de nivel de objetos al solicitante. Además,
CloudTrail también entrega los mismos registros al propietario del bucket solo si este tiene permisos para
las mismas acciones de la API en dicho objeto.
Note

Si el propietario del bucket también es propietario del objeto, este obtendrá los registros de
acceso del objeto. De lo contrario, el propietario del bucket debe obtener los permisos, mediante
la ACL del objeto, para la misma API de objeto, de modo que pueda obtener los mismos registros
de la API de acceso al objeto.

Ejemplo 2: CloudTrail no hace proliferar las direcciones de correo electrónico empleadas al


estableces las ACL de objeto

Piense en el siguiente escenario con varias cuentas:

• La cuenta A es la propietaria del bucket.


• La cuenta B (el solicitante) envía una solicitud para establecer un permiso de la ACL de un objeto con
una dirección de correo electrónico. Para obtener más información sobre las ACL, consulte Información
general de las Access Control Lists (ACL, Listas de control de acceso) (p. 419).

La solicitud obtiene los registros junto con la información del correo electrónico. Sin embargo, el propietario
del objeto (si puede recibir registros, como en el ejemplo 1) obtiene el registro de CloudTrail que informa
del evento. Aun así, el propietario del bucket no obtiene la información sobre la configuración de ACL,
específicamente el correo electrónico del receptor del permiso y el permiso en sí. La única información
que se comunica al propietario del bucket en el registro es que la cuenta B realizó una llamada a la API de
ACL.

Versión de API 2006-03-01


651
Amazon Simple Storage Service Guía del desarrollador
Uso de registros de CloudTrail con los registros de
acceso al servidor en Amazon S3 y CloudWatch Logs

Seguimiento de CloudTrail con llamadas a la API SOAP de


Amazon S3
CloudTrail sigue las llamadas a la API SOAP en Amazon S3. La compatibilidad con SOAP por HTTP está
obsoleta en Amazon S3, pero aún se encuentra disponible con HTTPS. Para obtener más información
sobre la compatibilidad de SOAP en Amazon S3, consulte Apéndice A: uso de la API SOAP (p. 712).
Important

Las nuevas características de Amazon S3 no serán compatibles con SOAP. Recomendamos que
use bien REST API o bien los SDK de AWS.

Acciones SOAP de Amazon S3 objetivo del seguimiento del registro de CloudTrail

Nombre de la API SOAP Nombre del evento de la API usado en el registro


de CloudTrail

ListAllMyBuckets ListBuckets

CreateBucket CreateBucket

DeleteBucket DeleteBucket

GetBucketAccessControlPolicy GetBucketAcl

SetBucketAccessControlPolicy PutBucketAcl

GetBucketLoggingStatus GetBucketLogging

SetBucketLoggingStatus PutBucketLogging

Uso de registros de CloudTrail con los registros de


acceso al servidor en Amazon S3 y CloudWatch Logs
Los registros de AWS CloudTrail ofrecen un registro de las acciones realizadas por un usuario, rol o
servicio de AWS en Amazon S3, mientras que los registros de acceso al servidor de Amazon S3 ofrecen
registros detallados de las solicitudes que se realizan a un bucket de S3. Para obtener más información
acerca de cómo funcionan los distintos registros, sus propiedades, rendimiento y costos, consulte the
section called “Registro con Amazon S3” (p. 645). Puede usar los registros de AWS CloudTrail junto
con los registros de acceso al servidor de Amazon S3. Los registros de CloudTrail proporcionan un
seguimiento detallado de las aPI para las operaciones de nivel de bucket y objeto de Amazon S3. Los
registros de acceso al servidor de Amazon S3 le proporcionan visibilidad de las operaciones de nivel de
objeto realizadas en sus propios datos en Amazon S3. Para obtener más información sobre los registros
de acceso al servidor, consulte Registro de acceso al servidor de Amazon S3 (p. 674).

También puede utilizar registros de CloudTrail junto con CloudWatch para Amazon S3. La integración de
CloudTrail con los registros de CloudWatch Logs entrega la actividad de la API en el nivel de bucket de S3
capturada por CloudTrail a un flujo de registros de CloudWatch en el grupo de registros de CloudWatch
que especifique. Puede crear alarmas de CloudWatch para monitorizar actividades específicas de la API
y recibir notificaciones por correo electrónico cuando ocurres las actividades de la API en cuestión. Para
obtener más información sobre las alarmas de CloudWatch para monitorizar actividades específicas de la
API, consulte la AWS CloudTrail User Guide. Para obtener más información sobre el uso de CloudWatch
con Amazon S3, consulte Monitorización de métricas con Amazon CloudWatch (p. 636).

Versión de API 2006-03-01


652
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: Entradas de archivos de log de Amazon S3

Ejemplo: Entradas de archivos de log de Amazon S3


Un registro de seguimiento es una configuración que permite la entrega de eventos como archivos de
registro al bucket de Amazon S3 que se especifique. Los archivos de registro de CloudTrail contienen una
o varias entradas de registro. Un evento representa una única solicitud desde cualquier origen. Incluye
información sobre la acción solicitada, la fecha y la hora de la acción, los parámetros de la solicitud,
etcétera. Los archivos de registro de CloudTrail no son un rastro de la pila ordenada de las llamadas a la
API públicas, por lo que no aparecen en ningún orden específico.

El siguiente ejemplo muestra una entrada de registro de CloudTrail que ilustra las acciones GET Service,
PUT Bucket acl y GET Bucket versioning.

{
"Records": [
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:18:19Z",
"eventSource": "s3.amazonaws.com",
"eventName": "ListBuckets",
"awsRegion": "us-west-2",
"sourceIPAddress": "127.0.0.1",
"userAgent": "[]",
"requestParameters": {
"host": [
"s3.us-west-2.amazonaws.com"
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV2",
"AuthenticationMethod": "QueryString"
},
"requestID": "47B8E8D397DCE7A6",
"eventID": "cdc4b7ed-e171-4cef-975a-ad829d4123e8",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
},
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:22:33Z",
"eventSource": "s3.amazonaws.com",
"eventName": "PutBucketAcl",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"bucketName": "",

Versión de API 2006-03-01


653
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: Entradas de archivos de log de Amazon S3

"AccessControlPolicy": {
"AccessControlList": {
"Grant": {
"Grantee": {
"xsi:type": "CanonicalUser",
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"ID":
"d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example"
},
"Permission": "FULL_CONTROL"
}
},
"xmlns": "http://s3.amazonaws.com/doc/2006-03-01/",
"Owner": {
"ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example"
}
}
"host": [
"s3-us-west-2.amazonaws.com"
],
"acl": [
""
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"AuthenticationMethod": "AuthHeader"
},
"requestID": "BD8798EACDD16751",
"eventID": "607b9532-1423-41c7-b048-ec2641693c47",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
},
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:26:37Z",
"eventSource": "s3.amazonaws.com",
"eventName": "GetBucketVersioning",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"host": [
"s3.us-west-2.amazonaws.com"
],
"bucketName": "myawsbucket",
"versioning": [
""
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"AuthenticationMethod": "AuthHeader",
},

Versión de API 2006-03-01


654
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

"requestID": "07D681279BD94AED",
"eventID": "f2b287f3-0df1-4961-a2f4-c4bdfed47657",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
}
]
}

Recursos relacionados
• AWS CloudTrail User Guide
• Referencia de eventos de CloudTrail
• Uso de AWS CloudTrail para identificar solicitudes de Amazon S3 (p. 655)

Uso de AWS CloudTrail para identificar solicitudes


de Amazon S3
Amazon S3 le permite identificar solicitudes mediante un registro de eventos de AWS CloudTrail. AWS
CloudTrail es la forma preferida de identificar solicitudes de Amazon S3, pero si utiliza los registros de
acceso al servidor de Amazon S3, consulte the section called “Uso de registros de acceso de Amazon S3
para identificar solicitudes de Amazon S3” (p. 690).

Temas
• Cómo captura CloudTrail las solicitudes realizadas a Amazon S3 (p. 655)
• Cómo habilitar el registro de eventos de CloudTrail para los buckets y los objetos de S3 (p. 655)
• Identificación de las solicitudes realizadas a Amazon S3 en un registro de CloudTrail (p. 656)
• Uso de AWS CloudTrail para identificar solicitudes de Signature Version 2 en Amazon S3 (p. 658)
• Uso de AWS CloudTrail para identificar el acceso a objetos de Amazon S3 (p. 660)
• Recursos relacionados (p. 655)

Cómo captura CloudTrail las solicitudes realizadas a


Amazon S3
De forma predeterminada, CloudTrail registra las llamadas a la API de nivel de bucket de S3 que
se realizaron en los últimos 90 días, pero no las solicitudes realizadas a objetos. Las llamadas en el
nivel de bucket incluyen eventos como CreateBucket, DeleteBucket, PutBucketLifeCycle
PutBucketPolicy, etc. Puede ver los eventos de nivel bucket en la consola de CloudTrail. Sin embargo,
no puede ver los eventos de datos (llamadas de nivel de objeto de Amazon S3) en la consola; para ello,
debe analizar o consultar los registros en CloudTrail.

Para obtener información sobre las llamadas a la API de Amazon S3 capturadas por CloudTrail, consulte
Información de Amazon S3 en CloudTrail (p. 647).

Cómo habilitar el registro de eventos de CloudTrail


para los buckets y los objetos de S3
Los eventos de datos de CloudTrail le permiten obtener información sobre las solicitudes de nivel de
bucket y objeto. Para habilitar los eventos de datos de CloudTrail para un bucket específico, consulte

Versión de API 2006-03-01


655
Amazon Simple Storage Service Guía del desarrollador
Identificación de las solicitudes realizadas
a Amazon S3 en un registro de CloudTrail

¿Cómo puedo habilitar el registro en el nivel de objeto para un bucket de S3 con eventos de datos de AWS
CloudTrail? en la Guía del usuario de la consola de Amazon Simple Storage Service.

Para habilitar los eventos de datos de CloudTrail para todos sus buckets o para una lista de buckets
específicos, debe crear un rastro manualmente en CloudTrail.
Note
• La configuración predeterminada de CloudTrail es encontrar solo los eventos de administración.
Asegúrese de que tiene habilitados los eventos de datos en su cuenta.
• Con un bucket de S3 que genera una gran carga de trabajo, podrían generarse rápidamente
miles de registros en un corto periodo de tiempo. Decida con cuidado el tiempo que va a tener
habilitados los eventos de datos de CloudTrail para un bucket ocupado.

CloudTrail almacena los registros de eventos de datos de Amazon S3 en el bucket de S3 que usted elija.
Debería considerar la posibilidad de usar un bucket de una cuenta de AWS distinta para organizar mejor
los eventos procedentes de varios buckets en un lugar central y, de ese modo, simplificar las consultas y
los análisis. AWS Organizations le permite crear fácilmente una cuenta de AWS que esté vinculada a la
cuenta que contiene el bucket que va a monitorizar. Para obtener más información, consulte ¿Qué es AWS
Organizations? en la Guía del usuario de AWS Organizations.

Cuando cree un registro de seguimiento en CloudTrail, en la sección de eventos de datos, puede


seleccionar la casilla Select all S3 buckets in your account (Seleccionar todos los buckets de S3 de la
cuenta) para registrar todos los eventos de nivel de objeto.
Note
• Una práctica recomendada consiste en crear una política de ciclo de vida de Amazon S3
para el bucket de eventos de datos de AWS CloudTrail. Configure la política de ciclo de vida
para eliminar periódicamente los archivos de registro tras el periodo de tiempo que considere
necesario para auditarlos. Esto reduce la cantidad de datos que Athena analiza para cada
consulta.
• Para obtener información sobre el formato de registro, consulte Registro de llamadas a la API
de Amazon S3 mediante AWS CloudTrail.
• Para ver ejemplos de cómo consultar registros de CloudTrail, consulte Analyze Security,
Compliance, and Operational Activity Using AWS CloudTrail and Amazon Athena.

Identificación de las solicitudes realizadas a Amazon


S3 en un registro de CloudTrail
Los eventos registrados por CloudTrail se almacenan como objetos JSON comprimidos con gzip en el
bucket de S3. Para encontrar las solicitudes realizadas de manera eficaz, debe utilizar un servicio como
Amazon Athena para indexar y consultar los registros de CloudTrail. Para obtener más información sobre
CloudTrail y Athena, consulte Consulta de registros de AWS CloudTrail.

Uso de Athena con registros de CloudTrail


Después de configurar CloudTrail para que entregue los eventos en un bucket, debe empezar a ver
cómo llegan objetos al bucket de destino en la consola de Amazon S3. Tienen el formato siguiente:
s3://<myawsexamplebucket>/AWSLogs/<111122223333>/CloudTrail/<Region>/<yyyy>/
<mm>/<dd>

Example — Uso de Athena para consultar registros de eventos de CloudTrail de solicitudes


específicas

Encuentre sus registros de eventos de CloudTrail:

Versión de API 2006-03-01


656
Amazon Simple Storage Service Guía del desarrollador
Identificación de las solicitudes realizadas
a Amazon S3 en un registro de CloudTrail

s3://myawsexamplebucket/AWSLogs/111122223333/CloudTrail/us-east-2/2019/04/14

Con los registros de eventos de CloudTrail, ahora puede crear una base de datos y una tabla de Athena
para consultarlos como se indica a continuación:

1. Abra la consola de Athena en https://console.aws.amazon.com/athena/.


2. Cambie la región de AWS para que coincida con el bucket de S3 de destino de CloudTrail.
3. En la ventana de consulta, cree una base de datos de Athena para los eventos de CloudTrail:

CREATE DATABASE s3_cloudtrail_events_db

4. Utilice la consulta siguiente para crear una tabla para todos los eventos de CloudTrail en el bucket.
Asegúrese de cambiar el nombre del bucket de <CloudTrail_myawsexamplebucket> por el
nombre de su bucket. También proporcione el AWS_account_ID de CloudTrail que se utiliza en el
bucket.

CREATE EXTERNAL TABLE s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table(


eventversion STRING,
useridentity STRUCT<
type:STRING,
principalid:STRING,
arn:STRING,
accountid:STRING,
invokedby:STRING,
accesskeyid:STRING,
userName:STRING,
sessioncontext:STRUCT<
attributes:STRUCT<
mfaauthenticated:STRING,
creationdate:STRING>,
sessionissuer:STRUCT<
type:STRING,
principalId:STRING,
arn:STRING,
accountId:STRING,
userName:STRING>
>
>,
eventtime STRING,
eventsource STRING,
eventname STRING,
awsregion STRING,
sourceipaddress STRING,
useragent STRING,
errorcode STRING,
errormessage STRING,
requestparameters STRING,
responseelements STRING,
additionaleventdata STRING,
requestid STRING,
eventid STRING,
resources ARRAY<STRUCT<
ARN:STRING,
accountId:STRING,
type:STRING>>,
eventtype STRING,
apiversion STRING,
readonly STRING,
recipientaccountid STRING,
serviceeventdetails STRING,
sharedeventid STRING,
vpcendpointid STRING

Versión de API 2006-03-01


657
Amazon Simple Storage Service Guía del desarrollador
Uso de AWS CloudTrail para identificar
solicitudes de Signature Version 2 en Amazon S3

)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://<myawsexamplebucket>/AWSLogs/<111122223333>/';

5. Haga pruebas en Athena para asegurarse de que la consulta funciona.

SELECT * FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table


WHERE eventsource='s3.amazonaws.com'
LIMIT 2;

Uso de AWS CloudTrail para identificar solicitudes de


Signature Version 2 en Amazon S3
Amazon S3 le permite utilizar un registro de eventos de AWS CloudTrail para identificar qué versión de
la API de firma se utilizó para firmar una solicitud. Esta capacidad es importante porque el soporte para
Signature Version 2 va a finalizar (esta característica quedará obsoleta). Cuando esto suceda, Amazon S3
dejará de aceptar solicitudes que utilicen Signature Version 2, y todas las solicitudes deberán firmarse con
Signature Version 4.

Le recomendamos que utilice CloudTrail para determinar si alguno de sus flujos de trabajo utiliza el
proceso de firma de Signature Version 2. Actualice las bibliotecas y el código para que utilicen Signature
Version 4 con el fin de evitar que su negocio se vea afectado.

Para obtener más información, consulte Announcement: AWS CloudTrail for Amazon S3 adds new fields
for enhanced security auditing en los foros de debate de AWS.
Note

Los eventos de CloudTrail para Amazon S3 incluyen la versión de firma en los detalles de
la solicitud bajo el nombre de clave "additionalEventData". Para encontrar la versión
de la firma de las solicitudes realizadas para los objetos en Amazon S3 como GET, PUT y
DELETE, debe habilitar los eventos de datos de CloudTrail porque están deshabilitados de forma
predeterminada.

AWS CloudTrail es el método preferido para identificar solicitudes de Signature Version 2, pero si utiliza
los registros de acceso al servidor de Amazon S3, consulte Uso de los registros de acceso de Amazon S3
para identificar solicitudes de Signature Version 2 (p. 695)

Ejemplos de consultas de Athena para identificar solicitudes de


Signature Version 2 de Amazon S3
Example — Seleccionar todos los eventos de Signature Version 2 e imprimir únicamente
EventTime, S3 Action, Request_Parameters, Region, SourceIP y UserAgent

En la consulta de Athena siguiente, sustituya


<s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table> por los datos de Athena
y aumente o elimine el límite si es necesario.

SELECT EventTime, EventName as S3_Action, requestParameters as Request_Parameters,


awsregion as AWS_Region, sourceipaddress as Source_IP, useragent as User_Agent

Versión de API 2006-03-01


658
Amazon Simple Storage Service Guía del desarrollador
Uso de AWS CloudTrail para identificar
solicitudes de Signature Version 2 en Amazon S3

FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
LIMIT 10;

Example — Seleccionar todos los solicitantes que están enviando tráfico Signature Version 2

SELECT useridentity.arn, Count(requestid) as RequestCount


FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE eventsource='s3.amazonaws.com'
and json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
Group by useridentity.arn

Particionado de los datos de Signature Version 2


Si tiene una gran cantidad de datos que necesita consultar, puede reducir los costos y el tiempo de
ejecución de Athena creando una tabla particionada.

Para ello, cree una tabla nueva con particiones como se indica a continuación.

CREATE EXTERNAL TABLE


s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table_partitioned(
eventversion STRING,
userIdentity STRUCT<
type:STRING,
principalid:STRING,
arn:STRING,
accountid:STRING,
invokedby:STRING,
accesskeyid:STRING,
userName:STRING,
sessioncontext:STRUCT<
attributes:STRUCT<
mfaauthenticated:STRING,
creationdate:STRING>,
sessionIssuer:STRUCT<
type:STRING,
principalId:STRING,
arn:STRING,
accountId:STRING,
userName:STRING>
>
>,
eventTime STRING,
eventSource STRING,
eventName STRING,
awsRegion STRING,
sourceIpAddress STRING,
userAgent STRING,
errorCode STRING,
errorMessage STRING,
requestParameters STRING,
responseElements STRING,
additionalEventData STRING,
requestId STRING,
eventId STRING,
resources ARRAY<STRUCT<ARN:STRING,accountId: STRING,type:STRING>>,
eventType STRING,

Versión de API 2006-03-01


659
Amazon Simple Storage Service Guía del desarrollador
Uso de CloudTrail para identificar
el acceso a objetos de Amazon S3

apiVersion STRING,
readOnly STRING,
recipientAccountId STRING,
serviceEventDetails STRING,
sharedEventID STRING,
vpcEndpointId STRING
)
PARTITIONED BY (region string, year string, month string, day string)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://myawsexamplebucket/AWSLogs/111122223333/';

A continuación, cree cada una de las particiones. No se pueden obtener resultados de fechas que no se
han creado.

ALTER TABLE s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table_partitioned ADD


PARTITION (region= 'us-east-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket/AWSLogs/111122223333/CloudTrail/us-east-1/2019/02/19/'
PARTITION (region= 'us-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket/AWSLogs/111122223333/CloudTrail/us-west-1/2019/02/19/'
PARTITION (region= 'us-west-2', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket/AWSLogs/111122223333/CloudTrail/us-west-2/2019/02/19/'
PARTITION (region= 'ap-southeast-1', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket/AWSLogs/111122223333/CloudTrail/ap-southeast-1/2019/02/19/'
PARTITION (region= 'ap-southeast-2', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket/AWSLogs/111122223333/CloudTrail/ap-southeast-2/2019/02/19/'
PARTITION (region= 'ap-northeast-1', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket/AWSLogs/111122223333/CloudTrail/ap-northeast-1/2019/02/19/'
PARTITION (region= 'eu-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket/AWSLogs/111122223333/CloudTrail/eu-west-1/2019/02/19/'
PARTITION (region= 'sa-east-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket/AWSLogs/111122223333/CloudTrail/sa-east-1/2019/02/19/';

A continuación, puede realizar la solicitud basándose en estas particiones y no necesita cargar el bucket
completo.

SELECT useridentity.arn,
Count(requestid) AS RequestCount
FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table_partitioned
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
AND region='us-east-1'
AND year='2019'
AND month='02'
AND day='19'
Group by useridentity.arn

Uso de AWS CloudTrail para identificar el acceso a


objetos de Amazon S3
Puede utilizar el registro de eventos de AWS CloudTrail para identificar solicitudes de acceso a objetos
de Amazon S3 para eventos de datos como GetObject, DeleteObject y PutObject, y encontrar información
sobre esas solicitudes.

Versión de API 2006-03-01


660
Amazon Simple Storage Service Guía del desarrollador
Uso de CloudTrail para identificar
el acceso a objetos de Amazon S3

El ejemplo siguiente muestra cómo obtener todas las solicitudes de objeto PUT para Amazon S3 desde el
registro de eventos de AWS CloudTrail.

Ejemplo de consulta de Athena para identificar solicitudes de


acceso a objetos de Amazon S3
En los siguientes ejemplos de consultas de Athena, sustituya
<s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table> por los datos de Athena
y modifique el intervalo de fechas según corresponda.

Example — Seleccionar todos los eventos que tienen solicitudes de acceso a objetos PUT e
imprimir solo EventTime, EventSource, SourceIP, UserAgent, BucketName, Object y UserARN

SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
requestParameters.bucketName as bucketName,
requestParameters.key as object,
userIdentity.arn as userArn
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE
eventName = ‘PutObject'
AND eventTime BETWEEN "2019-07-05T00:00:00Z" and "2019-07-06T00:00:00Z"

Example — Seleccionar todos los eventos que tienen solicitudes de acceso a objetos GET e
imprimir solo EventTime, EventSource, SourceIP, UserAgent, BucketName, Object y UserARN

SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
requestParameters.bucketName as bucketName,
requestParameters.key as object,
userIdentity.arn as userArn
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE
eventName = ‘GetObject'
AND eventTime BETWEEN "2019-07-05T00:00:00Z" and "2019-07-06T00:00:00Z"

Example — Seleccionar todos los eventos de solicitantes anónimos de un bucket en un


determinado periodo de tiempo e imprimir solo EventTime, EventSource, SourceIP, UserAgent,
BucketName, UserIdentity y UserARN

SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
requestParameters.bucketName as bucketName,

Versión de API 2006-03-01


661
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

userIdentity.arn as userArn,
userIdentity.principalId
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE
userIdentity.principalId='ANONYMOUS_PRINCIPAL'
AND eventTime BETWEEN "2019-07-05T00:00:00Z" and "2019-07-06T00:00:00Z"

Note

• Estos ejemplos de consultas pueden servir también para monitorizar la seguridad. Puede
revisar los resultados de las llamadas a las operaciones PutObject o GetObject desde
solicitantes/direcciones IP inesperados o no autorizados con el fin de identificar cualquier
solicitud anónima que se realice a los buckets.
• Esta consulta solo recupera información de la hora a la que se habilitó el registro.

Si utiliza los registros de acceso al servidor de Amazon S3, consulte Uso de registros de acceso de
Amazon S3 para identificar solicitudes de acceso a objetos (p. 695).

Recursos relacionados
• AWS CloudTrail User Guide
• Referencia de eventos de CloudTrail

Versión de API 2006-03-01


662
Amazon Simple Storage Service Guía del desarrollador
Cómo se le cobra la entrega por BitTorrent

Uso de BitTorrent con Amazon S3


Temas
• Cómo se le cobra la entrega por BitTorrent (p. 663)
• Uso de BitTorrent para recuperar objetos almacenados en Amazon S3 (p. 664)
• Publicación de contenido con Amazon S3 y BitTorrent (p. 665)

BitTorrent es un protocolo abierto de punto a punto para la distribución de archivos. Puede utilizar el
protocolo BitTorrent para recuperar cualquier objeto públicamente accesible en Amazon S3. En esta
sección se describe por qué se recomienda utilizar BitTorrent para distribuir sus datos fuera de Amazon S3
y cómo hacerlo.

Amazon S3 admite el protocolo BitTorrent para que los desarrolladores puedan ahorrar costos al distribuir
contenido a gran escala. Amazon S3 es útil para el almacenamiento simple y de confianza de cualquier
dato. El mecanismo de distribución predeterminado para los datos de Amazon S3 es a través de la
descarga al cliente/servidor. En la distribución al cliente/servidor, el objeto completo se transfiere de punto
a punto desde Amazon S3 a todos los usuarios autorizados que solicitan ese objeto. Si bien la entrega
al cliente/servidor es adecuada para una amplia variedad de casos de uso, no es óptima para todos. En
concreto, los costos de la distribución al cliente/servidor aumentan linealmente a media que aumenta
la cantidad de usuarios que descargan objetos. Esto puede hacer que sea costoso distribuir objetos
populares.

BitTorrent aborda este problema al reclutar a cada uno de los clientes que descargan el objeto como
distribuidores: cada cliente descarga algunas partes del objeto de Amazon S3 y otras de otros clientes,
al mismo tiempo que se cargan simultáneamente partes del mismo objeto a otros “pares” interesados.
El beneficio para los editores es que para los archivos populares grandes, la cantidad de datos que se
suministran realmente mediante Amazon S3 puede ser considerablemente menor que si se suministrara
a los mismos clientes mediante la descarga al cliente/servidor. La transferencia de una menor cantidad de
datos redunda en costos más bajos para el editor del objeto.
Note

• Amazon S3 no es compatible con el protocolo BitTorrent en las regiones de AWS en las que se
ha lanzado después del 30 de mayo de 2016.
• Puede obtener un torrente solo para objetos con un tamaño inferior a 5 GB.

Cómo se le cobra la entrega por BitTorrent


No se aplican cargos adicionales por el uso de BitTorrent con Amazon S3. La transferencia de datos
mediante el protocolo BitTorrent se mide con la misma tarifa que la entrega cliente/servidor. Para ser
más precisos, cuando un cliente de BitTorrent que descarga datos solicita una "parte" de un objeto del
"propagador" de Amazon S3, los costos se cobran del mismo modo que si se hubiera realizado una
solicitud anónima para dicha parte mediante el protocolo REST o SOAP. Estos costos aparecerán en
su factura de Amazon S3 y en sus informes de uso de la misma manera. La diferencia es que, si un
montón de clientes solicitan el mismo objeto de manera simultánea por BitTorrent, la cantidad de datos que
Amazon S3 debe servir para satisfacer las necesidades de esos clientes será menor que con la entrega
cliente/servidor. Esto se debe a que los clientes de BitTorrent cargan y descargan simultáneamente entre
sí.

Versión de API 2006-03-01


663
Amazon Simple Storage Service Guía del desarrollador
Uso de BitTorrent para recuperar
objetos almacenados en Amazon S3

Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

El ahorro en la transferencia de datos que se consigue mediante el uso de BitTorrent puede variar
ampliamente en función de la popularidad del objeto. Los objetos menos populares requieren un uso
más intensivo del "propagador" para servir a los clientes y, por tanto, la diferencia entre los costos de
distribución de BitTorrent y los costos de distribución cliente/servidor podría ser mínima para dichos
objetos. En particular, si en un determinado momento solo hay un cliente descargando un objeto
específico, el costo de la entrega por BitTorrent será el mismo que con una descarga directa.

Uso de BitTorrent para recuperar objetos


almacenados en Amazon S3
Cualquier objeto de Amazon S3 que se pueda leer de forma anónima se podrá descargar mediante
BitTorrent. Para hacerlo, necesitará una aplicación cliente de BitTorrent. Amazon no distribuye aplicaciones
clientes de BitTorrent, pero hay muchos clientes gratuitos disponibles. La implementación de BitTorrent en
Amazon S3 ha sido comprobada para que su funcionamiento sea compatible con el cliente de BitTorrent
oficial (visite http://www.bittorrent.com/).

El punto de arranque de una descarga por BitTorrent es un archivo .torrent. Este pequeño archivo describe
a los clientes de BitTorrent tanto qué datos se deben descargar como dónde empezar a encontrar esos
datos. Un archivo .torrent representa una pequeña fracción del tamaño del objeto real que se ha de
descargar. Cuando suministre a su aplicación cliente de BitTorrent el archivo .torrent generado por Amazon
S3, esta debería empezar a descargar inmediatamente desde Amazon S3 y desde los clientes homólogos
(peers) de BitTorrent.

La recuperación de un archivo .torrent para cualquier objeto públicamente disponible es fácil. Solo tiene
que agregar un parámetro de cadena de consulta "?torrent" al final de la solicitud REST GET para el
objeto. La autenticación no es necesaria. Cuando tenga instalado un cliente de BitTorrent, la descarga de
un objeto mediante BitTorrent podría ser tan sencilla como abrir esta URL en su navegador web.

No hay ningún mecanismo para obtener el .torrent para un objeto de Amazon S3 con la API SOAP.
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Example

En este ejemplo se recupera el archivo Torrent para el objeto "Nelson" en el bucket "quotes".

Sample Request

GET /quotes/Nelson?torrent HTTP/1.0


Date: Wed, 25 Nov 2009 12:00:00 GMT

Sample Response

HTTP/1.1 200 OK
x-amz-request-id: 7CD745EBB7AB5ED9

Versión de API 2006-03-01


664
Amazon Simple Storage Service Guía del desarrollador
Publicación de contenido con Amazon S3 y BitTorrent

Date: Wed, 25 Nov 2009 12:00:00 GMT


Content-Disposition: attachment; filename=Nelson.torrent;
Content-Type: application/x-bittorrent
Content-Length: 537
Server: AmazonS3

<body: a Bencoded dictionary as defined by the BitTorrent specification>

Publicación de contenido con Amazon S3 y


BitTorrent
Todos los objetos que se puedan leer de forma anónima almacenados en Amazon S3 están
automáticamente disponibles para descargar con BitTorrent. El proceso para cambiar la Access Control
List (ACL, Lista de control de acceso) en un objeto para permitir la operación READ anónima se describe en
Administración de identidad y acceso en Amazon S3 (p. 312).

Para dirigir a sus clientes a los objetos disponibles en BitTorrent puede brindarles directamente el
archivo .torrent o publicar un enlace en el URL ?torrent de su objeto. Un punto importante a tener en
cuenta es que el archivo .torrent que describe un objeto de Amazon S3 se genera a petición la primera
vez que se solicita (mediante el recurso REST de ?torrent). Generar el archivo .torrent para un objeto
requiere de tiempo; este tiempo es proporcional al tamaño de ese objeto. Para los objetos grandes, este
tiempo puede ser considerable. Por lo tanto, antes de publicar un enlace de ?torrent, le sugerimos que
primero lo solicite usted mismo. Amazon S3 puede demorar varios minutos para responder esta primera
solicitud mientras genera el archivo .torrent. A menos que actualice el objeto en cuestión, las solicitudes
posteriores para .torrent serán rápidas. Si sigue este procedimientos antes de distribuir un enlace ?torrent,
podrá garantizar una experiencia de descarga de BitTorrent uniforme para sus clientes.

Para dejar de distribuir un archivo con BitTorrent, simplemente elimine el acceso anónimo a él. Para esto,
puede eliminar el archivo de Amazon S3 o modificar su política de control de acceso para prohibir lecturas
anónimas. Después de hacer esto, Amazon S3 ya no actuará como “sembrador” en la red BitTorrent para
su archivo y ya no procesará el archivo .torrent a través de la Application Programming Interface (API,
Interfaz de programación de aplicaciones) de REST de ?torrent. Sin embargo, después de que se publica
un .torrent para su archivo, es posible que esta acción no detenga las descargas públicas de su objeto que
se realizan exclusivamente con la red de punto a punto de BitTorrent.

Versión de API 2006-03-01


665
Amazon Simple Storage Service Guía del desarrollador
La respuesta de error de REST

Control de errores de REST y SOAP


Temas
• La respuesta de error de REST (p. 666)
• La respuesta de error de SOAP (p. 668)
• Prácticas recomendadas para los errores de Amazon S3 (p. 668)

En esta sección se describen los errores de REST y SOAP, y cómo controlarlos.


Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

La respuesta de error de REST


Temas
• Encabezados de respuesta (p. 666)
• Respuesta de error (p. 667)

Si una solicitud REST genera un error, la respuesta HTTP incluye lo siguiente:

• Un documento de error XML como cuerpo de la respuesta.


• Tipo de contenido: aplicación/xml.
• Un código de estado HTTP apropiado de 3xx, 4xx o 5xx.

A continuación se muestra un ejemplo de una respuesta de error de REST.

<?xml version="1.0" encoding="UTF-8"?>


<Error>
<Code>NoSuchKey</Code>
<Message>The resource you requested does not exist</Message>
<Resource>/mybucket/myfoto.jpg</Resource>
<RequestId>4442587FB7D0A2F9</RequestId>
</Error>

Para obtener más información acerca de los errores de Amazon S3, consulte ErrorCodeList.

Encabezados de respuesta
Los siguientes son encabezados de respuesta que devuelven todas las operaciones:

• x-amz-request-id: Un ID único que el sistema asigna a cada solicitud. En el caso poco probable de
que tenga problemas con Amazon S3, Amazon puede utilizar esto para ayudar a solucionar el problema.

Versión de API 2006-03-01


666
Amazon Simple Storage Service Guía del desarrollador
Respuesta de error

• x-amz-id-2: Un token especial que nos ayudará a solucionar los problemas.

Respuesta de error
Temas
• Código de error (p. 667)
• Mensaje de error (p. 667)
• Más detalles (p. 667)

Cuando se genera un error en una solicitud de Amazon S3, el cliente recibe una respuesta de error.
El formato exacto de la respuesta de error es específico de la API: por ejemplo, la respuesta de error
de REST difiere de la respuesta de error de SOAP. Sin embargo, todas las respuestas de error tienen
elementos en común.
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Código de error
El código de error es una cadena que identifica de forma exclusiva una condición de error. Está diseñado
para que los programas que detectan y administran errores por tipo puedan leerlo y comprenderlo. Muchos
códigos de error son comunes entre las API de SOAP y REST, pero algunos son específicos de la API. Por
ejemplo, NoSuchKey es universal, pero UnexpectedContent se puede producir únicamente en respuesta a
una solicitud REST no válida. En todos los casos, los códigos de falla de SOAP incluyen un prefijo, como
se indica en la tabla de códigos de error, por lo que un error de NoSuchKey se devuelve efectivamente en
SOAP como Client.NoSuchKey.
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Mensaje de error
El mensaje de error contiene una descripción genérica de la condición de error en inglés. Está destinado a
un público humano. Los programas simples muestran el mensaje directamente al usuario final si se detecta
una condición de error que no sabe cómo controlar o no le interesa hacerlo. Los programas sofisticados
con un control de errores más exhaustivo y una internacionalización adecuada tienen más probabilidades
de ignorar el mensaje de error.

Más detalles
Muchas respuestas de error contienen datos estructurados adicionales diseñados para ser leídos y
comprendidos por un desarrollador que diagnostica errores de programación. Por ejemplo, si envía un
encabezado Content-MD5 con una solicitud PUT de REST que no coincide con el resumen calculado en
el servidor, recibe el error BadDigest. La respuesta de error también incluye como elementos de detalle el
resumen que calculamos y el resumen que usted nos anticipó. Durante el desarrollo, puede utilizar esta
información para diagnosticar el error. En producción, un programa con buen comportamiento puede incluir
esta información en el registro de error.

Versión de API 2006-03-01


667
Amazon Simple Storage Service Guía del desarrollador
La respuesta de error de SOAP

La respuesta de error de SOAP


Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

En SOAP, el cliente recibe un resultado de error como una falla de SOAP, con el código de respuesta
HTTP 500. Si no recibe una falla de SOAP, su solicitud se completó correctamente. El código de falla
de SOAP de Amazon S3 consta de un código de falla SOAP 1.1 estándar (“Servidor” o “Cliente”)
concatenado con el código de error específico de Amazon S3. Por ejemplo: “Server.InternalError” o
“Client.NoSuchBucket”. El elemento de cadena de falla de SOAP incluye un mensaje de error genérico
legible en inglés. Por último, el elemento de detalle de falla de SOAP incluye información variada
relacionada con el error.

Por ejemplo, si intenta eliminar el objeto “Fred”, que no existe, el cuerpo de la respuesta de SOAP incluye
una falla “NoSuchKey” de SOAP.

Example

<soapenv:Body>
<soapenv:Fault>
<Faultcode>soapenv:Client.NoSuchKey</Faultcode>
<Faultstring>The specified key does not exist.</Faultstring>
<Detail>
<Key>Fred</Key>
</Detail>
</soapenv:Fault>
</soapenv:Body>

Para obtener más información acerca de los errores de Amazon S3, consulte ErrorCodeList.

Prácticas recomendadas para los errores de


Amazon S3
Cuando diseña una aplicación para utilizar con Amazon S3, es importante controlar correctamente los
errores de Amazon S3. En esta sección se describen problemas que debe tener en cuenta al diseñar su
aplicación.

Reintente en caso de recibir una respuesta de


InternalErrors
Los errores internos son errores que se producen dentro del entorno de Amazon S3.

Es posible que las solicitudes que reciben una respuesta InternalError no se hayan procesado. Por
ejemplo, si una solicitud PUT devuelve un error InternalError, una operación GET posterior puede
recuperar el valor anterior o el valor actualizado.

Si Amazon S3 devuelve una respuesta de InternalError, repita la solicitud.

Ajuste la aplicación para errores SlowDown repetidos


Como en cualquier sistema distribuido, S3 tiene mecanismos de protección que detectan el consumo
excesivo de recursos intencional o no intencional y reaccionan en consecuencia. Los errores de SlowDown

Versión de API 2006-03-01


668
Amazon Simple Storage Service Guía del desarrollador
Aísle los errores

se pueden producir cuando una velocidad de solicitud alta activa uno de estos mecanismos. La reducción
de la velocidad de su solicitud disminuirá o eliminará errores de este tipo. En términos generales, la
mayoría de los usuarios no experimentará estos errores de manera habitual; sin embargo, si desea obtener
más información o experimenta errores SlowDown repetidos o imprevistos, publique en nuestro foro para
desarrolladores de Amazon S3 https://forums.aws.amazon.com/ o inscríbase en AWS Premium Support
https://aws.amazon.com/premiumsupport/.

Aísle los errores


Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Amazon S3 brinda un conjunto de códigos de error que se utilizan en la API de SOAP y en la de REST.
La API de SOAP devuelve códigos de error estándares de Amazon S3. La API de REST está diseñada
para tener el aspecto de un servidor HTTP estándar e interactuar con clientes HTTP existentes (p. ej.,
navegadores, bibliotecas de clientes HTTP, servidores proxy, cachés, etc.). Para asegurarnos de que los
clientes HTTP controlen los errores correctamente, a cada error de Amazon S3 le asignamos un código de
estado HTTP.

Los códigos de estado HTTP son menos costosos que los códigos de error de Amazon S3 e incluyen
menos información sobre el error. Por ejemplo, los errores NoSuchKey y NoSuchBucket de Amazon S3
corresponden al código de estado HTTP 404 Not Found.

Si bien los códigos de estado HTTP contienen menos información sobre el error, los clientes que
comprenden el HTTP pero no la API de Amazon S3, por lo general pueden controlar los errores
correctamente.

Por lo tanto, al controlar errores o informar errores de Amazon S3 a los usuarios finales, utilice el código de
error de Amazon S3 en lugar del código de estado HTTP, ya que contiene más información sobre el error.
Además, al depurar su aplicación, también debe consultar el elemento legible <Details> de la respuesta de
error de XML.

Versión de API 2006-03-01


669
Amazon Simple Storage Service Guía del desarrollador
Solución de problemas de Amazon S3 por síntoma

Solución de problemas de Amazon


S3
En esta sección se describe cómo solucionar los problemas de Amazon S3 y se explica cómo obtener ID
de solicitudes que necesita para contactarse con AWS Support.

Temas
• Solución de problemas de Amazon S3 por síntoma (p. 670)
• Obtención de ID de solicitudes de Amazon S3 para AWS Support (p. 671)
• Temas relacionados (p. 673)

Solución de problemas de Amazon S3 por síntoma


Los siguientes temas describen síntomas que pueden ayudarlo a solucionar algunos de los problemas que
puede encontrar al trabajar con Amazon S3.

Síntomas
• Aumentos significativos en las respuestas HTTP 503 a solicitudes de Amazon S3 para buckets con
control de versiones habilitado (p. 670)
• Comportamiento inesperado al acceder a los buckets configurados con CORS (p. 671)

Aumentos significativos en las respuestas HTTP 503 a


solicitudes de Amazon S3 para buckets con control de
versiones habilitado
Si detecta un aumento significativo en el número de respuestas de ralentización HTTP 503 recibidas para
solicitudes PUT o DELETE a objetos en un bucket de Amazon S3 con control de versiones habilitado,
puede que tenga uno o varios objetos en el bucket para los que habrá millones de versiones. Cuando
tiene objetos con millones de versiones, Amazon S3 limita automáticamente las solicitudes al bucket para
proteger al cliente de la excesiva cantidad de tráfico de solicitudes, que podría impedir que se realicen
otras solicitudes al mismo bucket.

Para determinar qué objetos de S3 tienen millones de versiones, utilice la herramienta de inventario de
Amazon S3. La herramienta de inventario genera un informe que brinda una lista de archivo sin formato de
los objetos de un bucket. Para obtener más información, consulte Inventario de Amazon S3 (p. 439).

El equipo de Amazon S3 insta a los clientes a investigar las aplicaciones que sobrescriben repetidamente
el mismo objeto de S3 y pueden llegar a generar millones de versiones de ese objeto, para determinar si la
aplicación funciona según lo previsto. Si tiene un caso de uso que requiere millones de versiones para uno
o más objetos de S3, contáctese con el equipo de AWS Support en AWS Support para analizar su caso de
uso y permitir que lo ayudemos a determinar la solución óptima para el escenario de su caso de uso.

Versión de API 2006-03-01


670
Amazon Simple Storage Service Guía del desarrollador
Comportamiento inesperado al acceder
a los buckets configurados con CORS

Comportamiento inesperado al acceder a los buckets


configurados con CORS
Si detecta un comportamiento inesperado al acceder a los buckets que tienen la configuración cross-origin
resource sharing (CORS, configuración de uso compartido de recursos entre orígenes), consulte Solución
de problemas del uso compartido de recursos entre orígenes (CORS) (p. 172).

Obtención de ID de solicitudes de Amazon S3 para


AWS Support
Siempre que deba contactarse con AWS Support por haber detectado errores o un comportamiento
inesperado en Amazon S3 deberá obtener las ID de solicitudes relacionadas con la acción que ha dado
error. Obtener estas ID de solicitudes le permite a AWS Support ayudarlo a solucionar los problemas que
experimenta. Los ID de solicitud vienen en pares, se devuelven en cada respuesta que procesa Amazon
S3 (incluso los erróneos) y se pueden obtener a través de registros detallados. Hay una serie de métodos
comunes para obtener sus ID de solicitud, incluidos los registros de acceso de S3 y los eventos y eventos
de datos de CloudTrail.

Después de recuperar estos registros, copie y conserve esos dos valores porque los necesitará para
contactar con AWS Support. Para obtener más información acerca de cómo contactarse con AWS Support,
consulte Contáctenos.

Temas
• Utilización de HTTP para obtener ID de solicitudes (p. 671)
• Utilización de un navegador web para obtener ID de solicitudes (p. 671)
• Utilización de los SDK de AWS para obtener ID de solicitudes (p. 672)
• Uso de AWS CLI para obtener ID de solicitudes (p. 673)

Utilización de HTTP para obtener ID de solicitudes


Para obtener sus ID de solicitudes, x-amz-request-id y x-amz-id-2 puede registrar los detalles
de una solicitud HTTP antes de que llegue a la aplicación de destino. Existen diversas herramientas de
terceros que se pueden utilizar para recuperar registros detallados para solicitudes HTTP. Elija una de
confianza y ejecute la herramienta; escuche el puerto por el que circula su tráfico de Amazon S3 al mismo
tiempo que envía otra solicitud HTTP de Amazon S3.

Para solicitudes HTTP, el par de ID de solicitudes se verá como en los siguiente ejemplos.

x-amz-request-id: 79104EXAMPLEB723
x-amz-id-2: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km

Note
Las solicitudes HTTPS se cifran y ocultan en la mayoría de las capturas de paquetes.

Utilización de un navegador web para obtener ID de


solicitudes
La mayoría de los navegadores web tienen herramientas para desarrolladores que le permiten ver
encabezados de solicitudes.

Versión de API 2006-03-01


671
Amazon Simple Storage Service Guía del desarrollador
Utilización de los SDK de AWS
para obtener ID de solicitudes

Para las solicitudes basadas en navegador web que devuelven un error, el par de ID de solicitudes se verá
como en los siguientes ejemplos.

<Error><Code>AccessDenied</Code><Message>Access Denied</Message>
<RequestId>79104EXAMPLEB723</RequestId><HostId>IOWQ4fDEXAMPLEQM
+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km</HostId></Error>

Para obtener el par de ID de solicitudes de solicitudes realizadas correctamente, deberá utilizar las
herramientas para desarrolladores para ver los encabezados de respuesta HTTP. Para obtener
información acerca de las herramientas para desarrolladores para navegadores específicos, consulte
Solución de problemas de Amazon S3 - Cómo recuperar sus ID de solicitudes de S3 en los foros para
desarrolladores de AWS.

Utilización de los SDK de AWS para obtener ID de


solicitudes
En las siguientes secciones se incluye información para la configuración de registros con un Software
Development Kit (SDK, Kit de desarrollo de software) de AWS. Si bien puede habilitar registros detallados
en cada solicitud y respuesta, no debe habilitar registros en sistemas de producción, ya que las
respuestas/solicitudes de gran tamaño pueden causar un retraso significativo en una aplicación.

Para solicitudes del SDK de AWS, el par de ID de solicitudes se verá como en los siguiente ejemplos.

Status Code: 403, AWS Service: Amazon S3, AWS Request ID: 79104EXAMPLEB723
AWS Error Code: AccessDenied AWS Error Message: Access Denied
S3 Extended Request ID: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km

Uso de SDK para PHP para obtener ID de solicitudes


Puede usar PHP para configurar el registro. Para obtener más información, consulte ¿Cómo puedo ver qué
datos se envían a través de la red? en Preguntas más frecuentes sobre el AWS SDK para PHP.

Uso de SDK para Java para obtener ID de solicitudes


Puede habilitar el registro para solicitudes o respuestas específicas, lo que le
permite detectar y devolver solo los encabezados relevantes. Para ello, importe la
clase com.amazonaws.services.s3.s3ResponseMetadata. Posteriormente,
puede guardar la solicitud en una variable antes de ejecutar la solicitud real. Llame a
getCachedResponseMetadata(AmazonWebServiceRequest request).getRequestID() para
obtener la solicitud o respuesta registrada.

Example

PutObjectRequest req = new PutObjectRequest(bucketName, key, createSampleFile());


s3.putObject(req);
S3ResponseMetadata md = s3.getCachedResponseMetadata(req);
System.out.println("Host ID: " + md.getHostId() + " RequestID: " + md.getRequestId());

Además, puede utilizar registros detallados de cada solicitud y respuesta de Java. Para obtener más
información, consulte Registro detallado en red en el tema Registro de llamadas de AWS SDK para Java
en la AWS SDK for Java Developer Guide.

Versión de API 2006-03-01


672
Amazon Simple Storage Service Guía del desarrollador
Uso de AWS CLI para obtener ID de solicitudes

Uso de AWS SDK para .NET para obtener ID de solicitudes


Puede configurar registros en AWS SDK para .NET con la herramienta de registro System.Diagnostics
integrada. Para obtener más información, consulte la entrada sobre el registro con AWS SDK para .NET
del blog para desarrolladores de AWS.
Note

De forma predeterminada, el registro devuelto solo incluye información de errores. El archivo de


configuración debe incluir AWSLogMetrics (y en forma opcional, AWSResponseLogging) para
obtener las ID de solicitudes.

Utilización de SDK for Python para obtener ID de solicitudes


Para configurar los registros en Python, puede añadir las siguiente líneas a su código para obtener la
información de depuración en un archivo.

import logging
logging.basicConfig(filename="mylog.log", level=logging.DEBUG)

Si utiliza la interfaz Boto Python para AWS, puede configurar el nivel de depuración en dos según la
documentación de Boto, aquí.

Uso de SDK para Ruby para obtener ID de solicitudes


Para obtener sus ID de solicitudes puede usar la versión 1, la versión 2 o la versión 3 de SDK para Ruby.

• Si utiliza la versión 1 de SDK para Ruby: puede habilitar el registro en red HTTP a nivel global con la
siguiente línea de código.

s3 = AWS::S3.new(:logger => Logger.new($stdout), :http_wire_trace => true)

• Si utiliza la versión 2 o la versión 3 de SDK para Ruby: puede habilitar el registro en red HTTP a nivel
global con la siguiente línea de código.

s3 = Aws::S3::Client.new(:logger => Logger.new($stdout), :http_wire_trace => true)

Uso de AWS CLI para obtener ID de solicitudes


Para obtener sus ID de solicitudes en AWS CLI puede añadir --debug a su comando.

Temas relacionados
Para ver otros temas de solución de problemas y soporte, consulte lo siguiente:

• Solución de problemas del uso compartido de recursos entre orígenes (CORS) (p. 172)
• Control de errores de REST y SOAP (p. 666)
• Documentación de AWS Support

Para obtener información acerca de la solución de problemas en relación con herramientas de terceros,
consulte la sección sobre la obtención de ID de solicitud de Amazon S3 en los foros para desarrolladores
de AWS.

Versión de API 2006-03-01


673
Amazon Simple Storage Service Guía del desarrollador
Cómo habilitar el registro de acceso al servidor

Registro de acceso al servidor de


Amazon S3
El registro de acceso al servidor brinda registros detallados para las solicitudes realizadas a un bucket. Los
registros de acceso al servidor resultan útiles para muchas aplicaciones. Por ejemplo, la información del
registro de acceso puede ser útil en auditorías de acceso y seguridad. También puede ayudarle a conocer
mejor su base de clientes y a entender su factura de Amazon S3.
Note
Los registros de acceso del servidor no registran información relacionada con errores de
redireccionamiento a regiones erróneas para las regiones lanzadas después del 20 de marzo de
2019. Los errores de redireccionamiento a regiones erróneas se producen cuando se realiza una
solicitud de un objeto/bucket en un punto de enlace distinto del punto de enlace de la región en la
que existe el bucket.

Temas
• Cómo habilitar el registro de acceso al servidor (p. 674)
• Formato de clave de objeto de registro (p. 676)
• ¿Cómo se envían los registros? (p. 676)
• Envío de archivos de registro de servidor según el mejor esfuerzo (p. 676)
• Los cambios del estado de los registros del bucket se aplican con el tiempo (p. 677)
• Habilitación del registro con la consola (p. 677)
• Habilitación de registros mediante programación (p. 677)
• Formato de registro de acceso al servidor de Amazon S3 (p. 680)
• Eliminación de archivos de registro de Amazon S3 (p. 689)
• Uso de registros de acceso de Amazon S3 para identificar solicitudes (p. 690)

Cómo habilitar el registro de acceso al servidor


Para realizar un seguimiento de las solicitudes de acceso a su bucket, puede habilitar el registro de acceso
al servidor. Cada entrada del registro de acceso contiene detalles de la solicitud de acceso tales como el
solicitante, el nombre del bucket, la hora de la solicitud, la acción solicitada, el estado de la respuesta y el
código de error, si procede.
Note
No se aplica ningún cargo adicional por habilitar el registro de acceso del servidor en un bucket
de Amazon S3. Sin embargo, los archivos de registro que reciba del sistema acumularán los
cargos habituales de almacenamiento. (Puede eliminar los registros en cualquier momento).
No se evalúan los cargos por transferencia de datos para el envío de archivos de registro, pero
el acceso a los archivos de registro enviados se cobra de la misma manera que cualquier otra
transferencia de datos.

El registro está deshabilitado de forma predeterminada. Cuando el registro está habilitado, los logs se
guardan en un bucket en la misma región de AWS que el bucket de origen.

Para habilitar el registro de acceso, tendrá que hacer lo siguiente:

• Active el envío de archivos de registro añadiendo la configuración de registro en el bucket donde desea
que Amazon S3 envíe los registros de acceso. Este bucket se denomina bucket de origen.

Versión de API 2006-03-01


674
Amazon Simple Storage Service Guía del desarrollador
Cómo habilitar el registro de acceso al servidor

• Otorgue al grupo Envío de archivos de registro de Amazon S3 permiso de escritura en el bucket en el


que desea guardar los registros de acceso. Este bucket se denomina bucket de destino.

Note

• Amazon S3 solo permite conceder permiso para enviar registros de acceso a través de la ACL
del bucket, no a través de la política del bucket.
• La inclusión de condiciones deny en una política de bucket puede impedir que Amazon S3
envíe registros de acceso.
• El cifrado de bucket predeterminado en el bucket de destino solo se puede usar si se selecciona
AES256 (SSE-S3). No se admite el cifrado SSE-KMS.
• El bloqueo de objetos de Amazon S3 no se puede habilitar en el bucket de destino del registro.

Para activar el envío de archivos de registro, proporcione la siguiente información de configuración de


registros:

• El nombre del bucket de destino donde desea que Amazon S3 guarde los registros de acceso como
objetos. Puede enviar los registros a cualquier bucket de su propiedad que se encuentre en la misma
región que el bucket de origen, incluido el propio bucket de origen.

Le recomendamos guardar los registros de acceso en otro bucket para que pueda administrar los
registros fácilmente. Si decide guardar los registros de acceso en el bucket de origen, le recomendamos
que especifique un prefijo para todas las claves de objeto de registro de manera que los nombres de
objeto comiencen por una cadena común y pueda identificar más fácilmente los objetos de registro.

Cuando los buckets de origen y destino son el mismo, se crean registros adicionales para los registros
que se escriben en el bucket. Este comportamiento podría no ser ideal para su caso de uso ya que
podría dar lugar a un pequeño aumento en su factura de almacenamiento. Además, los registros
adicionales sobre registros podrían hacer que resulte más difícil encontrar el registro que busca.
Note

Tanto los buckets de origen como los de destino deben ser propiedad de la misma cuenta de
AWS y los buckets deben estar en la misma región.
• (Opcional) Un prefijo para que Amazon S3 lo asigne a todas las claves de objeto de registro. El prefijo le
permite localizar con facilidad los objetos de registro.

Por ejemplo, si especifica el valor de prefijo logs/, cada objeto de registro que Amazon S3 crea
empieza con el prefijo logs/ en su clave, como en este ejemplo:

logs/2013-11-01-21-32-16-E568B2907131C0C0

El prefijo de clave puede ser útil cuando elimina los registros. Por ejemplo, puede establecer una regla
de configuración de ciclo de vida para que Amazon S3 elimine los objetos con un prefijo de clave
específico. Para obtener más información, consulte Eliminación de archivos de registro de Amazon
S3 (p. 689).
• (Opcional) Permisos para que otros puedan obtener acceso a los registros generados. De forma
predeterminada, el propietario del bucket siempre tiene acceso completo a los objetos de registro. Usted
puede, de forma opcional, conceder acceso a otros usuarios.

Para obtener más información acerca de cómo habilitar el registro de acceso al servidor,
consulte Habilitación del registro con la consola (p. 677) y Habilitación de registros mediante
programación (p. 677).
Versión de API 2006-03-01
675
Amazon Simple Storage Service Guía del desarrollador
Formato de clave de objeto de registro

Formato de clave de objeto de registro


Amazon S3 utiliza el siguiente formato de clave de objeto para los objetos de registro que carga en el
bucket de destino:

TargetPrefixYYYY-mm-DD-HH-MM-SS-UniqueString

En la clave, YYYY, mm, DD, HH, MM y SS son los dígitos del año, el mes, el día, la hora, los minutos y los
segundos (respectivamente) cuando se envió el archivo de registro. Estas fechas se muestran según la
hora universal coordinada (UTC).

Un archivo de registro enviado en un momento específico puede contener registros escritos en cualquier
momento antes de ese momento. No hay forma de saber si se enviaron o no todas las entradas de registro
para un cierto intervalo de tiempo.

El componente UniqueString de la clave permite impedir que se sobrescriban los archivos. No tiene
ningún significado y el software de procesamiento de archivos de registro debería omitirlo.

¿Cómo se envían los registros?


Amazon S3 recopila periódicamente entradas de registro de acceso, consolida los registros en archivos
de registro y luego carga los archivos de registro en su bucket de destino como objetos de registro. Si
habilita los registros en varios buckets de origen que identifican el mismo bucket de destino, el bucket de
destino tendrá registros de acceso para todos esos buckets de origen. No obstante, cada objeto de registro
informará entradas de registro de acceso para un bucket de origen específico.

Amazon S3 utiliza una cuenta de envío de archivos de registro especial, llamada grupo Envío de archivos
de registro, para escribir registros de acceso. Estos escritos están sujetos a las restricciones de control
de acceso habituales. Debe otorgarle al grupo Envío de archivos de registro permiso de escritura en el
bucket de destino añadiendo una entrada de concesión en la Access Control List (ACL, Lista de control de
acceso) del bucket. Si utiliza la consola de Amazon S3 para habilitar los registros en un bucket, la consola
habilita los registros en el bucket de origen y actualiza la ACL en el bucket de destino para conceder
permisos de escritura al grupo Envío de archivos de registro.

Envío de archivos de registro de servidor según el


mejor esfuerzo
Las entradas de registro de acceso al servidor se envían según el "mejor esfuerzo", es decir, en la medida
que sea posible. En la mayoría de las solicitudes de registros para un bucket debidamente configurado se
envían archivos de registro. La mayoría de las entradas de registro se envían en el plazo de unas horas
después de su registro, pero se pueden entregar con mayor frecuencia.

No se garantiza que los registros de servidores estén completos ni que lleguen de manera puntual. La
entrada de registro de una solicitud determinada puede enviarse mucho después de que la solicitud
se haya procesado realmente, y es probable no se envíe en absoluto. El objetivo de los registros de
servidores es darle una idea de la naturaleza del tráfico al que se enfrenta su bucket. Es poco usual perder
entradas de registros, pero los registros de servidores no pretenden ser un recuento completo de todas las
solicitudes.

Dada la naturaleza de mejor esfuerzo de la característica de los registros de servidores, los informes de
uso disponibles en el portal de AWS (Informes de facturación y administración de costos en la Consola de
administración de AWS) podrían incluir una o varias solicitudes de acceso que no aparecen en un registro
de servidor enviado.

Versión de API 2006-03-01


676
Amazon Simple Storage Service Guía del desarrollador
Los cambios del estado de los registros
del bucket se aplican con el tiempo

Los cambios del estado de los registros del bucket


se aplican con el tiempo
Los cambios del estado de registros de un bucket demoran un tiempo en implementarse efectivamente en
el envío de archivos de registro. Por ejemplo, si habilita los registros para un bucket, algunas solicitudes
que se realizan a la hora siguiente pueden registrarse, mientras que otras no. Si cambia el bucket de
destino para registros del bucket A al bucket B, es posible que algunos registros para la siguiente hora
se sigan enviando al bucket A, mientras que otros se envíen al nuevo bucket B de destino. En todos los
casos, la nueva configuración finalmente se aplica sin que usted tenga que tomar medidas adicionales.

Habilitación del registro con la consola


Para obtener información acerca de la habilitación de Registro de acceso al servidor de Amazon
S3 (p. 674) en la Consola de administración de AWS, consulte ¿Cómo puedo habilitar el registro de
acceso al servidor para un bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage
Service.

Cuando habilita los registros en un bucket, la consola habilita los registros en el bucket de origen y añade
una concesión en la lista de control de acceso (ACL) del bucket de destino que otorga permiso de escritura
al grupo Envío de archivos de registro.

Para obtener información acerca de cómo habilitar registros mediante programación, consulte Habilitación
de registros mediante programación (p. 677).

Para obtener información acerca del formato de la entrada de registro, incluida la lista de campos y sus
descripciones, consulte Formato de registro de acceso al servidor de Amazon S3 (p. 680).

Habilitación de registros mediante programación


Puede habilitar o deshabilitar los registros mediante programación con la API de Amazon S3 o los SDK
de AWS. Para hacerlo, debe habilitar los registros en el bucket y otorgarle al grupo Envío de archivos de
registro permiso para escribir registros en el bucket de destino.

Temas
• Habilitación del registro (p. 677)
• Concesión de permisos de WRITE y READ_ACP al grupo Envío de archivos de registro (p. 678)
• Ejemplo: AWS SDK para .NET (p. 678)
• Recursos relacionados (p. 680)

Habilitación del registro


Para habilitar los registros, envíe una solicitud PUT Bucket logging para añadir la configuración de registros
en el bucket de origen. La solicitud especifica el bucket de destino y, de forma opcional, el prefijo que se
debe utilizar con todas las claves de objeto de registro. En el siguiente ejemplo se identifica logbucket
como el bucket de destino y logs/ como el prefijo.

<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
<LoggingEnabled>
<TargetBucket>logbucket</TargetBucket>
<TargetPrefix>logs/</TargetPrefix>

Versión de API 2006-03-01


677
Amazon Simple Storage Service Guía del desarrollador
Concesión de permisos de WRITE y READ_ACP
al grupo Envío de archivos de registro

</LoggingEnabled>
</BucketLoggingStatus>

La cuenta Envío de archivos de registro escribe y posee los objetos de registro y el propietario del bucket
tiene permisos completos sobre los objetos de registro. Además, puede, de forma opcional, conceder
permisos a otros usuarios para que puedan obtener acceso a los registros. Para obtener más información,
consulte PUT Bucket logging.

Amazon S3 también proporciona la API GET Bucket logging para recuperar la configuración de registros
en un bucket. Para eliminar la configuración de registros, debe enviar la solicitud PUT Bucket logging con
un campo BucketLoggingStatus vacío.

<BucketLoggingStatus xmlns="http://doc.s3.amazonaws.com/2006-03-01">
</BucketLoggingStatus>

Puede utilizar la API de Amazon S3 o las bibliotecas de encapsulamiento de SDK de AWS para habilitar
los registros en un bucket.

Concesión de permisos de WRITE y READ_ACP al


grupo Envío de archivos de registro
Amazon S3 escribe los archivos de registro en el bucket de destino como miembro del grupo Envío de
archivos de registro predefinido de Amazon S3. Estos escritos están sujetos a las restricciones de control
de acceso habituales. Debe otorgar los permisos s3:GetObjectAcl y s3:PutObject a este grupo
añadiendo concesiones a la lista de control de accesos (ACL) del bucket de destino. El grupo Envío de
archivos de registro se representa con la siguiente URL.

http://acs.amazonaws.com/groups/s3/LogDelivery

Para conceder permisos de WRITE y READ_ACP, debe añadir las siguientes concesiones. Para obtener
más información sobre las ACL, consulte Administración de acceso con ACL (p. 418).

<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>WRITE</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>READ_ACP</Permission>
</Grant>

Para ver ejemplos acerca de cómo añadir concesiones de ACL mediante programación con los SDK de
AWS, consulte Administración de ACL con AWS SDK for Java (p. 425) y Administración de ACL con AWS
SDK para .NET (p. 428).

Ejemplo: AWS SDK para .NET


En el siguiente ejemplo de C# se habilitan los registros en un bucket. Debe crear dos buckets, un bucket
de origen y un bucket de destino. En el ejemplo, primero se otorga al grupo Envío de archivos de registro
el permiso necesario para escribir registros en el bucket de destino y, a continuación, habilita los registros
en el bucket de origen. Para obtener más información, consulte Habilitación de registros mediante

Versión de API 2006-03-01


678
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: AWS SDK para .NET

programación (p. 677). Para obtener instrucciones acerca de cómo crear y probar una muestra funcional,
consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).

Example

using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
class ServerAccesLoggingTest
{
private const string bucketName = "*** bucket name for which to enable logging
***";
private const string targetBucketName = "*** bucket name where you want access logs
stored ***";
private const string logObjectKeyPrefix = "Logs";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;

public static void Main()


{
client = new AmazonS3Client(bucketRegion);
EnableLoggingAsync().Wait();
}

private static async Task EnableLoggingAsync()


{
try
{
// Step 1 - Grant Log Delivery group permission to write log to the target
bucket.
await GrantPermissionsToWriteLogsAsync();
// Step 2 - Enable logging on the source bucket.
await EnableDisableLoggingAsync();
}
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);
}
}

private static async Task GrantPermissionsToWriteLogsAsync()


{
var bucketACL = new S3AccessControlList();
var aclResponse = client.GetACL(new GetACLRequest { BucketName =
targetBucketName });
bucketACL = aclResponse.AccessControlList;
bucketACL.AddGrant(new S3Grantee { URI = "http://acs.amazonaws.com/groups/s3/
LogDelivery" }, S3Permission.WRITE);
bucketACL.AddGrant(new S3Grantee { URI = "http://acs.amazonaws.com/groups/s3/
LogDelivery" }, S3Permission.READ_ACP);
var setACLRequest = new PutACLRequest
{
AccessControlList = bucketACL,

Versión de API 2006-03-01


679
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

BucketName = targetBucketName
};
await client.PutACLAsync(setACLRequest);
}

private static async Task EnableDisableLoggingAsync()


{
var loggingConfig = new S3BucketLoggingConfig
{
TargetBucketName = targetBucketName,
TargetPrefix = logObjectKeyPrefix
};

// Send request.
var putBucketLoggingRequest = new PutBucketLoggingRequest
{
BucketName = bucketName,
LoggingConfig = loggingConfig
};
await client.PutBucketLoggingAsync(putBucketLoggingRequest);
}
}
}

Recursos relacionados
• Registro de acceso al servidor de Amazon S3 (p. 674)
• AWS::S3::Bucket en la Guía del usuario de AWS CloudFormation

Formato de registro de acceso al servidor de


Amazon S3
En esta sección se describen los archivos de registro de acceso al servidor de Amazon S3.

Temas
• Registros adicionales para operaciones de copia (p. 685)
• Información de registro de acceso personalizada (p. 689)
• Consideraciones sobre programación para el formato de registro de acceso al servidor
extensible (p. 689)

Los archivos de registro de acceso al servidor constan de una secuencia de entradas de registro
delimitadas por saltos de línea. Cada entrada de registro representa una solicitud y consta de campos
delimitados por espacios. El siguiente es un registro de ejemplo que consta de cinco entradas de registro.

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE
REST.GET.VERSIONING - "GET /awsexamplebucket?versioning HTTP/1.1" 200 - 113 - 7 - "-"
"S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/
VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket.s3.amazonaws.com
TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE

Versión de API 2006-03-01


680
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

REST.GET.LOGGING_STATUS - "GET /awsexamplebucket?logging HTTP/1.1" 200 - 242


- 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf
+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader
awsexamplebucket.s3.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be A1206F460EXAMPLE
REST.GET.BUCKETPOLICY - "GET /awsexamplebucket?policy HTTP/1.1" 404
NoSuchBucketPolicy 297 - 38 - "-" "S3Console/0.4" - BNaBsXZQQDbssi6xMBdBU2sLt
+Yf5kZDmeBUP35sFoKa3sLLeMC78iwEIWxs99CRUrbS4n11234= SigV2 ECDHE-RSA-AES128-GCM-SHA256
AuthHeader awsexamplebucket.s3.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket [06/Feb/2019:00:01:00 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 7B4A0FABBEXAMPLE
REST.GET.VERSIONING - "GET /awsexamplebucket?versioning HTTP/1.1" 200 - 113 - 33 - "-"
"S3Console/0.4" - Ke1bUcazaN1jWuUlPJaxF64cQVpUEhoZKEG/hmy/gijN/I1DeWqDfFvnpybfEseEME/
u7ME1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket.s3.amazonaws.com
TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket [06/Feb/2019:00:01:57 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
DD6CC733AEXAMPLE REST.PUT.OBJECT s3-dg.pdf "PUT /awsexamplebucket/
s3-dg.pdf HTTP/1.1" 200 - - 4406583 41754 28 "-" "S3Console/0.4" -
10S62Zv81kBW7BB6SX4XJ48o6kpcl6LPwEoizZQQxJd5qDSCTLX0TgS37kYUBKQW3+bPdrg1234= SigV4 ECDHE-
RSA-AES128-SHA AuthHeader awsexamplebucket.s3.amazonaws.com TLSV1.1

Note

Los campos se pueden establecer en - para indicar que los datos son desconocidos o no están
disponibles, o que el campo no se aplica a esta solicitud.

En la siguiente lista se describen los campos de entrada de registro.

Propietario del bucket

El ID de usuario canónico del propietario del bucket de origen. El ID de usuario canónico es otra
forma del ID de cuenta de AWS. Para obtener más información acerca del ID de usuario canónico,
consulte Identificadores de cuenta de AWS. Para obtener información acerca de cómo encontrar el ID
de usuario canónico de su cuenta, consulte Buscar el ID de usuario canónico de su cuenta.

Ejemplo de entrada

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be

Bucket

El nombre del bucket para el que se procesó la solicitud. Si el sistema recibe un solicitud incorrecta y
no puede determinar el bucket, la solicitud no aparecerá en ningún registro de acceso al servidor.

Ejemplo de entrada

awsexamplebucket

Time

La hora en la que se recibió la solicitud; estas fechas y horas se muestran según la hora universal
coordinada (UTC). El formato, con la terminología strftime(), es el siguiente: [%d/%b/%Y:%H:%M:
%S %z]

Ejemplo de entrada

Versión de API 2006-03-01


681
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

[06/Feb/2019:00:00:38 +0000]

IP remota

La dirección de Internet aparente del solicitante. Los servidores proxy y firewalls intermedios pueden
ocultar la dirección real de la máquina que realiza la solicitud.

Ejemplo de entrada

192.0.2.3

Solicitante

El ID de usuario canónico del solicitante o un - para solicitudes no autenticadas. Si el solicitante era


un usuario de IAM, este campo devuelve el nombre de usuario de IAM del solicitante junto con la
cuenta raíz de AWS a la que pertenece el usuario de IAM. Este identificador es el mismo que se utiliza
para el control de acceso.

Ejemplo de entrada

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be

ID de solicitud

Una cadena generada por Amazon S3 para identificar de forma inequívoca cada solicitud.

Ejemplo de entrada

3E57427F33A59F07

Operation

La operación que se indica aquí se declara como SOAP.operation,


REST.HTTP_method.resource_type, WEBSITE.HTTP_method.resource_type o
BATCH.DELETE.OBJECT.

Ejemplo de entrada

REST.PUT.OBJECT

Key

La parte de “clave” de la solicitud, el URL codificado o “-” si la operación no toma un parámetro de


clave.

Ejemplo de entrada

/photos/2019/08/puppy.jpg

URI de solicitud

La parte de Uniform Resource Identifier (URI, Identificador de recursos uniforme) de solicitud del
mensaje de solicitud HTTP.

Ejemplo de entrada

Versión de API 2006-03-01


682
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

"GET /awsexamplebucket/photos/2019/08/puppy.jpg?x-foo=bar HTTP/1.1"

Estado HTTP

El código de estado HTTP numérico de la respuesta.

Ejemplo de entrada

200

Código de error

El Código de error (p. 667) de Amazon S3 o “-” si no se produce ningún error.

Ejemplo de entrada

NoSuchBucket

Bytes enviados

El número de bytes de respuestas enviados, sin incluir la sobrecarga del protocolo HTTP o “-” en caso
de ser cero.

Ejemplo de entrada

2662992

Tamaño de objeto

El tamaño total del objeto en cuestión.

Ejemplo de entrada

3462992

Tiempo total

La cantidad de milisegundos que la solicitud estuvo en tránsito desde la perspectiva del servidor. Este
valor se mide desde el momento en que se recibe su solicitud hasta el momento en que se envía el
último byte de la respuesta. Las medidas realizadas desde la perspectiva del cliente pueden ser más
extensas debido a la latencia de la red.

Ejemplo de entrada

70

Tiempo de entrega

La cantidad de milisegundos que demora Amazon S3 en procesar su solicitud. Este valor se mide
desde el momento en que se recibió el último byte de su solicitud hasta el momento en que se envió el
primer byte de la respuesta.

Ejemplo de entrada

10

Versión de API 2006-03-01


683
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

Remitente

El valor del encabezado de Referencia de HTTP, si lo hay. Los agentes de usuario de HTTP (por
ejemplo, los navegadores) por lo general configuran este encabezado en la URL de la página
enlazada o adjunta cuando realizan una solicitud.

Ejemplo de entrada

"http://www.amazon.com/webservices"

Agente de usuario

El valor del encabezado de agente de usuario de HTTP.

Ejemplo de entrada

"curl/7.15.1"

ID de versión

El ID de versión en la solicitud o “-” si la operación no toma un parámetro versionId.

Ejemplo de entrada

3HL4kqtJvjVBH40Nrjfkd

ID de host

ID de la solicitud ampliada de Amazon S3 o x-amz-id-2.

Ejemplo de entrada

s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=

Versión de firma

La versión de firma, SigV2 o SigV4, que se utilizó para autenticar la solicitud o - para las solicitudes
no autenticadas.

Ejemplo de entrada

SigV2

Conjunto de cifrado

Cifrado de Capa de conexión segura (SSL) que se negoció para la solicitud HTTPS o - para HTTP.

Ejemplo de entrada

ECDHE-RSA-AES128-GCM-SHA256

Tipo de autenticación

Tipo de autenticación de solicitudes utilizado: AuthHeader para los encabezados de autenticación,


QueryString para la cadena de consulta (URL prefirmada) o - para las solicitudes no autenticadas.

Versión de API 2006-03-01


684
Amazon Simple Storage Service Guía del desarrollador
Registros adicionales para operaciones de copia

Ejemplo de entrada

AuthHeader

Encabezado de host

Punto de enlace usado para conectarse a Amazon S3

Ejemplo de entrada

s3-us-west-2.amazonaws.com

Versión de TLS

Versión de Transport Layer Security (TLS) negociada por el cliente. Puede ser uno de los siguientes
valores: TLSv1, TLSv1.1, TLSv1.2; o - si no se utilizó TLS.

Ejemplo de entrada

TLSv1.2

Registros adicionales para operaciones de copia


Una operación de copia implica un GET y un PUT. Por esa razón, registramos dos entradas al realizar
una operación de copia. En la tabla anterior se describen los campos relacionados con la parte PUT de la
operación. En la siguiente lista se describen los campos del registro relacionados con la parte GET de la
operación de copia.

Propietario del bucket

El ID de usuario canónico del bucket que almacena el objeto que se copia. El ID de usuario canónico
es otra forma del ID de cuenta de AWS. Para obtener más información acerca del ID de usuario
canónico, consulte Identificadores de cuenta de AWS. Para obtener información acerca de cómo
encontrar el ID de usuario canónico de su cuenta, consulte Buscar el ID de usuario canónico de su
cuenta.

Ejemplo de entrada

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be

Bucket

El nombre del bucket que almacena el objeto que se copia.

Ejemplo de entrada

awsexamplebucket

Time

La hora en la que se recibió la solicitud; estas fechas y horas se muestran según la hora universal
coordinada (UTC). El formato, con la terminología strftime(), es el siguiente: [%d/%B/%Y:%H:%M:
%S %z]

Ejemplo de entrada

Versión de API 2006-03-01


685
Amazon Simple Storage Service Guía del desarrollador
Registros adicionales para operaciones de copia

[06/Feb/2019:00:00:38 +0000]

IP remota

La dirección de Internet aparente del solicitante. Los servidores proxy y firewalls intermedios pueden
ocultar la dirección real de la máquina que realiza la solicitud.

Ejemplo de entrada

192.0.2.3

Solicitante

El ID de usuario canónico del solicitante o un - para solicitudes no autenticadas. Si el solicitante era


un usuario de IAM, este campo devolverá el nombre de usuario de IAM del solicitante junto con la
cuenta raíz de AWS a la que pertenece el usuario de IAM. Este identificador es el mismo que se utiliza
para el control de acceso.

Ejemplo de entrada

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be

ID de solicitud

Una cadena generada por Amazon S3 para identificar de forma inequívoca cada solicitud.

Ejemplo de entrada

3E57427F33A59F07

Operation

La operación que se indica aquí se declara como SOAP.operation,


REST.HTTP_method.resource_type, WEBSITE.HTTP_method.resource_type o
BATCH.DELETE.OBJECT.

Ejemplo de entrada

REST.COPY.OBJECT_GET

Key

La “clave” del objeto que se copia o “-” si la operación no toma un parámetro de clave.

Ejemplo de entrada

/photos/2019/08/puppy.jpg

URI de solicitud

La parte de Uniform Resource Identifier (URI, Identificador de recursos uniforme) de solicitud del
mensaje de solicitud HTTP.

Ejemplo de entrada

Versión de API 2006-03-01


686
Amazon Simple Storage Service Guía del desarrollador
Registros adicionales para operaciones de copia

"GET /awsexamplebucket/photos/2019/08/puppy.jpg?x-foo=bar"

Estado HTTP

El código de estado HTTP numérico de la parte GET de la operación de copia.

Ejemplo de entrada

200

Código de error

El Código de error (p. 667) de Amazon S3 de la parte GET de la operación de copia o “-” si no se
produce ningún error.

Ejemplo de entrada

NoSuchBucket

Bytes enviados

El número de bytes de respuestas enviados, sin incluir la sobrecarga del protocolo HTTP o “-” en caso
de ser cero.

Ejemplo de entrada

2662992

Tamaño de objeto

El tamaño total del objeto en cuestión.

Ejemplo de entrada

3462992

Tiempo total

La cantidad de milisegundos que la solicitud estuvo en tránsito desde la perspectiva del servidor. Este
valor se mide desde el momento en que se recibe su solicitud hasta el momento en que se envía el
último byte de la respuesta. Las medidas realizadas desde la perspectiva del cliente pueden ser más
extensas debido a la latencia de la red.

Ejemplo de entrada

70

Tiempo de entrega

La cantidad de milisegundos que demora Amazon S3 en procesar su solicitud. Este valor se mide
desde el momento en que se recibió el último byte de su solicitud hasta el momento en que se envió el
primer byte de la respuesta.

Ejemplo de entrada

Versión de API 2006-03-01


687
Amazon Simple Storage Service Guía del desarrollador
Registros adicionales para operaciones de copia

10

Remitente

El valor del encabezado de Referencia de HTTP, si lo hay. Los agentes de usuario de HTTP (por
ejemplo, los navegadores) por lo general configuran este encabezado en la URL de la página
enlazada o adjunta cuando realizan una solicitud.

Ejemplo de entrada

"http://www.amazon.com/webservices"

Agente de usuario

El valor del encabezado de agente de usuario de HTTP.

Ejemplo de entrada

"curl/7.15.1"

ID de versión

El ID de versión del objeto que se copia o “-” si el encabezado x-amz-copy-source no especificó un


parámetro versionId como parte de la fuente de copia.

Ejemplo de entrada

3HL4kqtJvjVBH40Nrjfkd

ID de host

ID de la solicitud ampliada de Amazon S3 o x-amz-id-2.

Ejemplo de entrada

s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234=

Versión de firma

La versión de firma, SigV2 o SigV4, que se utilizó para autenticar la solicitud o - para las solicitudes
no autenticadas.

Ejemplo de entrada

SigV2

Conjunto de cifrado

Cifrado de Capa de conexión segura (SSL) que se negoció para la solicitud HTTPS o - para HTTP.

Ejemplo de entrada

ECDHE-RSA-AES128-GCM-SHA256

Versión de API 2006-03-01


688
Amazon Simple Storage Service Guía del desarrollador
Información de registro de acceso personalizada

Tipo de autenticación

Tipo de autenticación de solicitudes utilizado: AuthHeader para los encabezados de autenticación,


QueryString para la cadena de consulta (URL prefirmada) o - para las solicitudes no autenticadas.

Ejemplo de entrada

AuthHeader

Encabezado de host

Punto de enlace usado para conectarse a Amazon S3

Ejemplo de entrada

s3-us-west-2.amazonaws.com

Versión de TLS

Versión de Transport Layer Security (TLS) negociada por el cliente. Puede ser uno de los siguientes
valores: TLSv1, TLSv1.1, TLSv1.2; o - si no se utilizó TLS.

Ejemplo de entrada

TLSv1.2

Información de registro de acceso personalizada


Puede incluir información personalizada para que se guarde en la entrada de registro de acceso para
una solicitud al añadir un parámetro de cadena de consulta personalizado en el URL para la solicitud.
Amazon S3 pasa por alto los parámetros de cadena de consulta que empiezan con “x-”, pero los incluye
en la entrada de registro de acceso para la solicitud, como parte del campo Request-URI de la entrada
de registro. Por ejemplo, una solicitud GET para "s3.amazonaws.com/awsexamplebucket/photos/2019/08/
puppy.jpg?x-user=johndoe" funciona de la misma manera que la solicitud para "s3.amazonaws.com/
awsexamplebucket/photos/2019/08/puppy.jpg", salvo que la cadena "x-user=johndoe" se incluye en el
campo Request-URI para la entrada de registro asociada. Esta funcionalidad está disponible en la
interfaz de REST únicamente.

Consideraciones sobre programación para el formato


de registro de acceso al servidor extensible
En ocasiones, podemos añadir nuevos campos al final de cada línea para extender el formato de entrada
de registro de acceso. Se debe escribir el código que analiza los registros de acceso al servidor para
administrar los campos finales que no comprende.

Eliminación de archivos de registro de Amazon S3


Un bucket de S3 que tenga habilitado el registro de acceso al servidor puede acumular muchos objetos de
registro del servidor a lo largo del tiempo. Es posible que su aplicación necesite estos registros de acceso
durante un período específico después de su creación y se recomienda eliminarlos posteriormente. Puede
utilizar la configuración de ciclo de vida de Amazon S3 para establecer reglas para que Amazon S3 ponga
automáticamente en cola estos objetos y los elimine al final de su ciclo de vida.

Versión de API 2006-03-01


689
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

Puede definir una configuración de ciclo de vida para un subconjunto de objetos del bucket de S3
mediante un prefijo compartido (es decir, objetos cuyos nombres comienzan por una cadena común). Si
especificó un prefijo en su configuración de registro de acceso al servidor, puede establecer una regla de
configuración de ciclo de vida para eliminar los objetos de registro que tienen ese prefijo. Por ejemplo,
si sus objetos de registro tienen el prefijo logs/, puede establecer una regla de configuración de ciclo
de vida para eliminar todos los objetos del bucket que tengan el prefijo /logs después de un periodo de
tiempo especificado. Para obtener más información acerca de la configuración del ciclo de vida, consulte
Administración del ciclo de vida de los objetos (p. 127).

Recursos relacionados
Registro de acceso al servidor de Amazon S3 (p. 674)

Uso de registros de acceso de Amazon S3 para


identificar solicitudes
Puede identificar solicitudes de Amazon S3 mediante registros de acceso de Amazon S3.
Note

• Recomendamos que utilice los eventos de datos de AWS CloudTrail en lugar de los registros
de acceso de Amazon S3. Es más sencillo configurar los eventos de datos de CloudTrail y
contienen más información. Para obtener más información, consulte Uso de AWS CloudTrail
para identificar solicitudes de Amazon S3 (p. 655).
• En función del número de solicitudes de acceso que obtenga, es posible que necesite más
recursos o más tiempo para analizar sus registros.

Temas
• Habilitación de registros de acceso de Amazon S3 para solicitudes (p. 690)
• Consulta de registros de acceso de Amazon S3 para solicitudes (p. 692)
• Uso de los registros de acceso de Amazon S3 para identificar solicitudes de Signature Version 2
(p. 695)
• Uso de registros de acceso de Amazon S3 para identificar solicitudes de acceso a objetos (p. 695)
• Recursos relacionados (p. 696)

Habilitación de registros de acceso de Amazon S3


para solicitudes
Recomendamos que cree un bucket de registro dedicado en cada región de AWS en la que tenga buckets
de S3 y que guarde el registro de acceso de Amazon S3 en ese bucket de S3.

Example — Habilitar los registros de acceso con cinco buckets en dos regiones

Para este ejemplo, suponga que tiene los cinco buckets siguientes:

• 1-awsexamplebucket-us-east-1
• 2-awsexamplebucket-us-east-1
• 3-awsexamplebucket-us-east-1

Versión de API 2006-03-01


690
Amazon Simple Storage Service Guía del desarrollador
Habilitación de registros de acceso
de Amazon S3 para solicitudes

• 1-awsexamplebucket-us-west-2
• 2-awsexamplebucket-us-west-2

1. Cree dos buckets de registro en las siguientes regiones:

• awsexamplebucket-logs-us-east-1
• awsexamplebucket-logs-us-west-2
2. A continuación, habilite los registros de acceso de Amazon S3 como se indica a continuación:

• Los registros de 1-awsexamplebucket-us-east-1 en s3://awsexamplebucket-logs-us-


east-1/1-awsexamplebucket-us-east-1
• Los registros de 2-awsexamplebucket-us-east-1 en s3://awsexamplebucket-logs-us-
east-1/2-awsexamplebucket-us-east-1
• Los registros de 1-awsexamplebucket-us-east-1 en s3://awsexamplebucket-logs-us-
east-1/3-awsexamplebucket-us-east-1
• Los registros de 1-awsexamplebucket-us-west-2 en s3://awsexamplebucket-logs-us-
west-2/1-awsexamplebucket-us-west-2
• Los registros de 2-awsexamplebucket-us-west-2 en s3://awsexamplebucket-logs-us-
west-2/2-awsexamplebucket-us-west-2
3. A continuación, puede habilitar los registros de acceso de Amazon S3 utilizando los siguientes
métodos:

• Mediante la consola de administración de AWS o


• Habilitación de registros mediante programación (p. 677) o
• Mediante el comando put-bucket-logging de la CLI de AWS para habilitar mediante programación
los registros de acceso en un bucket con los comandos siguientes:

1. En primer lugar, conceda permiso a Amazon S3 usando put-bucket-acl:

aws s3api put-bucket-acl --bucket awsexamplebucket-logs --grant-write


URI=http://acs.amazonaws.com/groups/s3/LogDelivery --grant-read-acp URI=http://
acs.amazonaws.com/groups/s3/LogDelivery

2. A continuación, aplique la política de registro:

aws s3api put-bucket-logging --bucket awsexamplebucket --bucket-logging-status


file://logging.json

Logging.json es un documento JSON en la carpeta actual que contiene la política de


registro:

{
"LoggingEnabled": {
"TargetBucket": "awsexamplebucket-logs",
"TargetPrefix": "awsexamplebucket/",
"TargetGrants": [
{
"Grantee": {
"Type": "AmazonCustomerByEmail",
"EmailAddress": "user@example.com"
},
Versión de API 2006-03-01
691
Amazon Simple Storage Service Guía del desarrollador
Consulta de registros de acceso
de Amazon S3 para solicitudes

"Permission": "FULL_CONTROL"
}
]
}
}

Note

El comando put-bucket-acl es necesario para conceder los permisos necesarios


(write y read-acp) al sistema de entrega de registros de Amazon S3.
3. Utilice un script bash para añadir el registro de acceso para todos los buckets de su cuenta:

loggingBucket='awsexamplebucket-logs'
region='us-west-2'

# Create Logging bucket


aws s3 mb s3://$loggingBucket --region $region

aws s3api put-bucket-acl --bucket $loggingBucket --grant-write URI=http://


acs.amazonaws.com/groups/s3/LogDelivery --grant-read-acp URI=http://
acs.amazonaws.com/groups/s3/LogDelivery

# List buckets in this account


buckets="$(aws s3 ls | awk '{print $3}')"

# Put bucket logging on each bucket


for bucket in $bucenable-logging-programmingkets
do printf '{
"LoggingEnabled": {
"TargetBucket": "%s",
"TargetPrefix": "%s/"
}
}' "$loggingBucket" "$bucket" > logging.json
aws s3api put-bucket-logging --bucket $bucket --bucket-logging-status
file://logging.json
echo "$bucket done"
done

rm logging.json

echo "Complete"

Note

Este script solo funciona si todos los buckets están en la misma región. Si tiene
buckets en varias regiones, debe ajustar el script.

Consulta de registros de acceso de Amazon S3 para


solicitudes
Amazon S3 almacena los registros de acceso del servidor como objetos en un bucket de S3. Suele ser
más fácil utilizar una herramienta que pueda analizar los registros de Amazon S3. Athena permite el
análisis de objetos de S3 y se puede usar para consultar los registros de acceso de Amazon S3.

Versión de API 2006-03-01


692
Amazon Simple Storage Service Guía del desarrollador
Consulta de registros de acceso
de Amazon S3 para solicitudes

Example

En el siguiente ejemplo, se muestra cómo se pueden consultar los registros de acceso del servidor de
Amazon S3 en Amazon Athena.
Note

Para especificar la ubicación de Amazon S3 en una consulta de Athena, necesita el nombre


del bucket de destino y el prefijo de destino, tal y como se indica a continuación: s3://
awsexamplebucket-logs/prefix/

1. Abra la consola de Athena en https://console.aws.amazon.com/athena/.


2. En el editor de consultas, ejecute un comando similar al siguiente.

create database s3_access_logs_db

Note

Una práctica recomendada consiste en crear la base de datos en la misma región de AWS
que el bucket de S3.
3. En el editor de consultas, ejecute un comando similar al siguiente para crear un esquema de tabla en
la base de datos que creó en el paso 2. Los valores con los tipos de datos STRING y BIGINT son las
propiedades del registro de acceso. Puede consultar estas propiedades en Athena. Para LOCATION,
introduzca el bucket de S3 y la ruta del prefijo como se indicó anteriormente.

CREATE EXTERNAL TABLE IF NOT EXISTS s3_access_logs_db.mybucket_logs(


BucketOwner STRING,
Bucket STRING,
RequestDateTime STRING,
RemoteIP STRING,
Requester STRING,
RequestID STRING,
Operation STRING,
Key STRING,
RequestURI_operation STRING,
RequestURI_key STRING,
RequestURI_httpProtoversion STRING,
HTTPstatus STRING,
ErrorCode STRING,
BytesSent BIGINT,
ObjectSize BIGINT,
TotalTime STRING,
TurnAroundTime STRING,
Referrer STRING,
UserAgent STRING,
VersionId STRING,
HostId STRING,
SigV STRING,
CipherSuite STRING,
AuthType STRING,
HostHeader STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*)
\\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)
\\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)
([^ ]*)
([^ ]*) (\"[^\"]*\") ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*).*$' )
LOCATION 's3://awsexamplebucket-logs/prefix'

Versión de API 2006-03-01


693
Amazon Simple Storage Service Guía del desarrollador
Consulta de registros de acceso
de Amazon S3 para solicitudes

4. En el panel de navegación, en Database (Base de datos), elija la base de datos.


5. En Tables (Tablas), elija Preview table (Vista previa de tabla) junto al nombre de la tabla.

En el panel Results (Resultados), debería ver los datos de los registros de acceso del servidor, como
bucketowner, bucket, requestdatetime, etc. Esto significa que ha creado correctamente la tabla
de Athena. Ahora puede consultar los registros de acceso del servidor de Amazon S3.

Example — Mostrar quién eliminó un objeto y cuándo (marca temporal, dirección IP y usuario de
IAM)

SELECT RequestDateTime, RemoteIP, Requester, Key


FROM s3_access_logs_db.mybucket_logs
WHERE key = 'images/picture.jpg' AND operation like '%DELETE%';

Example — Mostrar todas las operaciones ejecutadas por un usuario de IAM

SELECT *
FROM s3_access_logs_db.mybucket_logs
WHERE requester='arn:aws:iam::123456789123:user/user_name';

Example — Mostrar todas las operaciones que se realizaron en un objeto en un periodo de tiempo
específico

SELECT *
FROM s3_access_logs_db.mybucket_logs
WHERE Key='prefix/images/picture.jpg'
AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2017-02-18:07:00:00','yyyy-MM-dd:HH:mm:ss')
AND parse_datetime('2017-02-18:08:00:00','yyyy-MM-dd:HH:mm:ss');

Example — Mostrar la cantidad de datos transferidos por una dirección IP específica en un


periodo de tiempo específico

SELECT SUM(bytessent) AS uploadTotal,


SUM(objectsize) AS downloadTotal,
SUM(bytessent + objectsize) AS Total
FROM s3_access_logs_db.mybucket_logs
WHERE RemoteIP='1.2.3.4'
AND parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2017-06-01','yyyy-MM-dd')
AND parse_datetime('2017-07-01','yyyy-MM-dd');

Note

Para reducir el tiempo que se conservan los registros, puede crear una política de ciclo de vida
de Amazon S3 para el bucket de registros de acceso al servidor. Configure la política de ciclo de

Versión de API 2006-03-01


694
Amazon Simple Storage Service Guía del desarrollador
Uso de los archivos de registro de Amazon
S3 para identificar solicitudes SigV2

vida para eliminar periódicamente los archivos de registro. Esto reduce la cantidad de datos que
Athena analiza para cada consulta.

Uso de los registros de acceso de Amazon S3 para


identificar solicitudes de Signature Version 2
La compatibilidad de Amazon S3 con Signature Version 2 va a finalizar (esta característica quedará
obsoleta). Cuando esto suceda, Amazon S3 dejará de aceptar solicitudes que utilicen Signature Version 2,
y todas las solicitudes deberán firmarse con Signature Version 4. Puede identificar las solicitudes de
Signature Version 2 utilizando los registros de acceso de Amazon S3.
Note

• Recomendamos que utilice los eventos de datos de AWS CloudTrail en lugar de los registros
de acceso de Amazon S3. Es más sencillo configurar los eventos de datos de CloudTrail y
contienen más información. Para obtener más información, consulte Uso de AWS CloudTrail
para identificar solicitudes de Signature Version 2 en Amazon S3 (p. 658).

Example — Mostrar todos los solicitantes que están enviando tráfico Signature Version 2

SELECT requester, Sigv, Count(Sigv) as SigCount


FROM s3_access_logs_db.mybucket_logs
GROUP BY requester, Sigv;

Uso de registros de acceso de Amazon S3 para


identificar solicitudes de acceso a objetos
Puede usar consultas en registros de acceso al servidor de Amazon S3 para identificar las solicitudes de
acceso a objetos de Amazon S3 para operaciones como GET, PUT y DELETE, y obtener información
sobre esas solicitudes.

La siguiente consulta de Amazon Athena de ejemplo muestra cómo obtener todas las solicitudes de objeto
PUT para Amazon S3 desde el registro de acceso al servidor.

Example — Mostrar todos los solicitantes que envían solicitudes de objeto PUT en un determinado
periodo

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime


FROM s3_access_logs_db
WHERE Operation='REST.PUT.OBJECT' AND
parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss')
AND
parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

La siguiente consulta de Amazon Athena de ejemplo muestra cómo obtener todas las solicitudes de objeto
GET para Amazon S3 desde el registro de acceso al servidor.

Example — Mostrar todos los solicitantes que envían solicitudes de objeto GET en un
determinado periodo

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime

Versión de API 2006-03-01


695
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

FROM s3_access_logs_db
WHERE Operation='REST.GET.OBJECT' AND
parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss')
AND
parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

La siguiente consulta de Amazon Athena de ejemplo muestra cómo obtener todas las solicitudes anónimas
realizadas a los buckets de S3 desde el registro de acceso al servidor.

Example — Mostrar todos los solicitantes anónimos que están realizando solicitudes a un bucket
en un determinado periodo

SELECT Bucket, Requester, RemoteIP, Key, HTTPStatus, ErrorCode, RequestDateTime


FROM s3_access_logs_db.mybucket_logs
WHERE Requester IS NULL AND
parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss')
AND
parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')

Note

• Puede modificar el intervalo de fechas según sea necesario.


• Estos ejemplos de consultas pueden servir también para monitorizar la seguridad. Puede
revisar los resultados de las llamadas a las operaciones PutObject o GetObject desde
solicitantes/direcciones IP inesperados o no autorizados con el fin de identificar cualquier
solicitud anónima que se realice a los buckets.
• Esta consulta solo recupera información de la hora a la que se habilitó el registro.
• Si utiliza registros de AWS CloudTrail de Amazon S3, consulte Uso de AWS CloudTrail para
identificar el acceso a objetos de Amazon S3 (p. 660).

Recursos relacionados
• Formato de registro de acceso al servidor de Amazon S3 (p. 680)
• Consulta de los logs de servicio de AWS

Versión de API 2006-03-01


696
Amazon Simple Storage Service Guía del desarrollador

Uso de los SDK, la CLI y los


exploradores de AWS
Puede utilizar los SDK de AWS para desarrollar aplicaciones con Amazon S3. Los SDK de AWS
simplifican las tareas de programación encapsulando la API de REST subyacente. Los AWS Mobile SDK y
la biblioteca de JavaScript de AWS Amplify también están disponibles para crear aplicaciones web y para
dispositivos móviles conectadas mediante AWS.

En esta sección se brinda información general sobre el uso de los SDK de AWS para desarrollar
aplicaciones de Amazon S3. En esta sección también se describe cómo probar los ejemplos de código de
SDK de AWS provistos en esta guía.

Temas
• Especificación de Signature Version en la autenticación de solicitudes (p. 698)
• Configuración de la CLI de AWS (p. 704)
• Uso del AWS SDK for Java. (p. 705)
• Uso del AWS SDK para .NET (p. 706)
• Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708)
• Uso de la versión 3 de AWS SDK parar Ruby (p. 709)
• Uso del AWS SDK for Python (Boto) (p. 710)
• Uso de los AWS Mobile SDK para iOS y Android (p. 710)
• Uso de la biblioteca de JavaScript de AWS Amplify (p. 711)

Además de los SDK de AWS, los exploradores de AWS están disponibles para Visual Studio y el
Integrated Development Environment (IDE, Entorno de desarrollo integrado) de Eclipse para Java. En este
caso, los SDK y los exploradores están disponibles en paquetes como conjuntos de herramientas de AWS.

Además, puede usar la interfaz de línea de comandos (AWS CLI) de AWS para administrar buckets y
objetos de Amazon S3.

AWS Toolkit for Eclipse

AWS Toolkit for Eclipse incluye AWS SDK for Java y AWS Explorer para Eclipse. AWS Explorer
para Eclipse es un complemento de código abierto para el IDE de Eclipse para Java que facilita a los
desarrolladores las tareas de desarrollo, depuración e implementación de aplicaciones Java mediante
AWS. La GUI fácil de usar le permite obtener acceso y administrar su infraestructura de AWS que incluye
Amazon S3. Puede realizar operaciones comunes como administrar sus buckets y objetos, y configurar
políticas de IAM, además de desarrollar aplicaciones, todo ello dentro del contexto del IDE de Eclipse para
Java. Para obtener instrucciones de configuración, consulte Configuración del Toolkit. Para ver ejemplos
de cómo usar el explorador, consulte Cómo obtener acceso a AWS Explorer.

AWS Toolkit for Visual Studio

AWS Explorer para Visual Studio es una extensión para Microsoft Visual Studio que facilita a los
desarrolladores las tareas de desarrollo, depuración e implementación de aplicaciones .NET con Amazon
Web Services. La GUI fácil de usar le permite obtener acceso y administrar su infraestructura de AWS
que incluye Amazon S3. Puede realizar operaciones comunes como administrar sus buckets y objetos o
configurar políticas de IAM, y, al mismo tiempo desarrollar aplicaciones, todo dentro del contexto de Visual
Studio. Para obtener instrucciones de configuración, consulte Configuración de AWS Toolkit for Visual
Studio. Para ver ejemplos acerca de cómo usar Amazon S3 con el explorador, consulte el artículo sobre el
uso de Amazon S3 desde AWS Explorer.

Versión de API 2006-03-01


697
Amazon Simple Storage Service Guía del desarrollador
Especificación de Signature Version
en la autenticación de solicitudes

AWS SDK

Puede descargar solo los SDK. Para obtener información sobre la descarga de las bibliotecas de SDK,
consulte Código de muestra y bibliotecas.

AWS CLI

La AWS CLI es una herramienta unificada para administrar los servicios de AWS, incluido Amazon S3.
Para obtener más información sobre la descarga de la AWS CLI, consulte AWS Command Line Interface.

Especificación de Signature Version en la


autenticación de solicitudes
En la mayoría de las regiones de AWS, Amazon S3 solamente es compatible con AWS Signature
Version 4. En algunas de las regiones más antiguas de AWS, Amazon S3 admite Signature Version 4 y
Signature Version 2. Sin embargo, Signature Version 2 se va a desactivar (esta característica quedará
obsoleta). Para obtener más información sobre el final del periodo de soporte de Signature Version 2,
consulte AWS Signature Version 2 se va a desactivar (esta característica quedará obsoleta) para Amazon
S3 (p. 700).

Para ver una lista de todas las regiones de Amazon S3 y las versiones de Signature que admiten, consulte
Regiones y puntos de enlace en la Referencia general de AWS.

Para todas las regiones de AWS, los SDK de AWS utilizan Signature Version 4 de forma predeterminada
para autenticar solicitudes. Si utiliza los SDK de AWS lanzados antes de mayo de 2016, es posible que
deba solicitar Signature Version 4, tal y como se muestra en la siguiente tabla.

SDK Solicitud de Signature Version 4 para una autenticación de solicitud

AWS CLI Para el perfil predeterminado, ejecute el siguiente comando:

$ aws configure set default.s3.signature_version s3v4

Para un perfil común, ejecute el siguiente comando:

$ aws configure set


profile.your_profile_name.s3.signature_version s3v4

SDK de Java Añada lo siguiente en su código:

System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERT
"true");

O bien, en la línea de comando, especifique lo siguiente:

-Dcom.amazonaws.services.s3.enableV4

SDK de JavaScript Configure el parámetro signatureVersion en v4 cuando cree el


cliente:

var s3 = new AWS.S3({signatureVersion: 'v4'});

Versión de API 2006-03-01


698
Amazon Simple Storage Service Guía del desarrollador
Especificación de Signature Version
en la autenticación de solicitudes

SDK Solicitud de Signature Version 4 para una autenticación de solicitud

SDK de PHP Configure el parámetro signature en v4 cuando cree el cliente del


servicio de Amazon S3 para PHP SDK v2:

<?php
$client = S3Client::factory([
'region' => 'YOUR-REGION',
'version' => 'latest',
'signature' => 'v4'
]);

Cuando utilice el SDK de PHP v3, establezca el parámetro


signature_version en v4 durante la construcción del cliente de
servicio de Amazon S3:

<?php
$s3 = new Aws\S3\S3Client([
'version' => '2006-03-01',
'region' => 'YOUR-REGION',
'signature_version' => 'v4'
]);

SDK de Python-Boto Especifique lo siguiente en el archivo de configuración


predeterminado boto:

[s3] use-sigv4 = True

SDK de Ruby SDK de Ruby - Version 1: configure el parámetro


:s3_signature_version en :v4 cuando cree el cliente:

s3 = AWS::S3::Client.new(:s3_signature_version => :v4)

SDK de Ruby - Version 3: configure el parámetro


signature_version en v4 cuando cree el cliente:

s3 = Aws::S3::Client.new(signature_version: 'v4')

SDK de .NET Añada lo siguiente al código antes de crear el cliente de Amazon S3:

AWSConfigsS3.UseSignatureVersion4 = true;

O bien, añada lo siguiente al archivo de configuración:

<appSettings>
<add key="AWS.S3.UseSignatureVersion4" value="true" />
</appSettings>

Versión de API 2006-03-01


699
Amazon Simple Storage Service Guía del desarrollador
AWS Signature Version 2 se va a desactivar (esta
característica quedará obsoleta) para Amazon S3

AWS Signature Version 2 se va a desactivar (esta


característica quedará obsoleta) para Amazon S3
Signature Version 2 se va a desactivar (esta característica quedará obsoleta) en Amazon S3. A partir de
entonces, Amazon S3 solo aceptará solicitudes de la API que estén firmadas con Signature Version 4.

En esta sección, se incluyen algunas respuestas a preguntas comunes sobre el final del servicio de
soporte de Signature Version 2.

¿Qué es Signature Version 2/4 y qué significa la firma de solicitudes?

El proceso de firma Signature Version 2 o Signature Version 4 se utiliza para autenticar las solicitudes de
API de Amazon S3. La firma de solicitudes permite que Amazon S3 pueda identificar quién está enviando
la solicitud y ayuda a proteger las solicitudes frente a agentes malintencionados.

Para obtener más información sobre la firma de las solicitudes de AWS, consulte Firma de solicitudes de la
API de AWS en la AWS General Reference.

¿En qué consiste la actualización?

En la actualidad, pueden utilizarse solicitudes de la API de Amazon S3 firmadas con Signature Version 2 y
Signature Version 4. Cuando esto suceda, Amazon S3 solamente aceptará solicitudes que estén firmadas
con Signature Version 4.

Para obtener más información sobre la firma de solicitudes de AWS, consulte Cambios de Signature
Version 4 en la AWS General Reference.

¿Por qué se realiza la actualización?

En lugar de utilizar una clave de acceso secreta, Signature Version 4 usa una clave de firma, lo que mejora
la seguridad. En la actualidad, Signature Version 4 puede utilizarse en todas las regiones de AWS, mientas
que Signature Version 2 solamente se admite en las regiones en las que se lanzó antes de enero de 2014.
Esta actualización nos permite proporcionar una experiencia más uniforme en todas las regiones.

¿Cómo sé si estoy utilizando Signature Version 4 y qué actualizaciones tengo que hacer?

Normalmente, la versión de Signature que se utiliza para firmar las solicitudes viene determinada por la
herramienta o el SDK del lado del cliente. De forma predeterminada, las últimas versiones de los SDK
de AWS utilizan Signature Version 4. En el caso del software de terceros, póngase en contacto con el
equipo de soporte del software correspondiente para confirmar la versión que necesita. Si envía llamadas
REST directas a Amazon S3, debe modificar la aplicación para que utilice el proceso de firma Signature
Version 4.

Para obtener información sobre la versión de los SDK de AWS que debe usarse al pasar a Signature
Version 4, consulte Transición de Signature Version 2 a Signature Version 4 (p. 701).

Para obtener más información sobre el uso de Signature Version 4 con la API REST de Amazon S3,
consulte el artículo sobre la autenticación de solicitudes (AWS Signature Version 4) en la Amazon Simple
Storage Service API Reference.

¿Qué sucede si no realizo la actualización?

Las solicitudes firmadas con Signature Version 2 que se generen cuando esto suceda no podrán
autenticarse con Amazon S3. Los solicitantes recibirán mensajes de error en los que se informará de que
la solicitud debe firmarse con Signature Version 4.

¿Debo hacer algún cambio aunque utilice una URL prefirmada que requiera mi firma durante más de siete
días?

Versión de API 2006-03-01


700
Amazon Simple Storage Service Guía del desarrollador
Transición de Signature Version 2 a Signature Version 4

Si utiliza una URL prefirmada que necesita su firma durante más de siete días, no tiene que hacer nada
por el momento. Podrá seguir usando AWS Signature Version 2 para firmar y autenticar la URL prefirmada.
Seguiremos investigando y le proporcionaremos más detalles sobre la migración a Signature Version 4 con
direcciones URL prefirmadas.

Más información
• Para obtener más información sobre el uso de Signature Version 4, consulte Firma de solicitudes de la
API AWS.
• Consulte la lista de cambios entre Signature Version 2 y Signature Version 4 en Cambios de Signature
Version 4.
• Consulte la publicación acerca de cómo AWS Signature Version 4 va a sustituir a AWS Signature
Version 2 en la firma de solicitudes de API de Amazon S3 en los foros de AWS.
• Si tiene algún problema o alguna duda, póngase en contacto con AWS Support.

Transición de Signature Version 2 a Signature


Version 4
Si en la actualidad utiliza Signature Version 2 para autenticar las solicitudes de API de Amazon S3, debe
cambiar a Signature Version 4. Tal y como se describe en AWS Signature Version 2 se va a desactivar
(esta característica quedará obsoleta) para Amazon S3 (p. 700), el servicio de soporte de Signature
Version 2 está a punto de finalizar.

Para obtener más información sobre el uso de Signature Version 4 con la API REST de Amazon S3,
consulte el artículo sobre la autenticación de solicitudes (AWS Signature Version 4) en la Amazon Simple
Storage Service API Reference.

En la tabla siguiente, se muestran los SDK con la versión mínima necesaria para utilizar Signature
Version 4 (SigV4).
Si utiliza direcciones URL prefirmadas con los SDK de AWS Java, JavaScript (Node.js) o Python (Boto/
CLI), debe especificar la región de AWS apropiada y configurar Signature Version 4 en el cliente. Para
obtener información acerca de la configuración de SigV4 en el cliente, consulte Especificación de
Signature Version en la autenticación de solicitudes (p. 698).

Si utiliza Actualice a ¿Es necesario Enlace a la documentación del SDK


este SDK o esta versión del cambiar el
producto SDK código para
que el cliente
utilice Sigv4?

AWS SDK for Actualice a Sí Especificación de Signature Version en la


Java v1 Java 1.11.x o autenticación de solicitudes (p. 698)
v2 en el cuarto
trimestre de
2018.

AWS SDK for No es No AWS SDK for Java


Java v2 (vista necesario
previa) actualizar el
SDK.

AWS SDK Actualice Sí AWS SDK para .NET


para .NET v1 a 3.1.10 o

Versión de API 2006-03-01


701
Amazon Simple Storage Service Guía del desarrollador
Transición de Signature Version 2 a Signature Version 4

Si utiliza Actualice a ¿Es necesario Enlace a la documentación del SDK


este SDK o esta versión del cambiar el
producto SDK código para
que el cliente
utilice Sigv4?
versiones
posteriores.

AWS SDK Actualice No AWS SDK para .NET v2


para .NET v2 a 3.1.10 o
versiones
posteriores.

AWS SDK No es Sí AWS SDK para .NET v3


para .NET v3 necesario
actualizar el
SDK.

AWS SDK for Actualice Sí AWS SDK for JavaScript


JavaScript v1 a 2.68.0 o
versiones
posteriores.

AWS SDK for Actualice Sí AWS SDK for JavaScript


JavaScript v2 a 2.68.0 o
versiones
posteriores.

AWS SDK for No tiene que No AWS SDK for JavaScript


JavaScript v3 hacer nada por
el momento.
Actualice a
la versión
principal V3
en el tercer
trimestre de
2019.

AWS SDK para Se recomienda Sí AWS SDK para PHP


PHP v1 actualizar
a la versión
más reciente
de PHP o, al
menos, a la
v2.7.4 con
el parámetro
de firma
establecido
en v4 en la
configuración
del cliente de
S3.

Versión de API 2006-03-01


702
Amazon Simple Storage Service Guía del desarrollador
Transición de Signature Version 2 a Signature Version 4

Si utiliza Actualice a ¿Es necesario Enlace a la documentación del SDK


este SDK o esta versión del cambiar el
producto SDK código para
que el cliente
utilice Sigv4?

AWS SDK para Se recomienda No AWS SDK para PHP


PHP v2 actualizar
a la versión
más reciente
de PHP o, al
menos, a la
v2.7.4 con
el parámetro
de firma
establecido
en v4 en la
configuración
del cliente de
S3.

AWS SDK para No es No AWS SDK para PHP


PHP v3 necesario
actualizar el
SDK.

Boto2 Actualice a Sí Actualización a Boto 2


Boto2 v2.49.0.

Boto3 Actualice Sí Boto 3: AWS SDK para Python


a 1.5.71
(Botocore),
1.4.6 (Boto3).

AWS CLI Actualice Sí Interfaz de línea de comandos de AWS


a 1.11.108.

AWS CLI v2 No es No Interfaz de línea de comandos de AWS versión 2


(vista previa) necesario
actualizar el
SDK.

AWS SDK Actualice a Sí Ruby V3 para AWS


parar Ruby v1 Ruby V3.

AWS SDK Actualice a Sí Ruby V3 para AWS


parar Ruby v2 Ruby V3.

AWS SDK No es No Ruby V3 para AWS


parar Ruby v3 necesario
actualizar el
SDK.

Go No es No AWS SDK for Go


necesario
actualizar el
SDK.

Versión de API 2006-03-01


703
Amazon Simple Storage Service Guía del desarrollador
Configuración de la CLI de AWS

Si utiliza Actualice a ¿Es necesario Enlace a la documentación del SDK


este SDK o esta versión del cambiar el
producto SDK código para
que el cliente
utilice Sigv4?

C++ No es No AWS SDK para C++


necesario
actualizar el
SDK.

Herramientas de AWS para Windows PowerShell o bien Herramientas de AWS; para PowerShell Core

Si utiliza versiones del módulo anteriores a 3.3.99, debe actualizar a 3.3.99.

Para obtener información sobre la versión, utilice el cmdlet Get-Module:

Get-Module –Name AWSPowershell


Get-Module –Name AWSPowershell.NetCore

Para actualizar a la versión 3.3.99, utilice el cmdlet Update-Module:

Update-Module –Name AWSPowershell


Update-Module –Name AWSPowershell.NetCore

Puede utilizar direcciones URL prefirmadas que sean válidas durante más siete días en las que el tráfico
se envíe con Signature Version 2.

Configuración de la CLI de AWS


Siga los pasos para descargar y configurar la interfaz de línea de comandos de AWS (CLI de AWS).
Note

Para tener acceso a los servicios de AWS, como Amazon S3, debe proporcionar credenciales.
A continuación, el servicio puede determinar si usted tiene permisos para obtener acceso a sus
recursos. La consola requiere que especifique la contraseña. Puede crear claves de acceso para
su cuenta de AWS para tener acceso a la AWS CLI o API. Sin embargo, no es recomendable que
tenga acceso a AWS con las credenciales de su cuenta de AWS. En su lugar, le recomendamos
que utilice AWS Identity and Access Management (IAM). Cree un usuario de IAM, añada el
usuario a un grupo de IAM con permisos administrativos y, a continuación, conceda permisos
administrativos al usuario de IAM que ha creado. A continuación, podrá obtener acceso a AWS
mediante una dirección URL especial y esas credenciales de usuario de IAM. Para obtener
instrucciones, vaya a Creación del primer grupo de usuarios y administradores de IAM en la Guía
del usuario de IAM.

Para configurar la CLI de AWS

1. Descargue y configure la AWS CLI. Para obtener instrucciones, consulte los siguientes temas en la
Guía del usuario de la interfaz de línea de comandos de AWS:

Versión de API 2006-03-01


704
Amazon Simple Storage Service Guía del desarrollador
Uso del AWS SDK for Java.

• Configuración inicial de la interfaz de línea de comandos de AWS


• Configuración de la interfaz de línea de comandos de AWS
2. Añada un perfil con nombre para el usuario administrador en el archivo de configuración de la AWS
CLI. Puede utilizar este perfil cuando ejecute los comandos de la AWS CLI.

[adminuser]
aws_access_key_id = adminuser access key ID
aws_secret_access_key = adminuser secret access key
region = aws-region

Para ver una lista de las regiones de AWS disponibles, consulte Regiones y puntos de enlace en la
AWS General Reference.
3. Verifique la configuración escribiendo los siguientes comandos en el símbolo del sistema.

• Pruebe el comando help para verificar que la AWS CLI está instalada en su equipo:

aws help

• Pruebe un comando S3 para verificar que el usuario puede obtener acceso a Amazon S3. Este
comando muestra los buckets de su cuenta. La AWS CLI utiliza las credenciales de adminuser
para autenticar la solicitud.

aws s3 ls --profile adminuser

Uso del AWS SDK for Java.


AWS SDK for Java proporciona una API para las operaciones de bucket y objeto de Amazon S3. Para
operaciones de objeto, además de proporcionar la API para cargar objetos en una sola operación, el SDK
proporciona una API para cargar objetos grandes por partes. Para obtener más información, consulte
Carga de objetos con la API de carga multiparte (p. 186).

Temas
• La organización de API de Java (p. 706)
• Prueba de ejemplos de código Java de Amazon S3 (p. 706)

El AWS SDK for Java le brinda la opción de utilizar una API de alto nivel o de bajo nivel.

API de bajo nivel

Las API de bajo nivel corresponden a las operaciones REST de Amazon S3 subyacentes, como las
operaciones de creación, actualización y eliminación que se aplican a buckets y objetos. Cuando se
cargan objetos grandes con la API de carga multiparte de bajo nivel, se dispone de un mayor control. Por
ejemplo, permite detener y reanudar cargas multiparte, variar los tamaños de las partes durante la carga, o
comenzar cargas cuando no se conoce de antemano el tamaño de los datos. Si no tiene estos requisitos,
utilice la API de alto nivel para cargar objetos.

API de alto nivel

Para cargar objetos, el SDK proporciona un mayor nivel de abstracción con la clase TransferManager.
La API de alto nivel es una API más simple, que permite cargar archivos y secuencias en Amazon S3
con tan solo unas pocas líneas de código. Debe utilizar esta API para cargar datos a menos que necesite
controlar la carga según lo descrito en la sección anterior sobre las API de bajo nivel.

Versión de API 2006-03-01


705
Amazon Simple Storage Service Guía del desarrollador
La organización de API de Java

Para datos de tamaño más pequeño, la API TransferManager carga los datos en una sola operación.
Sin embargo, TransferManager cambia a la API de carga multiparte cuando el tamaño de los
datos alcanza cierto límite. Cuando es posible, TransferManager utiliza varios subprocesos
para cargar las partes de manera simultánea. Si la carga de una parte falla, la API reintenta cargar
la parte fallida hasta tres veces. Sin embargo, estas son opciones configurables con la clase
TransferManagerConfiguration.
Note

Cuando se utiliza una secuencia para el origen de datos, la clase TransferManager no realiza
cargas simultáneas.

La organización de API de Java


Los siguientes paquetes en AWS SDK for Java proporcionan la siguiente API:

• com.amazonaws.services.s3: proporciona las API para crear clientes de Amazon S3 y trabajar con
buckets y objetos. Por ejemplo, le permite crear buckets, cargar, obtener y eliminar objetos, y crear listas
de claves.
• com.amazonaws.services.s3.transfer: proporciona las operaciones de datos de API de alto nivel.

La API de carácter general está diseñada para simplificar la transferencia de objetos a y desde
Amazon S3. Contiene la clase TransferManager, que proporciona métodos asíncronos
para trabajar con las transferencias, consultarlas y manipularlas. También incluye la clase
TransferManagerConfiguration, que se puede utilizar para configurar el tamaño de parte mínimo
para cargar partes y el límite en bytes para el uso de cargas multiparte.
• com.amazonaws.services.s3.model: proporciona las clases de API de bajo nivel para crear respuestas
de procesos y solicitudes. Por ejemplo contiene la clase GetObjectRequest para describir su solicitud
get object, la clase ListObjectsRequest para describir sus solicitudes de listas de claves y la clase
InitiateMultipartUploadRequest para crear cargas multiparte.

Para obtener más información sobre la API de AWS SDK for Java, consulte AWS SDK for Java API
Reference.

Prueba de ejemplos de código Java de Amazon S3


Los ejemplos de Java que aparecen en esta guía son compatibles con la versión 1.11.321. de AWS SDK
for Java. Si desea más instrucciones sobre la configuración y ejecución de ejemplos de código, consulte
Introducción a AWS SDK for Java en la Guía para desarrolladores de AWS SDK for Java.

Uso del AWS SDK para .NET


AWS SDK para .NET proporciona la API para las operaciones de bucket y objeto de Amazon S3. Para
operaciones de objeto, además de proporcionar la API para cargar objetos en una sola operación, el SDK
proporciona la API para cargar objetos grandes en partes (consulte Carga de objetos con la API de carga
multiparte (p. 186)).

Temas
• La organización de la API de .NET (p. 707)
• Ejecución de ejemplos de código .NET de Amazon S3 (p. 708)

El AWS SDK para .NET le brinda la opción de utilizar una API de alto nivel o de bajo nivel.

Versión de API 2006-03-01


706
Amazon Simple Storage Service Guía del desarrollador
La organización de la API de .NET

API de bajo nivel

Las API de bajo nivel corresponden a las operaciones REST de Amazon S3 subyacentes, como
crear, actualizar y eliminar operaciones que se aplican a buckets y objetos. Cuando se cargan objetos
grandes con la API de carga multiparte de bajo nivel (consulte Carga de objetos con la API de carga
multiparte (p. 186)), se dispone de un mayor control. Por ejemplo, permite detener y reanudar cargas
multiparte, variar los tamaños de las partes durante la carga, o comenzar cargas cuando no se conoce
de antemano el tamaño de los datos. Si no tiene estos requisitos, utilice la API de alto nivel para cargar
objetos.

API de alto nivel

Para cargar objetos, el SDK proporciona un mayor nivel de abstracción con la clase TransferUtility.
La API de alto nivel es una API más simple, que permite cargar archivos y secuencias en Amazon S3
con tan solo unas pocas líneas de código. Debe utilizar esta API para cargar datos a menos que necesite
controlar la carga según lo descrito en la sección anterior sobre las API de bajo nivel.

Para datos de tamaño más pequeño, la API TransferUtility carga los datos en una sola operación.
Sin embargo, TransferUtility cambia a la API de carga multiparte cuando el tamaño de los datos
alcanza cierto límite. En forma predeterminada, utiliza varios subprocesos para cargar las partes de
manera simultánea. Si la carga de una parte falla, la API reintenta cargar la parte fallida hasta tres veces.
Sin embargo, estas son opciones configurables.
Note

Cuando se utiliza una secuencia para el origen de datos, la clase TransferUtility no realiza
cargas simultáneas.

La organización de la API de .NET


Cuando escribe aplicaciones de Amazon S3 con AWS SDK para .NET, utiliza AWSSDK.dll. Los siguientes
espacios de nombres en este conjunto proporcionan la API de carga multiparte:

• Amazon.S3.Transfer: proporciona la API de alto nivel para cargar sus datos en partes.

Incluye la clase TransferUtility que le permite especificar un archivo, un directorio o una


secuencia para cargar sus datos. También incluye las clases TransferUtilityUploadRequest y
TransferUtilityUploadDirectoryRequest para establecer configuraciones avanzadas, como
el número de subprocesos simultáneos, el tamaño de las partes, los metadatos de objetos, la clase de
almacenamiento (STANDARD, REDUCED_REDUNDANCY) y la lista de control de acceso (ACL, Access
Control List) de los objetos.
• Amazon.S3: proporciona la implementación para las API de bajo nivel.

Brinda métodos que corresponden a la API de carga multiparte REST de Amazon S3 (consulte Uso de la
API de REST para carga multiparte (p. 215)).
• Amazon.S3.Model: proporciona las clases de API de bajo nivel para crear respuestas de procesos
y solicitudes. Por ejemplo, proporciona las clases InitiateMultipartUploadRequest y
InitiateMultipartUploadResponse que puede utilizar al iniciar una carga multiparte, y las clases
UploadPartRequest y UploadPartResponse para cargar partes.
• Amazon.S3.Encryption: proporciona AmazonS3EncryptionClient.
• Amazon.S3.Util: proporciona diversas clases de utilidad como AmazonS3Util y
BucketRegionDetector.

Para obtener más información acerca de la API de AWS SDK para .NET, consulte la sección de referencia
de la API de AWS SDK para .NET versión 3.

Versión de API 2006-03-01


707
Amazon Simple Storage Service Guía del desarrollador
Ejecución de ejemplos de código .NET de Amazon S3

Ejecución de ejemplos de código .NET de Amazon S3


Los ejemplos de código .NET que aparecen en esta guía son compatibles con la versión 3.0. de AWS
SDK para .NET. Para obtener información sobre cómo configurar y ejecutar códigos de ejemplo, consulte
Introducción a AWS SDK para .NET en la Guía para desarrolladores de AWS SDK para .NET.

Uso del AWS SDK para PHP y ejecución de


ejemplos de PHP
AWS SDK para PHP proporciona acceso a la API para operaciones de bucket y objeto de Amazon S3. El
SDK le brinda la opción de utilizar la API de bajo nivel del servicio o las abstracciones de nivel superior.

El SDK está disponible en AWS SDK para PHP, que también tiene instrucciones para la instalación y la
introducción al SDK.

La configuración para utilizar AWS SDK para PHP depende de su entorno y de cómo desea ejecutar su
aplicación. Para configurar su entorno y ejecutar los ejemplos de esta documentación, consulte la Guía de
introducción de AWS SDK para PHP.

Temas
• Niveles de AWS SDK para PHP (p. 708)
• Ejecución de ejemplos de PHP (p. 709)
• Recursos relacionados (p. 709)

Niveles de AWS SDK para PHP


El AWS SDK para PHP le brinda la opción de utilizar una API de alto nivel o de bajo nivel.

API de bajo nivel


Las API de bajo nivel corresponden a las operaciones REST de Amazon S3 subyacentes, como las
operaciones de creación, actualización y eliminación que se aplican a buckets y objetos. Las API de bajo
nivel brindan mayor control de estas operaciones. Por ejemplo, puede realizar sus solicitudes por lotes y
ejecutarlas en paralelo. O cuando use la API de carga multiparte, puede administrar las partes del objeto
individualmente. Tenga en cuenta que estas llamadas a la API de bajo nivel devuelven un resultado que
contiene todos los detalles de la respuesta de Amazon S3. Para obtener más información sobre la API de
carga multiparte, consulte Carga de objetos con la API de carga multiparte (p. 186).

Abstracciones de alto nivel


Las abstracciones de alto nivel están diseñadas para simplificar los casos de uso común.
Por ejemplo, para cargar objetos grandes con la API de bajo nivel, debe llamar al método
Aws\S3\S3Client::createMultipartUpload(), luego llamar al método Aws
\S3\S3Client::uploadPart() para cargar las partes del objeto y luego llamar al método Aws
\S3\S3Client::completeMultipartUpload() para completar la carga. En su lugar, puede utilizar
el objeto Aws\S3\\MultipartUploader de nivel superior que simplifica la creación de una carga
multiparte.

Otro ejemplo, cuando se enumeran los objetos de un bucket, se puede utilizar la característica de
iteradores de AWS SDK para PHP para devolver todas las claves de objetos, independientemente de
cuántos objetos se hayan guardado en el bucket. Si utiliza una API de bajo nivel, la respuesta devuelve un

Versión de API 2006-03-01


708
Amazon Simple Storage Service Guía del desarrollador
Ejecución de ejemplos de PHP

máximo de 1 000 claves. Si un bucket contiene más de 1 000 objetos, el resultado se trunca y es preciso
administrar la respuesta y comprobar el truncamiento.

Ejecución de ejemplos de PHP


Para configurar y usar muestras de Amazon S3 con la versión 3 de AWS SDK para PHP, consulte
Instalación en la AWS SDK para PHP Developer Guide.

Recursos relacionados
• AWS SDK para PHP para Amazon S3
• Documentación sobre AWS SDK para PHP
• AWS SDK para PHP API para Amazon S3

Uso de la versión 3 de AWS SDK parar Ruby


AWS SDK parar Ruby proporciona una API para las operaciones de bucket y objeto de Amazon S3. Para
operaciones de objeto, puede utilizar la API para cargar objetos en una sola operación o cargar objetos
grandes en partes (consulte Uso de AWS SDK parar Ruby para carga multiparte (p. 214)). Sin embargo, la
API para la carga en una sola operación también puede aceptar objetos grandes y administrar en segundo
plano la carga por partes, de modo que sea necesario escribir menos líneas de script.

La organización de la API de Ruby


Cuando crea aplicaciones de Amazon S3 con AWS SDK parar Ruby, debe instalar la gema SDK para
Ruby. Para obtener más información, consulte AWS SDK para Ruby - Versión 3. Una vez instalado, puede
obtener acceso a la API, incluidas las siguientes clases de clave:

• Aws::S3::Resource: representa la interfaz para Amazon S3 para el SDK de Ruby y brinda métodos para
crear y enumerar buckets.

La clase S3 proporciona el método de instancia #buckets para obtener acceso a los buckets existentes
o crear nuevos.
• Aws::S3::Bucket: representa un bucket de Amazon S3. 

La clase Bucket proporciona los métodos #object(key) y #objects para obtener acceso a objetos
en un bucket, así como métodos para eliminar un bucket y devolver información acerca de este, como la
política de bucket.
• Aws::S3::Object: representa un objeto de Amazon S3 identificado con su clave.

La clase Object proporciona métodos para obtener y configurar propiedades de un objeto, especificar
la clase de almacenamiento para almacenar objetos, y configurar permisos de objetos con listas de
control de acceso. La clase Object también tiene métodos para eliminar, cargar y copias objetos.
Cuando carga objetos en partes, esta clase brinda opciones para que pueda especificar el orden de las
partes cargadas y el tamaño de la parte.

Para obtener más información acerca de la API de AWS SDK para Ruby, consulte AWS SDK para Ruby -
Versión 2.

Prueba de ejemplos de script de Ruby


La forma más sencilla de comenzar con los ejemplos de script de Ruby es instalar la última versión de
la gema AWS SDK parar Ruby. Para obtener información acerca de la instalación o la actualización a la

Versión de API 2006-03-01


709
Amazon Simple Storage Service Guía del desarrollador
Uso del AWS SDK for Python (Boto)

versión más reciente de la gema, consulte AWS SDK para Ruby - Versión 3. Las siguientes tareas lo guían
a través de la creación y las pruebas de los ejemplos de script de Ruby asumiendo que usted ya instaló
AWS SDK parar Ruby.

Proceso general de creación y prueba de ejemplos de script de Ruby

1 Para obtener acceso a AWS, debe proporcionar un conjunto de credenciales para su


aplicación SDK para Ruby. Para obtener más información, consulte Configuración de AWS
SDK para Ruby.

2 Cree un nuevo script de SDK para Ruby y añada las siguientes líneas en la parte superior
del script.

#!/usr/bin/env ruby

require 'rubygems'
require 'aws-sdk-s3'

La primera línea es la directiva de intérprete y las dos instrucciones require importan dos
gemas requeridas a su script.

3 Copie el código de la sección que lee en su script.

4 Actualice el código con cualquier dato requerido. Por ejemplo, si carga un archivo,
proporcione la ruta del archivo y el nombre del bucket.

5 Ejecute el script. Verifique los cambios en los buckets y los objetos con la Consola
de administración de AWS. Para obtener más información acerca de la Consola de
administración de AWS, consulte https://aws.amazon.com/console/.

Muestras de Ruby

Los siguientes enlaces incluyen ejemplos que lo ayudan a comenzar con la versión 3 de SDK para Ruby:

• Mediante el AWS SDK para Ruby versión 3 (p. 64)


• Cargar un objeto con AWS SDK parar Ruby (p. 186)

Uso del AWS SDK for Python (Boto)


Boto es un paquete de Python que proporciona interfaces para AWS, incluido Amazon S3. Para obtener
más información acerca de Boto, consulte AWS SDK for Python (Boto). El enlace de introducción en esta
página proporciona instrucciones paso a paso para comenzar.

Uso de los AWS Mobile SDK para iOS y Android


Puede utilizar los AWS Mobile SDK para Android e iOS, junto con AWS Mobile Hub, para integrar de forma
rápida y sencilla backends de nube robustos en aplicaciones móviles existentes. Puede configurar y utilizar
características como el inicio de sesión de usuarios, bases de datos, notificaciones de inserción y muchas
otras, sin necesidad de ser un experto en AWS.

Los AWS Mobile SDK proporcionan acceso sencillo a Amazon S3 y a muchos otros servicios de AWS.
Para empezar a utilizar los AWS Mobile SDK, consulte Introducción a los AWS Mobile SDK.

Versión de API 2006-03-01


710
Amazon Simple Storage Service Guía del desarrollador
Más información

Más información
Uso de la biblioteca de JavaScript de AWS Amplify (p. 711)

Uso de la biblioteca de JavaScript de AWS Amplify


AWS Amplify es una biblioteca de JavaScript de código abierto para desarrolladores de aplicaciones web
y móviles que diseñan aplicaciones preparadas para la nube. AWS Amplify proporciona componentes de
interfaz de usuario personalizables y una interfaz declarativa para trabajar con un bucket de S3, junto con
otras categorías de alto nivel para los servicios de AWS.

Para empezar a utilizar la biblioteca de JavaScript de AWS Amplify, elija uno de los siguientes enlaces:

• Introducción a la biblioteca de AWS Amplify para la Web


• Introducción a la biblioteca de AWS Amplify para React Native

Para obtener más información acerca de AWS Amplify, consulte AWS Amplify en GitHub.

Más información
Uso de los AWS Mobile SDK para iOS y Android (p. 710)

Versión de API 2006-03-01


711
Amazon Simple Storage Service Guía del desarrollador
Apéndice A: uso de la API SOAP

Apéndices
Este apéndice de la Guía para desarrolladores de Amazon Simple Storage Service incluye las siguientes
secciones.

Temas
• Apéndice A: uso de la API SOAP (p. 712)
• Apéndice B: Autenticación de solicitudes (AWS Signature Versión 2) (p. 715)

Apéndice A: uso de la API SOAP


Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Esta sección contiene información específica sobre la API SOAP de Amazon S3.
Note

Las solicitudes SOAP, tanto autenticadas como anónimas, deben enviarse a Amazon S3 con SSL.
Amazon S3 devuelve un error si envía una solicitud SOAP por HTTP.

Elementos comunes de la Application Programming


Interface (API, Interfaz de programación de
aplicaciones) de SOAP
Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Puede usar SOAP 1.1 en HTTP para interactuar con Amazon S3. El WSDL de Amazon S3, que
describes la API de Amazon S3 en una forma legible electrónicamente, está disponible en: http://
doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl. El esquema de Amazon S3 está disponible en http://
doc.s3.amazonaws.com/2006-03-01/AmazonS3.xsd.

La mayoría de los usuarios utilizan el conjunto de herramientas de SOAP adaptado para su lenguaje y
entorno de desarrollo para interactuar con Amazon S3. Los diferentes conjuntos de herramientas disponen
la API de Amazon S3 de diferentes maneras. Consulte la documentación de su conjunto de herramientas
específico para comprender cómo usarlo. En esta sección se ilustran las operaciones de SOAP de Amazon
S3 de forma independiente del conjunto de herramientas y se exhiben las solicitudes y respuestas XML tal
como aparecen "en la ruta".

Versión de API 2006-03-01


712
Amazon Simple Storage Service Guía del desarrollador
Autenticación de solicitudes SOAP

Elementos comunes
Puede incluir los siguientes elementos relacionados a autorización con cualquier solicitud de SOAP:

• AWSAccessKeyId: La ID de clave de acceso de AWS del solicitante


• Timestamp: La hora actual en el sistema
• Signature: La firma de la solicitud

Autenticación de solicitudes SOAP


Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Cada solicitud no anónima debe contener información de autenticación para establecer la identidad de
la solicitud principal que hace la solicitud. En SOAP, la información de autenticación se coloca en los
siguientes elementos de la solicitud SOAP:

• Su ID de clave de acceso de AWS.


Note

Cuando se haces solicitudes autenticadas SOAP, no se admiten credenciales de seguridad


temporales. Para obtener más información acerca de estos tipos de credenciales, consulte
Realización de solicitudes (p. 10).
• Timestamp: Debe ser una fecha y hora (consulte http://www.w3.org/TR/xmlschema-2/#dateTime)
en la zona horaria del Tiempo universal coordinado (Tiempo medio de Greenwich), como
2009-01-01T12:00:00.000Z. La autorización fallará si esta marca temporal está adelantada más de
15 minutos que el reloj de los servicios de Amazon S3.
• Signature: El resumen RFC 2104 HMAC-SHA1 (consulte http://www.ietf.org/rfc/rfc2104.txt) de la
concatenación de "AmazonS3" + OPERATION + Timestamp, con su clave de acceso secreta de AWS
como la clave. Por ejemplo, en la siguiente solicitud de ejemplo CreateBucket, el elemento de firma debe
contener el resumen HMAC-SHA1 del valor "AmazonS3CreateBucket2009-01-01T12:00:00.000Z":

Por ejemplo, en la siguiente solicitud de ejemplo CreateBucket, el elemento de firma debe contener el
resumen HMAC-SHA1 del valor "AmazonS3CreateBucket2009-01-01T12:00:00.000Z":

Example

<CreateBucket xmlns="http://doc.s3.amazonaws.com/2006-03-01">
<Bucket>quotes</Bucket>
<Acl>private</Acl>
<AWSAccessKeyId>AKIAIOSFODNN7EXAMPLE</AWSAccessKeyId>
<Timestamp>2009-01-01T12:00:00.000Z</Timestamp>
<Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</CreateBucket>

Note

Las solicitudes SOAP, tanto autenticadas como anónimas, deben enviarse a Amazon S3 con SSL.
Amazon S3 devuelve un error si envía una solicitud SOAP por HTTP.

Versión de API 2006-03-01


713
Amazon Simple Storage Service Guía del desarrollador
Configuración de políticas de acceso con SOAP

Important

Debido a diferentes interpretaciones con respecto a cómo se debe descartar la precisión de


tiempo adicional, los usuario de .NET deben tener cuidado y no enviar a Amazon S3 demasiadas
marcas temporales específicas. Esto se puede lograr creando objetos DateTime manualmente
con solo una precisión de milisegundos.

Configuración de políticas de acceso con SOAP


Note

La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

El control de acceso se puede establecer en el momento en el que se escribe un bucket o un objeto


incluyendo el elemento "AccessControlList" en la solicitud para CreateBucket, PutObjectInline o
PutObject. El elemento "AccessControlList" se describe en Administración de identidad y acceso en
Amazon S3 (p. 312). Si no se ha especificado ninguna lista de control de acceso con estas operaciones,
el recurso se creará con una política de acceso predeterminada que otorga al solicitante un acceso
FULL_CONTROL (este será el caso incluso aunque la solicitud sea del tipo PutObjectInline o PutObject
para un objeto que ya exista).

A continuación presentamos una solicitud que escribe datos en un objeto, hace que el objeto sea legible
desde principales anónimos y proporciona al usuario especificado derechos FULL_CONTROL sobre el
bucket (la mayoría de desarrolladores querrán concederse a sí mismos un acceso FULL_CONTROL a su
propio bucket).

Example

A continuación aparece una solicitud que escribe datos en un objeto y hace que el objeto sea legible desde
principales anónimos.

Sample Request

<PutObjectInline xmlns="http://doc.s3.amazonaws.com/2006-03-01">
<Bucket>quotes</Bucket>
<Key>Nelson</Key>
<Metadata>
<Name>Content-Type</Name>
<Value>text/plain</Value>
</Metadata>
<Data>aGEtaGE=</Data>
<ContentLength>5</ContentLength>
<AccessControlList>
<Grant>
<Grantee xsi:type="CanonicalUser">
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>chriscustomer</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
<Grant>
<Grantee xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers<URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
</AccessControlList>
<AWSAccessKeyId>AKIAIOSFODNN7EXAMPLE</AWSAccessKeyId>
<Timestamp>2009-03-01T12:00:00.183Z</Timestamp>

Versión de API 2006-03-01


714
Amazon Simple Storage Service Guía del desarrollador
Apéndice B: Autenticación de
solicitudes (AWS Signature Versión 2)

<Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</PutObjectInline>

Sample Response

<PutObjectInlineResponse xmlns="http://s3.amazonaws.com/doc/2006-03-01">
<PutObjectInlineResponse>
<ETag>&quot828ef3fdfa96f00ad9f27c383fc9ac7f&quot</ETag>
<LastModified>2009-01-01T12:00:00.000Z</LastModified>
</PutObjectInlineResponse>
</PutObjectInlineResponse>

Esta política de control de acceso se puede leer o configurar para un bucket o un objeto existentes
mediante los métodos GetBucketAccessControlPolicy, GetObjectAccessControlPolicy,
SetBucketAccessControlPolicy y SetObjectAccessControlPolicy. Para obtener más
información, consulte la explicación detallada de estos métodos.

Apéndice B: Autenticación de solicitudes (AWS


Signature Versión 2)
Important

En esa sección, se explica cómo se autentican solicitudes con AWS Signature Version 2.
Signature Version 2 se va a desactivar (esta característica quedará obsoleta). Amazon S3 solo
aceptará solicitudes de API que estén firmadas con Signature Version 4. Para obtener más
información, consulte AWS Signature Version 2 se va a desactivar (esta característica quedará
obsoleta) para Amazon S3 (p. 700)
Signature Version 4 es compatible con todas las regiones de AWS y es la única versión que
puede utilizarse en las regiones nuevas. Para obtener más información, consulte el tema sobre
autenticación de solicitudes (AWS Signature Version 4) en la Amazon Simple Storage Service API
Reference.
Amazon S3 le ofrece la posibilidad de identificar qué versión de la API de firma se utilizó para
firmar una solicitud. Es importante que identifique si alguno de sus flujos de trabajo está utilizando
la firma de Signature Version 2 y que los actualice para que utilicen Signature Version 4 con el fin
de evitar que su negocio resulte afectado.

• Si utiliza los registros de eventos de CloudTrail (opción recomendada), consulte Uso de AWS
CloudTrail para identificar solicitudes de Signature Version 2 en Amazon S3 (p. 658) para saber
cómo buscar e identificar dichas solicitudes.
• Si utiliza los registros de acceso del servidor de Amazon S3, consulte Uso de los registros de
acceso de Amazon S3 para identificar solicitudes de Signature Version 2 (p. 695).

Temas
• Autenticación de solicitudes con la API de REST (p. 715)
• Firma y autenticación de solicitudes REST (p. 717)
• Cargas basadas en el navegador con POST (AWS Signature Version 2) (p. 728)

Autenticación de solicitudes con la API de REST


Cuando accede a Amazon S3 con REST, debe proporcionar los siguientes elementos en su solicitud para
que esta se pueda autenticar:

Versión de API 2006-03-01


715
Amazon Simple Storage Service Guía del desarrollador
Autenticación de solicitudes con la API de REST

Elementos de la solicitud

• ID de clave de acceso de AWS: cada solicitud debe incluir el ID de clave de acceso de la identidad que
utiliza para enviar su solicitud.
• Firma: cada solicitud debe incluir una firma de solicitud válida, o la solicitud es rechazada.

Una firma de solicitud se calcula a través de su clave de acceso secreta, que es un secreto compartido
que solo conocen usted y AWS.
• Marca temporal: cada solicitud debe incluir la fecha y la hora en que se creó la solicitud, representadas
como una cadena en Universal Time Coordinated (UTC, Hora universal coordinada).
• Fecha: cada solicitud debe incluir la marca temporal de la solicitud.

Según la acción de la API que utiliza, puede proporcionar una hora y una fecha de vencimiento para
la solicitud, en lugar o además de la marca temporal. Consulte el tema de autenticación para la acción
particular para determinar lo que requiere.

A continuación se indican los pasos generales para autenticar solicitudes en Amazon S3. Se asume que
usted cuenta con las credenciales de seguridad, el ID de clave de acceso y la clave de acceso secreta
necesarios.

1 Cree una solicitud para AWS.

2 Calcule la firma con la clave de acceso secreta.

Versión de API 2006-03-01


716
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

3 Envíe la solicitud a Amazon S3. Incluya su ID de clave de acceso y la firma en su solicitud.


Amazon S3 realiza los siguientes tres pasos.

4 Amazon S3 utiliza el ID de clave de acceso para buscar su clave de acceso secreta.

5 Amazon S3 calcula una firma a partir de los datos de la solicitud y la clave de acceso secreta
con el mismo algoritmo que usted utilizó para calcular la firma que envió en la solicitud.

6 Si la firma generada por Amazon S3 coincide con la que envió en la solicitud, la solicitud se
considera auténtica. Si la comparación falla, se descarta la solicitud y Amazon S3 devuelve
una respuesta de error.

Información de autenticación detallada


Para obtener información detallada acerca de la autenticación de REST, consulte Firma y autenticación de
solicitudes REST (p. 717).

Firma y autenticación de solicitudes REST


Temas
• Usar credenciales de seguridad temporales (p. 719)

Versión de API 2006-03-01


717
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

• El encabezado de autenticación (p. 719)


• Canonicalización de solicitudes para firmas (p. 720)
• Construcción del elemento CanonicalizedResource (p. 720)
• Construcción del elemento CanonicalizedAmzHeaders (p. 721)
• Elementos StringToString de los encabezados HTTP: posicionales y denominados (p. 721)
• Requisitos de marca temporal (p. 722)
• Ejemplos de autenticación (p. 722)
• Problemas de firma con solicitudes REST (p. 725)
• Alternativa de autenticación por cadena de consulta para solicitudes (p. 726)

Note

En este tema se explica la autenticación de solicitudes mediante el uso de Signature Version 2.


Amazon S3 ya es compatible con la última versión de Signature, la versión 4. Esta última versión
de Signature puede utilizarse en todas las regiones, y las nuevas regiones solo permitirán el
uso de Signature versión 4 tras el 30 de enero de 2014. Para obtener más información, visite
Authenticating Requests (AWS Signature Version 4) en la Amazon Simple Storage Service API
Reference.

La autenticación es el proceso que consiste en demostrar la identidad del usuario a un sistema. La


identidad es un factor importante en las decisiones sobre el control de accesos en Amazon S3. Las
solicitudes se admiten o se rechazan, en parte, en función de la identidad del solicitante. Por ejemplo, el
derecho a crear buckets se reserva a los desarrolladores registrados, y el derecho a crear objetos en un
bucket (de manera predeterminada) se reserva al propietario del bucket en cuestión. Como desarrollador,
estará realizando solicitudes que invoquen estos privilegios, por lo que tendrá que demostrar su identidad
al sistema autenticando sus solicitudes. En esta sección le demostramos cómo.
Note

El contenido de esta sección no se aplica al método HTTP POST. Para obtener más información,
consulte Cargas basadas en el navegador con POST (AWS Signature Version 2) (p. 728).

La API REST de Amazon S3 usa un esquema HTTP personalizado basado en un HMAC (Hash Message
Authentication Code) con clave para la autenticación. Para autenticar una solicitud, primero ha de
concatenar los elementos seleccionados en la solicitud para formar una cadena. A continuación, use su
clave de acceso secreta de AWS para calcular el HMAC de dicha cadena. Este proceso se denomina
informalmente "firmar la solicitud", y al resultado del algoritmo HMAC se le llama la firma, ya que simula las
propiedades de seguridad de una firma real. Por último, tendrá que agregar esta firma como parámetro de
la solicitud empleando la sintaxis descrita en esta sección.

Cuando el sistema recibe una solicitud autenticada, toma la clave de acceso secreta de AWS que usted
afirma tener y la usa del mismo modo para computar una firma para el mensaje recibido. A continuación,
compara la firma calculada con la firma que presenta el solicitante. Si ambas firmas coinciden, el sistema
concluye que el solicitante debe de tener acceso a la clave de acceso secreta de AWS y, por tanto, actúa
con la autoridad del principal para el que se emitió la clave. Si las dos firmas no coinciden, la solicitud se
abandona y el sistema responde con un mensaje de error.

Example Solicitud REST autenticada en Amazon S3

GET /photos/puppy.jpg HTTP/1.1


Host: johnsmith.s3.amazonaws.com
Date: Mon, 26 Mar 2007 19:37:58 +0000

Versión de API 2006-03-01


718
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

Authorization: AWS AKIAIOSFODNN7EXAMPLE:frJIUN8DYpKDtOLCwo//yllqDzg=

Usar credenciales de seguridad temporales


Si firma su solicitud con credenciales de seguridad temporales (consulte Realización de solicitudes (p. 10)),
deberá incluid el token de seguridad correspondiente en la solicitud agregando el encabezado x-amz-
security-token.

Al obtener credenciales de seguridad temporales con la API de AWS Security Token Service, la respuesta
incluye credenciales de seguridad temporales y un token de sesión. El valor del token de la sesión lo
facilita en el encabezado x-amz-security-token al enviar solicitudes a Amazon S3. Para obtener
más información acerca de la API de AWS Security Token Service proporcionada por IAM, consulte las
Acciones en la Guía de AWS Security Token Service API Reference.

El encabezado de autenticación
La API REST de Amazon S3 usa el encabezado estándar HTTP Authorization para transmitir la
información de autenticación. (El nombre "encabezado estándar" no es demasiado preciso, ya que lo
que transmite es información de autenticación, no autorización). Según el esquema de autenticación de
Amazon S3, el encabezado de autorización tiene la siguiente forma:

Authorization: AWS AWSAccessKeyId:Signature

A los desarrolladores se les comunica una ID de clave de acceso de AWS y una clave de acceso secreta al
registrarse. Para la autenticación de solicitudes, el elemento AWSAccessKeyId identifica la ID de clave de
acceso utilizada para computar la firma e, indirectamente, también al desarrollador que realiza la solicitud.

El elemento Signature es el RFC 2104 HMAC-SHA1 de los elementos seleccionados de la solicitud,


y por tanto, la parte Signature del encabezado de la autorización variará entre solicitudes. Si la firma
de la solicitud calculada por el sistema coincide con la Signature incluida en la solicitud, el solicitante
habrá demostrado la posesión de la clave de acceso secreta de AWS. La solicitud será procesada bajo la
identidad y con la autoridad del desarrollador al que se le emitió la clave.

A continuación presentamos pseudogramática que ilustra la construcción del encabezado de solicitudes


Authorization. (en el ejemplo, \n representa el punto de código en Unicode U+000A, normalmente
denominado nueva línea).

Authorization = "AWS" + " " + AWSAccessKeyId + ":" + Signature;

Signature = Base64( HMAC-SHA1( YourSecretAccessKey, UTF-8-Encoding-Of( StringToSign ) ) );

StringToSign = HTTP-Verb + "\n" +


Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;

CanonicalizedResource = [ "/" + Bucket ] +


<HTTP-Request-URI, from the protocol name up to the query string> +
[ subresource, if present. For example "?acl", "?location", "?logging", or "?torrent"];

CanonicalizedAmzHeaders = <described below>

El HMAC-SHA1 es un algoritmo definido por RFC 2104, código de autentificación de mensajes


en clave-hash. El algoritmo toma como entrada dos cadenas de bytes, una clave y un mensaje.

Versión de API 2006-03-01


719
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

Para la autenticación de solicitudes en Amazon S3, use su clave de acceso secreta de AWS
(YourSecretAccessKey) como clave y la codificación en UTF-8 del StringToSign como mensaje.
El resultado del HMAC SHA1 también es una cadena de bytes, denominada resumen. El parámetro
Signature de la solicitud se construye en Base64 mediante la codificación de este resumen.

Canonicalización de solicitudes para firmas


Recuerde que cuando el sistema recibe una solicitud autenticada, compara la firma de la solicitud
computada con la firma proporcionada en la solicitud en StringToSign. Por este motivo, se debe
computar la firma utilizando el mismo método que use Amazon S3. Al proceso de poner una solicitud en
una forma acordada para la firma se le denomina canonicalización.

Construcción del elemento CanonicalizedResource


CanonicalizedResource representa el recurso de Amazon S3 objetivo de la solicitud. Debe construirlo
para adaptarlo a una solicitud REST de la siguiente forma:

Proceso de lanzamiento

1 Comience por una cadena vacía ("").

2 Si la solicitud especifica un bucket con el encabezado del host HTTP (estilo de alojamiento virtual),
adjunte el nombre del bucket precedido por un "/" (por ejemplo, "/nombredelbucket"). Para
las solicitudes con estilo de ruta y las solicitudes que no se dirigen a un bucket, no haga nada.
Para obtener más información acerca de las solicitudes de estilo de alojamiento virtual, consulte
Alojamiento virtual de buckets (p. 46).

Para la solicitud de estilo de alojamiento virtual "https://johnsmith.s3.amazonaws.com/photos/


puppy.jpg", el CanonicalizedResource es "/johnsmith".

Para la solicitud de estilo de ruta "https://s3.amazonaws.com/johnsmith/photos/puppy.jpg", el


CanonicalizedResource es "".

3 Adjunte la parte de la ruta del URI de la solicitud HTTP sin descodificar, hasta la cadena de la
consulta, sin incluirla.

Para la solicitud de estilo de alojamiento virtual "https://johnsmith.s3.amazonaws.com/photos/


puppy.jpg", el CanonicalizedResource es "/johnsmith/photos/puppy.jpg".

Para la solicitud de estilo de ruta "https://s3.amazonaws.com/johnsmith/photos/puppy.jpg",


el CanonicalizedResource es "/johnsmith/photos/puppy.jpg". En este punto, el
CanonicalizedResource es el mismo tanto para la solicitud de estilo de alojamiento virtual como
para la de estilo de ruta.

Para una solicitud que no se dirija a un bucket, como GET Service, adjunte "/".

4 Si la solicitud va destinada a un subrecurso, como ?versioning, ?location, ?acl, ?


torrent, ?lifecycle o ?versionid, adjunte el subrecurso, su valor (si lo tiene) y el signo de
interrogación. Tenga en cuenta que, en caso de que haya varios subrecursos, estos deben estar
ordenados lexicográficamente por el nombre del subrecurso y separados por "&". Por ejemplo: ?
acl&versionId=valor.

Los subrecursos que se deben incluir al construir el elemento CanonicalizedResource son: acl,
lifecycle, location, logging, notification, partNumber, policy, requestPayment, torrent, uploadId,
uploads, versionId, versioning, versions y website.

Si la solicitud especifica parámetros de la cadena de consulta que sobrescriban a los valores del
encabezado de respuesta (véase Get Object), adjunte los parámetros de la cadena de consulta
y sus valores. Al firmar no estará codificando estos valores. Sin embargo, al realizar la solicitud,

Versión de API 2006-03-01


720
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

debe codificar estos valores de parámetros. Los parámetros de la cadena de consulta en una
solicitud GET incluyen response-content-type, response-content-language, response-
expires, response-cache-control, response-content-disposition y response-
content-encoding.

El parámetro de la cadena de consulta delete debe incluirse al crear el CanonicalizedResource


para una solicitud de eliminación de varios objetos.

Los elementos del CanonicalizedResource que provienen del URI de la solicitud HTTP deben firmarse
literalmente según aparecen en la solicitud HTTP, incluidos los caracteres meta de codificación de la URL.

El CanonicalizedResource podría ser diferente del URI de la solicitud HTTP. En particular, si su


solicitud usa el encabezado HTTP Host para especificar un bucket, el bucket no aparecerá en el URI
de la solicitud HTTP. Sin embargo, el CanonicalizedResource seguirá incluyendo el bucket. Los
parámetros de la cadena de consulta podrían aparecer también en el URI de la solicitud, pero no están
incluidos en el CanonicalizedResource. Para obtener más información, consulte Alojamiento virtual de
buckets (p. 46).

Construcción del elemento CanonicalizedAmzHeaders


Para construir la parte de CanonicalizedAmzHeaders de StringToSign, seleccione todos los
encabezados de las solicitudes HTTP que comiencen por "x-amz" (con una comparación que no distinga
mayúsculas y minúsculas) y emplee el siguiente proceso.

Proceso de CanonicalizedAmzHeaders

1 Convierta cada nombre de encabezado HTTP a minúsculas. Por ejemplo, "X-Amz-Date" se ha


de convertir en "x-amz-date".

2 Ordene la colección de encabezados lexicográficamente por nombre de encabezado.

3 Combine los campos de encabezado que tengan el mismo nombre en un par de encabezados
"nombre-de-encabezado:lista-de-valores-separados-por-comas" según se indica en la RFC 2616,
sección 4.2, sin espacios entre los valores. Por ejemplo, dos encabezados de metadatos "x-
amz-meta-username: fred" y "x-amz-meta-username: barney" se combinarían en el
encabezado único "x-amz-meta-username: fred,barney".

4 "Desdoble" los encabezados largos que ocupen varias líneas (según lo permite la RFC 2616,
sección 4.2) sustituyendo el espacio de desdoble (incluida la línea nueva) por un espacio único.

5 Elimine los espacios que haya en torno a los dos puntos del encabezado. Por ejemplo, el
encabezado "x-amz-meta-username: fred,barney" se convertiría en "x-amz-meta-
username:fred,barney".

6 Por último, adjunte un nuevo carácter (U+000A) a cada encabezado canonicalizado de la lista
resultante. Construye el elemento CanonicalizedResource concatenando todos los encabezados
de esta lista en una cadena única.

Elementos StringToString de los encabezados HTTP:


posicionales y denominados
Los primeros elementos del encabezado de StringToSign (Content-Type, Date y Content-MD5) tienen
naturaleza posicional. StringToSign no incluye los nombres de estos encabezados, solo sus valores
procedentes de la solicitud. Por contraste, los elementos "x-amz-" son denominados. Tanto los nombres
como los valores de los encabezados aparecen en StringToSign.

Versión de API 2006-03-01


721
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

Si un encabezado posicional al que se llama en la definición de StringToSign no está presente en su


solicitud (por ejemplo, Content-Type o Content-MD5 son opcionales para las solicitudes PUT y no
significativos para la solicitudes GET), sustituya la cadena vacía ("") para dicha posición.

Requisitos de marca temporal


Una marca temporal válida (en la que se use el encabezado HTTP Date o una alternativa x-amz-date)
es obligatoria para las solicitudes autenticadas. Además, la marca temporal del cliente incluida en una
solicitud autenticada debe estar en el intervalo de 15 minutos del momento, según la hora del sistema de
Amazon S3 en el que se recibe la solicitud. En caso contrario, ocurrirá un error en la solicitud y recibirá
el código de error RequestTimeTooSkewed. El objetivo de estas restricciones es limitar la posibilidad
de que las solicitudes interceptadas pudieran ser reproducidas por un adversario. Para implementar
una protección más sólida ante el acceso no autorizado, use el transporte HTTPS para solicitudes
autenticadas.
Note

La limitación de validación con la fecha de solicitud solo se aplica a las solicitudes autenticadas
en las que no se use la autenticación por cadena de consulta. Para obtener más información,
consulte Alternativa de autenticación por cadena de consulta para solicitudes (p. 726).

Algunas bibliotecas de cliente HTTP no permiten configurar el encabezado Date para una solicitud.
Si encuentra problemas al incluir el valor del encabezado "Date" en los encabezados canonicalizados,
puede establecer la marca temporal de la solicitud mediante un encabezado "x-amz-date". El valor del
encabezado x-amz-date debe encontrarse en uno de los formatos RFC 2616 (http://www.ietf.org/rfc/
rfc2616.txt). Cuando hay un encabezado x-amz-date presente en una solicitud, el sistema ignorará
cualquier encabezado Date al computarla firma de la misma. Por tanto, si incluye el encabezado x-amz-
date, use la cadena vacía para Date al construir el StringToSign. Consulte la siguiente sección para
ver un ejemplo.

Ejemplos de autenticación
Los ejemplos de esta sección emplean las credenciales (no funcionales) de la siguiente tabla.

Parámetro Valor

AWSAccessKeyId AKIAIOSFODNN7EXAMPLE

AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

En el ejemplo, el formato de StringToSign no es significativo, y el \n es el punto de código Unicode U


+000A, normalmente denominado línea nueva. Además, en los ejemplos se usa "+0000" para designar la
zona horaria. También puede usar "GMT" para designar la zona horaria, pero las firmas que se mostrarán
en los ejemplos serán diferentes.

Object GET
En este ejemplo se obtiene un objeto del bucket johnsmith.

Solicitud StringToSign

GET /photos/puppy.jpg HTTP/1.1 GET\n


Host: johnsmith.s3.amazonaws.com \n
Date: Tue, 27 Mar 2007 19:36:42 +0000 \n
Tue, 27 Mar 2007 19:36:42 +0000\n

Versión de API 2006-03-01


722
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

Solicitud StringToSign
Authorization: AWS /johnsmith/photos/puppy.jpg
AKIAIOSFODNN7EXAMPLE:
bWq2s1WEIj+Ydj0vQ697zp+IXMU=

Tenga en cuenta que el CanonicalizedResource incluye el nombre del bucket, pero la URI de la solicitud
HTTP no. (El encabezado del host especifica el bucket).

Object PUT
En este ejemplo se introduce un objeto en el bucket johnsmith.

Solicitud StringToSign

PUT /photos/puppy.jpg HTTP/1.1 PUT\n


Content-Type: image/jpeg \n
Content-Length: 94328 image/jpeg\n
Host: johnsmith.s3.amazonaws.com Tue, 27 Mar 2007 21:15:45 +0000\n
Date: Tue, 27 Mar 2007 21:15:45 +0000 /johnsmith/photos/puppy.jpg

Authorization: AWS AKIAIOSFODNN7EXAMPLE:


MyyxeRY7whkBe+bq8fHCL/2kKUg=

Tenga en cuenta el encabezado Content-Type en la solicitud y en el StringToSign. Tenga en cuenta


también que el Content-MD5 se deja vacío en el StringToSign, porque no aparece en la solicitud.

List
En este ejemplo se enumeran los contenidos del bucket johnsmith.

Solicitud StringToSign

GET /?prefix=photos&max-keys=50&marker=puppy HTTP/1.1 GET\n


User-Agent: Mozilla/5.0 \n
Host: johnsmith.s3.amazonaws.com \n
Date: Tue, 27 Mar 2007 19:42:41 +0000 Tue, 27 Mar 2007 19:42:41
+0000\n
Authorization: AWS AKIAIOSFODNN7EXAMPLE: /johnsmith/
htDYFYduRNen8P9ZfE/s9SuKy0U=

Tenga en cuenta la barra al final del CanonicalizedResource y la ausencia de parámetros en la cadena de


consulta.

Fetch
En este ejemplo se obtiene el subrecurso de la política de control de acceso para el bucket "johnsmith".

Solicitud StringToSign

GET /?acl HTTP/1.1 GET\n


Host: johnsmith.s3.amazonaws.com \n

Versión de API 2006-03-01


723
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

Solicitud StringToSign
Date: Tue, 27 Mar 2007 19:44:46 +0000 \n
Tue, 27 Mar 2007 19:44:46
Authorization: AWS AKIAIOSFODNN7EXAMPLE: +0000\n
c2WLPFtWHVgbEmeEG93a4cG37dM= /johnsmith/?acl

Ahora, tenga en cuenta cómo el parámetro de la cadena de consulta del subrecurso está incluido en el
CanonicalizedResource.

Delete
En este ejemplo se elimina un objeto del bucket "johnsmith" con la alternativa de estilo de ruta y el
encabezado Date.

Solicitud StringToSign

DELETE /johnsmith/photos/puppy.jpg HTTP/1.1 DELETE\n


User-Agent: dotnet \n
Host: s3.amazonaws.com \n
Date: Tue, 27 Mar 2007 21:20:27 +0000 Tue, 27 Mar 2007 21:20:26 +0000\n
/johnsmith/photos/puppy.jpg
x-amz-date: Tue, 27 Mar 2007 21:20:26 +0000
Authorization: AWS
AKIAIOSFODNN7EXAMPLE:lx3byBScXR6KzyMaifNkardMwNk=

Tenga en cuenta que hemos usado el método alternativo "x-amz-date" para especificar la fecha (porque
nuestra biblioteca de clientes, por ejemplo, nos impide establecer la fecha). En este caso, el x-amz-date
tiene prioridad sobre el encabezado Date. Por tanto, la fecha introducida en la firma ha de contener el
valor del encabezado x-amz-date.

Cargar
En este ejemplo se carga un objeto en un bucket con alojamiento virtual de estilo CNAME y con
metadatos.

Solicitud StringToSign

PUT /db-backup.dat.gz HTTP/1.1 PUT\n


User-Agent: curl/7.15.5 4gJE4saaMU4BqNR0kLY+lw==\n
Host: static.johnsmith.net:8080 application/x-download\n
Date: Tue, 27 Mar 2007 21:06:08 +0000 Tue, 27 Mar 2007 21:06:08 +0000\n

x-amz-acl: public-read x-amz-acl:public-read\n


content-type: application/x-download x-amz-meta-checksumalgorithm:crc32\n
Content-MD5: 4gJE4saaMU4BqNR0kLY+lw== x-amz-meta-filechecksum:0x02661779\n
X-Amz-Meta-ReviewedBy: joe@johnsmith.net x-amz-meta-reviewedby:
X-Amz-Meta-ReviewedBy: jane@johnsmith.net joe@johnsmith.net,jane@johnsmith.net\n
X-Amz-Meta-FileChecksum: 0x02661779 /static.johnsmith.net/db-backup.dat.gz
X-Amz-Meta-ChecksumAlgorithm: crc32
Content-Disposition: attachment;
filename=database.dat
Content-Encoding: gzip
Content-Length: 5913339

Authorization: AWS AKIAIOSFODNN7EXAMPLE:

Versión de API 2006-03-01


724
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

Solicitud StringToSign
ilyl83RwaSoYIEdixDQcA4OnAnc=

Tenga en cuenta cómo los encabezados "x-amz-" se ordenan, se les recortan los espacios en blanco o
se convierten en minúscula. Tenga en cuenta también que se han agrupado varios encabezados con el
mismo nombre utilizando comas para separar valores.

Tenga en cuenta que solo los encabezados de entidades HTTP Content-Type y Content-MD5
aparecen en el StringToSign. El resto de encabezados de entidades Content-* no aparecen.

Además, tenga en cuenta que el CanonicalizedResource incluye el nombre del bucket, pero el URI de
la solicitud HTTP no lo incluye. (El encabezado del host especifica el bucket).

List All My Buckets

Solicitud StringToSign

GET / HTTP/1.1 GET\n


Host: s3.amazonaws.com \n
Date: Wed, 28 Mar 2007 01:29:59 +0000 \n
Wed, 28 Mar 2007 01:29:59
Authorization: AWS +0000\n
AKIAIOSFODNN7EXAMPLE:qGdzdERIC03wnaRNKh6OqZehG9s= /

Unicode Keys

Solicitud StringToSign

GET /dictionary/fran%C3%A7ais/pr%c3%a9f GET\n


%c3%a8re HTTP/1.1 \n
Host: s3.amazonaws.com \n
Date: Wed, 28 Mar 2007 01:49:49 +0000 Wed, 28 Mar 2007 01:49:49 +0000\n
Authorization: AWS /dictionary/fran%C3%A7ais/pr%c3%a9f
AKIAIOSFODNN7EXAMPLE:DNEZGsoieTZ92F3bUfSPQcbGmlM=
%c3%a8re

Note

Los elementos en el StringToSign que se derivaron del URI de la solicitud se toman


literalmente, incluida la codificación y capitalización de la URL.

Problemas de firma con solicitudes REST


Cuando falla la autenticación de REST, el sistema responde a la solicitud con un documento de
errores XML. La información que contiene este documento de errores tiene como objetivo ayudar a los
desarrolladores a diagnosticar el problema. En particular, el elemento StringToSign del documento
de errores SignatureDoesNotMatch le dice exactamente qué canonicalización de solicitudes está
empleando el sistema.

Algunas herramientas insertan encabezados en modo silencioso cuya existencia usted no conocía, como
la agregación del encabezado Content-Type durante un PUT. En la mayoría de estos casos, el valor del

Versión de API 2006-03-01


725
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

encabezado insertado permanece constante, con lo que podrá descubrir los encabezados faltantes con
herramientas como Ethereal o tcpmon.

Alternativa de autenticación por cadena de consulta para


solicitudes
Puede autenticar determinado tipo de solicitudes pasando la información requerida como parámetros de
una cadena de consulta, en lugar de usar el encabezado HTTP Authorization. Esto resulta útil a la
hora de habilitar el acceso directo de navegadores de terceros a sus datos de Amazon S3 privados sin
pasar la solicitud por un proxy. La idea es construir una solicitud "prefirmada" y codificarla como una URL
que pueda recuperar el navegador de un usuario final. Además, puede limitar una solicitud prefirmada
especificando una fecha de vencimiento.
Note

Para ver ejemplos de cómo usar los SDK de AWS para generar URL prefirmadas, consulte
Compartir un objeto con otros (p. 179).

Creación de una firma


A continuación figura un ejemplo de una solicitud REST de Amazon S3 autenticada por cadena de
consulta.

GET /photos/puppy.jpg
?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Expires=1141889120&Signature=vjbyPxybdZaNmGa
%2ByT272YEAiv4%3D HTTP/1.1
Host: johnsmith.s3.amazonaws.com
Date: Mon, 26 Mar 2007 19:37:58 +0000

El método de autenticación de solicitudes con cadena de consulta no requiere ningún encabezado HTTP
especial. Los elementos de autenticación necesarios se especifican como parámetros de la cadena de
consulta:

Nombre del Ejemplo de valor Descripción


parámetro de
la cadena de
consulta

AWSAccessKeyId AKIAIOSFODNN7EXAMPLE Su ID de clave de acceso de AWS.


Especifica la clave de acceso secreta
de AWS utilizada para firmar la solicitud
e, indirectamente, al desarrollador que
realiza la solicitud.

Expires 1141889120 El momento de vencimiento de la


firma, especificado como el número
de segundos a partir de la fecha de
inicio (00:00:00 UTC del 1 de enero de
1970). Cualquier solicitud recibida con
posterioridad a este momento (según el
servidor) será rechazada.

Signature vjbyPxybdZaNmGa La codificación URL de la codificación


%2ByT272YEAiv4%3D Base64 del HMAC SHA1 de
StringToSign.

Versión de API 2006-03-01


726
Amazon Simple Storage Service Guía del desarrollador
Firma y autenticación de solicitudes REST

El método de autenticación de solicitudes con cadena de consulta difiere levemente del método ordinario,
pero solo en el formato del parámetro de la solicitud Signature y el elemento StringToSign. A
continuación presentamos pseudogramática que ilustra el método de autenticación de solicitudes por
cadena de consulta.

Signature = URL-Encode( Base64( HMAC-SHA1( YourSecretAccessKey, UTF-8-Encoding-


Of( StringToSign ) ) ) );

StringToSign = HTTP-VERB + "\n" +


Content-MD5 + "\n" +
Content-Type + "\n" +
Expires + "\n" +
CanonicalizedAmzHeaders +
CanonicalizedResource;

YourSecretAccessKey es la ID clave de acceso secreta de AWS que le asigna Amazon cuando inicia
sesión para ser un desarrollador de Amazon Web Services. Tenga en cuenta que la Signature está
codificada en formato de URL para que se pueda colocar en la cadena de consulta. Tenga en cuenta
también que, en StringToSign, el elemento posicional HTTP Date ha sido sustituido por Expires. El
CanonicalizedAmzHeaders y el CanonicalizedResource son iguales.
Note

En el método de autenticación por cadena de consulta, no utilice el encabezado Date ni x-amz-


date request al calcular la cadena para firmar.

Autenticación por cadena de consulta para solicitudes

Solicitud StringToSign

GET /photos/puppy.jpg? GET\n


AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE& \n
Signature=NpgCjnDzrM \n
%2BWFzoENXmpNDUsSn8%3D& 1175139620\n
Expires=1175139620 HTTP/1.1
/johnsmith/photos/puppy.jpg
Host: johnsmith.s3.amazonaws.com

Suponemos que, cuando un navegador realiza la solicitud GET, no facilitará un encabezado Content-MD5
ni Content-Type, ni tampoco creará encabezados x-amz-, por lo que esas partes de StringToSign se
dejan vacías.

Uso de codificación Base64

Las firmas de solicitudes HMAC deben tener codificación Base64. La codificación Base64 convierte la
firma en una cadena ASCII sencilla que se puede adjuntar a la solicitud. Los caracteres que podrían
aparecer en la cadena de firma, como más (+), barra inclinada (/) e igual (=) deben estar codificados si se
usan en un URI. Por ejemplo, si el código de autenticación incluye un signo más (+), codifíquelo como %2B
en la solicitud. Las barras inclinadas se codifican como %2F, y los signos de igual, como %3D.

Para ver más ejemplos de codificación en Base64, consulte los Ejemplos de autenticación (p. 722) de
Amazon S3.

Versión de API 2006-03-01


727
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Cargas basadas en el navegador con POST (AWS


Signature Version 2)
Amazon S3 admite POST, que le permite a los usuarios cargar contenido directamente en Amazon S3.
POST está diseñado para simplificar las cargas, reducir la latencia de las cargas y ahorrar dinero en
aplicaciones que los usuarios utilizan para cargar datos y guardarlos en Amazon Amazon S3.
Note

La autenticación de solicitud que se analiza en esta sección se basa en AWS Signature Version 2,
un protocolo para autenticar solicitudes de API entrantes para los servicios de AWS.
Amazon S3 ahora admite Signature Version 4, un protocolo para autenticar solicitudes de API
entrantes en servicios de AWS, en todas las regiones de AWS. En este momento, las regiones de
AWS creadas antes del 30 de enero de 2014 seguirán admitiendo el protocolo anterior, Signature
Version 2. Cualquier región nueva después del 30 de enero de 2014 solo admitirá Signature
Version 4, y por lo tanto, todas las solicitudes de esas regiones se deben realizar con Signature
Version 4. Para obtener más información, consulte la sección sobre solicitudes de autenticación
en cargas basadas en el navegador con POST (AWS Signature Version 4) en la Amazon Simple
Storage Service API Reference.

En la siguiente figura se muestra una carga con POST de Amazon S3.

Carga con POST

1 El usuario abre un navegador web y obtiene acceso a su página web.

2 Su página web incluye un formulario HTTP que contiene toda la información necesaria para
que el usuario pueda cargar contenido en Amazon S3.

3 El usuario carga contenido directamente en Amazon S3.

Versión de API 2006-03-01


728
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Note
POST no admite la autenticación por query string.

Formularios HTML (AWS Signature Version 2)


Temas
• Codificación de formulario HTML (p. 729)
• Declaración de formulario HTML (p. 730)
• Campos de formulario HTML (p. 730)
• Construcción de la política (p. 733)
• Creación de una firma (p. 736)
• Redireccionamiento (p. 736)

Cuando se comunica con Amazon S3, por lo general utiliza la API de REST o SOAP para realizar
operaciones como PUT, GET, DELETE, y otras. Con POST, los usuarios cargan datos directamente en
Amazon S3 a través de sus navegadores, que no pueden procesar la API SOAP ni crear una solicitud PUT
de REST.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.

Para que los usuarios puedan cargar contenido en Amazon S3 con sus navegadores, debe utilizar
los formularios HTML. Los formularios HTML constan de una declaración de formulario y campos de
formulario. Cada declaración de formulario incluye información de alto nivel acerca de la solicitud. Los
campos de formulario incluyen información detallada acerca de la solicitud, así como la política que se
utiliza para autenticarla y asegurar que cumpla con las condiciones que usted especifica.
Note
Los datos y límites del formulario (sin incluir los contenidos del archivo) no pueden exceder los
20 KB.

En esta sección se explica cómo utilizar los formularios HTML.

Codificación de formulario HTML


El formulario y la política deben estar cifrados con UTF-8. Para aplicar la codificación UTF-8 en el
formulario puede especificarlo en el encabezado HTML o como un encabezado de solicitud.
Note
La declaración de formulario HTML no acepta parámetros de autenticación por query string.

A continuación, mostramos un ejemplo de la codificación UTF-8 en el encabezado HTML:

<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>

A continuación, se muestra un ejemplo de la codificación UTF-8 en un encabezado de solicitud:

Versión de API 2006-03-01


729
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Content-Type: text/html; charset=UTF-8

Declaración de formulario HTML


La declaración de formulario tiene tres componentes: la acción, el método y el tipo de documento adjunto.
Si cualquiera de estos valores se configura de manera inadecuada, la solicitud falla.

La acción especifica el URL que procesa la solicitud, que debe establecerse en el URL del bucket. Por
ejemplo, si el nombre de su bucket es “johnsmith”, el URL es “http://johnsmith.s3.amazonaws.com/”.
Note

El nombre de clave se especifica en un campo de formulario.

El método debe ser POST.

Se debe especificar el tipo de documento adjunto (enctype) y se debe establecer en datos de formulario/
multiparte para cargas de archivos y cargas de área de texto. Para obtener más información, visite RFC
1867.

Example

El siguiente ejemplo es una declaración de formulario para el bucket “johnsmith”.

<form action="http://johnsmith.s3.amazonaws.com/" method="post"

enctype="multipart/form-data">

Campos de formulario HTML


En la siguiente tabla se describen los campos que se pueden utilizar en un formulario HTML.
Note

La variable ${filename} se reemplaza automáticamente con el nombre del archivo provisto


por el usuario y es reconocida por todos los campos de formulario. Si el navegador o el cliente
proporciona una ruta total o parcial al archivo, solo se utilizará el texto después de la última barra
inclinada (/) o barra inversa (\). Por ejemplo, “C:\Program Files\directory1\file.txt” se interpretará
como “file.txt”. Si no se brinda ningún archivo o nombre de archivo, la variable se reemplaza con
una cadena vacía.

Nombre del campo Descripción Obligatorio

AWSAccessKeyId El ID de clave de acceso de AWS del propietario Condicional


del bucket que otorga un acceso de usuario
anónimo para una solicitud que cumple con el
conjunto de restricciones en la política. Este
campo es obligatorio si la solicitud incluye un
documento de política.

acl Una Access Control List (ACL, Lista de control No


de acceso) de Amazon S3. Si se especifica una
lista de control de acceso no válida, se genera un
error. Para obtener más información acerca de las
ACL, consulte Listas de control de acceso (p. 7).

Tipo: String

Versión de API 2006-03-01


730
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Nombre del campo Descripción Obligatorio


Valor predeterminado: privado

Valid Values: private | public-read |


public-read-write | aws-exec-read |
authenticated-read | bucket-owner-
read | bucket-owner-full-control

Cache-Control, Content- Encabezados específicos de REST. Para obtener No


Type, Content- más información, consulte PUT Object.
Disposition, Content-
Encoding, Expires

key El nombre de la clave cargada. Sí

Para utilizar el nombre de archivo provisto por el


usuario, utilice la variable ${filename}. Por ejemplo
si la usuaria Betty carga el archivo lolcatz.jpg y
usted especifica /user/betty/${filename}, el archivo
se guarda como /user/betty/lolcatz.jpg.

Para obtener más información, consulte Clave y


metadatos de objetos (p. 105).

policy Política de seguridad que describe qué está No


permitido en la solicitud. Las solicitudes sin una
política de seguridad se consideran anónimas
y solo se aceptarán en buckets que se pueden
escribir públicamente.

success_action_redirect, URL a la que el cliente es redirigido después de No


redirect la carga exitosa. Amazon S3 adjunta a la URL
el bucket, la clave y los valores de la etag como
parámetros de cadena de consulta.

Si no se especifica el campo
success_action_redirect, Amazon S3 devuelve
el tipo de documento vacío especificado en el
campo success_action_status.

Si Amazon S3 no puede interpretar el URL, ignora


el campo.

Si la carga falla, Amazon S3 muestra un error y no


redirige al usuario a un URL.

Para obtener más información, consulte


Redireccionamiento (p. 736).
Note

El nombre de campo de redirección es


obsoleto y el soporte para el nombre de
campo de redirección se eliminará en el
futuro.

Versión de API 2006-03-01


731
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Nombre del campo Descripción Obligatorio

success_action_status El código de estado que recibe el cliente después No


de la carga exitosa si no se especifica el campo
success_action_redirect.

Los valores válidos son 200, 201 o 204


(predeterminado).

Si el valor se establece en 200 o 204, Amazon S3


devuelve un documento vacío con un código de
estado 200 o 204.

Si el valor se establece en 201, Amazon S3


devuelve un documento XML con un código de
estado 201. Para obtener información acerca del
contenido del documento XML, consulte POST
Object.

Si el valor no se establece o si se establece


en un valor no válido, Amazon S3 devuelve un
documento vacío con un código de estado 204.
Note

Algunas versiones de Adobe Flash


Player no controlan debidamente
las respuestas HTTP con un cuerpo
vacío. Para admitir cargas con Adobe
Flash, recomendamos establecer
success_action_status en 201.

signature La firma HMAC que se crea con la clave Condicional


de acceso secreta que corresponde al
AWSAccessKeyId provisto. Este campo es
obligatorio si se incluye un documento de política
en la solicitud.

Para obtener más información, consulte la sección


sobre el uso de la autenticación de acceso.

x-amz-security-token Un token de seguridad utilizado por las No


credenciales de sesión

Si la solicitud utiliza Amazon DevPay, se


requieren dos campos de formulario x-amz-
security-token: uno para el token de producto
y otro para el token de usuario.

Si la solicitud utiliza credenciales de sesión,


se requiere un formulario x-amz-security-
token. Para obtener más información, consulte
Credenciales de seguridad temporales en la Guía
del usuario de IAM.

Versión de API 2006-03-01


732
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Nombre del campo Descripción Obligatorio

Otros nombres de archivo con Metadatos especificados por el usuario. No


prefijos x-amz-meta-
Amazon S3 no valida ni utiliza estos datos.

Para obtener más información, consulte PUT


Object.

file Contenido de texto o archivo. Sí

El archivo o el contenido debe ser el último campo


en el formulario. Cualquier campo debajo de estos
se ignora.

No puede cargar más de un archivo a la vez.

Construcción de la política
Temas
• Expiration (p. 733)
• Condiciones (p. 734)
• Coincidencia de condiciones (p. 735)
• Secuencia de escape de caracteres (p. 735)

La política es un documento JSON con codificación UTF-8 y Base64 que especifica las condiciones que
debe cumplir la solicitud, y se utiliza para autenticar el contenido. Según cómo diseñe sus documentos de
política, puede utilizarlos por carga, por usuario, para todas las cargas o de acuerdo con otros diseños que
se ajusten a sus necesidades.
Note

Si bien el documento de política es opcional, lo recomendamos ampliamente en lugar de hacer un


bucket que se pueda escribir públicamente.

A continuación se muestra el ejemplo de un documento de política:

{ "expiration": "2007-12-01T12:00:00.000Z",

"conditions": [

{"acl": "public-read" },

{"bucket": "johnsmith" },

["starts-with", "$key", "user/eric/"],

El documento de política incluye los vencimientos y las condiciones.

Expiration
El elemento de vencimiento especifica la fecha de vencimiento de la política en el formato de fecha
según la norma ISO 8601 en Universal Time Coordinated (UTC, Hora universal coordinada). Por ejemplo,

Versión de API 2006-03-01


733
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

“2007-12-01T12:00:00.000Z” especifica que la política no es válida después de la medianoche, UTC, del


01/12/2007. El vencimiento es obligatorio en una política.

Condiciones
Las condiciones en el documento de política validan los contenidos del objeto cargado. Cada campo de
formulario que especifica en el formulario (salvo AWSAccessKeyId, firma, archivo, política y nombres de
archivos que tienen un prefijo x-ignore-) se debe incluir en la lista de condiciones.
Note
Si tiene varios campos con el mismo nombre, los valores deben estar separados por comas. Por
ejemplo, si tiene dos campos denominados “x-amz-meta-tag” y el primero tiene el valor “Ninja” y el
segundo tiene el valor “Stallman”, configurará el documento de política como Ninja,Stallman.
Todas las variables en el formulario se expanden antes de que la política se valide. Por lo tanto,
se deben realizar todas las coincidencias de condiciones con respecto a los campos expandidos.
Por ejemplo, si configuró el campo de clave en user/betty/${filename}, su política
puede ser [ "starts-with", "$key", "user/betty/" ]. No escriba [ "starts-
with", "$key", "user/betty/${filename}" ]. Para obtener más información, consulte
Coincidencia de condiciones (p. 735).

En la siguiente tabla se describen las condiciones de los documentos de política.

Nombre del elemento Descripción

acl Especifica las condiciones que debe cumplir la ACL.

Admite las coincidencias exactas y starts-with.

content-length-range Especifica el tamaño mínimo y máximo permitido para el


contenido cargado.

Admite la coincidencia de rango.

Cache-Control, Content-Type, Encabezados específicos de REST.


Content-Disposition, Content-
Encoding, Expires Admite las coincidencias exactas y starts-with.

clave El nombre de la clave cargada.

Admite las coincidencias exactas y starts-with.

success_action_redirect, redirect URL al que el cliente es redirigido después de la carga exitosa.

Admite las coincidencias exactas y starts-with.

success_action_status El código de estado que recibe el cliente después de la carga


exitosa si no se especifica el campo success_action_redirect.

Admite las coincidencias exactas.

x-amz-security-token Token de seguridad de Amazon DevPay.

Cada solicitud que utiliza Amazon DevPay requiere dos


campos de formulario x-amz-security-token: uno para
el token de producto y otro para el token de usuario. Como
consecuencia, los valores deben estar separados por comas.
Por ejemplo, si el token de usuario es eW91dHViZQ== y
el token del producto es b0hnNVNKWVJIQTA=, establece
la entrada de política en { "x-amz-security-token":
"eW91dHViZQ==,b0hnNVNKWVJIQTA=" }.

Versión de API 2006-03-01


734
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Nombre del elemento Descripción

Otros nombres de archivo con Metadatos especificados por el usuario.


prefijos x-amz-meta-
Admite las coincidencias exactas y starts-with.

Note

Si su conjunto de herramientas añade campos adicionales (p. ej., Flash añade el nombre de
archivo), debe añadirlos al documento de política. Si puede controlar esta funcionalidad, añada
el prefijo x-ignore- al campo para que Amazon S3 haga caso omiso de la característica y no
afecte a futuras versiones de esta característica.

Coincidencia de condiciones

En la siguiente tabla se describen los tipos de coincidencias de condiciones. Si bien debe especificar
una condición para cada campo de formulario que especifica en el formulario, puede crear criterios de
coincidencia más complejos especificando varias condiciones para un campo de formulario.

Condición Descripción

Coincidencias Las coincidencias exactas verifican que los campos coincidan con valores
exactas específicos. En este ejemplo se indica que la ACL se debe establecer en public-read:

{"acl": "public-read" }

Este ejemplo es una alternativa para indicar que la ACL se debe establecer en public-
read:

[ "eq", "$acl", "public-read" ]

Empieza por Si el valor debe empezar con un valor determinado, utilice starts-with. En este
ejemplo se indica que la clave debe empezar con user/betty:

["starts-with", "$key", "user/betty/"]

Coincidencia Para configurar la política para permitir cualquier contenido dentro de un campo,
con cualquier utilice starts-with con un valor vacío. Este ejemplo permite cualquier campo
contenido success_action_redirect:

["starts-with", "$success_action_redirect", ""]

Especificación Para campos que aceptan rangos, separe los rangos superiores e inferiores con una
de rangos coma. Este ejemplo permite un tamaño de archivo de 1 a 10 megabytes:

["content-length-range", 1048579, 10485760]

Secuencia de escape de caracteres

En la siguiente tabla se describen los caracteres a los que se debe aplicar una secuencia de escape en un
documento de política.

Versión de API 2006-03-01


735
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Secuencia Descripción
de escape

\\ Barra inversa

\$ Signo de dólar

\b Retroceso

\f Salto de página

\n Nueva línea

\r Salto de línea

\t Tabulador horizontal

\v Tabulador vertical

\uxxxx Todos los caracteres Unicode

Creación de una firma

Paso Descripción

1 Codifique la política con UTF-8.

2 Codifique los bytes de UTF-8 con Base64.

3 Firme la política con su clave de acceso secreta mediante el uso del algoritmo HMAC
SHA-1.

4 Codifique la firma de SHA-1 con Base64.

Para obtener información general acerca de la autenticación, consulte la sección sobre el uso de la
autenticación de acceso.

Redireccionamiento
En esta sección se describe cómo administrar los direccionamientos.

Redireccionamiento general

Al finalizar la solicitud POST, el usuario es redirigido a la ubicación que especificó en el campo


success_action_redirect. Si Amazon S3 no puede interpretar la URL, hace caso omiso del campo
success_action_redirect.

Si no se especifica el campo success_action_redirect, Amazon S3 devuelve el tipo de documento


vacío especificado en el campo success_action_status.

Si la solicitud POST falla; Amazon S3 muestra un error y no proporciona una redirección.

Redireccionamiento de carga previa

Si su bucket se creó con <CreateBucketConfiguration>, sus usuarios finales pueden necesitar una
redirección. Si esto sucede, algunos navegadores pueden administrar la redirección de manera incorrecta.

Versión de API 2006-03-01


736
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Esto es relativamente poco frecuente, pero es muy probable que suceda inmediatamente después de que
se crea un bucket.

Ejemplos de carga (AWS Signature Version 2)


Temas
• Carga de archivo (p. 737)
• Carga de área de texto (p. 739)

Note

La autenticación de solicitud que se analiza en esta sección se basa en AWS Signature Version 2,
un protocolo para autenticar solicitudes de API entrantes para los servicios de AWS.
Amazon S3 ahora admite Signature Version 4, un protocolo para autenticar solicitudes de API
entrantes en servicios de AWS, en todas las regiones de AWS. En este momento, las regiones de
AWS creadas antes del 30 de enero de 2014 seguirán admitiendo el protocolo anterior, Signature
Version 2. Cualquier región nueva después del 30 de enero de 2014 solo admitirá Signature
Version 4, y por lo tanto, todas las solicitudes de esas regiones se deben realizar con Signature
Version 4. Para obtener más información, consulte la sección de ejemplos: carga basada en
navegador con HTTP POST (con AWS Signature Version 4) en la Amazon Simple Storage
Service API Reference.

Carga de archivo
En este ejemplo se muestra el proceso completo para crear una política y un formulario que se puede
utilizar para cargar un archivo adjunto.

Creación de política y formulario

La siguiente política admite cargas a Amazon S3 para el bucket johnsmith.

{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "johnsmith"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "http://johnsmith.s3.amazonaws.com/
successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}

Esta política requiere lo siguiente:

• La carga se debe realizar el 1 de diciembre de 2007 antes de las 12:00 UTC.


• El contenido se debe cargar al bucket johnsmith.
• La clave debe empezar con “user/eric/”.
• La ACL se establece en public-read.
• El campo success_action_redirect se establece en http://johnsmith.s3.amazonaws.com/
successful_upload.html.
• El objeto es un archivo de imagen.
• La etiqueta x-amz-meta-uuid se debe establecer en 14365123651274.

Versión de API 2006-03-01


737
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

• El campo x-amz-meta-tag puede incluir cualquier valor.

A continuación, se incluye una versión de esta política codificada en Base64.

eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiA

Con su credenciales, cree una firma, por ejemplo 0RavWzkygo6QX9caELEqKi9kDbU= es la firma para el
documento de política anterior.

El siguiente formulario admite una solicitud POST al bucket johnsmith.net que utiliza esta política.

<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...
<form action="http://johnsmith.s3.amazonaws.com/" method="post" enctype="multipart/form-
data">
Key to upload: <input type="input" name="key" value="user/eric/" /><br />
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="success_action_redirect" value="http://
johnsmith.s3.amazonaws.com/successful_upload.html" />
Content-Type: <input type="input" name="Content-Type" value="image/jpeg" /><br />
<input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />
Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="AWSAccessKeyId" value="AKIAIOSFODNN7EXAMPLE" />
<input type="hidden" name="Policy" value="POLICY" />
<input type="hidden" name="Signature" value="SIGNATURE" />
File: <input type="file" name="file" /> <br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
...
</html>

Solicitud de muestra
Esta solicitud asume que la imagen cargada tiene una tamaño de 117 108 bytes; los datos de la imagen no
se incluyen.

POST / HTTP/1.1
Host: johnsmith.s3.amazonaws.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115
Firefox/2.0.0.10
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=9431149156168
Content-Length: 118698

--9431149156168
Content-Disposition: form-data; name="key"

Versión de API 2006-03-01


738
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

user/eric/MyPicture.jpg
--9431149156168
Content-Disposition: form-data; name="acl"

public-read
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"

http://johnsmith.s3.amazonaws.com/successful_upload.html
--9431149156168
Content-Disposition: form-data; name="Content-Type"

image/jpeg
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-uuid"

14365123651274
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-tag"

Some,Tag,For,Picture
--9431149156168
Content-Disposition: form-data; name="AWSAccessKeyId"

AKIAIOSFODNN7EXAMPLE
--9431149156168
Content-Disposition: form-data; name="Policy"

eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiA
--9431149156168
Content-Disposition: form-data; name="Signature"

0RavWzkygo6QX9caELEqKi9kDbU=
--9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"
Content-Type: image/jpeg

...file content...
--9431149156168
Content-Disposition: form-data; name="submit"

Upload to Amazon S3
--9431149156168--

Respuesta de ejemplo

HTTP/1.1 303 Redirect


x-amz-request-id: 1AEE782442F35865
x-amz-id-2: cxzFLJRatFHy+NGtaDFRR8YvI9BHmgLxjvJzNiGGICARZ/mVXHj7T+qQKhdpzHFh
Content-Type: application/xml
Date: Wed, 14 Nov 2007 21:21:33 GMT
Connection: close
Location: http://johnsmith.s3.amazonaws.com/successful_upload.html?
bucket=johnsmith&key=user/eric/
MyPicture.jpg&etag=&quot;39d459dfbc0faabbb5e179358dfb94c3&quot;
Server: AmazonS3

Carga de área de texto


Temas
• Creación de política y formulario (p. 740)
• Solicitud de muestra (p. 741)

Versión de API 2006-03-01


739
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

• Respuesta de ejemplo (p. 742)

En el siguiente ejemplo se muestra el proceso completo para crear una política y un formulario para cargar
un área de texto. Cargar un área de texto es útil para presentar contenido creado por el usuario, como
publicaciones de blog.

Creación de política y formulario

La siguiente política admite cargas de área de texto a Amazon S3 para el bucket johnsmith.

{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "johnsmith"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "http://johnsmith.s3.amazonaws.com/new_post.html"},
["eq", "$Content-Type", "text/html"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}

Esta política requiere lo siguiente:

• La carga se debe realizar antes de las 12:00 GMT del 01/12/2007.


• El contenido se debe cargar al bucket johnsmith.
• La clave debe empezar con “user/eric/”.
• La ACL se establece en public-read.
• El campo success_action_redirect se establece en http://johnsmith.s3.amazonaws.com/new_post.html.
• El objeto es un texto HTML.
• La etiqueta x-amz-meta-uuid se debe establecer en 14365123651274.
• El campo x-amz-meta-tag puede incluir cualquier valor.

A continuación, se incluye una versión de esta política codificada en Base64.

eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXR
pb25zIjogWwogICAgeyJidWNrZXQiOiAiam9obnNtaXRoIn0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci9lcmljLy
LAogICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwKICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2pvaG5zbWl
C5zMy5hbWF6b25hd3MuY29tL25ld19wb3N0Lmh0bWwifSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJ0ZXh0L2h0bWwiXSwK
CAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiR4LWFtei1tZXRhLXRh
IsICIiXQogIF0KfQo=

Con sus credenciales, cree una firma. Por ejemplo, qA7FWXKq6VvU68lI9KdveT1cWgF= es la firma para
el documento de política anterior.

El siguiente formulario admite una solicitud POST al bucket johnsmith.net que utiliza esta política.

<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...

Versión de API 2006-03-01


740
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

<form action="http://johnsmith.s3.amazonaws.com/" method="post" enctype="multipart/form-


data">
Key to upload: <input type="input" name="key" value="user/eric/" /><br />
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="success_action_redirect" value="http://
johnsmith.s3.amazonaws.com/new_post.html" />
<input type="hidden" name="Content-Type" value="text/html" />
<input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />
Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="AWSAccessKeyId" value="AKIAIOSFODNN7EXAMPLE" />
<input type="hidden" name="Policy" value="POLICY" />
<input type="hidden" name="Signature" value="SIGNATURE" />
Entry: <textarea name="file" cols="60" rows="10">

Your blog post goes here.

</textarea><br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
...
</html>

Solicitud de muestra

Esta solicitud asume que la imagen cargada tiene una tamaño de 117 108 bytes; los datos de la imagen no
se incluyen.

POST / HTTP/1.1
Host: johnsmith.s3.amazonaws.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115
Firefox/2.0.0.10
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=178521717625888
Content-Length: 118635

-178521717625888
Content-Disposition: form-data; name="key"

ser/eric/NewEntry.html
--178521717625888
Content-Disposition: form-data; name="acl"

public-read
--178521717625888
Content-Disposition: form-data; name="success_action_redirect"

http://johnsmith.s3.amazonaws.com/new_post.html
--178521717625888
Content-Disposition: form-data; name="Content-Type"

text/html
--178521717625888
Content-Disposition: form-data; name="x-amz-meta-uuid"

14365123651274
--178521717625888
Content-Disposition: form-data; name="x-amz-meta-tag"

Versión de API 2006-03-01


741
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Interesting Post
--178521717625888
Content-Disposition: form-data; name="AWSAccessKeyId"

AKIAIOSFODNN7EXAMPLE
--178521717625888
Content-Disposition: form-data; name="Policy"
eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiA

--178521717625888
Content-Disposition: form-data; name="Signature"

qA7FWXKq6VvU68lI9KdveT1cWgF=
--178521717625888
Content-Disposition: form-data; name="file"

...content goes here...


--178521717625888
Content-Disposition: form-data; name="submit"

Upload to Amazon S3
--178521717625888--

Respuesta de ejemplo

HTTP/1.1 303 Redirect


x-amz-request-id: 1AEE782442F35865
x-amz-id-2: cxzFLJRatFHy+NGtaDFRR8YvI9BHmgLxjvJzNiGGICARZ/mVXHj7T+qQKhdpzHFh
Content-Type: application/xml
Date: Wed, 14 Nov 2007 21:21:33 GMT
Connection: close
Location: http://johnsmith.s3.amazonaws.com/new_post.html?bucket=johnsmith&key=user/eric/
NewEntry.html&etag=40c3271af26b7f1672e41b8a274d28d4
Server: AmazonS3

POST con Adobe Flash


En esta sección se describe cómo utilizar POST con Adobe Flash.

Seguridad de Adobe Flash Player


De forma predeterminada, el modelo de seguridad de Adobe Flash Player les prohíbe a los usuarios de
Adobe Flash Player conectarse a servidores fuera del domino al que sirve el archivo SWF.

Para sobrescribir el valor predeterminado, debe cargar un archivo crossdomain.xml que se pueda leer
públicamente al bucket que aceptará cargas POST. A continuación se muestra un archivo crossdomain.xml
de ejemplo.

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" secure="false" />
</cross-domain-policy>

Note

Para obtener más información acerca del modelo de seguridad de Adobe Flash, visite el sitio web
de Adobe.

Versión de API 2006-03-01


742
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

La incorporación del archivo crossdomain.xml a su bucket permite que cualquier usuario de Adobe
Flash Player se conecte al archivo crossdomain.xml en su bucket; sin embargo, esto no brinda
acceso al bucket de Amazon S3 real.

Consideraciones sobre Adobe Flash


La API FileReference en Adobe Flash añade el campo de formulario Filename a la solicitud POST. Al
crear aplicaciones de Adobe Flash que se cargan a Amazon S3 con la acción de la API FileReference,
incluya la siguiente condición en su política:

['starts-with', '$Filename', '']

Algunas versiones de Adobe Flash Player no controlan debidamente las respuestas HTTP que tienen
un cuerpo vacío. Para configurar POST de manera que devuelva una respuesta que no tenga un cuerpo
vacío, establezca el campo success_action_status en 201. Amazon S3 devolverá un documento
XML con un código de estado 201. Para obtener información acerca del contenido del documento XML,
consulte POST Object. Para obtener información acerca de los campos del formulario, consulte Campos
de formulario HTML (p. 730).

Versión de API 2006-03-01


743
Amazon Simple Storage Service Guía del desarrollador

Recursos de Amazon S3
En la tabla siguiente, se enumeran los recursos relacionados que le resultarán útiles cuando trabaje con
este servicio.

Recurso Descripción

Guía de introducción a Amazon Simple La Guía de introducción proporciona un tutorial rápido del
Storage Service servicio sobre la base de un caso de uso simple.

Amazon Simple Storage Service API La Referencia de la API describe las operaciones de Amazon
Reference S3 en detalle.

Preguntas frecuentes técnicas de Las preguntas frecuentes tratan las principales preguntas
Amazon S3 planteadas por los desarrolladores sobre este producto.

Centro de recursos para desarrolladores Punto de comienzo central para buscar documentación,
de AWS ejemplos de código, notas de la versión y otra información
que le ayudará a crear aplicaciones innovadoras con AWS.

Consola de administración de AWS La consola le permite llevar a cabo la mayoría de las


funciones de Amazon S3 sin necesidad de programación.

https://forums.aws.amazon.com/ Foro de la comunidad para desarrolladores donde se tratan


aspectos técnicos relacionados con AWS.

Centro de AWS Support La página de inicio para la Asistencia técnica de AWS, que
incluye el acceso a nuestros foros de desarrollador, preguntas
técnicas frecuentes, la página de estado del servicio y
Premium Support.

AWS Premium Support Página web principal para obtener información acerca de
AWS Premium Support, un canal de soporte individualizado
y de respuesta rápida que lo ayudará a crear y ejecutar
aplicaciones en AWS Infrastructure Services.

Información del producto de Amazon S3 Página web principal con información acerca de Amazon S3.

Contacto Un punto de contacto centralizado para las consultas


relacionadas con la facturación, cuentas, eventos, abuso, etc.
de AWS.

Condiciones de uso Información detallada acerca del uso de los derechos de autor
y las marcas comerciales en Amazon.com y otros temas.

Versión de API 2006-03-01


744
Amazon Simple Storage Service Guía del desarrollador
Comando SELECT

Referencia de SQL para Select de


Amazon S3 y Select de Glacier
Esta referencia contiene una descripción de los elementos del lenguaje de consulta estructurada (SQL,
Structured Query Language) compatibles con Select de Amazon S3 y Select de Glacier.

Temas
• Comando SELECT (p. 745)
• Tipos de datos (p. 752)
• Operadores (p. 753)
• Palabras clave reservadas (p. 754)
• Funciones SQL (p. 758)

Comando SELECT
Select de Amazon S3 y Select de Glacier solo admiten el comando SQL de SELECT. Las siguientes
cláusulas del estándar ANSI son compatibles con SELECT:

• SELECT list
• Cláusula FROM
• Cláusula WHERE
• Cláusula LIMIT (solo Select de Amazon S3)

Note
Actualmente, las consultas de Select de Amazon S3 y Select de Glacier no admiten subconsultas
ni combinaciones.

Lista SELECT
La lista SELECT asigna un nombre a las columnas, funciones y expresiones que desea que devuelva la
consulta. La lista representa el resultado de la consulta.

SELECT *
SELECT projection [ AS column_alias | column_alias ] [, ...]

El primer formato con el signo * (asterisco) devuelve todas las filas que superan la cláusula WHERE, tal y
como están. El segundo formato crea una fila con una proyección de las expresiones escalares de salida
definidas por el usuario para cada columna.

Cláusula FROM
Select de Amazon S3 y Select Glacier admiten los siguientes formatos de la cláusula FROM:

FROM table_name
FROM table_name alias
FROM table_name AS alias

Versión de API 2006-03-01


745
Amazon Simple Storage Service Guía del desarrollador
Cláusula FROM

Donde table_name es un S3Object (para Select de Amazon S3) o un ARCHIVE o un OBJECT (para
Select de Glacier) que hace referencia al archivo que se está consultando. Los usuarios acostumbrados a
las bases de datos relacionales tradicionales pueden hacerse a la idea de que se trata de un esquema de
base de datos que contiene varias vistas de una tabla.

Siguiendo el código SQL estándar, la cláusula FROM crea filas que se filtran en la cláusula WHERE y se
proyectan en la lista SELECT.

Para objetos JSON almacenados en Amazon S3 Select, también puede usar las siguientes formas de la
cláusula FROM:

FROM S3Object[*].path
FROM S3Object[*].path alias
FROM S3Object[*].path AS alias

Con esta forma de la cláusula FROM, puede seleccionar de matrices u objetos dentro de un objeto JSON.
Puede especificar path, usando una de las formas siguientes:

• Por nombre (en un objeto): .name o ['name']


• Por índice (en una matriz): [index]
• Por comodín (en un objeto): .*
• Por comodín (en una matriz): [*]

Note

• Esta forma de la cláusula FROM solo funciona con objetos JSON.


• Los comodines siempre emiten al menos un registro. Si no coincide ningún registro, Amazon S3
Select emite el valor MISSING. Durante la serialización de salida (después de completar una
consulta), Amazon S3 Select sustituye los valores de MISSING por registros vacíos.
• Las funciones de agregación (AVG, COUNT, MAX, MIN y SUM) hacen caso omiso de los valores
de MISSING.
• Si no proporciona un alias cuando usa un comodín, puede referirse a la fila usando el último
elemento en la ruta. Por ejemplo, puede seleccionar todos los precios de una lista de libros
utilizando la consulta SELECT price FROM S3Object[*].books[*].price. Si la ruta
termina con un comodín en lugar de un nombre, puede usar el valor _1 para referirse a la fila.
Por ejemplo, en lugar de SELECT price FROM S3Object[*].books[*].price, podría
utilizar la consulta SELECT _1.price FROM S3Object[*].books[*].
• Amazon S3 Select siempre trata un documento JSON como una matriz de valores de nivel
raíz. Por lo tanto, incluso si el objeto JSON que está consultando solo tiene un elemento
raíz, la cláusula FROM debe comenzar con S3Object[*]. Sin embargo, por razones de
compatibilidad, Amazon S3 Select le permite omitir el comodín si no incluye una ruta. Además,
la cláusula completa FROM S3Object es equivalente a FROM S3Object[*] as S3Object.
Si incluye una ruta, también debe usar el comodín. Por lo tanto, FROM S3Object y FROM
S3Object[*].path son cláusulas válidas, pero FROM S3Object.path no.

Example

Ejemplos:

Ejemplo 1

Este ejemplo muestra resultados utilizando el conjunto de datos y la consulta siguientes:

{
"Rules": [

Versión de API 2006-03-01


746
Amazon Simple Storage Service Guía del desarrollador
Cláusula FROM

{"id": "id-1", "condition": "x < 20"},


{"condition": "y > x"},
{"id": "id-2", "condition": "z = DEBUG"}
]
},
{
"created": "June 27",
"modified": "July 6"
}

SELECT id FROM S3Object[*].Rules[*].id

{"id":"id-1"},
{},
{"id":"id-2"},
{}

Amazon S3 Select produce cada resultado por las siguientes razones:

• {"id":"id-1"}: S3Object[0].Rules[0].id produjo una coincidencia.


• {}: S3Object[0].Rules[1].id no encontró un registro coincidente, con lo que Amazon S3 Select emitió
MISSING, que se cambió a un registro vacío durante la serialización de salida y se devolvió.
• {"id":"id-2"}: S3Object[0].Rules[2].id produjo una coincidencia.
• {}: S3Object[0] no encontró un registro coincidente en Rules, con lo que Amazon S3 Select emitió
MISSING, que se cambió a un registro vacío durante la serialización de salida y se devolvió.

Si no quiere que Amazon S3 Select devuelva registros vacíos cuando no encuentre una coincidencia,
puede probar el valor MISSING. La siguiente consulta devuelve los mismos resultados que la consulta
anterior, pero con los valores vacíos omitidos:

SELECT id FROM S3Object[*].Rules[*].id WHERE id IS NOT MISSING

{"id":"id-1"},
{"id":"id-2"}

Ejemplo 2

Este ejemplo muestra resultados utilizando el conjunto de datos y las consultas siguientes:

{
"created": "936864000",
"dir_name": "important_docs",
"files": [
{
"name": "."
},
{
"name": ".."
},
{
"name": ".aws"
},
{
"name": "downloads"
}
],
"owner": "AWS S3"

Versión de API 2006-03-01


747
Amazon Simple Storage Service Guía del desarrollador
Cláusula FROM

},
{
"created": "936864000",
"dir_name": "other_docs",
"files": [
{
"name": "."
},
{
"name": ".."
},
{
"name": "my stuff"
},
{
"name": "backup"
}
],
"owner": "User"
}

SELECT d.dir_name, d.files FROM S3Object[*] d

{
"dir_name": "important_docs",
"files": [
{
"name": "."
},
{
"name": ".."
},
{
"name": ".aws"
},
{
"name": "downloads"
}
]
},
{
"dir_name": "other_docs",
"files": [
{
"name": "."
},
{
"name": ".."
},
{
"name": "my stuff"
},
{
"name": "backup"
}
]
}

SELECT _1.dir_name, _1.owner FROM S3Object[*]

Versión de API 2006-03-01


748
Amazon Simple Storage Service Guía del desarrollador
Cláusula WHERE

"dir_name": "important_docs",
"owner": "AWS S3"
},
{
"dir_name": "other_docs",
"owner": "User"
}

Cláusula WHERE
La cláusula WHERE utiliza esta sintaxis:

WHERE condition

La cláusula WHERE filtra las filas en función de una condición. Una condición es una expresión que tiene un
resultado booleano. En el resultado, solamente se devuelven las filas en las que la condición es TRUE.

Cláusula LIMIT (solo para Amazon S3 Select)


La cláusula LIMIT utiliza esta sintaxis:

LIMIT number

La cláusula LIMIT limita el número de registros que debe devolver la consulta basándose en number.
Note

Select de Glacier no admite la claúsula LIMIT.

Acceso mediante atributos


Las cláusulas SELECT y WHERE pueden referirse a los datos de los registros utilizando uno de los métodos
de las secciones siguientes, dependiendo de si el archivo que se está consultando está en formato CSV o
en formato JSON.

CSV
• Números de columnas – se puede hacer referencia a la columna n de una fila con el nombre de columna
_N, donde N es la posición de la columna. El número de posición empieza en 1. Por ejemplo, la primera
columna se denomina _1 y la segunda, _2.

Se puede hacer referencia a una columna como _N o alias._N. Por ejemplo, _2 y myAlias._2 son
formas válidas de hacer referencia a una columna en la lista SELECT y la cláusula WHERE.
• Encabezados de columna – para los objetos con formato CSV que tienen una fila de encabezado, los
encabezados están disponibles para la lista SELECT y la cláusula WHERE. En concreto, al igual que
ocurre en SQL tradicional, dentro de las expresiones de las cláusulas SELECT y WHERE, se puede hacer
referencia a las columnas mediante alias.column_name o column_name.

JSON (solo para Amazon S3 Select)


• Documento – se puede tener acceso a los campos del documento JSON como alias.name. También
se puede tener acceso a los campos anidados, como por ejemplo, alias.name1.name2.name3.
• Lista – se puede obtener acceso a los elementos de una lista JSON utilizando índices basados en
cero con el operador []. Por ejemplo, se puede obtener acceso al segundo elemento de una lista

Versión de API 2006-03-01


749
Amazon Simple Storage Service Guía del desarrollador
Distinción entre mayúsculas y minúsculas
en los nombres de atributos o encabezados

como alias[1]. El acceso a los elementos de la lista se puede combinar con campos de esta forma:
alias.name1.name2[1].name3.
• Ejemplos: considere este objeto JSON como un conjunto de datos de ejemplo:

{"name": "Susan Smith",


"org": "engineering",
"projects":
[
{"project_name":"project1", "completed":false},
{"project_name":"project2", "completed":true}
]
}

Ejemplo 1

La siguiente consulta devuelve estos resultados:

Select s.name from S3Object s

{"name":"Susan Smith"}

Ejemplo 2

La siguiente consulta devuelve estos resultados:

Select s.projects[0].project_name from S3Object s

{"project_name":"project1"}

Distinción entre mayúsculas y minúsculas en los


nombres de atributos o encabezados
Con Select de Amazon S3 y Select de Glacier puede utilizar comillas dobles para indicar que los
encabezados de columna (para los objetos CSV) y los atributos (para los objetos JSON) distinguen
entre mayúsculas y minúsculas. Sin comillas dobles, los encabezados o los atributos de los objetos no
distinguen entre mayúsculas y minúsculas. En casos de ambigüedad, se produce un error.

Los ejemplos siguientes son: 1) objetos de 1) Amazon S3 o Glacier en formato CSV con los encabezados
de columna especificados y con FileHeaderInfo establecido en "Use" (Uso) para la solicitud de
consulta; o 2) objetos de Amazon S3 en formato JSON con los atributos especificados.

Ejemplo 1: el objeto que se consulta tiene el encabezado o el atributo "NAME".

• La expresión siguiente devuelve los valores del objeto (sin comillas: sin distinción entre mayúsculas y
minúsculas):

SELECT s.name from S3Object s

• La expresión siguiente da como resultado un error 400 MissingHeaderName (comillas: distinción entre
mayúsculas y minúsculas):

SELECT s."name" from S3Object s

Versión de API 2006-03-01


750
Amazon Simple Storage Service Guía del desarrollador
Uso de palabras clave reservadas
como términos definidos por el usuario

Ejemplo 2: el objeto de Amazon S3 que se consulta tiene un encabezado o un atributo con "NAME" y otro
encabezado o atributo con "name".

• La expresión siguiente da como resultado un error 400 AmbiguousFieldName (sin comillas: sin
distinción entre mayúsculas y minúsculas, pero hay dos coincidencias):

SELECT s.name from S3Object s

• La expresión siguiente devuelve los valores del objeto (comillas: distinción entre mayúsculas y
minúsculas, por lo que resuelve la ambigüedad):

SELECT s."NAME" from S3Object s

Uso de palabras clave reservadas como términos


definidos por el usuario
Select de Amazon S3 y Select de Glacier tienen un conjunto de palabras clave reservadas que son
necesarias para ejecutar las expresiones SQL utilizadas para consultar el contenido de los objetos. Entre
estas palabras clave reservadas se incluyen nombres de funciones, tipos de datos, operadores, etc. En
algunos casos, los términos definidos por el usuario, como los encabezados de columna (para los archivos
CSV) o los atributos (para los objetos JSON), pueden entran en conflicto con una palabra clave reservada.
Cuando esto ocurre, debe utilizar comillas dobles para indicar que está utilizando deliberadamente un
término definido por el usuario que entra en conflicto con una palabra clave reservada. De lo contrario, se
producirá un error de análisis 400.

Para obtener la lista completa de las palabras clave reservadas, consulte Palabras clave
reservadas (p. 754).

El ejemplo siguiente es: 1) un objeto de Amazon S3 o Glacier en formato CSV con los encabezados de
columna especificados y con FileHeaderInfo establecido en "Use" (Uso) para la solicitud de consulta; o
2) un objeto Amazon S3 en formato JSON con los atributos especificados.

Ejemplo: el objeto que se consulta tiene el encabezado o el atributo denominado "CAST", que es una
palabra clave reservada.

• La expresión siguiente devuelve los valores del objeto correctamente (comillas: utilizar el encabezado o
el atributo definido por el usuario):

SELECT s."CAST" from S3Object s

• La expresión siguiente da como resultado un error de análisis 400 (sin comillas: conflicto con una
palabra clave reservada):

SELECT s.CAST from S3Object s

Expresiones escalares
En la cláusula WHERE y la lista SELECT, puede tener expresiones escalares de SQL, que son expresiones
que devuelven valores escalares. Tienen el siguiente formato:

• literal

Literal SQL.

Versión de API 2006-03-01


751
Amazon Simple Storage Service Guía del desarrollador
Tipos de datos

• column_reference

Referencia a una columna con el formato column_name o alias.column_name.


• unary_op expresión

Donde unary_op es un operador unario de SQL.


• expresión binary_op expresión

Donde binary_op es un operador binario de SQL.


• func_name

Donde func_name es el nombre de una función escalar que se va a invocar.


• expresión [ NOT ] BETWEEN expresión AND expresión
• expresión LIKE expresión [ ESCAPE expresión ]

Tipos de datos
Select de Amazon S3 y Select de Glacier admiten varios tipos de datos primitivos.

Conversiones de tipos de datos


Por lo general, suele seguirse la función CAST, si está definida. Si no se ha definido CAST, todos los datos
de entrada se tratarán como una cadena. Siempre que sea necesario, deberán convertirse a los tipos de
datos que correspondan.

Para obtener más información sobre la función CAST, consulte CAST (p. 760).

Tipos de datos admitidos


Select de Amazon S3 y Select de Glacier son compatibles con el siguiente conjunto de tipos de datos
primitivos.

Nombre Descripción Ejemplos

bool TRUE o FALSE FALSE

int, integer Entero con signo de 8 bytes comprendido entre 100000


-9 223 372 036 854 775 808 y 9 223 372 036 854 775 807.

string Cadena de longitud variable codificada en UTF8. El límite 'xyz'


predeterminado es de un carácter. El límite máximo de caracteres
es de 2 147 483 647.

float Número de punto flotante de 8 bits. CAST(0.456


AS FLOAT)

decimal, numeric Número en base 10, con una precisión máxima de 38 (es decir, el 123.456
número máximo de dígitos significativos), y con una escala en un
31 31
intervalo de entre -2 y 2 -1 (es decir, el exponente en base 10).

timestamp Las marcas temporales representan un momento concreto, CAST('2007-04-05T14:30Z'


siempre incluyen el desfase horario local y permiten establecer AS
una precisión arbitraria. TIMESTAMP)

Versión de API 2006-03-01


752
Amazon Simple Storage Service Guía del desarrollador
Operadores

Nombre Descripción Ejemplos


En formato de texto, las marcas temporales siguen los formatos
de fecha y hora de la notación W3C, pero deben terminar por
el literal "T" si no tienen, como mínimo, una precisión de un día
completo. Se pueden utilizar fracciones de segundo con al menos
un dígito de precisión y sin ningún límite máximo. El desfase
horario local puede representarse con el formato hora:minuto con
relación a UTC o con el literal “Z” para indicar la hora local en
UTC. Debe incluirse en las marcas temporales que contienen la
hora, pero no está permitido en los valores de fecha.

Operadores
Select de Amazon S3 y Select de Glacier son compatibles con los siguientes operadores.

Operadores lógicos
• AND
• NOT
• OR

Operadores de comparación
• <
• >
• <=
• >=
• =
• <>
• !=
• BETWEEN
• IN – Por ejemplo: IN ('a', 'b', 'c')

Operadores de coincidencia de patrones


• LIKE

Operadores matemáticos
Se admiten los operadores de suma, resta, multiplicación, división y módulo.

• +
• -
• *
• %

Versión de API 2006-03-01


753
Amazon Simple Storage Service Guía del desarrollador
Jerarquía de los operadores

Jerarquía de los operadores


En la siguiente tabla se muestra la prioridad de los operadores en orden descendente.

Operador/ Asociatividad Obligatorio


elemento

- derecha menos unario

*, /, % izquierda multiplicación,
división, módulo

+, - izquierda suma, resta

IN   pertenencia a un
conjunto

BETWEEN   limitación de
intervalos

LIKE   coincidencia
de patrones de
cadena

<>   menor que,


mayor que

= derecha igualdad,
asignación

NOT derecha negación lógica

Y izquierda conjunción lógica

O BIEN izquierda disyunción lógica

Palabras clave reservadas


A continuación se muestra la lista de palabras clave reservadas para Select de Amazon S3 y Select de
Glacier. Entre ellas se incluyen los nombres de funciones, tipos de datos, operadores, etc., necesarios para
ejecutar las expresiones SQL utilizadas para consultar el contenido de los objetos.

absolute
action
add
all
allocate
alter
and
any
are
as
asc
assertion
at
authorization
avg
bag

Versión de API 2006-03-01


754
Amazon Simple Storage Service Guía del desarrollador
Palabras clave reservadas

begin
between
bit
bit_length
blob
bool
boolean
both
by
cascade
cascaded
case
cast
catalog
char
char_length
character
character_length
check
clob
close
coalesce
collate
collation
column
commit
connect
connection
constraint
constraints
continue
convert
corresponding
count
create
cross
current
current_date
current_time
current_timestamp
current_user
cursor
date
day
deallocate
dec
decimal
declare
default
deferrable
deferred
delete
desc
describe
descriptor
diagnostics
disconnect
distinct
domain
double
drop
else
end
end-exec
escape
except

Versión de API 2006-03-01


755
Amazon Simple Storage Service Guía del desarrollador
Palabras clave reservadas

exception
exec
execute
exists
external
extract
false
fetch
first
float
for
foreign
found
from
full
get
global
go
goto
grant
group
having
hour
identity
immediate
in
indicator
initially
inner
input
insensitive
insert
int
integer
intersect
interval
into
is
isolation
join
key
language
last
leading
left
level
like
limit
list
local
lower
match
max
min
minute
missing
module
month
names
national
natural
nchar
next
no
not
null

Versión de API 2006-03-01


756
Amazon Simple Storage Service Guía del desarrollador
Palabras clave reservadas

nullif
numeric
octet_length
of
on
only
open
option
or
order
outer
output
overlaps
pad
partial
pivot
position
precision
prepare
preserve
primary
prior
privileges
procedure
public
read
real
references
relative
restrict
revoke
right
rollback
rows
schema
scroll
second
section
select
session
session_user
set
sexp
size
smallint
some
space
sql
sqlcode
sqlerror
sqlstate
string
struct
substring
sum
symbol
system_user
table
temporary
then
time
timestamp
timezone_hour
timezone_minute
to
trailing

Versión de API 2006-03-01


757
Amazon Simple Storage Service Guía del desarrollador
Funciones SQL

transaction
translate
translation
trim
true
tuple
union
unique
unknown
unpivot
update
upper
usage
user
using
value
values
varchar
varying
view
when
whenever
where
with
work
write
year
zone

Funciones SQL
Select de Amazon S3 y Select de Glacier admiten varias funciones SQL.

Temas
• Funciones de agregación (solo Amazon S3 Select) (p. 758)
• Funciones condicionales (p. 759)
• Funciones de conversión (p. 760)
• Funciones Date (p. 761)
• Funciones de cadena (p. 767)

Funciones de agregación (solo Amazon S3 Select)


Amazon S3 Select admite las siguientes funciones de agregación.
Note

Glacier Select no admite funciones de agregación.

Función Tipo de argumento Tipo de retorno

AVG(expression)INT, FLOAT, DECIMAL DECIMAL para


un argumento
INT, FLOAT para
un argumento de
coma flotante;
en el resto

Versión de API 2006-03-01


758
Amazon Simple Storage Service Guía del desarrollador
Funciones condicionales

Función Tipo de argumento Tipo de retorno


de casos, el
mismo que el
tipo de datos del
argumento.

COUNT - INT

MAX(expression)INT, DECIMAL El mismo que


el tipo del
argumento.

MIN(expression)INT, DECIMAL El mismo que


el tipo del
argumento.

SUM(expression)INT, FLOAT, DOUBLE, DECIMAL INT para un


argumento INT,
FLOAT para un
argumento de
coma flotante;
en el resto
de casos, el
mismo que el
tipo de datos del
argumento.

Funciones condicionales
Select de Amazon S3 y Select de Glacier admiten las siguientes funciones condicionales.

Temas
• COALESCE (p. 759)
• NULLIF (p. 760)

COALESCE
Evalúa los argumentos por orden y devuelve el primero que no sea desconocido, es decir, el primero no
nulo o que no falta. Esta función no propaga los argumentos nulos o que faltan.

Sintaxis

COALESCE ( expression, expression, ... )

Parámetros
expresión

La expresión de destino sobre la que opera la función.

Ejemplos

COALESCE(1) -- 1

Versión de API 2006-03-01


759
Amazon Simple Storage Service Guía del desarrollador
Funciones de conversión

COALESCE(null) -- null
COALESCE(null, null) -- null
COALESCE(missing) -- null
COALESCE(missing, missing) -- null
COALESCE(1, null) -- 1
COALESCE(null, null, 1) -- 1
COALESCE(null, 'string') -- 'string'
COALESCE(missing, 1) -- 1

NULLIF
Dadas dos expresiones, devuelve NULL si ambas toman el mismo valor; en caso contrario, devuelve el
resultado de la evaluación de la primera expresión.

Sintaxis

NULLIF ( expression1, expression2 )

Parámetros
expression1, expression2

Las expresiones de destino sobre las que opera la función.

Ejemplos

NULLIF(1, 1) -- null
NULLIF(1, 2) -- 1
NULLIF(1.0, 1) -- null
NULLIF(1, '1') -- 1
NULLIF([1], [1]) -- null
NULLIF(1, NULL) -- 1
NULLIF(NULL, 1) -- null
NULLIF(null, null) -- null
NULLIF(missing, null) -- null
NULLIF(missing, missing) -- null

Funciones de conversión
Select de Amazon S3 y Select de Glacier admiten las siguientes funciones de conversión.

Temas
• CAST (p. 760)

CAST
La función CAST convierte una entidad (por ejemplo, una expresión que da como resultado un único valor)
de un tipo a otro.

Sintaxis

CAST ( expression AS data_type )

Versión de API 2006-03-01


760
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

Parámetros
expresión

Combinación de uno o varios valores, operadores o funciones SQL que dan como resultado un valor.
data_type

Tipo de datos de destino (por ejemplo, INT) al que se va a convertir la expresión. Para obtener una
lista de los tipos de datos admitidos, consulte Tipos de datos (p. 752).

Ejemplos

CAST('2007-04-05T14:30Z' AS TIMESTAMP)
CAST(0.456 AS FLOAT)

Funciones Date
Select de Amazon S3 y Select de Glacier admiten las siguientes funciones de fecha.

Temas
• DATE_ADD (p. 761)
• DATE_DIFF (p. 762)
• EXTRACT (p. 763)
• TO_STRING (p. 763)
• TO_TIMESTAMP (p. 766)
• UTCNOW (p. 766)

DATE_ADD
Dados una parte de fecha, una cantidad y una marca temporal, devuelve una marca temporal actualizada
alterando la parte de fecha por la cantidad especificada.

Sintaxis

DATE_ADD( date_part, quantity, timestamp )

Parámetros
date_part

Especifica qué parte de la fecha se debe modificar. Puede ser una de las siguientes:
• año
• mes
• día
• hora
• minuto
• segundos

Versión de API 2006-03-01


761
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

quantity

El valor que se debe aplicar a la marca temporal actualizada. Los valores positivos se añaden a la
parte de fecha de la marca temporal, y los valores negativos se restan.
timestamp

La marca temporal de destino sobre la que opera la función.

Ejemplos

DATE_ADD(year, 5, `2010-01-01T`) -- 2015-01-01 (equivalent to 2015-01-01T)


DATE_ADD(month, 1, `2010T`) -- 2010-02T (result will add precision as
necessary)
DATE_ADD(month, 13, `2010T`) -- 2011-02T
DATE_ADD(day, -1, `2017-01-10T`) -- 2017-01-09 (equivalent to 2017-01-09T)
DATE_ADD(hour, 1, `2017T`) -- 2017-01-01T01:00-00:00
DATE_ADD(hour, 1, `2017-01-02T03:04Z`) -- 2017-01-02T04:04Z
DATE_ADD(minute, 1, `2017-01-02T03:04:05.006Z`) -- 2017-01-02T03:05:05.006Z
DATE_ADD(second, 1, `2017-01-02T03:04:05.006Z`) -- 2017-01-02T03:04:06.006Z

DATE_DIFF
Dadas una parte de fecha y dos marcas temporales válidas, devuelve la diferencia entre las partes de
fecha. El valor devuelto es un número entero negativo si el valor date_part de timestamp1 es mayor
que el valor date_part de timestamp2. El valor devuelto es un número entero positivo si el valor
date_part de timestamp1 es menor que el valor date_part de timestamp2.

Sintaxis

DATE_DIFF( date_part, timestamp1, timestamp2 )

Parámetros
date_part

Especifica qué parte de las marcas temporales se debe comparar. Para ver la definición de
date_part, consulte DATE_ADD (p. 761).
timestamp1

La primera marca temporal que se va a comparar.


timestamp2

La segunda marca temporal que se va a comparar.

Ejemplos

DATE_DIFF(year, `2010-01-01T`, `2011-01-01T`) -- 1


DATE_DIFF(year, `2010T`, `2010-05T`) -- 4 (2010T is equivalent to
2010-01-01T00:00:00.000Z)
DATE_DIFF(month, `2010T`, `2011T`) -- 12
DATE_DIFF(month, `2011T`, `2010T`) -- -12
DATE_DIFF(day, `2010-01-01T23:00T`, `2010-01-02T01:00T`) -- 0 (need to be at least 24h
apart to be 1 day apart)

Versión de API 2006-03-01


762
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

EXTRACT
Dadas una parte de fecha y una marca temporal, devuelve el valor de la parte de fecha de la marca
temporal.

Sintaxis

EXTRACT( date_part FROM timestamp )

Parámetros
date_part

Especifica qué parte de las marcas temporales se va a extraer. Puede ser una de las siguientes:
• año
• mes
• día
• hora
• minuto
• segundos
• timezone_hour
• timezone_minute
timestamp

La marca temporal de destino sobre la que opera la función.

Ejemplos

EXTRACT(YEAR FROM `2010-01-01T`) -- 2010


EXTRACT(MONTH FROM `2010T`) -- 1 (equivalent to
2010-01-01T00:00:00.000Z)
EXTRACT(MONTH FROM `2010-10T`) -- 10
EXTRACT(HOUR FROM `2017-01-02T03:04:05+07:08`) -- 3
EXTRACT(MINUTE FROM `2017-01-02T03:04:05+07:08`) -- 4
EXTRACT(TIMEZONE_HOUR FROM `2017-01-02T03:04:05+07:08`) -- 7
EXTRACT(TIMEZONE_MINUTE FROM `2017-01-02T03:04:05+07:08`) -- 8

TO_STRING
Dada una marca temporal y un patrón de formato, devuelve una representación de cadena de la marca
temporal en el formato especificado.

Sintaxis

TO_STRING ( timestamp time_format_pattern )

Parámetros
timestamp

La marca temporal de destino sobre la que opera la función.

Versión de API 2006-03-01


763
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

time_format_pattern

Una cadena que tiene las siguientes interpretaciones de caracteres especiales.

Formato Ejemplo Descripción

yy 69 Año en 2 dígitos

y 1969 Año en 4 dígitos

yyyy 1969 Año en 4 dígitos


rellenado con
ceros

M 1 Mes del año

MM 01 Mes del año


rellenado con
ceros

MMM Jan Nombre del


mes del año
abreviado

MMMM January Nombre del


mes del año
completo

MMMMM J Primera letra


del mes del año
(NOTA: no se
puede utilizar
con la función
to_timestamp)

d 2 Día del mes


(1-31)

dd 02 Día del mes


rellenado con
ceros (01-31)

a AM AM o PM

h 3 Hora del día


(1-12)

hh 03 Hora del día


rellenada con
ceros (01-12)

H 3 Hora del día


(0-23)

HH 03 Hora del día


rellenada con
ceros (00-23)

m 4 Minuto (0-59)

Versión de API 2006-03-01


764
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

Formato Ejemplo Descripción

mm 04 Minutos
rellenados con
ceros (00-59)

s 5 Segundo (0-59)

ss 05 Segundos
rellenados con
ceros (00-59)

S 0 Fracción de
segundo
(precisión: 0,1,
rango: 0,0-0,9)

SS 6 Fracción de
segundo
(precisión: 0,01,
rango: 0,0-0,99)

SSS 60 Fracción de
segundo
(precisión:
0,001, rango:
0,0-0,999)

… … …

SSSSSSSSS 60000000 Fracción de


segundo
(precisión
máxima: 1
nanosegundo,
rango:
0,0-0,999999999)

n 60000000 Nanosegundo

X +07 or Z Desplazamiento
en horas
o "Z" si el
desplazamiento
es 0

XX or XXXX +0700 or Z Desplazamiento


en horas
y minutos
o "Z" si el
desplazamiento
es 0

XXX or XXXXX +07:00 or Z Desplazamiento


en horas
y minutos
o "Z" si el
desplazamiento
es 0

Versión de API 2006-03-01


765
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

Formato Ejemplo Descripción

x 7 Desplazamiento
en horas

xx or xxxx 700 Desplazamiento


en horas y
minutos

xxx or xxxxx +07:00 Desplazamiento


en horas y
minutos

Ejemplos

TO_STRING(`1969-07-20T20:18Z`, 'MMMM d, y') -- "July 20, 1969"


TO_STRING(`1969-07-20T20:18Z`, 'MMM d, yyyy') -- "Jul 20, 1969"
TO_STRING(`1969-07-20T20:18Z`, 'M-d-yy') -- "7-20-69"
TO_STRING(`1969-07-20T20:18Z`, 'MM-d-y') -- "07-20-1969"
TO_STRING(`1969-07-20T20:18Z`, 'MMMM d, y h:m a') -- "July 20, 1969 8:18 PM"
TO_STRING(`1969-07-20T20:18Z`, 'y-MM-dd''T''H:m:ssX') -- "1969-07-20T20:18:00Z"
TO_STRING(`1969-07-20T20:18+08:00Z`, 'y-MM-dd''T''H:m:ssX') -- "1969-07-20T20:18:00Z"
TO_STRING(`1969-07-20T20:18+08:00`, 'y-MM-dd''T''H:m:ssXXXX') --
"1969-07-20T20:18:00+0800"
TO_STRING(`1969-07-20T20:18+08:00`, 'y-MM-dd''T''H:m:ssXXXXX') --
"1969-07-20T20:18:00+08:00"

TO_TIMESTAMP
Dada una cadena, la convierte en una marca temporal. Esta es la operación inversa de TO_STRING.

Sintaxis

TO_TIMESTAMP ( string )

Parámetros
string

La cadena de destino sobre la que opera la función.

Ejemplos

TO_TIMESTAMP('2007T') -- `2007T`
TO_TIMESTAMP('2007-02-23T12:14:33.079-08:00') -- `2007-02-23T12:14:33.079-08:00`

UTCNOW
Devuelve: la fecha y hora actual en UTC como una marca temporal.

Sintaxis

UTCNOW()

Versión de API 2006-03-01


766
Amazon Simple Storage Service Guía del desarrollador
Funciones de cadena

Parámetros
ninguno

Ejemplos

UTCNOW() -- 2017-10-13T16:02:11.123Z

Funciones de cadena
Select de Amazon S3 y Select de Glacier admiten las siguientes funciones de cadena.

Temas
• CHAR_LENGTH, CHARACTER_LENGTH (p. 767)
• LOWER (p. 767)
• SUBSTRING (p. 768)
• TRIM (p. 768)
• UPPER (p. 769)

CHAR_LENGTH, CHARACTER_LENGTH
Cuenta el número de caracteres de la cadena especificada.
Note

CHAR_LENGTH y CHARACTER_LENGTH son sinónimos.

Sintaxis

CHAR_LENGTH ( string )

Parámetros
string

La cadena de destino sobre la que opera la función.

Ejemplos

CHAR_LENGTH('') -- 0
CHAR_LENGTH('abcdefg') -- 7

LOWER
Dada una cadena, convierte todos los caracteres en mayúscula a minúscula. Los caracteres que no estén
en mayúscula permanecen igual.

Sintaxis

LOWER ( string )

Versión de API 2006-03-01


767
Amazon Simple Storage Service Guía del desarrollador
Funciones de cadena

Parámetros
string

La cadena de destino sobre la que opera la función.

Ejemplos

LOWER('AbCdEfG!@#$') -- 'abcdefg!@#$'

SUBSTRING
Dada una cadena, un índice de comienzo y, de forma opcional, una longitud, devuelve la subcadena que
va desde el índice de comienzo hasta el final de la cadena, o hasta la longitud especificada.
Note

El primer carácter de la cadena de entrada tiene el índice 1. Si start es < 1, se establece en 1.

Sintaxis

SUBSTRING( string FROM start [ FOR length ] )

Parámetros
string

La cadena de destino sobre la que opera la función.


start

La posición de inicio de la cadena.


longitud

La longitud de la subcadena que se va a devolver. Si no existe, continúa hasta el final de la cadena.

Ejemplos

SUBSTRING("123456789", 0) -- "123456789"
SUBSTRING("123456789", 1) -- "123456789"
SUBSTRING("123456789", 2) -- "23456789"
SUBSTRING("123456789", -4) -- "123456789"
SUBSTRING("123456789", 0, 999) -- "123456789"
SUBSTRING("123456789", 1, 5) -- "12345"

TRIM
Elimina los caracteres anteriores o posteriores de una cadena. De forma predeterminada, el carácter que
se elimina es ' '.

Sintaxis

TRIM ( [[LEADING | TRAILING | BOTH remove_chars] FROM] string )

Versión de API 2006-03-01


768
Amazon Simple Storage Service Guía del desarrollador
Funciones de cadena

Parámetros
string

La cadena de destino sobre la que opera la función.


LEADING | TRAILING | BOTH

Especifica si se deben eliminar los caracteres anteriores o posteriores, o ambos.


remove_chars

El conjunto de caracteres que se debe eliminar. Tenga en cuenta que remove_chars puede ser
una cadena con longitud > 1. Esta función devuelve la cadena con los caracteres de remove_chars
encontrados al principio o al final de la cadena que se han eliminado.

Ejemplos

TRIM(' foobar ') -- 'foobar'


TRIM(' \tfoobar\t ') -- '\tfoobar\t'
TRIM(LEADING FROM ' foobar ') -- 'foobar '
TRIM(TRAILING FROM ' foobar ') -- ' foobar'
TRIM(BOTH FROM ' foobar ') -- 'foobar'
TRIM(BOTH '12' FROM '1112211foobar22211122') -- 'foobar'

UPPER
Dada una cadena, convierte todos los caracteres en minúscula a mayúscula. Los caracteres que no estén
en minúscula permanecen igual.

Sintaxis

UPPER ( string )

Parámetros
string

La cadena de destino sobre la que opera la función.

Ejemplos

UPPER('AbCdEfG!@#$') -- 'ABCDEFG!@#$'

Versión de API 2006-03-01


769
Amazon Simple Storage Service Guía del desarrollador

Historial de revisión
• Última actualización de la documentación: 18 de septiembre de 2019
• Versión actual de API: 2006-03-01

En la siguiente tabla se describen los cambios importantes de cada versión de la Guía para
desarrolladores de Amazon Simple Storage Service a partir del 19 de junio de 2018. Para obtener
notificaciones sobre las actualizaciones de esta documentación, puede suscribirse a una fuente RSS.

update-history-change update-history-description update-history-date

Replicación en la misma La replicación en la misma región September 18, 2019


región (p. 770) (SRR) se utiliza para copiar
objetos entre buckets de Amazon
S3 en la misma región de AWS.
Para obtener información acerca
de la replicación entre regiones
y en la misma región, consulte
Replicación.

Soporte de replicación entre La replicación entre regiones May 28, 2019


regiones para bloqueo de ahora admite el bloqueo de
objetos (p. 770) objetos de Amazon S3. Para
obtener más información,
consulte Replicación entre
regiones y ¿Qué replica Amazon
S3?.

operaciones por lotes de Amazon Puede utilizar las operaciones April 30, 2019
S3 (p. 770) por lotes de Amazon S3 para
realizar operaciones por lotes
a gran escala en objetos de
Amazon S3. Las operaciones
por lotes de Amazon S3 pueden
ejecutar la misma operación
en las listas de objetos que se
especifiquen. Un solo trabajo
puede realizar la operación
especificada en miles de millones
de objetos que contiene exabytes
de datos. Para obtener más
información, consulte Realización
de operaciones por lotes.

Región Asia Pacífico (Hong Amazon S3 ya está disponible April 24, 2019
Kong) (p. 770) en la región Asia Pacífico
(Hong Kong). Para obtener
más información acerca de
las regiones y los puntos de
enlace de Amazon S3, consulte
Regiones y puntos de enlace en
la AWS General Reference.

Versión de API 2006-03-01


770
Amazon Simple Storage Service Guía del desarrollador

Se ha agregado un nuevo campo Amazon S3 ha agregado el March 28, 2019


a los registros de acceso al siguiente campo nuevo a los
servidor (p. 770) registros de acceso al servidor:
versión de Transport Layer
Security (TLS). Para obtener más
información, consulte Formato de
registro de acceso al servidor de
Amazon S3.

Nueva clase de almacenamiento Amazon S3 ahora ofrece una March 27, 2019
de archivado (p. 770) nueva clase de almacenamiento
de archivado, DEEP_ARCHIVE,
para el almacenamiento
de objetos a los que se
obtiene acceso con poca
frecuencia. Para obtener más
información, consulte Clases de
almacenamiento.

Se han agregado nuevos campos Amazon S3 ha agregado los March 5, 2019


a los registros de acceso al siguientes campos nuevos a los
servidor (p. 770) registros de acceso al servidor:
ID de host, Versión de firma,
Conjunto de cifrado, Tipo de
autenticación y Encabezado
de host. Para obtener más
información, consulte Formato de
registro de acceso al servidor de
Amazon S3.

Compatibilidad con los archivos Amazon S3 admite ahora December 4, 2018


de inventario de Amazon S3 con el formato Apache Parquet
formato Parquet (p. 770) (Parquet) además de Apache
optimized row columnar (ORC) y
el formato de archivo de valores
separados con comas (CSV)
para los archivos de salida del
inventario. Para obtener más
información, consulte Amazon S3
Inventory.

Restaurar notificaciones de Las notificaciones de eventos November 26, 2018


eventos (p. 770) de Amazon S3 admiten ahora
eventos de inicio y finalización
al restaurar objetos de la clase
de almacenamiento GLACIER.
Para obtener más información,
consulte Notificaciones de
eventos.

Versión de API 2006-03-01


771
Amazon Simple Storage Service Guía del desarrollador

Restauración de actualización de Con la actualización de velocidad November 26, 2018


velocidad (p. 770) de restauración de Amazon S3
puede cambiar a una velocidad
de restauración más rápida de
la clase de almacenamiento
GLACIER mientras se está
realizando la restauración.
Para obtener más información,
consulte Restaurar objetos
archivados.

Operación PUT directamente La operación PUT de Amazon S3 November 26, 2018


en la clase de almacenamiento ahora admite la especificación
GLACIER (p. 770) de GLACIER como clase de
almacenamiento en el momento
en el que crea un objeto.
Con anterioridad, había que
pasar objetos a la clase de
almacenamiento GLACIER desde
otra clase de almacenamiento
Amazon S3. Además, al usar
la replicación entre regiones
(CRR), ahora puede especificar
GLACIER como clase de
almacenamiento para los objetos
replicados. Para obtener más
información acerca de la clase
de almacenamiento GLACIER,
consulte Storage Classes.
Para obtener más información
acerca de especifica la clase de
almacenamiento para objetos
replicados, vaya a Información
general de la configuración
de replicación. Para obtener
más información acerca de los
cambios directos en la API REST
de la operación PUT a GLACIER,
consulte Historial de revisión:
Operación PUT directamente en
GLACIER.

Nueva clase de Amazon S3 ofrece ahora una November 26, 2018


almacenamiento (p. 770) clase de almacenamiento nueva
llamada INTELLIGENT_TIERING
diseñada para datos de
larga duración, con patrones
de acceso desconocidos o
cambiantes. Para obtener más
información, consulte Clases de
almacenamiento.

Versión de API 2006-03-01


772
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Bloqueo de objetos de Amazon Amazon S3 ofrece ahora la November 26, 2018


S3 (p. 770) funcionalidad Object Lock que
proporciona protecciones de
escritura única y lectura múltiple
para objetos de Amazon S3.
Para obtener más información,
consulte Bloqueo de objetos.

Amazon S3 Block Public Amazon S3 incluye ahora la November 15, 2018


Access (p. 770) capacidad de bloquear el acceso
público a buckets y objetos en
un bucket o en toda la cuenta.
Para obtener más información,
consulte Uso de Amazon S3
Block Public Access.

Filtrado de mejoras en reglas de En la configuración de una regla September 19, 2018


replicación entre varias regiones de CRR, puede especificar un
(CRR) (p. 770) filtro de objeto para elegir un
subconjunto de objetos al que
aplicar la regla. Anteriormente,
solo se podía filtrar en un prefijo
de clave de objeto. En esta
versión, puede filtrar en un
prefijo de clave de objeto, una
o varias etiquetas de objeto, o
ambos métodos. Para obtener
más información, consulte
Configuración de la CRR:
Información general de la
configuración de replicación.

Nuevas características de Amazon S3 Select ahora September 5, 2018


Amazon S3 Select (p. 770) admite la entrada de Apache
Parquet, consultas sobre objetos
JSON anidados y dos nuevas
métricas de monitorización
de Amazon CloudWatch
(SelectScannedBytes y
SelectReturnedBytes).

Actualizaciones ahora Ahora puede suscribirse June 19, 2018


disponibles sobre RSS (p. 770) a un fuente RSS para
recibir notificaciones sobre
actualizaciones de la Guía para
desarrolladores de Amazon
Simple Storage Service.

Actualizaciones anteriores
En la siguiente tabla se describen los cambios importantes de cada versión de la Guía para
desarrolladores de Amazon Simple Storage Service anteriores al 19 de junio de 2018.

Versión de API 2006-03-01


773
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Actualización de las Muestras de código actualizadas: 30 de abril


muestras de código de 2018
• C#: se han actualizado todas las muestras para usar el
patrón asíncrono basado en tareas. Para obtener más
información, consulte la sección sobre API asíncronas
de Amazon Web Services para .NET en la Guía para
desarrolladores de AWS SDK para .NET. Ahora las muestras
de código son compatibles con la versión 3 del AWS SDK
para .NET.
• Java: se han actualizado todas las muestras para usar
el modelo de compilador de clientes. Para obtener más
información sobre el modelo del compilador de clientes,
consulte Creación de clientes de servicio.
• PHP: se han actualizado todos los ejemplos para utilizar
AWS SDK para PHP 3.0. Para obtener más información
acerca de AWS SDK para PHP 3.0, consulte AWS SDK para
PHP.
• Ruby: se ha actualizado el código de ejemplo para que los
ejemplos funcionen con el AWS SDK parar Ruby versión 3.

Ahora Amazon S3 Además de informar sobre los bytes reales, estas métricas de 30 de abril
informa sobre las clases almacenamiento contienen bytes de sobrecarga por objeto de 2018
de almacenamiento para las clases de almacenamiento pertinentes (ONEZONE_IA,
GLACIER y STANDARD_IA y GLACIER):
ONEZONE_IA a
las métricas de • Para los objetos de clase de almacenamiento ONEZONE_IA
almacenamiento de y STANDARD_IA, Amazon S3 notifica los objetos de menos
Amazon CloudWatch de 128 KB como si fueran de 128 KB. Para obtener más
Logs. información, consulte Clases de almacenamiento de Amazon
S3 (p. 110).
• Para los objetos de clase de almacenamiento GLACIER,
las métricas de almacenamiento notifican las siguientes
sobrecargas:
• Una sobrecarga por objeto de 32 KB, cargada en el precio
de clase de almacenamiento GLACIER.
• Una sobrecarga por objeto de 8 KB, cargada en el precio
de clase de almacenamiento STANDARD.

Para obtener más información, consulte Transición de


objetos con el ciclo de vida de Amazon S3 (p. 129).

Para obtener más información acerca de las métricas de


almacenamiento, consulte Monitorización de métricas con
Amazon CloudWatch (p. 636).

Nueva clase de Amazon S3 ahora ofrece una nueva clase de almacenamiento, 4 de abril
almacenamiento ONEZONE_IA (IA quiere decir acceso poco frecuente) para el de 2018
almacenamiento de objetos. Para obtener más información,
consulte Clases de almacenamiento de Amazon S3 (p. 110).

Amazon S3 Select Amazon S3 ahora admite la recuperación de contenido de 4 de abril


los objetos basándose en una expresión SQL. Para obtener de 2018

Versión de API 2006-03-01


774
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha


más información, consulte Selección de contenido de los
objetos (p. 254).

Región Asia Pacífico Amazon S3 ya está disponible en la región Asia Pacífico 12 de


(Osaka-Local) (Osaka-local). Para obtener más información acerca de las febrero de
regiones y los puntos de enlace de Amazon S3, consulte 2018
Regiones y puntos de enlace en la AWS General Reference.
Important

Puede utilizar la región Asia Pacífico (Osaka-


local) únicamente junto con la región Asia Pacífico
(Tokio). Para solicitar el acceso a la región Asia
Pacífico (Osaka-local), póngase en contacto con su
representante de ventas.

Marca temporal de El inventario de Amazon S3 incluye ahora una marca temporal 16 de


creación de inventario de la fecha y hora de inicio de la creación del informe de enero de
de Amazon S3 inventario de Amazon S3. Puede utilizar la marca temporal 2018
para determinar cambios en su almacenamiento de Amazon
S3 desde la hora de inicio cuando se generó el informe de
inventario.

Región de UE (París) Amazon S3 ya está disponible en la región UE (París). Para 18 de


obtener más información acerca de las regiones y los puntos de diciembre
enlace de Amazon S3, consulte Regiones y puntos de enlace de 2017
en la AWS General Reference.

Región China (Ningxia) Amazon S3 ya está disponible en la región China (Ningxia). 11 de


Para obtener más información acerca de las regiones y los diciembre
puntos de enlace de Amazon S3, consulte Regiones y puntos de 2017
de enlace en la AWS General Reference.

Consulta de archivos Ahora, Amazon S3 permite consultar archivos de datos de 29 de


con SQL Glacier con SQL. Para obtener más información, consulte noviembre
Consultar objetos archivados (p. 263). de 2017

Compatibilidad con los Amazon S3 admite ahora el formato Apache optimized row 17 de
archivos de inventario de columnar (ORC) además del formato de archivo de valores noviembre
Amazon S3 con formato separados con comas (CSV) para los archivos de salida del de 2017
ORC inventario. Además, ahora puede consultar el inventario de
Amazon S3 mediante SQL estándar utilizando Amazon Athena,
Amazon Redshift Spectrum y otras herramientas como, por
ejemplo, Presto, Apache Hive y Apache Spark. Para obtener
más información, consulte Inventario de Amazon S3 (p. 439).

Cifrado predeterminado El cifrado predeterminado de Amazon S3 proporciona un medio 06 de


para los buckets de S3 de definir el comportamiento de cifrado predeterminado para noviembre
un bucket de S3. Puede configurar el cifrado predeterminado de 2017
en un bucket para que todos los objetos se cifren cuando se
almacenen en el bucket. Los objetos se cifran mediante el
cifrado del lado del servidor con claves administradas por
Amazon S3 (SSE-S3) o claves administradas por AWS KMS
(SSE-KMS). Para obtener más información, consulte Cifrado
predeterminado de Amazon S3 para los buckets de S3 (p. 69).

Versión de API 2006-03-01


775
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Estado de cifrado en el Amazon S3 permite ahora incluir el estado de cifrado en el 06 de


inventario de Amazon inventario de Amazon S3 para que pueda saber cómo se cifran noviembre
S3 los objetos en reposo para sus requisitos de conformidad u de 2017
otros fines. También puede configurar el cifrado del inventario
de S3 con cifrado de lado servidor (SSE) o SSE-KMS, para que
todos los archivos del inventario se cifren según corresponda.
Para obtener más información, consulte Inventario de Amazon
S3 (p. 439).

Mejoras de la replicación La replicación entre regiones ahora admite lo siguiente: 06 de


entre regiones (CRR) noviembre
• En un escenario de replicación entre cuentas, puede añadir de 2017
la configuración de la CRR para cambiar la titularidad de la
réplica a la cuenta de AWS que posee el bucket de destino.
Para obtener más información, consulte Configuración
de replicación adicional: cambiar el propietario de la
réplica (p. 591).
• De forma predeterminada, Amazon S3 no replica objetos
en el bucket de origen que se hayan creado con cifrado en
el servidor con las claves almacenadas en AWS KMS. En
la configuración CRR, ahora puede indicar a Amazon S3
que replique estos objetos. Para obtener más información,
consulte Configuración adicional de replicación: replicar
objetos creados con el cifrado en el servidor (SSE) mediante
claves de cifrado almacenadas en AWS KMS (p. 593).

Región UE (Londres) Amazon S3 ya está disponible en la región UE (Londres). Para 13 de


obtener más información acerca de las regiones y los puntos de diciembre
enlace de Amazon S3, consulte Regiones y puntos de enlace de 2016
en la AWS General Reference.

Región Canadá (Central) Amazon S3 ya está disponible en la región Canadá (Central). 8 de


Para obtener más información acerca de las regiones y los diciembre
puntos de enlace de Amazon S3, consulte Regiones y puntos de 2016
de enlace en la AWS General Reference.

Versión de API 2006-03-01


776
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Etiquetado de objetos Amazon S3 ya es compatible con el etiquetado de 29 de


objetos. El etiquetado de objetos le permite categorizar el noviembre
almacenamiento. Los prefijos de nombre de clave de objeto de 2016
también le permiten categorizar el almacenamiento, pero el
etiquetado de objetos agrega una dimensión adicional.

El etiquetado agrega beneficios adicionales. Entre ellas se


incluyen:

• El etiquetado de objetos permite un control de acceso preciso


de los permisos (por ejemplo, podría conceder un permiso
de usuario de IAM a objetos de solo lectura con etiquetas
específicas).
• Control preciso en la especificación de una configuración de
ciclo de vida. Puede especificar etiquetas para seleccionar un
subconjunto de objetos a los que se aplique la regla de ciclo
de vida.
• Si ha configurado la replicación entre regiones (CRR),
Amazon S3 puede replicar las etiquetas. Debe conceder los
permisos necesarios al rol de IAM creado para que Amazon
S3 asuma que debe replicar los objetos en su nombre.
• También puede personalizar métricas de CloudWatch
y eventos de CloudTrail para mostrar información
especificando filtros de etiquetas.

Para obtener más información, consulte Etiquetado de


objetos (p. 118).

El ciclo de vida de Amazon S3 ahora admite el filtrado basado en etiquetas en 29 de


Amazon S3 ahora la configuración del ciclo de vida. Ahora puede especificar noviembre
admite filtros basados en reglas del ciclo de vida en la que puede establecer un prefijo de 2016
etiquetas de clave, una o varias etiquetas de objeto o una combinación
de ambos factores para seleccionar un subconjunto de objetos
al que aplicar la regla del ciclo de vida. Para obtener más
información, consulte Administración del ciclo de vida de los
objetos (p. 127).

Métricas de solicitudes Amazon S3 es ahora compatible con métricas de CloudWatch 29 de


de CloudWatch para para solicitudes realizadas en buckets. Cuando habilita estas noviembre
buckets métricas en un bucket, se informa de las métricas a intervalos de 2016
de 1 minuto. También puede configurar qué objetos de un
bucket informarán de estas métricas de solicitudes. Para
obtener más información, consulte Monitorización de métricas
con Amazon CloudWatch (p. 636).

Inventario de Amazon Ahora Amazon S3 es compatible con el inventario de 29 de


S3 almacenamiento. El inventario de Amazon S3 proporciona noviembre
una salida de archivos sin formato de los objetos y metadatos de 2016
correspondientes diaria o semanalmente para un bucket de
S3 o para un prefijo compartido (objetos con nombres que
comienzan con la misma cadena).

Para obtener más información, consulte Inventario de Amazon


S3 (p. 439).

Versión de API 2006-03-01


777
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Análisis de Amazon S3 La nueva función de análisis de las clases de almacenamiento 29 de


análisis de clases de de Amazon S3 observa los patrones de acceso a los datos para noviembre
almacenamiento ayudarle a determinar cuándo trasladar el almacenamiento de 2016
STANDARD al que se acceda con menos frecuencia a la
clase de almacenamiento STANDARD_IA (IA quiere decir
acceso poco frecuente). Después de que el análisis de clase
de almacenamiento observa estos patrones de acceso poco
frecuentes a un conjunto de datos filtrados durante un periodo
determinado de tiempo, podrá usar los resultados del análisis
para ayudar a mejorar sus políticas de ciclo de vida. Esta
función también incluye un análisis diario detallado de su uso
del almacenamiento en el bucket, prefijo o nivel de etiqueta
especificado, que podrá exportar a un bucket de S3.

Para obtener más información, consulte Análisis de Amazon


S3: análisis de clases de almacenamiento (p. 267) en la Guía
para desarrolladores de Amazon Simple Storage Service.

Nuevas recuperaciones Amazon S3 ahora es compatible con las recuperaciones de 21 de


de datos rápidas y en datos rápidas y en bloque, además de las recuperaciones noviembre
bloque al restaurar estándares, al restaurar objetos archivados a Glacier. de 2016
objetos archivados Para obtener más información, consulte Restaurar objetos
desde Glacier archivados (p. 258).

Registro de objetos CloudTrail permite que se registren operaciones de API 21 de


mediante CloudTrail en el nivel de objetos de Amazon S3 como, por ejemplo, noviembre
GetObject, PutObject y DeleteObject. Puede configurar de 2016
los selectores de eventos para registrar operaciones de API
de nivel de objeto. Para obtener más información, consulte
Registro de llamadas a la API de Amazon S3 mediante AWS
CloudTrail (p. 647).

Región EE.UU Este Amazon S3 ya está disponible en la región EE.UU. Este (Ohio). 17 de
(Ohio) Para obtener más información acerca de las regiones y los octubre de
puntos de enlace de Amazon S3, consulte Regiones y puntos 2016
de enlace en la AWS General Reference.

Compatibilidad con IPv6 Amazon S3 ahora es compatible con Internet Protocol version 6 6 de
para Aceleración de (IPv6) para Aceleración de transferencia de Amazon S3. Puede octubre de
transferencia de Amazon conectar con Amazon S3 por IPv6 usando la nueva doble 2016
S3 pila para el punto de conexión de Transfer Acceleration. Para
obtener más información, consulte Introducción a Aceleración
de transferencia de Amazon S3 (p. 77).

Compatibilidad con IPv6 Amazon S3 ya admite Internet Protocol version 6 (IPv6). Puede 11 de
obtener acceso a Amazon S3 por IPv6 utilizando puntos de agosto de
enlace de doble pila. Para obtener más información, consulte 2016
Realización de solicitudes a Amazon S3 mediante IPv6 (p. 12).

Región Asia Pacífico Amazon S3 ya está disponible en la región Asia Pacífico 27 de junio
(Mumbai) (Mumbai). Para obtener más información acerca de las de 2016
regiones y los puntos de enlace de Amazon S3, consulte
Regiones y puntos de enlace en la AWS General Reference.

Versión de API 2006-03-01


778
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Aceleración de Aceleración de transferencia de Amazon S3 permite transferir 19 de abril


transferencia de Amazon archivos de manera rápida, fácil y segura entre su cliente de 2016
S3 y un bucket de S3 a larga distancia. Transfer Acceleration
aprovecha las ubicaciones de borde distribuidas globalmente
de Amazon CloudFront.

Para obtener más información, consulte Aceleración de


transferencia de Amazon S3 (p. 76).

Compatibilidad del La acción Expiration de la configuración del ciclo de 16 de


ciclo de vida para vida ahora permite indicarle a Amazon S3 que elimine los marzo de
eliminar marcadores de marcadores de eliminación de objetos que vencieron en un 2016
eliminación de objetos bucket con control de versiones habilitado. Para obtener más
que vencieron información, consulte Elementos para describir las acciones del
ciclo de vida (p. 139).

La configuración del Ahora, la configuración del ciclo de vida de un bucket admite 16 de


ciclo de vida del bucket la acción AbortIncompleteMultipartUpload, que puede marzo de
admite acciones para utilizar para que Amazon S3 anule las cargas multipartes que 2016
anular cargas multiparte no se completan dentro de un periodo especificado de días
incompletas. después de iniciarse. Cuando una carga multiparte cumple los
requisitos para una operación de anulación, Amazon S3 elimina
cualquier parte cargada y anula la carga multiparte.

Para obtener información conceptual, consulte los siguientes


temas en la Guía para desarrolladores de Amazon Simple
Storage Service:

• Anulación de cargas multiparte incompletas con la política de


ciclo de vida de buckets (p. 189)
• Elementos para describir las acciones del ciclo de
vida (p. 139)

Las siguientes operaciones de la API se han actualizado para


admitir la nueva acción:

• PUT Bucket lifecycle: ahora, la configuración XML le permite


especificar la acción AbortIncompleteMultipartUpload
en una regla de configuración de ciclo de vida.
• List Parts e Initiate Multipart Upload: estas dos
operaciones de la API ahora devuelven dos encabezados
de respuesta adicionales (x-amz-abort-date y
x-amz-abort-rule-id) si el bucket tiene una
regla del ciclo de vida que especifique la acción
AbortIncompleteMultipartUpload. Estos encabezados
de respuesta indican si la carga multiparte iniciada cumplirá
los requisitos de la operación de anulación y qué regla del
ciclo de vida es aplicable.

Región Asia Pacífico Amazon S3 ya está disponible en la región Asia Pacífico (Seúl). 6 de enero
(Seúl) Para obtener más información acerca de las regiones y los de 2016
puntos de enlace de Amazon S3, consulte Regiones y puntos
de enlace en la AWS General Reference.

Versión de API 2006-03-01


779
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Nueva clave de Ahora, las políticas de IAM admiten una clave de condición 14 de
condición y cambio en la s3:x-amz-storage-class de Amazon S3. Para obtener diciembre
carga multiparte más información, consulte Especificación de las condiciones de de 2015
una política (p. 363).

Ya no tiene por qué ser el iniciador de una carga multiparte


para cargar partes y completar la carga. Para obtener
más información, consulte API de carga multiparte y
permisos (p. 191).

Cambio de nombre de la Se ha cambiado la cadena del nombre de la región de 11 de


región EE.UU. Estándar "EE.UU. Estándar" a "EE.UU. Este (Norte de Virginia)". Solo diciembre
se ha cambiado el nombre de la región, no se cambia su de 2015
funcionalidad.

Nueva clase de Amazon S3 ahora ofrece una nueva clase de almacenamiento, 16 de


almacenamiento STANDARD_IA (IA quiere decir acceso poco frecuente) para septiembre
el almacenamiento de objetos. Esta clase de almacenamiento de 2015
está optimizada para los datos de duración prolongada y a los
que se obtenga acceso con menor frecuencia. Para obtener
más información, consulte Clases de almacenamiento de
Amazon S3 (p. 110).

Las actualizaciones de la función de configuración del ciclo de


vida ahora le permiten realizar una transición de objetos a la
clase de almacenamiento STANDARD_IA. Para obtener más
información, consulte Administración del ciclo de vida de los
objetos (p. 127).

Anteriormente, la función de replicación entre regiones usaba


la clase de almacenamiento del objeto original para las réplicas
de objetos. Ahora, cuando configure la replicación entre
regiones puede especificar una clase de almacenamiento
para la réplica del objeto creada en el bucket de destino. Para
obtener más información, consulte Replicación (p. 573).

Integración de AWS La nueva integración de AWS CloudTrail le permite registrar la 1 de


CloudTrail actividad de la API de Amazon S3 en su bucket de S3. Puede septiembre
usar CloudTrail para realizar un seguimiento de las creaciones de 2015
o eliminaciones de buckets de S3, modificaciones en el control
de acceso o cambios en las políticas del ciclo de vida. Para
obtener más información, consulte Registro de llamadas a la
API de Amazon S3 mediante AWS CloudTrail (p. 647).

Aumento del límite de Amazon S3 ahora admite aumentos en los límites de buckets. 4 de agosto
buckets Por defecto, los clientes pueden crear hasta 100 buckets en su de 2015
cuenta de AWS. Los clientes que necesiten buckets adicionales
pueden aumentar el límite solicitando un aumento en el
límite de servicio. Para obtener información acerca de cómo
aumentar el límite de su bucket, visite Límites de los servicios
de AWS en la Referencia general de AWS. Para obtener
más información, consulte Creación de un bucket (p. 55) y
Restricciones y limitaciones de los buckets (p. 60).

Versión de API 2006-03-01


780
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Actualización del modelo Amazon S3 ahora es compatible con la coherencia de lectura 4 de agosto
de consistencia tras escritura para objetos nuevos agregados a Amazon S3 de 2015
en la región EE.UU. Este (Norte de Virginia). Antes de esta
actualización, todas las regiones excepto la EE.UU. Este (Norte
de Virginia) eran compatibles con la coherencia de lectura tras
escritura para objetos nuevos cargados en Amazon S3. Con
esta mejora, Amazon S3 ahora es compatible con la coherencia
de lectura tras escritura en todas las regiones para objetos
nuevos agregados a Amazon S3. La coherencia de lectura
tras escritura le permite recuperar objetos inmediatamente tras
su creación en Amazon S3. Para obtener más información,
consulte Regiones (p. 4).

Notificaciones de Las notificaciones de eventos de Amazon S3 se han 28 de julio


eventos actualizado para agregar notificaciones cuando se eliminan de 2015
los objetos y para agregar filtros por nombres de objeto con
coincidencia por prefijo y sufijo. Para obtener más información,
consulte Configuración de notificaciones de eventos de
Amazon S3 (p. 551).

Integración de Amazon La nueva integración de Amazon CloudWatch le permite 28 de julio


CloudWatch monitorizar y establecer alarmas sobre su uso de Amazon de 2015
S3 con métricas de CloudWatch para Amazon S3. Entre las
métricas compatibles se incluyen el número total de bytes
para el almacenamiento estándar, el número total de bytes
para el almacenamiento de redundancia reducida y el número
total de objetos para un bucket de S3 dado. Para obtener más
información, consulte Monitorización de métricas con Amazon
CloudWatch (p. 636).

Compatibilidad para la Amazon S3 ahora es compatible con la eliminación y el vaciado 16 de julio


eliminación y el vaciado de buckets no vacíos. Para obtener más información, consulte de 2015
de buckets no vacíos Eliminación o vaciado de un bucket (p. 64).

Políticas de bucket para Amazon S3 ha agregado compatibilidad para políticas de 29 de abril


puntos de conexión de la bucket para puntos de enlace de Amazon Virtual Private de 2015
VPC de Amazon Cloud (Amazon VPC). Puede utilizar las políticas de bucket
de S3 para controlar el acceso a los buckets desde puntos de
conexión específicos de Amazon VPC o VPC específicas. Los
puntos de conexión de la VPC se configuran fácilmente, son
muy fiables y ofrecen una conexión segura con Amazon S3
sin necesidad de utilizar una puerta de enlace ni una instancia
NAT. Para obtener más información, consulte Ejemplo de
políticas de bucket para puntos de enlace de la VPC para
Amazon S3 (p. 394).

Notificaciones de Se han actualizado las notificaciones de eventos de Amazon 9 de abril


eventos S3 para permitir cambiar a permisos basados en recursos para de 2015
las funciones de AWS Lambda. Para obtener más información,
consulte Configuración de notificaciones de eventos de
Amazon S3 (p. 551).

Versión de API 2006-03-01


781
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Replicación entre Ahora, Amazon S3 admite la replicación entre regiones. La 24 de


regiones replicación entre regiones consiste en la copia automática marzo de
y asincrónica de los objetos de los buckets en diferentes 2015
regiones de AWS. Para obtener más información, consulte
Replicación (p. 573).

Notificaciones de Amazon S3 ahora es compatible con nuevos tipos de eventos 13 de


eventos y destinos en una configuración de notificaciones de bucket. noviembre
Antes de esta versión, Amazon S3 solo admitía el tipo de de 2014
evento s3:ReducedRedundancyLostObject y un tema de
Amazon SNS como destino. Para obtener más información
sobre los nuevos tipos de evento, consulte Configuración de
notificaciones de eventos de Amazon S3 (p. 551).

Cifrado en el servidor Cifrado del lado del servidor con AWS Key Management 12 de
con claves de cifrado Service (AWS KMS) noviembre
proporcionadas por el de 2014
cliente Amazon S3 ahora admite el cifrado de los datos en el servidor
con AWS Key Management Service. Esta característica le
permite administrar la clave de sobre mediante AWS KMS y
Amazon S3 llama a AWS KMS para obtener acceso a la clave
de sobre con los permisos que establezca.

Para obtener más información sobre el cifrado del lado del


servidor con AWS KMS, consulte Protección de los datos
mediante el cifrado del lado del servidor con AWS Key
Management Service.

Región UE (Fráncfort) Amazon S3 ya está disponible en la región UE (Fráncfort). 23 de


octubre de
2014

Cifrado en el servidor Ahora, Amazon S3 admite el cifrado en el servidor con claves 12 de junio
con claves de cifrado de cifrado proporcionadas por el cliente (SSE-C). El cifrado de 2014
proporcionadas por el en el servidor le permite solicitar a Amazon S3 que cifre sus
cliente datos en reposo. Al usar SSE-C, Amazon S3 cifra sus objetos
con las claves de cifrado personalizadas que facilite. Dado
que Amazon S3 realiza el cifrado por usted, disfrutará de los
beneficios de usar sus propias claves de cifrado sin el costo
derivado de escribir o ejecutar su propio código de cifrado.

Para obtener más información sobre SSE-C, consulte Cifrado


del lado del servidor (con claves de cifrado proporcionadas por
el cliente).

Compatibilidad de ciclo Antes de esta versión, la configuración del ciclo de vida solo 20 de mayo
de vida para el control se permitía en los buckets no habilitados para el control de 2014
de versiones. de versiones. Ahora puede configurar el ciclo de vida
tanto en buckets sin control de versiones como en buckets
habilitados para el control de versiones. Para obtener más
información, consulte Administración del ciclo de vida de los
objetos (p. 127).

Revisión de los temas Se ha revisado la documentación sobre control de acceso 15 de abril


de control de acceso de Amazon S3. Para obtener más información, consulte de 2014
Administración de identidad y acceso en Amazon S3 (p. 312).

Versión de API 2006-03-01


782
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Se ha revisado el tema Se ha revisado la documentación de registro de acceso al 26 de


de registro de acceso al servidor. Para obtener más información, consulte Registro de noviembre
servidor acceso al servidor de Amazon S3 (p. 674). de 2013

Actualización de las Las muestras del SDK de .NET de esta guía ahora con 26 de
muestras del SDK compatibles con la versión 2.0. noviembre
de .NET a la versión 2.0 de 2013

Compatibilidad con La compatibilidad con SOAP por HTTP está obsoleta, 20 de


SOAP por HTTP pero aún se encuentra disponible con HTTPS. Las nuevas septiembre
obsoleta características de Amazon S3 no serán compatibles con SOAP. de 2013
Recomendamos que use bien REST API o bien los SDK de
AWS.

Compatibilidad con El lenguaje de la política de acceso de IAM ya es compatible 3 de abril


variables de políticas de con variables. Cuando se evalúa una política, las variables de de 2013
IAM la política se sustituyen por valores facilitados por información
basada en contexto desde la sesión del usuario autenticado.
Puede utilizar las variables de políticas para definir políticas con
un propósito general sin mostrar un listado explícito con todos
los componentes de la política. Para obtener más información
acerca de las variables de políticas, consulte Introducción a las
variables de las políticas de IAM en la Guía del usuario de IAM.

Para obtener algunos ejemplos de variables de políticas de


Amazon S3, consulte Ejemplos de políticas de usuario (p. 396).

Compatibilidad de la Ahora puede configurar su bucket de pago por solicitante con 31 de


consola con pagos por la consola de Amazon S3. Para obtener más información, diciembre
solicitante consulte Configuración de pagos por solicitante con la consola de 2012
de Amazon S3 (p. 84).

Soporte del dominio Amazon S3 ahora es compatible con el alojamiento de sitios 27 de


raíz para alojamiento de web estáticos en el dominio raíz. Los visitantes de su sitio diciembre
sitios web web pueden obtener acceso a su sitio desde su navegador sin de 2012
especificar el "www" en la dirección web (p. ej., "ejemplo.com").
Muchos clientes ya cuentan con alojamientos de sitios web
estáticos en Amazon S3, a los que acceden a través un
subdominio "www" (p. ej., "www.ejemplo.com"). Anteriormente,
para permitir el acceso al dominio raíz, necesitaba ejecutar
sus propias solicitudes desde el servidor web al dominio raíz
del proxy desde navegadores a su sitio web en Amazon S3.
La ejecución de solicitudes desde el servidor web al proxy
introduce costos adicionales, presión operativa y un nuevo
punto potencial de errores. Ahora, puede aprovechar un alto
nivel de disponibilidad y durabilidad de Amazon S3 tanto para
las direcciones "www" como para las del dominio raíz. Para
obtener más información, consulte Alojamiento de un sitio web
estático en Amazon S3 (p. 523).

Revisión de consola Se ha actualizado la consola de Amazon S3. Los temas de la 14 de


documentación que se refieren a la consola se han revisado diciembre
correspondientemente. de 2012

Versión de API 2006-03-01


783
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Compatibilidad para Ahora, Amazon S3 admite una opción de almacenamiento que 13 de


archivar datos en Glacier le permite usar el servicio de almacenamiento a bajo costo noviembre
de Glacier para el archivado de datos. Para archivar objetos, de 2012
debe definir reglas de archivo para identificar los objetos y el
tiempo en que desea que Amazon S3 archive dichos objetos
en Glacier. Puede establecer fácilmente las reglas en un bucket
utilizando la consola de Amazon S3 o empleando la API de
Amazon S3 o los SDK de AWS mediante programación.

Para obtener más información, consulte Administración del


ciclo de vida de los objetos (p. 127).

Soporte de Para los buckets configurados como sitios web, Amazon S3 4 de


redireccionamiento de permite ahora redirigir una solicitud desde un objeto a otro octubre de
páginas web objeto del mismo bucket o a una URL externa. Para obtener 2012
más información, consulte (Opcional) Configuración del
redireccionamiento de páginas web (p. 531).

Para obtener más información acerca del alojamiento de sitios


web, consulte Alojamiento de un sitio web estático en Amazon
S3 (p. 523).

Soporte de uso Ahora, Amazon S3 permite el uso compartido de recursos 31 de


compartido de recursos entre orígenes (CORS). CORS define una forma en la que agosto de
entre orígenes (CORS) las aplicaciones web clientes cargadas en un dominio pueden 2012
interactuar u obtener acceso a los recursos de un dominio
distinto. Con la compatibilidad de CORS en Amazon S3, puede
desarrollar aplicaciones web completas del lado del cliente
sobre Amazon S3 y permitir un acceso entre dominios de forma
selectiva a sus recursos de Amazon S3. Para obtener más
información, consulte Cross-Origin Resource Sharing (CORS,
Uso compartido de recursos entre orígenes) (p. 163).

Soporte de etiquetado Ahora, Amazon S3 permite usar el etiquetado de asignación de 21 de


de asignación de costos costos, lo que le permite etiquetar los buckets de S3 de manera agosto de
que pueda realizar un seguimiento de los costos según los 2012
proyectos y otros criterios más fácilmente. Para obtener más
información acerca del etiquetado de buckets, consulte Uso de
etiquetas de buckets de S3 de asignación de costos (p. 101).

Compatibilidad con Ahora, Amazon S3 admite el acceso a la API protegido por 10 de julio
el acceso a la API MFA, una función que permite emplear la autenticación de 2012
protegido por MFA en multifactor de AWS para obtener un nivel extra de seguridad
políticas de buckets al obtener acceso a sus recursos de Amazon S3. Se trata
de una característica de seguridad que requiere que los
usuarios demuestren una posesión física de un dispositivo
de MFA facilitando un código MFA válido. Para obtener más
información, vaya a AWS Multi-Factor Authentication. Ahora
puede solicitar la autenticación MFA para cualquier solicitud de
acceso a sus recursos de Amazon S3.

Para implementar la autenticación MFA, ahora Amazon S3


permite usar la clave aws:MultiFactorAuthAge en una
política de bucket. Para ver una política de bucket de ejemplo,
consulte Incorporación de una política de bucket para requerir
MFA (p. 391).

Versión de API 2006-03-01


784
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Compatibilidad con el Puede usar el vencimiento de objetos para programar la 27 de


vencimiento de objetos eliminación automática de datos tras un periodo de tiempo diciembre
configurado. Para establecer el vencimiento de un objeto puede de 2011
añadir una configuración del ciclo de vida a un bucket.

Compatibilidad con Ahora, Amazon S3 es compatible con la región América del Sur 14 de
nueva región (São Paulo). Para obtener más información, consulte Acceso a diciembre
un bucket (p. 57). de 2011

Eliminar varios objetos Ahora, Amazon S3 es compatible con la API de eliminación 7 de


de varios objetos, que le permite eliminar varios objetos en diciembre
una sola solicitud. Con esta característica, podrá eliminar de 2011
grandes cantidades de objetos de Amazon S3 con mayor
rapidez que usando varias solicitudes de DELETE individuales.
Para obtener más información, consulte Eliminación de
objetos (p. 236).

Compatibilidad con Ahora, Amazon S3 es compatible con la región EE.UU. Oeste 8 de


nueva región (Oregón). Para obtener más información, consulte Buckets y noviembre
regiones (p. 57). de 2011

Actualización de Correcciones de errores en la documentación. 8 de


documentación noviembre
de 2011

Actualización de Además de las correcciones de errores en la documentación, 17 de


documentación esta versión incluye las siguientes mejoras: octubre de
2011
• Nuevas secciones de cifrado en el lado del servidor con AWS
SDK para PHP (consulte Especificación de cifrado del lado
del servidor con AWS SDK para PHP (p. 286)) y AWS SDK
parar Ruby (consulte Especificación del cifrado del lado del
servidor con AWS SDK parar Ruby (p. 288)).
• Nueva sección sobre creación y comprobación de ejemplos
de Ruby (consulte Uso de la versión 3 de AWS SDK parar
Ruby (p. 709)).

Compatibilidad con el Ahora, Amazon S3 es compatible con el cifrado en el lado del 4 de


cifrado en el servidor servidor. Le permite solicitar a Amazon S3 que cifre sus datos octubre de
en reposo, es decir, cifrar sus datos de objetos cuando Amazon 2011
S3 los escribe en discos de sus centros de datos. Además de
las actualizaciones de la API REST, AWS SDK for Java y .NET
proporcionan la funcionalidad necesaria para solicitar el cifrado
en el servidor. También puede usar el cifrado en el servidor al
cargar objetos con la consola de administración de AWS. Para
obtener más información sobre el cifrado de datos, consulte
Using Data Encryption.

Versión de API 2006-03-01


785
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Actualización de Además de las correcciones de errores en la documentación, 22 de


documentación esta versión incluye las siguientes mejoras: septiembre
de 2011
• Nuevas muestras de Ruby y PHP en la sección Realización
de solicitudes (p. 10).
• Se han agregado secciones que describen cómo generar y
usar las URL prefirmadas. Para obtener más información,
consulte Compartir un objeto con otros (p. 179) y Carga de
objetos con URL prefirmadas (p. 215).
• Se ha actualizado una sección existente para introducir los
exploradores de AWS para Eclipse y Visual Studio. Para
obtener más información, consulte Uso de los SDK, la CLI y
los exploradores de AWS (p. 697).

Compatibilidad para Además de usar sus credenciales de seguridad de su cuenta 3 de agosto


enviar solicitudes de AWS y de su usuario de IAM para enviar solicitudes de 2011
con credenciales de autenticadas a Amazon S3, ahora puede enviar solicitudes
seguridad temporales con las credenciales de seguridad temporales que obtenga
desde AWS Identity and Access Management (IAM). Puede
usar las bibliotecas de encapsulamiento de la API de AWS
Security Token Service o de los SDK de AWS para solicitar
estas credenciales temporales a IAM. Puede solicitar estas
credenciales de seguridad temporales para uso propio o puede
entregarlas a usuarios federados o aplicaciones. Esta función
le permite administrar a sus usuarios fuera de AWS y facilitarles
credenciales temporales de seguridad para obtener acceso a
sus recursos de AWS.

Para obtener más información, consulte Realización de


solicitudes (p. 10).

Para obtener más información acerca de asistencia de IAM


sobre las credenciales de seguridad temporales, consulte
Credenciales de seguridad temporales en la Guía del usuario
de IAM.

Ampliación de la API de Antes de esta versión, la API de Amazon S3 permitía la copia 21 de junio
carga multiparte para de objetos con un tamaño de hasta 5 GB. Para habilitar la copia de 2011
habilitar la copia de de objetos mayores que 5 GB, ahora Amazon S3 amplía la API
objetos de hasta 5 TB de carga multiparte con una nueva operación, Upload Part
(Copy). Puede usar esta operación de carga multiparte para
copiar objetos con un tamaño de hasta 5 TB. Para obtener más
información, consulte Copia de objetos (p. 219).

Para obtener información conceptual sobre la API de carga


multiparte, consulte Carga de objetos con la API de carga
multiparte (p. 186).

Desactivación de las Para aumentar la seguridad, se han desactivado las llamadas 6 de junio
llamadas a la API de a la API de SOAP por HTTP. Las solicitudes autenticadas y de 2011
SOAP por HTTP anónimas a SOAP deben enviarse a Amazon S3 con SSL.

Versión de API 2006-03-01


786
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

IAM admite la Anteriormente, para obtener acceso a un recurso de Amazon 6 de junio


delegación entre S3, un usuario de IAM necesitaba permisos tanto desde la de 2011
cuentas cuenta principal de AWS como del propietario del recurso de
Amazon S3. Con el acceso entre cuentas, el usuario de IAM
ahora solo necesita permiso del propietario de la cuenta. Es
decir, si el propietario de un recurso concede acceso a una
cuenta de AWS, la cuenta de AWS puede permitir a su usuario
de IAM el acceso a dichos recursos.

Para obtener más información, consulte Crear una función para


delegar permisos a un usuario de IAM en la Guía del usuario de
IAM.

Para obtener más información sobre cómo especificar


principales en una política de bucket, consulte Especificación
de un elemento principal en una política (p. 356).

Nuevo enlace La información de punto de conexión de este servicio se 1 de marzo


encuentra ahora en la referencia general de AWS. Para obtener de 2011
más información, vaya a Regiones y puntos de enlace en la
Referencia general de AWS.

Compatibilidad con Amazon S3 presenta una compatibilidad mejorada para 17 de


el alojamiento de albergar sitios web estáticos. Esto incluye soporte para febrero de
sitios web estáticos en documentos de índice y documentos de error personalizados. 2011
Amazon S3 Al utilizar estas funciones, las solicitudes a la raíz de su
bucket o una subcarpeta (e.g., http://mywebsite.com/
subfolder) devuelven el documento de índice en vez de la
lista de objetos en su bucket. Si se encuentra un error, Amazon
S3 devuelve su mensaje de error personalizado, en lugar
de un mensaje de error de Amazon S3. Para obtener más
información, consulte Alojamiento de un sitio web estático en
Amazon S3 (p. 523).

Compatibilidad con La API REST de GET Object ahora permite cambiar los 14 de
encabezados de encabezados de respuesta de la solicitud GET Object de REST enero de
respuesta en la API en cada caso. Es decir, puede alterar los metadatos del objeto 2011
en la respuesta sin alterar el objeto en sí. Para obtener más
información, consulte Obtención de objetos (p. 173).

Compatibilidad con Amazon S3 ha incrementado el tamaño máximo de objetos que 9 de


objetos grandes puede almacenar en un bucket de S3, de 5 GB a 5 TB. Si usa diciembre
la API REST, podrá cargar objetos de hasta 5 GB de tamaño de 2010
en una única operación PUT. Para objetos más grandes, debe
usar la API REST de carga multiparte para cargar objetos
en partes. Para obtener más información, consulte Carga de
objetos con la API de carga multiparte (p. 186).

Carga multiparte La carga multiparte permite cargas más rápidas y flexibles en 10 de


Amazon S3. Permite cargar un solo objeto como un conjunto noviembre
de partes. Para obtener más información, consulte Carga de de 2010
objetos con la API de carga multiparte (p. 186).

Compatibilidad con ID Ahora puede especificar ID canónicos en políticas de bucket. 17 de


canónicos en políticas Para obtener más información, consulte Información general septiembre
de bucket del lenguaje de la política de acceso (p. 354) de 2010

Versión de API 2006-03-01


787
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

Amazon S3 funciona con Ahora, este servicio se integra con AWS Identity and Access 2 de
IAM Management (IAM). Para obtener más información, consulte septiembre
Servicios de AWS que funcionan con IAM en la Guía del de 2010
usuario de IAM.

Notificaciones La función de notificaciones de Amazon S3 le permite 14 de julio


configurar un bucket de modo que Amazon S3 publique de 2010
un mensaje en un tema de Amazon Simple Notification
Service (Amazon SNS) cuando Amazon S3 detecta un evento
clave en un bucket. Para obtener más información, consulte
Configuración de notificaciones de eventos de bucket (p. 551).

Políticas de buckets Las políticas de buckets conforman un sistema de 6 de julio


administración de acceso que se usa para establecer permisos de 2010
de acceso entre buckets, objetos y conjuntos de objetos. Esta
funcionalidad suplementa, y en muchos casos sustituye, a las
listas de control de acceso. Para obtener más información,
consulte Uso de políticas de bucket y usuario (p. 353).

Sintaxis estilo ruta Ahora, Amazon S3 admite la sintaxis estilo ruta para cualquier 9 de junio
disponibles en todas las bucket en la región clásica de EE.UU., o si el bucket está en de 2010
regiones la misma región que el punto de conexión de la solicitud. Para
obtener más información, consulte Alojamiento virtual (p. 46).

Nuevo punto de Ahora, Amazon S3 proporciona un punto de conexión 9 de junio


conexión para la UE para la región UE (Irlanda): http://s3-eu- de 2010
(Irlanda) west-1.amazonaws.com.

Consola Ahora puede usar Amazon S3 mediante la Consola de 9 de junio


administración de AWS. Puede obtener más información sobre de 2010
la funcionalidad de Amazon S3 en la consola en la Guía del
usuario de la consola de Amazon Simple Storage Service.

Redundancia reducida Ahora, Amazon S3 le permite reducir sus costos de 12 de mayo


almacenamiento almacenando objetos en Amazon S3 con de 2010
redundancia reducida. Para obtener más información, consulte
Almacenamiento de redundancia reducida (p. 6).

Compatibilidad con Ahora, Amazon S3 es compatible con la región Asia Pacífico 28 de abril
nueva región (Singapur). Para obtener más información, consulte Buckets y de 2010
regiones (p. 57).

Control de versiones de Esta versión introduce el control de versiones de objetos. 8 de


objetos Ahora, todos los objetos pueden tener una clave y una versión. febrero de
Si activa el control de versiones en un bucket, Amazon 2010
S3 da a todos los objetos agregados a un bucket un ID de
versión exclusivo. Esta función le permite recuperarse de
sobrescrituras y eliminaciones no intencionadas. Para obtener
más información, consulte Control de versiones (p. 8) y Uso del
control de versiones (p. 449).

Compatibilidad con Ahora, Amazon S3 es compatible con la región EE.UU. 2 de


nueva región Oeste (Norte de California). El nuevo punto de conexión para diciembre
solicitudes en esta región es s3-us-west-1.amazonaws.com. de 2009
Para obtener más información, consulte Buckets y
regiones (p. 57).

Versión de API 2006-03-01


788
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

AWS SDK para .NET Ahora, AWS proporciona bibliotecas, código de muestra, 11 de
tutoriales y otros recursos para los desarrolladores de software noviembre
que prefieren crear aplicaciones usando operaciones de la de 2009
API específicas del lenguaje .NET en lugar de REST o SOAP.
Estas bibliotecas proporcionan funciones básicas (que no se
incluyen en las API REST o SOAP), como la autenticación de
solicitudes, los reintentos de solicitudes y la administración de
errores para que se pueda comenzar más fácilmente. Para
obtener más información sobre las bibliotecas y recursos
específicos a lenguajes, consulte Uso de los SDK, la CLI y los
exploradores de AWS (p. 697).

Versión de API 2006-03-01


789
Amazon Simple Storage Service Guía del desarrollador

AWS Glossary
For the latest AWS terminology, see the AWS Glossary in the AWS General Reference.

Versión de API 2006-03-01


790

También podría gustarte