Nothing Special   »   [go: up one dir, main page]

Amazon Simple Storage Service: Guía Del Desarrollador Versión de API 2006-03-01

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

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 © 2020 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 de utilizar 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
Administración de identidades y accesos de AWS ................................................................... 7
Listas de control de acceso ................................................................................................. 7
Control de versiones ........................................................................................................... 8
Operaciones ...................................................................................................................... 8
Interfaz de programación de aplicaciones de Amazon S3 (API) .......................................................... 8
La interfaz de REST ........................................................................................................... 8
La interfaz de SOAP ........................................................................................................... 9
Pago de Amazon S3 ................................................................................................................... 9
Servicios relacionados ................................................................................................................. 9
Realizar solicitudes ........................................................................................................................... 10
Acerca de las claves de acceso .................................................................................................. 10
Claves de acceso de la cuenta de AWS .............................................................................. 10
Claves de acceso de usuario de IAM ................................................................................... 10
Credenciales de seguridad temporales ................................................................................. 11
Puntos de enlace de solicitud ..................................................................................................... 12
Realizar solicitudes mediante IPv6 .............................................................................................. 12
Introducción a IPv6 ........................................................................................................... 12
Usar direcciones IPv6 en políticas de IAM ............................................................................ 13
Probar la compatibilidad de dirección IP ............................................................................... 14
Usar puntos de enlace de doble pila .................................................................................... 15
Realizar solicitudes con los SDK de AWS .................................................................................... 18
Usar un cuenta de AWS o credenciales de usuario de IAM ..................................................... 19
Usar credenciales temporales de usuario de IAM ................................................................... 26
Usar credenciales temporales de usuario federado ................................................................ 34
Realizar solicitudes con la API de REST ...................................................................................... 45
Crear nombres de host de S3 para solicitudes de la API de REST ............................................ 45
Solicitudes de tipo de alojamiento virtual y de tipo ruta ........................................................... 45
Puntos de enlace de doble pila (API de REST) ..................................................................... 46
Alojamiento virtual de buckets ............................................................................................ 47
Solicitar redireccionamiento y la API de REST ...................................................................... 52
Buckets ........................................................................................................................................... 55
Creación de un bucket .............................................................................................................. 55
Consola de Amazon S3 ..................................................................................................... 56
API REST ........................................................................................................................ 56
SDK de AWS ................................................................................................................... 56
Acerca de los permisos ..................................................................................................... 57
Administración del acceso público a los buckets ............................................................................ 57
Acceso a un bucket .................................................................................................................. 57
Acceso de tipo alojamiento virtual ....................................................................................... 58
Acceso de tipo ruta ........................................................................................................... 58

Versión de API 2006-03-01


iii
Amazon Simple Storage Service Guía del desarrollador

Acceso a un bucket de S3 mediante el IPv6 ......................................................................... 59


Acceso a un bucket a través de un punto de acceso de S3 ..................................................... 59
Acceso a un bucket mediante S3:// ..................................................................................... 59
Opciones de configuración de buckets ......................................................................................... 59
Restricciones y limitaciones ........................................................................................................ 61
Reglas para la nomenclatura .............................................................................................. 62
Ejemplos de creación de buckets ................................................................................................ 63
Uso de la consola de Amazon S3 ....................................................................................... 64
Uso del AWS SDK for Java. ............................................................................................... 64
Uso del AWS SDK para .NET ............................................................................................. 65
Mediante el AWS SDK para Ruby versión 3 ......................................................................... 66
Mediante otros SDK de AWS ............................................................................................. 66
Eliminar o vaciar un bucket ........................................................................................................ 66
Eliminar un bucket ............................................................................................................ 67
Vaciar un bucket ............................................................................................................... 69
Cifrado predeterminado de un bucket .......................................................................................... 70
Cómo configurar el cifrado predeterminado para un bucket de Amazon S3 ................................. 71
Uso del cifrado para operaciones entre cuentas .................................................................... 71
Uso del cifrado predeterminado con la replicación .................................................................. 71
Monitorización del cifrado predeterminado con CloudTrail y CloudWatch .................................... 72
Más información ............................................................................................................... 72
Transfer Acceleration ................................................................................................................. 73
¿Por qué utilizar Transfer Acceleration? ............................................................................... 73
Introducción ..................................................................................................................... 74
Requisitos de uso de Aceleración de transferencia de Amazon S3 ............................................ 75
Transfer Acceleration Ejemplos ........................................................................................... 75
Buckets de pago por solicitante .................................................................................................. 80
Configuración con la consola .............................................................................................. 80
Configuración con la API REST .......................................................................................... 81
Detalles de cargos ............................................................................................................ 83
Control de acceso ..................................................................................................................... 83
Informes de facturación y de uso ................................................................................................ 84
Informes de facturación ..................................................................................................... 84
Informe de uso ................................................................................................................. 86
Cómo interpretar los informes de facturación y de uso ............................................................ 88
Uso de etiquetas de asignación de costos ............................................................................ 97
Puntos de acceso ........................................................................................................................... 100
Crear puntos de acceso ........................................................................................................... 100
Reglas para asignar nombres a los puntos de acceso de Amazon S3 ...................................... 101
Crear puntos de acceso restringidos a una nube privada virtual .............................................. 101
Administrar el acceso público a los puntos de acceso ........................................................... 103
Configurar las políticas de IAM para el uso de puntos de acceso ............................................ 104
Usar puntos de acceso ............................................................................................................ 108
Compatibilidad de los puntos de acceso con las operaciones de S3 y los servicios de AWS ......... 109
Monitoreo y registro ......................................................................................................... 110
Ejemplos ........................................................................................................................ 110
Restricciones y limitaciones ...................................................................................................... 112
Objetos .......................................................................................................................................... 113
Clave y metadatos de objetos ................................................................................................... 114
Claves de objeto ............................................................................................................. 114
Metadatos de objetos ...................................................................................................... 117
Clases de almacenamiento ....................................................................................................... 119
Clases de almacenamiento para objetos a los que se obtiene acceso con frecuencia ................. 120
Clase de almacenamiento para optimizar automáticamente los objetos a los que se obtiene
acceso frecuente e infrecuentemente ................................................................................. 120
Clases de almacenamiento para objetos a los que se obtiene acceso con poca frecuencia .......... 121
Clases de almacenamiento para el archivado de objetos ....................................................... 122

Versión de API 2006-03-01


iv
Amazon Simple Storage Service Guía del desarrollador

Comparación de las clases de almacenamiento de Amazon S3 .............................................. 123


Establecimiento de la clase de almacenamiento de un objeto ................................................. 123
Subrecursos ........................................................................................................................... 124
Control de versiones de S3 ...................................................................................................... 125
Etiquetado de objetos .............................................................................................................. 127
Operaciones de la API relacionadas con el etiquetado de objetos ........................................... 129
Etiquetar objetos e información adicional ............................................................................ 130
Administrar etiquetas de objetos ........................................................................................ 133
Administración del ciclo de vida ................................................................................................ 136
¿Cuándo se debe usar la configuración del ciclo de vida? ..................................................... 137
¿Cómo se puede configurar un ciclo de vida? ..................................................................... 137
Consideraciones adicionales ............................................................................................. 138
Elementos de configuración del ciclo de vida ....................................................................... 145
Ejemplos de configuración del ciclo de vida ........................................................................ 152
Configurar el ciclo de vida ................................................................................................ 162
Compartir recursos entre orígenes (CORS) ................................................................................. 171
Compartir recursos entre orígenes: escenarios de casos de uso ............................................. 172
¿Cómo se configura CORS en mi bucket? .......................................................................... 172
¿Cómo Amazon S3 evalúa la configuración CORS en un bucket? .......................................... 174
Habilitar CORS ............................................................................................................... 175
Solución de problemas de CORS ...................................................................................... 180
Operaciones en objetos ........................................................................................................... 181
Obtención de objetos ....................................................................................................... 181
Carga de objetos ............................................................................................................ 190
Copia de objetos ............................................................................................................. 229
Listas de claves de objetos .............................................................................................. 240
Eliminación de objetos ..................................................................................................... 246
Seleccionar contenido de los objetos ................................................................................. 266
Restaurar objetos archivados ............................................................................................ 270
Consultar objetos archivados ............................................................................................ 275
Análisis de clases de almacenamiento ............................................................................................... 279
Cómo se configura el análisis de clases de almacenamiento .......................................................... 279
Análisis de clases de almacenamiento ....................................................................................... 280
¿Cómo se pueden exportar los datos del análisis de clases de almacenamiento? .............................. 283
Diseño del archivo de exportación del análisis de clases de almacenamiento ............................ 284
API de REST de análisis de Amazon S3 .................................................................................... 284
Seguridad ...................................................................................................................................... 285
Protección de los datos ............................................................................................................ 285
Privacidad entre redes ..................................................................................................... 286
Cifrado de datos ............................................................................................................. 286
Administración de identidades y accesos .................................................................................... 325
Introducción a la administración del acceso a los recursos de Amazon S3 ................................ 325
Opciones de acceso a los recursos de Amazon S3 .............................................................. 326
Información general ......................................................................................................... 326
Cómo Amazon S3 autoriza una solicitud ............................................................................. 332
Directrices para usar las opciones de política de acceso disponibles ....................................... 339
Tutoriales de ejemplo: Administrar acceso .......................................................................... 342
Uso de políticas de bucket y usuario .................................................................................. 370
Administración de acceso con ACL .................................................................................... 474
Bloquear acceso público .................................................................................................. 488
Registro y monitorización ......................................................................................................... 497
Validación de la conformidad .................................................................................................... 498
Inventario ....................................................................................................................... 499
Resiliencia .............................................................................................................................. 508
Cifrar copia de seguridad ................................................................................................. 509
Control de versiones ........................................................................................................ 509
Bloquear objetos ............................................................................................................. 532

Versión de API 2006-03-01


v
Amazon Simple Storage Service Guía del desarrollador

Seguridad de la infraestructura .................................................................................................. 539


Configuración y análisis de vulnerabilidades ................................................................................ 540
Prácticas recomendadas de seguridad ....................................................................................... 540
Prácticas recomendadas preventivas de seguridad de Amazon S3 .......................................... 541
Monitorización y auditoría de prácticas recomendadas de Amazon S3 ..................................... 544
Operaciones por lotes de S3 ............................................................................................................ 546
Terminología .......................................................................................................................... 546
Conceptos básicos: trabajos ..................................................................................................... 547
Cómo funciona un trabajo ................................................................................................ 547
Especificar un manifiesto .................................................................................................. 547
Crear un trabajo ...................................................................................................................... 548
Crear una solicitud de trabajo ........................................................................................... 549
Crear una respuesta de trabajo ......................................................................................... 550
Conceder permisos para Operaciones por lotes ................................................................... 550
Operaciones ........................................................................................................................... 555
Copiar objetos PUT ......................................................................................................... 556
Iniciar objetos para restauración ........................................................................................ 556
Invocar una función Lambda ............................................................................................. 557
ACL del objeto PUT ........................................................................................................ 565
Etiquetar objeto PUT ....................................................................................................... 565
Administración de fechas de retención S3 Bloqueo de objetos ................................................ 566
Gestión de la retención legal S3 Bloqueo de objetos ............................................................ 567
Administrar trabajos ................................................................................................................. 568
Mostrar trabajos .............................................................................................................. 568
Consultar detalles del trabajo ............................................................................................ 568
Controlar el acceso y etiquetar trabajos usando etiquetas ...................................................... 569
Asignar prioridad a los trabajos ......................................................................................... 570
Estado del trabajo ........................................................................................................... 570
Realizar un seguimiento de los errores de los trabajos .......................................................... 572
Notificaciones y registro ................................................................................................... 573
Informes de finalización .................................................................................................... 573
Ejemplos ................................................................................................................................ 573
Ejemplos de Operaciones por lotes usando la AWS CLI ........................................................ 574
Ejemplos de Operaciones por lotes usando Java ................................................................. 587
Ejemplos de etiquetas de trabajo ....................................................................................... 602
Ejemplos de informes de finalización .................................................................................. 607
Ejemplos de copias entre cuentas ..................................................................................... 609
Creación de reglas EventBridge para ver eventos de trabajos Operaciones por lotes .................. 614
Alojar un sitio web estático ............................................................................................................... 618
Puntos de enlace de sitio web .................................................................................................. 618
Ejemplos de puntos de enlace de sitio web ......................................................................... 619
Agregar un CNAME DNS ................................................................................................. 620
Usar un dominio personalizado con Route 53 ...................................................................... 620
Diferencias clave entre el punto de enlace de un sitio web y un punto de enlace de la API de
REST ............................................................................................................................ 620
Configurar un bucket mediante la consola ................................................................................... 621
Habilitar el alojamiento de sitios web ................................................................................. 621
Configurar un documento de índice ................................................................................... 622
Configurar permisos para el acceso a sitios web .................................................................. 624
(Opcional) Registro del tráfico web .................................................................................... 627
(Opcional) Configurar un documento de error personalizado .................................................. 628
(Opcional) Configurar el redireccionamiento ........................................................................ 630
Configurar mediante programación un bucket .............................................................................. 636
Mediante AWS SDK for Java ............................................................................................ 637
Mediante AWS SDK para .NET ......................................................................................... 638
Mediante SDK para PHP .................................................................................................. 640
Mediante la API de REST ................................................................................................ 641

Versión de API 2006-03-01


vi
Amazon Simple Storage Service Guía del desarrollador

Tutoriales de ejemplo .............................................................................................................. 641


Configurar un sitio web estático ........................................................................................ 641
Configurar un sitio web estático con un dominio personalizado ............................................... 647
Notificaciones ................................................................................................................................. 662
Información general ................................................................................................................. 662
Cómo habilitar las notificaciones de eventos ............................................................................... 664
Tipos y destinos de las notificaciones de eventos ........................................................................ 665
Tipos de eventos admitidos .............................................................................................. 665
Destinos admitidos .......................................................................................................... 667
Configurar notificaciones con filtrado de nombre de clave de objeto ................................................ 667
Ejemplos de configuraciones de notificaciones válidas con filtrado de nombre de clave de objeto .. 668
Ejemplos de configuraciones de notificación con superposición de prefijo/sufijo no válida ............ 670
Conceder permisos para publicar mensajes de notificación de eventos en un destino ......................... 672
Conceder permisos para invocar una función AWS Lambda .................................................. 672
Conceder permisos para publicar mensajes en un tema de SNS o una cola de SQS .................. 672
Tutorial de ejemplo: agregar notificaciones de bucket utilizando SNS y SQS ..................................... 674
Resumen del tutorial ........................................................................................................ 674
Paso 1: Crear un tema de Amazon SNS ............................................................................ 675
Paso 2: Crear una cola de Amazon SQS ............................................................................ 676
Paso 3: Agregar una configuración de notificación a su bucket ............................................... 677
Paso 4: Probar la configuración ........................................................................................ 680
Estructura de mensaje de evento .............................................................................................. 680
Replicación ..................................................................................................................................... 684
Tipos de replicación de objetos ................................................................................................. 684
Motivos para usar la replicación ................................................................................................ 684
Cuándo se debe usar la CRR ................................................................................................... 685
Cuándo se debe usar la SRR ................................................................................................... 685
Requisitos de replicación .......................................................................................................... 685
¿Qué replica Amazon S3? ....................................................................................................... 686
¿Qué se replica? ............................................................................................................ 686
Elementos que no se replican ........................................................................................... 687
Replicación de objetos existentes ...................................................................................... 689
Temas relacionados ........................................................................................................ 689
Información general de configuración de la replicación .................................................................. 689
Información general de la configuración de replicación .......................................................... 690
Configuración de permisos para la replicación ..................................................................... 699
Configuraciones de replicación adicionales .................................................................................. 702
S3 Replication Time Control (S3 RTC) ............................................................................... 702
Cambiar el propietario de la réplica ................................................................................... 705
Replicar objetos cifrados .................................................................................................. 708
Tutoriales de replicación ........................................................................................................... 713
Ejemplo 1: Configurar buckets de la misma cuenta .............................................................. 714
Ejemplo 2: Configurar buckets en cuentas diferentes ............................................................ 723
Ejemplo 3: Cambiar el propietario de la réplica .................................................................... 724
Ejemplo 4: Replicar objetos cifrados .................................................................................. 728
Ejemplo 5: S3 Replication Time Control (S3 RTC) ................................................................ 733
Información del estado de replicación ......................................................................................... 735
Temas relacionados ........................................................................................................ 737
Solución de problemas de replicación ........................................................................................ 737
Temas relacionados ........................................................................................................ 738
Replicación: consideraciones adicionales .................................................................................... 738
Configuración de ciclo de vida y réplicas de objetos ............................................................. 739
Configuración del control de versión y la replicación ............................................................. 739
Configuración de registro y replicación ............................................................................... 739
CRR y la región de destino .............................................................................................. 739
Interrupción temporal de replicación ................................................................................... 740
Temas relacionados ........................................................................................................ 740

Versión de API 2006-03-01


vii
Amazon Simple Storage Service Guía del desarrollador

Enrutamiento de solicitudes .............................................................................................................. 741


Solicitar redireccionamiento y la API de REST ............................................................................. 741
Enrutamiento de DNS ...................................................................................................... 741
Redireccionamiento temporal de solicitud ............................................................................ 742
Redireccionamiento permanente de solicitud ....................................................................... 744
Ejemplos de redireccionamiento de solicitud ........................................................................ 744
Consideraciones sobre DNS ..................................................................................................... 745
Optimización del rendimiento de Amazon S3 ....................................................................................... 746
Directrices de rendimiento ........................................................................................................ 747
Medición del rendimiento .................................................................................................. 747
Escalado horizontal ......................................................................................................... 747
Uso de recuperaciones de rango de byte ............................................................................ 747
Reintento de solicitudes ................................................................................................... 748
Combinación de Amazon S3 y Amazon EC2 en la misma región ............................................ 748
Uso de Transfer Acceleration para minimizar la latencia ........................................................ 748
Uso de los SDK de AWS más recientes ............................................................................. 748
Patrones de diseño de rendimiento ............................................................................................ 749
Almacenamiento en caché para el contenido de acceso frecuente .......................................... 749
Tiempos de espera y reintentos de aplicaciones sensibles a la latencia .................................... 750
Escalado horizontal y uso en paralelo de solicitudes ............................................................. 750
Aceleración de las transferencias de datos dispares en sentido geográfico .............................. 751
Monitorización ................................................................................................................................. 753
Herramientas de monitoreo ....................................................................................................... 753
Herramientas automatizadas ............................................................................................. 753
Herramientas manuales .................................................................................................... 754
Monitoreo de métricas con CloudWatch ...................................................................................... 754
Métricas y dimensiones .................................................................................................... 755
Métricas diarias de almacenamiento para buckets de Amazon S3 para CloudWatch ................... 755
Métricas de solicitudes de Amazon S3 para CloudWatch ....................................................... 756
Métricas de replicación de CloudWatch en Amazon S3 ......................................................... 759
Dimensiones de Amazon S3 CloudWatch ........................................................................... 759
Acceder a las métricas de CloudWatch .............................................................................. 761
Recursos relacionados ..................................................................................................... 762
Configuraciones de métricas para buckets .................................................................................. 762
Entrega de métricas de CloudWatch de mejor esfuerzo ......................................................... 763
Filtrar configuraciones de métricas ..................................................................................... 763
Cómo agregar configuraciones de métricas ......................................................................... 763
Registro con Amazon S3 .......................................................................................................... 764
Registrar llamadas a la API con AWS CloudTrail ......................................................................... 766
Información de Amazon S3 en CloudTrail ........................................................................... 766
Uso de registros de CloudTrail con los registros de acceso al servidor en Amazon S3 y
CloudWatch Logs ............................................................................................................ 771
Ejemplo: entradas de archivos de registro de Amazon S3 ..................................................... 772
Recursos relacionados ..................................................................................................... 774
Identificar solicitudes de Amazon S3 mediante CloudTrail .............................................................. 774
Cómo CloudTrail captura las solicitudes realizadas a Amazon S3 ........................................... 774
Habilitar el registro de eventos de CloudTrail para los buckets y los objetos de S3 ..................... 775
Identificar solicitudes realizadas a Amazon S3 en un registro de CloudTrail .............................. 775
Usar AWS CloudTrail para identificar solicitudes de Signature Version 2 de Amazon S3 .............. 777
Usar CloudTrail para identificar el acceso a objetos de Amazon S3 ......................................... 780
Recursos relacionados ..................................................................................................... 774
BitTorrent ....................................................................................................................................... 782
Cómo se le cobran las entregas por BitTorrent ............................................................................ 782
Usar BitTorrent para recuperar objetos almacenados en Amazon S3 ............................................... 783
Publicar contenido con Amazon S3 y BitTorrent ........................................................................... 784
Control de errores ........................................................................................................................... 785
La respuesta de error de REST ................................................................................................ 785

Versión de API 2006-03-01


viii
Amazon Simple Storage Service Guía del desarrollador

Encabezados de respuesta ............................................................................................... 785


Respuesta de error ......................................................................................................... 786
La respuesta de error de SOAP ................................................................................................ 787
Prácticas recomendadas para errores de Amazon S3 ................................................................... 787
Reintente en caso de recibir una respuesta de InternalErrors ................................................. 787
Ajustar la aplicación para errores SlowDown repetidos .......................................................... 787
Aislar los errores ............................................................................................................. 788
Solución de problemas de Amazon S3 ............................................................................................... 789
Solución de problemas de Amazon S3 por síntoma ...................................................................... 789
Aumentos significativos en las respuestas HTTP 503 a solicitudes para buckets con control de
versiones habilitado ......................................................................................................... 789
Comportamiento inesperado al acceder a los buckets configurados con CORS ......................... 790
Obtención de ID de solicitudes de Amazon S3 para AWS Support .................................................. 790
Utilización de HTTP para obtener ID de solicitudes .............................................................. 790
Utilización de un navegador web para obtener ID de solicitudes ............................................. 791
Utilización de los SDK de AWS para obtener ID de solicitudes ............................................... 791
Uso de AWS CLI para obtener ID de solicitudes .................................................................. 792
Temas relacionados ................................................................................................................ 792
Server access logging (Registro de acceso del servidor) ....................................................................... 794
Cómo habilitar el registro de acceso al servidor ........................................................................... 794
Consideraciones adicionales sobre el registro ...................................................................... 796
Formato de clave de objeto de registro ...................................................................................... 796
¿Cómo se envían los registros? ................................................................................................ 796
Envío de archivos de registro de servidor según el mejor esfuerzo .................................................. 797
Los cambios del estado de los registros del bucket surten efecto con el tiempo ................................. 797
Habilitar el registro con la consola ............................................................................................. 797
Habilitar registros mediante programación ................................................................................... 798
Habilitación de registros ................................................................................................... 798
Conceder permisos de WRITE y READ_ACP al grupo entrega de registros .............................. 798
Ejemplo: AWS SDK para .NET .......................................................................................... 799
Recursos relacionados ..................................................................................................... 800
Formato de registro ................................................................................................................. 801
Registros adicionales para operaciones de copia ................................................................. 806
Información de registro de acceso personalizada ................................................................. 810
Consideraciones sobre programación para el formato de registro de acceso al servidor extensible 810
Eliminar archivos de registro ..................................................................................................... 810
Recursos relacionados ..................................................................................................... 811
Uso de registros de acceso de Amazon S3 para identificar solicitudes de Amazon S3 ........................ 811
Habilitar registros de acceso de Amazon S3 para solicitudes ................................................. 811
Consultar registros de acceso de Amazon S3 para solicitudes ................................................ 813
Usar los archivos de registro de Amazon S3 para identificar solicitudes SigV2 ........................... 816
Usar archivos de registro de Amazon S3 para identificar el acceso a objetos ............................ 816
Recursos relacionados ..................................................................................................... 817
SDK y exploradores de AWS ............................................................................................................ 818
Especificación de Signature Version en la autenticación de solicitudes ............................................ 819
AWS Signature Version 2 se va a desactivar (esta característica quedará obsoleta) para Amazon
S3 ................................................................................................................................. 821
Transición de Signature Version 2 a Signature Version 4 ....................................................... 822
Configuración de la CLI de AWS ............................................................................................... 825
Uso del AWS SDK for Java. ..................................................................................................... 826
La organización de API de Java ........................................................................................ 827
Prueba de ejemplos de código Java de Amazon S3 ............................................................. 827
Uso del AWS SDK para .NET ................................................................................................... 827
La organización de la API de .NET .................................................................................... 828
Ejecución de ejemplos de código .NET de Amazon S3 ......................................................... 829
Uso del AWS SDK para PHP y ejecución de ejemplos de PHP ...................................................... 829
Niveles de AWS SDK para PHP ...................................................................................... 829

Versión de API 2006-03-01


ix
Amazon Simple Storage Service Guía del desarrollador

Ejecución de ejemplos de PHP ......................................................................................... 830


Recursos relacionados ..................................................................................................... 830
Uso de la versión 3 de AWS SDK parar Ruby ............................................................................. 830
La organización de la API de Ruby .................................................................................... 830
Prueba de ejemplos de script de Ruby ............................................................................... 830
Uso del AWS SDK for Python (Boto) ......................................................................................... 831
Uso de los AWS Mobile SDK para iOS y Android ........................................................................ 831
Más información .............................................................................................................. 832
Uso de la biblioteca de JavaScript de AWS Amplify ...................................................................... 832
Más información .............................................................................................................. 832
Apéndices ...................................................................................................................................... 833
Apéndice A: Usar la API de SOAP ............................................................................................ 833
Elementos comunes de la API de SOAP ............................................................................ 833
Autenticar solicitudes SOAP ............................................................................................. 834
Configurar políticas de acceso con SOAP ........................................................................... 835
Apéndice B: Autenticar solicitudes (AWS Signature Version 2) ....................................................... 836
Autenticar solicitudes con la API de REST .......................................................................... 836
Firmar y autenticar las solicitudes REST ............................................................................. 838
Cargas basadas en el navegador con POST ....................................................................... 849
Recursos ....................................................................................................................................... 865
Referencia de la SQL ...................................................................................................................... 866
Comando SELECT .................................................................................................................. 866
Lista SELECT ................................................................................................................. 866
Cláusula FROM .............................................................................................................. 866
Cláusula WHERE ............................................................................................................ 868
Cláusula LIMIT (solo para Amazon S3 Select) ..................................................................... 869
Acceso mediante atributos ................................................................................................ 869
Distinción entre mayúsculas y minúsculas en los nombres de atributos o encabezados ............... 870
Uso de palabras clave reservadas como términos definidos por el usuario ................................ 871
Expresiones escalares ..................................................................................................... 871
Tipos de datos ........................................................................................................................ 872
Conversiones de tipos de datos ........................................................................................ 872
Tipos de datos admitidos ................................................................................................. 872
Operadores ............................................................................................................................ 873
Operadores lógicos ......................................................................................................... 873
Operadores de comparación ............................................................................................. 873
Operadores de coincidencia de patrones ............................................................................ 873
Operadores unitarios ....................................................................................................... 873
Operadores matemáticos .................................................................................................. 873
Jerarquía de los operadores ............................................................................................. 873
Palabras clave reservadas ........................................................................................................ 874
Funciones SQL ....................................................................................................................... 878
Funciones de agregación (solo Amazon S3 Select) .............................................................. 878
Funciones condicionales .................................................................................................. 879
Funciones de conversión .................................................................................................. 881
Funciones Date ............................................................................................................... 882
Funciones de cadena ...................................................................................................... 888
Historial de revisión ......................................................................................................................... 891
Actualizaciones anteriores ........................................................................................................ 896
AWS glossary ................................................................................................................................. 912

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 buckets, los puntos de
acceso y los objetos, así como el modo de 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. 55)

¿Cómo trabajo con puntos de acceso? Administrar el acceso a datos con puntos de acceso de
Amazon S3 (p. 100)

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

¿Cómo se hacen solicitudes? Realizar solicitudes (p. 10)

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


recursos? S3 (p. 325)

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 de utilizar Amazon S3 (p. 2)
• Conceptos de Amazon S3 (p. 3)
• Características de Amazon S3 (p. 6)
• Interfaz de programación de aplicaciones de Amazon S3 (API) (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 de utilizar 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 por HTTP está obsoleta, 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
awsexamplebucket1 en la región EE.UU. Oeste (Oregón), es direccionable mediante la URL https://
awsexamplebucket1.s3.us-west-2.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. 509).

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

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. 509).

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
opcional, una versión. Por ejemplo, en el URL https://doc.s3.amazonaws.com/2006-03-01/
AmazonS3.wsdl, "doc" es el nombre del bucket y "2006-03-01/AmazonS3.wsdl" es la clave.

Versión de API 2006-03-01


3
Amazon Simple Storage Service Guía del desarrollador
Regiones

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 Europa (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 a un nombre de clave antes de crear el objeto y después crea el objeto poco después de eso, un GET
posterior podría no devolver el objeto debido a la consistencia final.

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.

Los buckets tienen un modelo de consistencia similar, con las mismas advertencias. Por ejemplo, si elimina
un bucket y enumera inmediatamente todos los buckets, puede que Amazon S3 siga apareciendo en la
lista.

Versión de API 2006-03-01


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

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

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.

Versión de API 2006-03-01


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

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).
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)
• Administración de identidades y accesos de AWS (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 S3 Glacier para un archivado a largo plazo.

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

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
Administración de identidades y accesos de AWS

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. 370).

Administración de identidades y accesos de AWS


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. 474).

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. 125).

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.

Interfaz de programación de aplicaciones de


Amazon S3 (API)
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 por HTTP está obsoleta, 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 por HTTP está obsoleta, 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 https://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 (Amazon EC2) – 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

Realizar solicitudes
Temas
• Acerca de las claves de acceso (p. 10)
• Puntos de enlace de solicitud (p. 12)
• Realizar solicitudes a Amazon S3 mediante IPv6 (p. 12)
• Realizar solicitudes con los SDK de AWS (p. 18)
• Realizar 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 de 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 Firmar y autenticar las solicitudes REST (p. 838). Para obtener
información acerca del envío de solicitudes con los SDK de AWS, consulte Realizar solicitudes con los
SDK de AWS (p. 18).

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. 446). 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.

Realizar 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)
• Usar direcciones IPv6 en políticas de IAM (p. 13)
• Probar la compatibilidad de dirección IP (p. 14)
• Usar puntos de enlace de doble pila de 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 de 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 Usar 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. 801) y Registro de acceso al servidor de Amazon S3 (p. 794).
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
Usar direcciones IPv6 en políticas de IAM

Realizar solicitudes mediante IPv6 con puntos de enlace de doble


pila
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 Usar puntos de enlace de doble pila desde la AWS CLI (p. 15).
• Los Software Development Kit (SDK, kits de desarrollo de software) de AWS, consulte Usar 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
Realizar 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

Usar 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. 325).

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:*",
"Resource": "arn:aws:s3:::examplebucket/*",

Versión de API 2006-03-01


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

"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. 443).

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.

Probar la 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.

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

Versión de API 2006-03-01


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

Usar puntos de enlace de doble pila de 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 de Amazon S3 (p. 15)
• Usar puntos de enlace de doble pila desde la AWS CLI (p. 15)
• Usar puntos de enlace de doble pila desde los SDK de AWS (p. 16)
• Usar los puntos de enlace de doble pila desde la API de REST (p. 18)

Puntos de enlace de doble pila de 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 Realizar 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. 74).

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.

Usar 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. 825).

Versión de API 2006-03-01


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

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. 76).

Usar 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.

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. 827).

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;

Versión de API 2006-03-01


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

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 SDK de AWS 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;
private static IAmazonS3 client;

public static void Main()


{
var config = new AmazonS3Config
{
UseDualstackEndpoint = true,

Versión de API 2006-03-01


17
Amazon Simple Storage Service Guía del desarrollador
Realizar solicitudes con los SDK de AWS

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. 244).

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. 829).

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


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

Realizar solicitudes con los SDK de AWS


Temas
• Realizar solicitudes con las credenciales de usuario de IAM o de cuenta de AWS (p. 19)

Versión de API 2006-03-01


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

• Realizar solicitudes con las credenciales temporales de usuario de IAM (p. 26)
• Realizar 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.

Realizar solicitudes con las credenciales de usuario de


IAM o de 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
• Realizar solicitudes con las credenciales de usuario de IAM o de cuenta de AWS: AWS SDK for
Java (p. 20)
• Realizar solicitudes con las credenciales de usuario de IAM o de cuenta de AWS: AWS SDK
para .NET (p. 21)
• Realizar solicitudes con las credenciales de usuario de IAM o de cuenta de AWS: AWS SDK para
PHP (p. 23)
• Realizar solicitudes con las credenciales de usuario de IAM o de 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.
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:

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

%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.

Realizar solicitudes con las credenciales de usuario de IAM o de


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. 827).

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 ***";

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

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

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

// 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. 818)

Realizar solicitudes con las credenciales de usuario de IAM o de


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. 829).

Example

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

namespace Amazon.DocSamples.S3
{
class MakeS3RequestTest

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

{
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);
}
}
}
}

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

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

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. 113) y Uso de buckets de
Amazon S3 (p. 55). 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. 244).

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

Realizar solicitudes con las credenciales de usuario de IAM o de


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. 829) 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) {
echo $object['Key'] . PHP_EOL;
}
} catch (S3Exception $e) {
echo $e->getMessage() . PHP_EOL;
}

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

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. 181). 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. 245).

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

Realizar solicitudes con las credenciales de usuario de IAM o de


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
Realizar solicitudes con las credenciales de usuario de IAM o de 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.

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

# Get an Amazon S3 resource.

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

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
puts ' Name => GUID'

bucket.objects.limit(50).each do |obj|
puts " #{obj.key} => #{obj.etag}"

Versión de API 2006-03-01


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

end
else
puts "The bucket '%s' does not exist!" % bucket_name
end

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

Realizar solicitudes con las credenciales temporales


de usuario de IAM
Temas
• Realizar solicitudes con las credenciales temporales de usuario de IAM: AWS SDK for Java (p. 26)
• Realizar solicitudes con las credenciales temporales de usuario de IAM: AWS SDK
para .NET (p. 28)
• Realizar solicitudes con las credenciales temporales de usuario de IAM o de cuenta de AWS: AWS
SDK para PHP (p. 30)
• Realizar 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.

Realizar 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
Realizar 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.

De forma predeterminada, la sesión durará una hora. Si utiliza credenciales de usuario de IAM0, puede
especificar la duración al solicitar las credenciales de seguridad temporales desde 15 minutos hasta la
duración máxima de sesión del rol. 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 Realizar solicitudes (p. 10).

Para obtener credenciales de seguridad temporales y acceso a Amazon S3

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


de cómo proporcionar las credenciales, consulte Uso de los SDK, la CLI y los exploradores de
AWS (p. 818).
2. Recupere las credenciales de seguridad temporales para el rol deseado al llamar al método
assumeRole() del cliente de Security Token Service (STS).
3. 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.
4. 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
Usar 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 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. 827).

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.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.AssumeRoleRequest;
import com.amazonaws.services.securitytoken.model.AssumeRoleResult;
import com.amazonaws.services.securitytoken.model.Credentials;

public class MakingRequestsWithIAMTempCredentials {


public static void main(String[] args) {
String clientRegion = "*** Client region ***";
String roleARN = "*** ARN for role to be assumed ***";
String roleSessionName = "*** Role session name ***";
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();

// Obtain credentials for the IAM role. Note that you cannot assume the role of
an AWS root account;
// Amazon S3 will deny access. You must use credentials for an IAM user or an
IAM role.
AssumeRoleRequest roleRequest = new AssumeRoleRequest()
.withRoleArn(roleARN)
.withRoleSessionName(roleSessionName);
AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
Credentials sessionCredentials = roleResponse.getCredentials();

// Create a BasicSessionCredentials object that contains the credentials you


just retrieved.
BasicSessionCredentials awsCredentials = new BasicSessionCredentials(

Versión de API 2006-03-01


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

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 sessionCredentials object.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new
AWSStaticCredentialsProvider(awsCredentials))
.withRegion(clientRegion)
.build();

// Verify that assuming the role 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. 818)

Realizar 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.

De forma predeterminada, la sesión durará una hora. Si utiliza credenciales de usuario de IAM0, puede
especificar la duración al solicitar las credenciales de seguridad temporales desde 15 minutos hasta la
duración máxima de sesión del rol. 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 Realizar solicitudes (p. 10).

Para obtener credenciales de seguridad temporales y acceso a Amazon S3

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. 818).
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.

Versión de API 2006-03-01


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

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.

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 Realizar 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. 829).

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

Versión de API 2006-03-01


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

{
var listObjectRequest = new ListObjectsRequest
{
BucketName = bucketName
};
// Send request to Amazon S3.
ListObjectsResponse response = await
s3Client.ListObjectsAsync(listObjectRequest);
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. 818)

Realizar solicitudes con las credenciales temporales de usuario


de IAM o de 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. 829) 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.

Versión de API 2006-03-01


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

De forma predeterminada, la sesión durará una hora. Si utiliza credenciales de usuario de IAM0, puede
especificar la duración al solicitar las credenciales de seguridad temporales desde 15 minutos hasta la
duración máxima de sesión del rol. 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 Realizar 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.

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. 830).

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 Realizar 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;

Versión de API 2006-03-01


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

// List objects
foreach ($objects 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
• Documentación de AWS SDK para PHP

Realizar 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 credenciales de usuario de IAM0, puede
especificar la duración al solicitar las credenciales de seguridad temporales desde 15 minutos hasta la
duración máxima de sesión del rol. 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 Realizar 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.

Versión de API 2006-03-01


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

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::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

Versión de API 2006-03-01


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

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

Realizar 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.

Versión de API 2006-03-01


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

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
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. 826).
• 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.

Versión de API 2006-03-01


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

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. 827).

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.policy.Policy;
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());

Versión de API 2006-03-01


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

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) {
// 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. 818)

Realizar 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 Realizar 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. 827).
• 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.

Versión de API 2006-03-01


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

• 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.

• 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. 829).

using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;

Versión de API 2006-03-01


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

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

Versión de API 2006-03-01


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

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

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. 818)

Realizar 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. 829) 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 Realizar 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.

Versión de API 2006-03-01


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

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. 830).

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.

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 ***';

Versión de API 2006-03-01


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

// 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.


$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

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 Realizar solicitudes (p. 10).

Versión de API 2006-03-01


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

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.

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 = ''

Versión de API 2006-03-01


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

i = 0

while i < 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
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

Versión de API 2006-03-01


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

end

Realizar 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
• Crear nombres de host de S3 para solicitudes de la API de REST (p. 45)
• Solicitudes de tipo de alojamiento virtual y de tipo ruta (p. 45)
• Realizar solicitudes a los puntos de enlace de doble pila con la API de REST (p. 46)
• Alojamiento virtual de buckets (p. 47)
• Solicitar redireccionamiento y la API de REST (p. 52)

Crear nombres de host de S3 para solicitudes de la


API de REST
Los puntos de enlace de Amazon S3 siguen la estructura que se muestra a continuación:

s3.Region.amazonaws.com

Los puntos de enlace de puntos de acceso de Amazon S3 y los puntos de enlace de doble pila también
siguen la estructura estándar:

• Puntos de acceso de Amazon S3: s3-accesspoint.Region.amazonaws.com


• Doble pila: s3.dualstack.Region.amazonaws.com

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

Solicitudes de tipo de alojamiento virtual y de tipo ruta


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 Alojamiento virtual de
buckets (p. 47).

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 en la región EE.UU. Oeste (Oregón). Para obtener
más información acerca de las solicitudes de estilo de alojamiento virtual, consulte Solicitudes de tipo
alojamiento virtual (p. 47).

DELETE /puppy.jpg HTTP/1.1


Host: examplebucket.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

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)

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.

Para obtener más información acerca de las solicitudes de tipo ruta, consulte Solicitudes de tipo
ruta (p. 47).
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.

Realizar 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 en la
región EE.UU. Oeste (Oregón).

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 Usar puntos de
enlace de doble pila de Amazon S3 (p. 15).

Versión de API 2006-03-01


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

Alojamiento virtual de buckets


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, Amazon S3 interpreta que Host significa que es posible obtener
acceso a la mayoría de los buckets de manera automática (para tipos limitados de solicitudes) en
https://bucketname.s3.Region.amazonaws.com. Para ver una lista completa de las regiones y los
puntos de enlace de Amazon S3, consulte Regiones y puntos de enlace de Amazon S3 en la Referencia
general de AWS.

El alojamiento virtual también tiene otros beneficios. 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, https://my.bucketname.com/.
También puede publicar en el "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.

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

Solicitudes de tipo ruta


Actualmente Amazon S3 admite acceso de estilo alojado y de ruta en todas las regiones, pero esto irá
cambiando (consulte la siguiente nota Importante.

En Amazon S3, la URL de tipo ruta sigue el formato que se muestra a continuación.

https://s3.Region.amazonaws.com/bucket-name/key name

Por ejemplo, si crea un bucket con el nombre mybucket en la región EE.UU. Oeste (Oregón) y quiere
acceder al objeto puppy.jpg en dicho bucket, puede usar la siguiente URL de tipo ruta:

https://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg

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.

Solicitudes de tipo alojamiento virtual


En un URI de tipo alojamiento virtual, el nombre del bucket forma parte del nombre del dominio en la URL.

Versión de API 2006-03-01


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

La URL de tipo alojada virtual Amazon S3 sigue el formato que se muestra a continuación.

https://bucket-name.s3.Region.amazonaws.com/key name

En este ejemplo, my-bucket es el nombre del bucket, EE.UU Oeste (Oregon) es la región y puppy.png
es el nombre clave:

https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png

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:

• Si se omite el encabezado Host o si su valor es s3.Region.amazonaws.com, el bucket de 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 en ".s3.Region.amazonaws.com",
el nombre del bucket es la primera parte del valor del encabezado Host hasta
".s3.Region.amazonaws.com". La clave para la solicitud es el URI de la solicitud. Esta interpretación
expone los buckets como subdominios de .s3.Region.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 Estilo de ruta

En este ejemplo se utiliza lo siguiente:

• Nombre del bucket: awsexamplebucket1.net


• Región: US East (N. Virginia)
• Nombre de clave: homepage.html

El URL es el siguiente:

https://s3.us-east-1.amazonaws.com/awsexamplebucket1.net/homepage.html

La solicitud es la siguiente:

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


Host: s3.us-east-1.amazonaws.com

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

Versión de API 2006-03-01


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

GET /awsexamplebucket1.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 Estilo de alojamiento virtual

En este ejemplo se utiliza lo siguiente:

• Nombre del bucket: awsexamplebucket1.eu


• Región: Europa (Irlanda)
• Nombre de clave: homepage.html

El URL es el siguiente:

https://awsexamplebucket1.eu.s3.eu-west-1.amazonaws.com/homepage.html

La solicitud es la siguiente:

GET /homepage.html HTTP/1.1


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

Example Método de CNAME

Para utilizar este método, debe configurar su nombre de DNS como un alias de CNAME para
bucketname.s3.us-east-1.amazonaws.com. Para obtener más información, consulte
Personalización de URL de Amazon S3 con CNAME (p. 49). En este ejemplo se utiliza lo siguiente:

• Nombre del bucket: awsexamplebucket1.net


• Nombre de clave: homepage.html

El URL es el siguiente:

https://www.awsexamplebucket1.net/homepage.html

El ejemplo es el siguiente:

GET /homepage.html HTTP/1.1


Host: www.awsexamplebucket1.net

Personalización de URL de Amazon S3 con CNAME


Según sus necesidades, es posible que no desee que s3.Region.amazonaws.com
aparezca en su sitio web o servicio. Por ejemplo, si aloja las imágenes del sitio web en
Amazon S3, puede que prefiera https://images.awsexamplebucket1.net/ en lugar de
https://awsexamplebucket1-images.s3.us-east-1.amazonaws.com/. Cualquier
bucket con un nombre compatible con el DNS se puede denominar de la siguiente manera:
https://BucketName.s3.Region.amazonaws.com/[Filename], por ejemplo, https://
images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/mydog.jpg. Al utilizar
CNAME, puede asignar images.awsexamplebucket1.net a un nombre de host de Amazon S3 para
que la URL anterior pueda convertirse en https://images.awsexamplebucket1.net/mydog.jpg.

Versión de API 2006-03-01


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

El nombre del bucket debe ser el mismo que el CNAME. Por ejemplo, si crea un CNAME para asignar
images.awsexamplebucket1.net a images.awsexamplebucket1.net.s3.amazonaws.com,
https://images.awsexamplebucket1.net/filename y https://
images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com/filename serán iguales.

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 el nombre del bucket y el nombre de dominio son
images.awsexamplebucket1.net y el bucket está en la región US East (N. Virginia), el registro
CNAME debe tomar como alias images.awsexamplebucket1.net.s3.us-east-1.amazonaws.com.

images.awsexamplebucket1.net CNAME images.awsexamplebucket1.net.s3.us-


east-1.amazonaws.com.

Amazon S3 utiliza el nombre de host para determinar el nombre del bucket. Por tanto, el nombre del
bucket debe ser el mismo que el CNAME. Por ejemplo, suponga que configuró www.example.com como
un CNAME para www.example.com.s3.us-east-1.amazonaws.com. Cuando obtiene acceso a
https://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.

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 awsexamplebucket1.net.


2. Cree un bucket que coincida con el nombre de host.

En este ejemplo, los nombres de host y de bucket son images.awsexamplebucket1.net. 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.awsexamplebucket1.net CNAME images.awsexamplebucket1.net.s3.us-


west-2.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 provocará un comportamiento impredecible.

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
Alojamiento virtual de buckets

Limitaciones
SSL

Las URL alojadas virtualmente solo son compatibles con solicitudes no SSL (HTTP). Al usar buckets
de tipo alojamiento virtual con SSL, el certificado comodín de SSL solo se asocia con buckets que no
contienen puntos. Para solucionar esto, use HTTP o escriba su propia lógica de verificación de certificado.

SOAP

La compatibilidad con SOAP por HTTP está obsoleta, 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


Puntos de enlace heredados
Algunas regiones admiten puntos de enlace heredados. Es posible que vea estos puntos de enlace en los
registros de acceso al servidor o en los registros de CloudTrail. Para obtener más información, consulte la
siguiente información. Para ver una lista completa de las regiones y los puntos de enlace de Amazon S3,
consulte Regiones y puntos de enlace de Amazon S3 en la Referencia general de AWS.
Important

Aunque es posible que vea los puntos de enlace heredados en los registros, es recomendable
que utilice siempre la sintaxis estándar de puntos de enlace para obtener acceso a los buckets.
La URL de tipo alojada virtual Amazon S3 sigue el formato que se muestra a continuación.

https://bucket-name.s3.Region.amazonaws.com/key name

En Amazon S3, la URL de tipo ruta sigue el formato que se muestra a continuación.

https://s3.Region.amazonaws.com/bucket-name/key name

s3‐región

Algunas regiones antiguas de Amazon S3 admiten puntos de enlace que contienen un guion entre S3 y la
región (por ejemplo, S3#us-west-2), en lugar de un punto (por ejemplo, S3.us-west-2). Si el bucket
se encuentra en una de estas regiones, es posible que vea el siguiente formato de punto de enlace en los
registros de acceso al servidor o en los registros de CloudTrail:

https://bucket-name.s3-Region.amazonaws.com

En este ejemplo, el nombre del bucket es my-bucket y la región es EE.UU. Oeste (Oregón):

https://my-bucket.s3-us-west-2.amazonaws.com

Punto de enlace global heredado

En algunas regiones, el punto de enlace global heredado se puede utilizar para crear solicitudes que
no especifiquen un punto de enlace específico de la región. El punto de enlace global heredado es el
siguiente:

bucket-name.s3.amazonaws.com

Versión de API 2006-03-01


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

En los registros de acceso al servidor o en los registros de CloudTrail, es posible que vea solicitudes que
utilizan el punto de enlace global heredado. En este ejemplo, el nombre del bucket es my-bucket y se
muestra el punto de enlace global heredado:

https://my-bucket.amazonaws.com

Solicitud de tipo alojamiento virtual para US East (N. Virginia)

Las solicitudes realizadas con el punto de enlace global heredado se envían a EE.UU. Este (Norte de
Virginia) de forma predeterminada. Por lo tanto, el punto de enlace global heredado se utiliza a veces como
sustituto del punto de enlace regional para US East (N. Virginia). Si crea un bucket en US East (N. Virginia)
y utiliza el punto de enlace, Amazon S3 envía su solicitud a esta región de forma predeterminada.

Solicitudes de tipo alojamiento virtual para otras regiones

El punto de enlace global heredado también se utiliza para solicitudes de tipo alojamiento virtual en otras
regiones compatibles. Si crea un bucket en una región que se lanzó antes del 20 de marzo de 2019 y
utiliza el punto de enlace global heredado, Amazon S3 actualiza el DNS para redirigir la solicitud a la
ubicación correcta, lo que podría tardar algún 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 Solicitar redireccionamiento y la API de REST (p. 741).

Solicitudes de tipo ruta

Para la región US East (N. Virginia), el punto de enlace global heredado se puede utilizar para solicitudes
de tipo ruta.

Para todas las demás regiones, la sintaxis de tipo ruta requiere que se use el punto de enlace específico
de la región al intentar obtener acceso al bucket. Si intenta obtener acceso a un bucket con el punto de
enlace global heredado u otro punto de enlace diferente al de la región donde reside el bucket, recibirá un
error de redireccionamiento temporal con el código de respuesta HTTP 307 y un mensaje que indica el URI
correcto para el recurso. Por ejemplo, si utiliza https://s3.amazonaws.com/bucket-name para un
bucket creado en la región EE.UU. Oeste (Oregón), recibirá un error de redireccionamiento temporal HTTP
307.

Solicitar redireccionamiento y la API de REST


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

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
Solicitar redireccionamiento y la API de REST (p. 741) en la Amazon Simple Storage Service API
Reference.

Redireccionamientos 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.

Versión de API 2006-03-01


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

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.

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

Versión de API 2006-03-01


53
Amazon Simple Storage Service Guía del desarrollador
Solicitar redireccionamiento y la API de REST

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


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


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

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. 113).

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. 61).

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
Europa (Irlanda) o Europa (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 Europa (Irlanda) permanecen siempre
en ella.

Temas
• Creación de un bucket (p. 55)
• Administración del acceso público a los buckets (p. 57)
• Acceso a un bucket (p. 57)
• Opciones de configuración de buckets (p. 59)
• Restricciones y limitaciones de los buckets (p. 61)
• Ejemplos de creación de buckets (p. 63)
• Eliminar o vaciar un bucket (p. 66)
• Cifrado predeterminado de Amazon S3 para los buckets de S3 (p. 70)
• Aceleración de transferencia de Amazon S3 (p. 73)
• Buckets de pago por solicitante (p. 80)
• Buckets y control de acceso (p. 83)
• Informes de facturación y de uso para los buckets de S3 (p. 84)

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

Versión de API 2006-03-01


55
Amazon Simple Storage Service Guía del desarrollador
Consola de Amazon S3

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. En un bucket, puede
almacenar la cantidad de objetos que desee.

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. 62).

Puede utilizar cualquiera de los métodos enumerados a continuación para crear un bucket. Para ver
ejemplos, consulte Ejemplos de creación de buckets (p. 63).

Consola de Amazon S3
Puede crear un bucket utilizando la consola de Amazon S3. Para obtener más información, consulte Crear
un bucket en la Guía del usuario de la consola de Amazon Simple Storage Service.

API REST
Crear un bucket mediante la API REST 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. En su lugar, le recomendamos que utilice la Consola de
administración de AWS o los AWS SDK.

SDK de AWS
Si usa los SDK de AWS para crear un bucket, primero crea un cliente y luego usa el cliente para enviar una
solicitud de creación de un bucket. Si no especifica una región al crear un cliente o un bucket, Amazon S3
utiliza US East (N. Virginia), la región predeterminada. También puede especificar una región específica.
Para ver una lista de las regiones de AWS disponibles, consulte Regiones y puntos de enlace en la AWS
General Reference. Para obtener más información acerca de cómo habilitar o deshabilitar una región de
AWS, consulte Administración de regiones de AWS en la AWS General Reference.

Como práctica recomendada, debe crear su cliente y bucket en la misma región. Si su región se lanzó
después del 20 de marzo de 2019,, su cliente y su bucket deben estar en la misma región. Sin embargo,
puede utilizar un cliente en la región US East (N. Virginia) para crear un bucket en cualquier región que se
haya lanzado antes del 20 de marzo de 2019. Para obtener más información, consulte Puntos de enlace
heredados (p. 51).

Crear un cliente

Al crear el cliente, debería especificar una región de AWS en la que crearlo. Si no especifica una región,
Amazon S3 crea el cliente en US East (N. Virginia) ya que es la región predeterminada. Para crear un
cliente para obtener acceso a un punto de enlace de doble pila, debe especificar una región de AWS. Para
obtener más información, consulte Puntos de enlace de doble pila (p. 15).

Al crear un cliente, la región se asigna al punto de enlace específico de la región. El cliente utiliza este
punto de enlace para comunicarse con Amazon S3:

s3.<region>.amazonaws.com

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

Creación de un bucket

Versión de API 2006-03-01


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

Si no especifica una región al crear un bucket, Amazon S3 crea el bucket en la región US East (N.
Virginia). Por lo tanto, si quiere crear un bucket en una región específica, debe especificar la región al crear
el bucket.

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.

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. 325).

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 Alojar un sitio web estático en Amazon S3 (p. 618), puede
personalizar los ajustes individuales para que se adapten a sus casos de uso de almacenamiento. Para
obtener más información, consulte Usar Block Public Access de Amazon S3 (p. 488).

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.

Versión de API 2006-03-01


57
Amazon Simple Storage Service Guía del desarrollador
Acceso de tipo alojamiento virtual

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. 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. 61).
Note

Las solicitudes de alojamiento de tipo virtual y de tipo ruta utilizan la estructura de punto
de enlace de S3 punto región (s3.Region), por ejemplo, https://my-bucket.s3.us-
west-2.amazonaws.com. Sin embargo, algunas regiones más antiguas de Amazon S3
también admiten puntos de enlace de S3 guión región s3-Region, por ejemplo, https://my-
bucket.s3-us-west-2.amazonaws.com. Si el bucket se encuentra en una de estas regiones,
es posible que vea puntos de enlace de s3-Region en los registros de acceso al servidor o en
los registros de CloudTrail: Le recomendamos que no utilice esta estructura de punto de enlace en
sus solicitudes.

Acceso de tipo alojamiento virtual


En una solicitud de tipo alojamiento virtual, el nombre del bucket forma parte del nombre del dominio en la
URL.

La URL de tipo alojada virtual Amazon S3 sigue el formato que se muestra a continuación.

https://bucket-name.s3.Region.amazonaws.com/key name

En este ejemplo, my-bucket es el nombre del bucket, EE.UU Oeste (Oregon) es la región y puppy.png
es el nombre clave:

https://my-bucket.s3.us-west-2.amazonaws.com/puppy.png

Para obtener más información acerca de las solicitudes de tipo alojamiento virtual, consulte Solicitudes de
tipo alojamiento virtual (p. 47).

Acceso de tipo ruta


En Amazon S3, la URL de tipo ruta sigue el formato que se muestra a continuación.

https://s3.Region.amazonaws.com/bucket-name/key name

Por ejemplo, si crea un bucket con el nombre mybucket en la región EE.UU. Oeste (Oregón) y quiere
acceder al objeto puppy.jpg en dicho bucket, puede usar la siguiente URL de tipo ruta:

https://s3.us-west-2.amazonaws.com/mybucket/puppy.jpg

Para obtener más información, consulte Solicitudes de tipo ruta (p. 47).
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


58
Amazon Simple Storage Service Guía del desarrollador
Acceso a un bucket de S3 mediante el IPv6

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.

Acceso a un bucket de S3 mediante el IPv6


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
Realizar solicitudes mediante IPv6 (p. 12).

Acceso a un bucket a través de un punto de acceso de


S3
Además de directamente, puede acceder a un bucket a través de un punto de acceso de S3. Para obtener
más información acerca de los puntos de acceso de S3, consulte Administrar el acceso a datos con puntos
de acceso de Amazon S3 (p. 100).

Los puntos de acceso de S3 solo admiten el direccionamiento de tipo host virtual. Para direccionar un
bucket a través de un punto de acceso, use este formato:

https://AccessPointName-AccountId.s3-accesspoint.region.amazonaws.com.

Note

• Si el nombre del punto de acceso incluye caracteres de guion (-), incluya los guiones en
la URL e inserte otro guion antes del ID de cuenta. Por ejemplo, para utilizar un punto de
acceso denominado finance-docs propiedad de la cuenta 123456789012 en la región us-
west-2, la dirección URL apropiada sería https://finance-docs-123456789012.s3-
accesspoint.us-west-2.amazonaws.com.
• Los puntos de acceso de S3 no admiten el acceso por HTTP, solo el acceso seguro por
HTTPS.

Acceso a un bucket mediante S3://


Algunos servicios de AWS requieren especificar un bucket de Amazon S3 mediante S3://bucket. El
formato correcto se muestra a continuación. Tenga en cuenta que al utilizar este formato, el nombre del
bucket no incluye la región.

S3://bucket-name/key-name

Por ejemplo, utilizando el bucket de muestra descrito en la sección anterior de tipo ruta:

S3://mybucket/puppy.jpg

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. Puede usar la API de Amazon

Versión de API 2006-03-01


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

S3 para crear y administrar estos subrecursos. Sin embargo, 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 Configurar notificaciones de eventos de


Amazon S3 (p. 662).

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. 794).

bloqueo de objetos Para usar S3 Bloqueo de objetos, 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. 535).

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.

Versión de API 2006-03-01


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

Subrecurso Descripción
Para obtener más información, consulte Administración de identidad y acceso en
Amazon S3 (p. 325).

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. 684).

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. 80).

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. 84).

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. 73).

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 Usar el control de versiones (p. 509).

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

Restricciones y limitaciones de los buckets


Cada bucket pertenece a la cuenta de AWS que lo creó. La propiedad del bucket no es transferible.

Cuando se crea un bucket, se elige su nombre y la región en la que se crea. Una vez que haya creado un
bucket, no podrá modificar su nombre ni su región.

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. No hay diferencia en el

Versión de API 2006-03-01


61
Amazon Simple Storage Service Guía del desarrollador
Reglas para la nomenclatura

rendimiento cuando usa muchos buckets o solo unos pocos. Para obtener información acerca de cómo
aumentar su límite de buckets, consulte AWS Service Quotas en la Referencia general de AWS.

Reutilización de nombres de bucket

Si un bucket está vacío, puede eliminarlo. Después de eliminar un bucket, el nombre vuelve a estar
disponible para su reutilización. Sin embargo, después de eliminar el bucket, es posible que no pueda
volver a utilizar el nombre por varios motivos. Por ejemplo, cuando elimina el bucket y el nombre está
disponible para su reutilización, otra cuenta podría crear un bucket con ese nombre. Además, puede pasar
algún tiempo antes de que pueda volver a utilizar el nombre de un bucket eliminado. Si desea utilizar el
mismo nombre de bucket, le recomendamos que no elimine el bucket.

Objetos y buckets

No hay límite en el número de objetos que puede almacenar en un bucket. Puede almacenar todos los
objetos en un solo bucket u organizarlos en varios buckets. Sin embargo, no se puede crear un bucket
desde dentro de otro bucket.

Operaciones con buckets

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.

Nomenclatura de buckets y buckets creados automáticamente

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


Las siguientes reglas se aplican para asignar nombres a los buckets de S3:

• Los nombres de bucket deben tener entre 3 y 63 caracteres.


• Los nombres de bucket pueden consistir únicamente de letras minúsculas, números, puntos (.) y guiones
(-).
• Los nombres de bucket deben comenzar y terminar con una letra o un número.
• Los nombres de buckets no deben tener el formato de una dirección IP (por ejemplo, 192.168.5.4).
• Los nombres de bucket deben ser únicos dentro de una partición. Una partición es una agrupación de
regiones. AWS actualmente tiene tres particiones: aws (Regiones estándar), aws-cn (Regiones de
China) y aws-us-gov (Regiones de AWS GovCloud [EE.UU.]).
• Los buckets utilizados con Aceleración de transferencia de Amazon S3 no pueden tener puntos (.) en
sus nombres. Para obtener más información acerca de Transfer Acceleration, consulte Aceleración de
transferencia de Amazon S3 (p. 73).

Para obtener una mejor compatibilidad, se recomienda evitar el uso de puntos (.) en los nombres de los
buckets, excepto para los buckets que se utilizan únicamente para el alojamiento estático de sitios web. Si
incluye puntos en el nombre de un bucket, no puede usar direccionamiento de estilo host virtual a través
de HTTPS, a menos que realice su propia validación de certificado. Esto se debe a que los certificados de
seguridad utilizados para el alojamiento virtual de los buckets no funcionan para los buckets con puntos en
sus nombres.

Esta limitación no afecta a los buckets utilizados para el alojamiento de sitios web estáticos, ya que el
alojamiento de sitios web estáticos solo está disponible a través de HTTP. Para obtener más información

Versión de API 2006-03-01


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

acerca del direccionamiento de tipo de host virtual, consulte Alojamiento virtual de buckets (p. 47). Para
obtener más información sobre el alojamiento estático de sitios web, consulte Alojar un sitio web estático
en Amazon S3 (p. 618).
Note

Antes del 1 de marzo de 2018, los buckets creados en la región US East (N. Virginia) podían tener
nombres de hasta 255 caracteres e incluir letras mayúsculas y guiones bajos. A partir del 1 de
marzo de 2018, los nuevos buckets de US East (N. Virginia) deben ajustarse a las mismas reglas
aplicadas en todas las demás regiones.

Example Nombres de bucket

Los nombres de bucket de ejemplo siguientes son válidos y siguen las pautas de nomenclatura
recomendadas:

• awsexamplebucket1
• log-delivery-march-2020
• my-hosted-content

Los nombres de bucket de ejemplo siguientes son válidos pero no se recomiendan para usos distintos del
alojamiento estático de sitios web:

• awsexamplewebsite.com
• www.awsexamplewebsite.com
• my.example.s3.bucket

Los nombres de bucket de ejemplo siguientes no son válidos:

• aws_example_bucket (contiene guiones bajos)


• AwsExampleBucket (contiene letras mayúsculas)
• aws-example-bucket- (termina con un guión)

Ejemplos de creación de buckets


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

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
una lista de las regiones de AWS, consulte Regiones y puntos de enlace en la Referencia general de
AWS.

Versión de API 2006-03-01


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

• 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. 827).

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 CreateBucket2 {

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)) {
// 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));

Versión de API 2006-03-01


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

// 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. 829).

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
};

PutBucketResponse putBucketResponse = await


s3Client.PutBucketAsync(putBucketRequest);
}

Versión de API 2006-03-01


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

// 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. 830).

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.

Eliminar o vaciar un bucket


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 Usar el control de versiones (p. 509).
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.

Temas
• Eliminar un bucket (p. 67)
• Vaciar un bucket (p. 69)

Versión de API 2006-03-01


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

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.

Temas
• Eliminar un bucket: con la consola de Amazon S3 (p. 67)
• Eliminar un bucket: con la CLI de AWS (p. 67)
• Eliminar un bucket: con los SDK de AWS (p. 67)

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 CLI de AWS


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.

Eliminar un bucket: con los SDK de AWS


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. 827).

import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;

Versión de API 2006-03-01


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

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 DeleteBucket2 {

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).
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);

Versión de API 2006-03-01


68
Amazon Simple Storage Service Guía del desarrollador
Vaciar un bucket

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

Vaciar 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
• Vaciar un bucket: con la consola de Amazon S3 (p. 69)
• Vaciar un bucket: con la CLI de AWS (p. 69)
• Vaciar un bucket: mediante la configuración del ciclo de vida (p. 70)
• Vaciar un bucket: con los SDK de AWS (p. 70)

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 CLI de AWS


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.

Versión de API 2006-03-01


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

Para obtener más información sobre el control de versiones, consulte Usar el control de
versiones (p. 509).

Vaciar 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.

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. Para vaciar por completo el contenido de un bucket con el
control de versiones habilitado, tendrá que configurar una política de vencimiento en los objetos actuales y
no actuales del bucket.

Para obtener más información, consulte Administrar el ciclo de vida de los objetos (p. 136) y Descripción
del vencimiento de los objetos (p. 143).

Vaciar un bucket: con los SDK de AWS


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. 67). 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 nuevos objetos se cifren cuando se almacenen en el bucket. Los objetos se cifran utilizando el
cifrado del lado del servidor con las claves administradas de Amazon S3 (SSE-S3) o las claves maestras
del cliente (CMK) almacenadas en AWS Key Management Service (AWS KMS).

Cuando usa el cifrado en el servidor, Amazon S3 cifra un objeto antes de guardarlo en el disco y lo descifra
al descargar los objetos. 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 Proteger los datos con el cifrado del
lado del servidor (p. 287).

Temas
• ¿Cómo puedo configurar el cifrado predeterminado de Amazon S3 para un bucket de S3? (p. 71)
• Uso del cifrado para operaciones entre cuentas (p. 71)
• Uso del cifrado predeterminado con la replicación (p. 71)
• Monitorización del cifrado predeterminado con CloudTrail y CloudWatch (p. 72)
• Más información (p. 72)

Versión de API 2006-03-01


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

¿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.

Para configurar el cifrado predeterminado en un bucket, puede utilizar cualquiera de estos métodos:

• 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 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 que se va a usar —SSE-S3 o SSE-KMS.
• 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. 818).

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 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.

Para cifrar los objetos de Amazon S3 existentes con una sola solicitud, puede utilizar operaciones por lotes
de Amazon S3. Debe proporcionar a Operaciones por lotes de S3 una lista de objetos en los que se debe
operar; Operaciones por lotes llamará a la API correspondiente para realizar la operación especificada.
Puede utilizar la operación de copia para copiar los objetos existentes sin cifrar y escribir los nuevos
objetos cifrados en el mismo bucket. Un solo trabajo de Operaciones por lotes puede realizar la operación
especificada en miles de millones de objetos que contiene exabytes de datos.
Note
Los buckets de Amazon S3 con cifrado de bucket predeterminado que usan SSE-KMS no se
pueden utilizar como buckets de destino para Server access logging (Registro de acceso del
servidor) (p. 794). Solo se admite el cifrado predeterminado SSE-S3 para los buckets de destino
del registro de acceso al servidor.

Uso del cifrado para operaciones entre cuentas


Tenga en cuenta lo siguiente cuando utilice el cifrado para operaciones entre cuentas:

• La CMK administrada por AWS aws/s3 se utiliza cuando no se proporciona un ARN o alias de CMK en el
momento de la solicitud, ni a través de la configuración de cifrado predeterminada del bucket.
• Si especifica su propia CMK, debe usar el ARN completo de la clave CMK. Cuando utilice un alias
de CMK, tenga en cuenta que KMS resolverá la clave dentro de la cuenta del solicitante. Esto puede

Versión de API 2006-03-01


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

dar como resultado datos cifrados con una CMK que pertenece al solicitante y no al administrador del
bucket.
• Debe especificar una clave para la que el solicitante le haya concedido permiso Encrypt. Para
obtener más información, consulte Permitir a los usuarios de claves utilizar una CMK para operaciones
criptográficas.

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.

Para obtener más información acerca del uso del cifrado predeterminado con SSE-KMS, consulte Replicar
objetos cifrados (p. 708).

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 CloudTrail?

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. 753).

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

Versión de API 2006-03-01


72
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration

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. 73)
• Introducción a Aceleración de transferencia de Amazon S3 (p. 74)
• Requisitos de uso de Aceleración de transferencia de Amazon S3 (p. 75)
• Aceleración de transferencia de Amazon S3 Ejemplos (p. 75)

¿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 de 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:

https://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.

Versión de API 2006-03-01


73
Amazon Simple Storage Service Guía del desarrollador
Introducción

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:


• 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. 818).
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 Usar puntos de
enlace de doble pila de 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.us-east-1.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.us-east-1.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. 75). Versión de API 2006-03-01
74
Amazon Simple Storage Service Guía del desarrollador
Requisitos de uso de Aceleración
de transferencia de Amazon S3

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:

• Transfer Acceleration solo se admite en solicitudes de estilo alojadas virtualmente. Para obtener más
información acerca de las solicitudes de estilo de alojamiento virtual, consulte Realizar 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 Ejemplo: operaciones de
subrecurso del bucket (p. 375) y Administración de identidad y acceso en Amazon S3 (p. 325).

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. 73).

Temas
• Uso de la consola de Amazon S3 (p. 76)
• Uso de Transfer Acceleration desde la AWS Command Line Interface (AWS CLI) (p. 76)
• Uso de Transfer Acceleration desde AWS SDK for Java (p. 77)
• Uso de Transfer Acceleration desde AWS SDK para .NET (p. 78)
• Uso de Transfer Acceleration desde AWS SDK para JavaScript (p. 79)
• Uso de Transfer Acceleration desde AWS SDK for Python (Boto) (p. 79)

Versión de API 2006-03-01


75
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration Ejemplos

• Mediante otros SDK de AWS (p. 79)

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.

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. 825).

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

Versión de API 2006-03-01


76
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration Ejemplos

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.

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. 74). 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. 827).

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;

Versión de API 2006-03-01


77
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration Ejemplos

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

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;

Versión de API 2006-03-01


78
Amazon Simple Storage Service Guía del desarrollador
Transfer Acceleration Ejemplos

public static void Main()


{
s3Client = new AmazonS3Client(bucketRegion);
EnableAccelerationAsync().Wait();
}

static async Task EnableAccelerationAsync()


{
try
{
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.

Versión de API 2006-03-01


79
Amazon Simple Storage Service Guía del desarrollador
Buckets de pago por solicitante

Buckets de pago por solicitante


Temas
• Configuración de pagos por solicitante con la consola de Amazon S3 (p. 80)
• Configuración de pagos por solicitante con la API de REST (p. 81)
• Detalles de cargos (p. 83)

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/.

Versión de API 2006-03-01


80
Amazon Simple Storage Service Guía del desarrollador
Configuración con la API REST

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.
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. 81)
• Recuperación de la configuración del recurso requestPayment (p. 82)
• Descarga de objetos en buckets de pago por solicitante (p. 82)

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]

Versión de API 2006-03-01


81
Amazon Simple Storage Service Guía del desarrollador
Configuración con la API REST

x-amz-request-id: [request_id]
Date: Wed, 01 Mar 2009 12:00:00 GMT
Content-Length: 0
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

Versión de API 2006-03-01


82
Amazon Simple Storage Service Guía del desarrollador
Detalles de cargos

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:

• 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. 842).

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. 325).

Versión de API 2006-03-01


83
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. 80). Para obtener más información acerca de los informes de facturación,
consulte Informes de facturación de AWS para Amazon S3 (p. 84).
• 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. 86).

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. 84)
• Informe de uso de AWS para Amazon S3 (p. 86)
• Cómo interpretar los informes de facturación y de uso de AWS para Amazon S3 (p. 88)
• Uso de etiquetas de buckets de S3 de asignación de costos (p. 97)

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. 86).

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


84
Amazon Simple Storage Service Guía del desarrollador
Informes de facturación

Cargo Comentarios
ONEZONE_IA, S3 Glacier, S3 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. 119).

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, S3 Glacier y S3
Glacier Deep Archive.

Eliminaciones anticipadas Si se elimina un objeto almacenado en el


almacenamiento INTELLIGENT_TIERING,
STANDARD_IA, ONEZONE_IA, S3 Glacier o
S3 Glacier 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


85
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. 88).

Más información
• Informe de uso de AWS para Amazon S3 (p. 86)
• Uso de etiquetas de buckets de S3 de asignación de costos (p. 97)
• Administración de costos y facturación de AWS
• Precios de Amazon S3
• Preguntas frecuentes sobre Amazon S3
• Precios de S3 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. 97).
• 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, S3 Glacier o S3 Glacier 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. 88).
• 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:
• El número de solicitudes durante el periodo especificado.

Versión de API 2006-03-01


86
Amazon Simple Storage Service Guía del desarrollador
Informe de uso

• 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 S3 Glacier Deep
Archive, S3 Glacier, STANDARD_IA o 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. 794).

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. 88).

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, seleccione AWS Cost and Usage Reports (Informes de uso y costo de
AWS).
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. 88).
• 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. 97).
• 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


87
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. 88)
• Informes de facturación de AWS para Amazon S3 (p. 84)

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)
• CPT: África (Ciudad del Cabo)
• EUN1: Europa (Estocolmo)
• EUC1: Europa (Fráncfort)
• EU: Europa (Irlanda)
• EUW2: Europa (Londres)
• EUW3: Europa (París)
• MES1: Medio Oriente (Baréin)
• 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

Versión de API 2006-03-01


88
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

region1-region2-AWS-Out-Bytes Bytes Por hora La cantidad de datos


transferidos desde la región
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 S3
realizados.

region-BatchOperations-Objects Recuento Por hora El número de operaciones


de objetos realizadas por
las Operaciones por lotes
de 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
S3 Glacier o S3 Glacier
Deep Archive

region-S3G-DataTransfer-Out-Bytes Bytes Por hora La cantidad de datos


transferidos desde Amazon
S3 para pasar objetos al
almacenamiento S3 Glacier
o S3 Glacier 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


89
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 S3 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 S3 Glacier
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


90
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

región-Requests-S3 Glacier-Tier1 Recuento Por hora El número de solicitudes


PUT, COPY, POST,
InitiateMultipartUpload,
UploadPart o
CompleteMultipartUpload en
objetos S3 Glacier

región-Requests-S3 Glacier-Tier2 Recuento Por hora El número de solicitudes


GET y todas las demás
solicitudes no enumeradas
en objetos S3 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


91
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


de ciclo de vida a S3
Glacier o S3 Glacier Deep
Archive y de solicitudes de
restauración estándar a S3
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 masivas a S3
Glacier

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 a S3
Glacier Deep Archive

region-Requests-GDA-Tier5 Recuento Por hora El número de solicitudes de


restauración masivas a S3
Glacier Deep Archive

region-Requests-Tier6 Recuento Por hora El número de solicitudes de


restauración urgentes a S3
Glacier

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

region-Bulk-Retrieval-Bytes Bytes Por hora El número de bytes de


datos recuperados mediante
solicitudes S3 Glacier o S3
Glacier Deep Archive en
bloque

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 S3 Glacier
rápidas

region-Standard-Retrieval-Bytes Bytes Por hora El número de bytes de


datos recuperados mediante
solicitudes S3 Glacier o
S3 Glacier Deep Archive
estándar

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-Retrieval-SIA Bytes Por hora El número de bytes


de datos recuperados
desde el almacenamiento
STANDARD_IA

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

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-TagStorage-TagHrs Etiquetas- Por día El total de etiquetas de


Horas todos los objetos del bucket
por hora

region-TimedStorage-ByteHrs Bytes-Horas Por día El número de bytes-


horas que los datos
estuvieron almacenados
en el almacenamiento
STANDARD

región-TimedStorage-S3 GlacierByteHrs Bytes-Horas Por día El número de bytes-horas


que los datos estuvieron
almacenados en el
almacenamiento S3 Glacier

region-TimedStorage-GlacierStaging Bytes-Horas Por día El número de bytes-horas


que los datos estuvieron
almacenados en el
almacenamiento provisional
S3 Glacier

region-TimedStorage-GDA-ByteHrs Bytes-Horas Por día El número de bytes-horas


que los datos estuvieron
almacenados en el
almacenamiento S3 Glacier
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
S3 Glacier 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)

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-TimedStorage-SIA-ByteHrs Bytes-Horas Por día El número de bytes-


horas que los datos
estuvieron almacenados
en el almacenamiento
STANDARD_IA

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. 97).
3. Cuando los objetos que se archivan en la clase de almacenamiento S3 Glacier o S3 Glacier 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 S3 Glacier o
de 180 días en S3 Glacier 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.

Versión de API 2006-03-01


96
Amazon Simple Storage Service Guía del desarrollador
Uso de etiquetas de asignación de costos

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
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. 114).

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. 86)
• Informes de facturación de AWS para Amazon S3 (p. 84)
• Precios de Amazon S3
• Preguntas frecuentes sobre Amazon S3
• Precios de S3 Glacier
• Preguntas frecuentes sobre S3 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

Versión de API 2006-03-01


97
Amazon Simple Storage Service Guía del desarrollador
Uso de etiquetas de asignación de costos

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. 127).

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. 88)) 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.

Versión de API 2006-03-01


98
Amazon Simple Storage Service Guía del desarrollador
Uso de etiquetas de asignación de costos

• 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.

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. 88)
• Informes de facturación de AWS para Amazon S3 (p. 84)

Versión de API 2006-03-01


99
Amazon Simple Storage Service Guía del desarrollador
Crear puntos de acceso

Administrar el acceso a datos con


puntos de acceso de Amazon S3
Los puntos de acceso de Amazon S3 simplifican la administración del acceso a los datos a escala para los
conjuntos de datos compartidos en S3. Los puntos de acceso son puntos de enlace de red con nombre
y asociados a los buckets que se pueden utilizar para realizar operaciones con objetos de S3, como
GetObject y PutObject. Cada punto de acceso tiene permisos y controles de red distintos que S3
aplica a cualquier solicitud que se realice a través de ese punto de acceso. Cada punto de acceso aplica
una política de punto de acceso personalizada que funciona en conjunción con la política de bucket
asociada al bucket subyacente. Puede configurar cualquier punto de acceso para que acepte solo las
solicitudes procedentes de una nube virtual privada (VPC) con el fin de restringir el acceso a los datos de
Amazon S3 a una red privada. También puede configurar los parámetros de bloqueo de acceso público
para cada punto de acceso.
Note

• Solo se pueden utilizar puntos de acceso para realizar operaciones con objetos. No se pueden
utilizar puntos de acceso para realizar otras operaciones de Amazon S3, como modificar o
eliminar buckets. Para obtener una lista completa de las operaciones de S3 que admiten puntos
de acceso, consulte Compatibilidad de los puntos de acceso con las operaciones de S3 y los
servicios de AWS (p. 109).
• Los puntos de acceso funcionan con algunos servicios y características de AWS, pero no
con todos. Por ejemplo, no puede configurar la replicación entre regiones para que se lleve a
cabo a través de un punto de acceso. Para obtener una lista completa de servicios de AWS
compatibles con los puntos de acceso de S3, consulte Compatibilidad de los puntos de acceso
con las operaciones de S3 y los servicios de AWS (p. 109).

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

Temas
• Crear puntos de acceso (p. 100)
• Usar puntos de acceso (p. 108)
• Restricciones y limitaciones de los puntos de acceso (p. 112)

Crear puntos de acceso


Amazon S3 proporciona funcionalidad para crear y administrar puntos de acceso. De forma
predeterminada, puede crear hasta 1.000 puntos de acceso por región para cada una de sus cuentas de
AWS. Si necesita más de 1.000 puntos de acceso para una sola cuenta en una sola región, puede solicitar
un aumento de la cuota de servicio. Para obtener más información sobre las cuotas de servicio y solicitar
un aumento, consulte Cuotas de servicio de AWS en la AWS General Reference.

Puede crear puntos de acceso de S3 mediante la Consola de administración de AWS, la AWS Command
Line Interface (AWS CLI), el AWS SDK o la API REST de Amazon S3. Los siguientes ejemplos muestran
cómo crear un punto de acceso con la AWS CLI y el AWS SDK for Java.

Versión de API 2006-03-01


100
Amazon Simple Storage Service Guía del desarrollador
Reglas para asignar nombres a los
puntos de acceso de Amazon S3

Para obtener información acerca de cómo crear puntos de acceso mediante la Consola de administración
de AWS, consulte la introducción a los puntos de acceso de Amazon S3 en la Guía del usuario de la
consola de Amazon Simple Storage Service. Para obtener más información acerca de cómo crear puntos
de acceso mediante la API REST, consulte CreateAccessPoint en la Amazon Simple Storage Service API
Reference.
Note

Dado que es posible que desee publicar el nombre del punto de acceso para que los usuarios
puedan utilizarlo, se recomienda evitar incluir información confidencial en el nombre del punto de
acceso.

Reglas para asignar nombres a los puntos de acceso


de Amazon S3
Los nombres de los puntos de acceso deben cumplir las condiciones siguientes:

• Debe ser único para cada cuenta y región de AWS.


• Debe cumplir las restricciones de nomenclatura de DNS.
• Debe comenzar con un número o una letra minúscula.
• Deben tener entre 3 y 50 caracteres de longitud.
• No puede comenzar o terminar con una raya.
• No puede contener guiones bajos, letras mayúsculas ni puntos.

Example

Ejemplo: Crear un punto de acceso

En el ejemplo siguiente se crea un punto de acceso denominado example-ap para el bucket example-
bucket de la cuenta 123456789012. Para crear el punto de acceso, envíe una solicitud a Amazon S3,
en la que especifique el nombre del punto de acceso, el nombre del bucket al que desea asociar el punto
de acceso y el ID de la cuenta de AWS propietaria del bucket. Para obtener información sobre las reglas
de nomenclatura, consulte the section called “Reglas para asignar nombres a los puntos de acceso de
Amazon S3” (p. 101).

AWS CLI

aws s3control create-access-point --name example-ap --account-id 123456789012 --bucket


example-bucket

Crear puntos de acceso restringidos a una nube


privada virtual
Al crear un punto de acceso, puede optar por hacer que sea accesible desde Internet o especificar que
todas las solicitudes realizadas a través de ese punto de acceso deban originarse en una nube virtual
privada (VPC) específica. Se dice que el origen de red de un punto de acceso que es accesible desde
Internet es Internet. Se puede usar desde cualquier lugar de Internet, con sujeción a las restricciones
de acceso en vigor para el punto de acceso, el bucket subyacente y los recursos relacionados, como los
objetos solicitados. El origen de un punto de acceso al que solo se puede acceder desde una VPC es VPC.
En este caso, Amazon S3 rechazará todas las solicitudes realizadas al punto de acceso cuando el origen
de estas no sea esa misma VPC.

Versión de API 2006-03-01


101
Amazon Simple Storage Service Guía del desarrollador
Crear puntos de acceso restringidos
a una nube privada virtual

Important

Solo se puede especificar el origen de red de un punto de acceso en el momento de crearlo. Una
vez creado el punto de acceso, ya no puede cambiar su origen de red.

Para restringir un punto de acceso de modo que sea solo VPC, incluya el parámetro VpcConfiguration
con la solicitud de creación del punto de acceso. En el parámetro VpcConfiguration, especifique el
ID de la VPC que deba poder utilizar el punto de acceso. Amazon S3 rechazará todas las solicitudes
realizadas a través del punto de acceso, a no ser que su origen sea esa VPC.

Puede recuperar el origen de red de un punto de acceso mediante la AWS CLI, los AWS SDK o las API
REST. Si para un punto de acceso se ha especificado una configuración de VPC, su origen de red es VPC.
De lo contrario, el origen de red del punto de acceso es Internet.

Example

Ejemplo: Crear un punto de acceso restringido al acceso de VPC

En el ejemplo siguiente se crea un punto de acceso denominado example-vpc-ap para el bucket


example-bucket en la cuenta 123456789012, que permite el acceso únicamente desde la VPC
vpc-1a2b3c. A continuación, el ejemplo comprueba que el origen de red del nuevo punto de acceso sea
VPC.

AWS CLI

aws s3control create-access-point --name example-vpc-ap --account-id 123456789012 --


bucket example-bucket --vpc-configuration VpcId=vpc-1a2b3c

aws s3control get-access-point --name example-vpc-ap --account-id 123456789012

{
"Name": "example-vpc-ap",
"Bucket": "example-bucket",
"NetworkOrigin": "VPC",
"VpcConfiguration": {
"VpcId": "vpc-1a2b3c"
},
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": true,
"IgnorePublicAcls": true,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
},
"CreationDate": "2019-11-27T00:00:00Z"
}

Para utilizar un punto de acceso con una VPC, debe modificar la política de acceso para el punto de enlace
de la VPC. Los puntos de enlace de la VPC permiten que el tráfico fluya desde su VPC hasta Amazon
S3. Tienen políticas de control de acceso que controlan cómo pueden interactuar con S3 los recursos
dentro de la VPC. Las solicitudes de la VPC a S3 solo se realizan correctamente a través de un punto
de acceso si la política de punto de enlace de la VPC concede acceso tanto al punto de acceso como al
bucket subyacente.

En el siguiente ejemplo de una instrucción de política, se configura un punto de enlace de la VPC para
permitir llamadas a GetObject para un bucket denominado example-bucket y un punto de acceso
denominado example-vpc-ap.

Versión de API 2006-03-01


102
Amazon Simple Storage Service Guía del desarrollador
Administrar el acceso público a los puntos de acceso

"Version": "2012-10-17",
"Statement": [
{
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example-bucket/*",
"arn:aws:s3:us-west-2:123456789012:accesspoint/example-vpc-ap/object/*"
]
}]
}

Note

La declaración "Resource" de este ejemplo utiliza un nombre de recurso de Amazon (ARN) para
especificar el punto de acceso. Para obtener más información acerca de los ARN de puntos de
acceso, consulte Usar puntos de acceso (p. 108).

Para obtener más información acerca de las políticas de punto de enlace de la VPC, consulte Utilización de
políticas de punto de conexión para Amazon S3 en la Guía del usuario de Amazon Virtual Private Cloud.

Administrar el acceso público a los puntos de acceso


Los puntos de acceso de Amazon S3 admiten configuraciones de Block Public Access (Bloqueo de acceso
público) independientes para cada punto de acceso. Al crear un punto de acceso, puede especificar la
configuración del bloqueo de acceso público aplicable a ese punto de acceso. Para cualquier solicitud
realizada a través de un punto de acceso, Amazon S3 evalúa la configuración de bloqueo de acceso
público para ese punto de acceso, el bucket subyacente y la cuenta propietaria del bucket. Si alguna de
estas configuraciones indica que la solicitud debe ser bloqueada, Amazon S3 rechaza la solicitud.

Para obtener más información acerca de la característica S3 Block Public Access, consulte Usar Block
Public Access de Amazon S3 (p. 488).
Important

• Todas las configuraciones de bloqueo de acceso público están habilitadas de forma


predeterminada para los puntos de acceso. Debe deshabilitar explícitamente cualquier
configuración que no desee aplicar a un punto de acceso.
• Amazon S3 actualmente no admite cambiar la configuración de bloqueo de acceso público de
un punto de acceso después de que se haya creado el punto de acceso.

Example

Ejemplo: Crear un punto de acceso con una configuración de bloqueo de acceso público personalizada

En este ejemplo se crea un punto de acceso denominado example-ap para el bucket example-bucket
en la cuenta 123456789012 con una configuración de bloqueo de acceso público no predeterminada. A
continuación, en el ejemplo se recupera la configuración del nuevo punto de acceso para comprobar su
configuración de bloqueo de acceso público.

AWS CLI

aws s3control create-access-point --name example-ap --account-id


123456789012 --bucket example-bucket --public-access-block-configuration
BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=true,RestrictPublicBuckets=true

Versión de API 2006-03-01


103
Amazon Simple Storage Service Guía del desarrollador
Configurar las políticas de IAM
para el uso de puntos de acceso

aws s3control get-access-point --name example-ap --account-id 123456789012

{
"Name": "example-ap",
"Bucket": "example-bucket",
"NetworkOrigin": "Internet",
"PublicAccessBlockConfiguration": {
"BlockPublicAcls": false,
"IgnorePublicAcls": false,
"BlockPublicPolicy": true,
"RestrictPublicBuckets": true
},
"CreationDate": "2019-11-27T00:00:00Z"
}

Configurar las políticas de IAM para el uso de puntos


de acceso
Los puntos de acceso de Amazon S3 admiten políticas de recursos de AWS Identity and Access
Management (IAM) que permiten controlar el uso del punto de acceso en función del recurso, del usuario o
de otras condiciones. Para que una aplicación o un usuario puedan acceder a objetos a través de un punto
de acceso, tanto el punto de acceso como el bucket subyacente deben permitir la solicitud.
Important

Agregar un punto de acceso de S3 a un bucket no cambia el comportamiento del bucket cuando


se accede a él mediante el nombre existente del bucket o de su ARN. Todas las operaciones
existentes respecto al bucket continuarán funcionando como antes. Las restricciones que se
incluyen en una política de punto de acceso solo se aplican a las solicitudes realizadas a través
de ese punto de acceso.

Claves de condición
Los puntos de acceso de S3 introducen tres nuevas claves de condición que se pueden utilizar en las
políticas de IAM para controlar el acceso a los recursos:

s3:DataAccessPointArn

Esta cadena se puede usar para obtener coincidencias de ARN de un punto de acceso. En el
siguiente ejemplo se hallan todas las coincidencias de puntos de acceso de la cuenta de AWS
123456789012 de la región us-west-2:

"Condition" : {
"StringLike": {
"s3:DataAccessPointArn": "arn:aws:s3:us-west-2:123456789012:accesspoint/*"
}
}

s3:DataAccessPointAccount

Se trata de un operador de cadena que puede utilizar para hallar coincidencias del ID de cuenta del
propietario de un punto de acceso. En el siguiente ejemplo se hallan todas las coincidencias con
puntos de acceso propiedad de la cuenta de AWS 123456789012.

"Condition" : {
"StringEquals": {
"s3:DataAccessPointAccount": "123456789012"

Versión de API 2006-03-01


104
Amazon Simple Storage Service Guía del desarrollador
Configurar las políticas de IAM
para el uso de puntos de acceso

}
}

s3:AccessPointNetworkOrigin

Se trata de un operador de cadena que puede utilizar para hallar coincidencias del origen de red, ya
sea Internet o VPC. En el ejemplo siguiente, solo se hallarán las coincidencias de los puntos de
acceso cuyo origen sea VPC.

"Condition" : {
"StringEquals": {
"s3:AccessPointNetworkOrigin": "VPC"
}
}

Para obtener más información acerca de las claves de condición con Amazon S3, consulte Acciones,
recursos y claves de condiciones de Amazon S3 (p. 388).

Delegar el control de acceso a los puntos de acceso


Puede delegar el control de acceso de un bucket en los puntos de acceso del bucket. La siguiente política
de bucket de ejemplo permite el acceso completo a todos los puntos de acceso de la cuenta del propietario
del bucket. Por lo tanto, todo el acceso a este bucket está controlado por las políticas asociadas a sus
puntos de acceso. Recomendamos configurar los buckets de esta manera para todos los casos de uso que
no requieran acceso directo al bucket.

Example Política de bucket que delega el control de acceso a los puntos de acceso

{
"Version": "2012-10-17",
"Statement" : [
{
"Effect": "Allow",
"Principal" : { "AWS": "*" },
"Action" : "*",
"Resource" : [ "Bucket ARN", "Bucket ARN/*"],
"Condition": {
"StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID" }
}
}]
}

Ejemplos de políticas de puntos de acceso


En los ejemplos siguientes se muestra cómo crear políticas de IAM para controlar las solicitudes realizadas
a través de un punto de acceso.
Note

Los permisos concedidos en una política de puntos de acceso solo se aplican si el bucket
subyacente también permite el mismo acceso. Puede lograr esto de dos maneras:

1. (Recomendado) Delegue el control de acceso del bucket al punto de acceso como se describe
en Delegar el control de acceso a los puntos de acceso (p. 105).
2. Agregue los mismos permisos contenidos en la política de puntos de acceso a la política del
bucket subyacente. En el primer ejemplo de política de puntos de acceso se muestra cómo
modificar la política de bucket subyacente para permitir el acceso necesario.

Versión de API 2006-03-01


105
Amazon Simple Storage Service Guía del desarrollador
Configurar las políticas de IAM
para el uso de puntos de acceso

Example Conceder política de punto de acceso

La siguiente política de punto de acceso concede a la usuaria de IAM Alice de la cuenta 123456789012
permisos para objetos GET y PUT con el prefijo Alice/ a través del punto de acceso my-access-point
de la cuenta 123456789012.

{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Alice"
},
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/
Alice/*"
}]
}

Note

Para que la política de punto de acceso conceda efectivamente acceso a Alice, el bucket
subyacente también debe permitir el mismo acceso a Alice. Puede delegar el control de acceso
desde el bucket al punto de acceso como se describe en Delegar el control de acceso a los
puntos de acceso (p. 105). O puede agregar la siguiente política al bucket subyacente para
conceder los permisos necesarios a Alice. Tenga en cuenta que la entrada Resource difiere
entre las políticas de punto de acceso y de bucket.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Alice"
},
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::example-bucket/Alice/*"
}]
}

Example Política de punto de acceso con condición de etiqueta

La siguiente política de punto de acceso concede al usuario de IAM Bob de la cuenta 123456789012
permisos para objetos GET a través del punto de acceso my-access-point de la cuenta 123456789012
que tengan la clave de etiqueta data establecida con un valor de finance.

{
"Version":"2012-10-17",
"Statement": [
{
"Effect":"Allow",
"Principal" : {
"AWS": "arn:aws:iam::123456789012:user/Bob"
},
"Action":"s3:GetObject",
"Resource" : "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point/object/
*",
"Condition" : {
"StringEquals": {

Versión de API 2006-03-01


106
Amazon Simple Storage Service Guía del desarrollador
Configurar las políticas de IAM
para el uso de puntos de acceso

"s3:ExistingObjectTag/data": "finance"
}
}
}]
}

Example Política de puntos de acceso que permite el listado de buckets

La siguiente política de punto de acceso concede al usuario de IAM Charles de la cuenta 123456789012
permiso para consultar los objetos contenidos en el punto de acceso subyacente my-access-point de la
cuenta 123456789012.

{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Charles"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/my-access-point"
}]
}

Example Política de control de servicios

La siguiente política de control de servicio requiere que todos los puntos de acceso nuevos se creen con
el origen de red VPC. Con esta política en vigor, los usuarios de la organización no pueden crear nuevos
puntos de acceso a los que se pueda acceder desde Internet.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:CreateAccessPoint",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"s3:AccessPointNetworkOrigin": "VPC"
}
}
}]
}

Example Política de bucket para limitar las operaciones de S3 a los orígenes de red VPC

La siguiente política de bucket limita el acceso a todas las operaciones de objetos de S3 para el bucket
examplebucket a los puntos de acceso cuyo origen de red sea VPC.
Important

Antes de utilizar una instrucción como la de este ejemplo, asegúrese de que no necesita usar
características que no sean compatibles con los puntos de acceso, como la replicación entre
regiones.

{
"Version": "2012-10-17",
"Statement": [

Versión de API 2006-03-01


107
Amazon Simple Storage Service Guía del desarrollador
Usar puntos de acceso

{
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:AbortMultipartUpload",
"s3:BypassGovernanceRetention",
"s3:DeleteObject",
"s3:DeleteObjectTagging",
"s3:DeleteObjectVersion",
"s3:DeleteObjectVersionTagging",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectLegalHold",
"s3:GetObjectRetention",
"s3:GetObjectTagging",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging",
"s3:ListMultipartUploadParts",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectLegalHold",
"s3:PutObjectRetention",
"s3:PutObjectTagging",
"s3:PutObjectVersionAcl",
"s3:PutObjectVersionTagging",
"s3:RestoreObject"
],
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotEquals": {
"s3:AccessPointNetworkOrigin": "VPC"
}
}
}
]
}

Usar puntos de acceso


Puede acceder a los objetos de un bucket de Amazon S3 con un punto de acceso mediante la Consola de
administración de AWS, la AWS CLI, los AWS SDK o las API REST de S3.

Los puntos de acceso tienen nombres de recurso de Amazon (ARN). Los ARN de los puntos de acceso
son similares a los ARN de los buckets, pero tienen tipos explícitos y llevan codificada la región del punto
de acceso y el ID de la cuenta de AWS del propietario del punto de acceso. Para obtener más información
acerca de los ARN, consulte Nombres de recurso de Amazon (ARN) en la AWS General Reference.

Los ARN de los puntos de acceso utilizan el formato arn:aws:s3:region:account-


id:accesspoint/resource. Por ejemplo:

• arn:aws:s3:us-west-2:123456789012:accesspoint/test representa el punto de acceso denominado test,


propiedad de la cuenta 123456789012 de la región us-west-2.
• arn:aws:s3:us-west-2:123456789012:accesspoint/* representa todos los puntos de acceso de la cuenta
123456789012 de la región us-west-2.

Los ARN para los objetos a los que se accede a través de un punto de acceso utilizan el formato
arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource. Por
ejemplo:

Versión de API 2006-03-01


108
Amazon Simple Storage Service Guía del desarrollador
Compatibilidad de los puntos de acceso con
las operaciones de S3 y los servicios de AWS

• arn:aws:s3:us-west-2:123456789012:accesspoint/test/object/unit-01 representa el objeto unit-01,


al que se accede a través del punto de acceso denominado test, que es propiedad de la cuenta
123456789012 de la región us-west-2.
• arn:aws:s3:us-west-2:123456789012:accesspoint/test/object/* representa todos los objetos del punto de
acceso test, de la cuenta 123456789012 de la región us-west-2.
• arn:aws:s3:us-west-2:123456789012:accesspoint/test/object/unit-01/finance/* representa todos los
objetos con el prefijo unit-01/finance/ para el punto de acceso test, de la cuenta 123456789012
de la región us-west-2.

Compatibilidad de los puntos de acceso con las


operaciones de S3 y los servicios de AWS
Los puntos de acceso de S3 son compatibles con un subconjunto de operaciones de S3 y otros servicios
de AWS. En las siguientes secciones se enumeran los servicios compatibles y las operaciones de S3.

Servicios de AWS

Puede utilizar los puntos de acceso de S3 con AWS CloudFormation.

Para obtener más información acerca de AWS CloudFormation, consulte ¿Qué es AWS CloudFormation?
en la Guía del usuario de AWS CloudFormation.

Operaciones de S3

Puede utilizar puntos de acceso para acceder a un bucket mediante el siguiente subconjunto de API de
Amazon S3:

• AbortMultipartUpload
• CompleteMultipartUpload
• CreateMultipartUpload
• DeleteObject
• DeleteObjectTagging
• GetObject
• GetObjectAcl
• GetObjectLegalHold
• GetObjectRetention
• GetObjectTagging
• HeadObject
• ListMultipartUploads
• ListObjectsV2
• ListParts
• PutObject
• PutObjectLegalHold
• PutObjectRetention
• PutObjectAcl
• PutObjectTagging
• RestoreObject

Versión de API 2006-03-01


109
Amazon Simple Storage Service Guía del desarrollador
Monitoreo y registro

• UploadPart

Monitoreo y registro
Amazon S3 registra las solicitudes realizadas a través de los puntos de acceso y las solicitudes
realizadas a las API que administran puntos de acceso, tales como CreateAccessPoint y
GetAccessPointPolicy.

Las solicitudes realizadas a Amazon S3 través de un punto de acceso aparecen en los registros de acceso
de servidor de S3 y en los registros de AWS CloudTrail con el nombre de host del punto de acceso.
El nombre de host de un punto de acceso toma la forma access_point_name-account_id.s3-
accesspoint.Region.amazonaws.com. Por ejemplo, supongamos que tiene la siguiente configuración
de bucket y punto de acceso:

• Un bucket denominado my-bucket en la región us-west-2 que contiene un objeto my-image.jpg


• Un punto de acceso denominado my-bucket-ap que está asociado con my-bucket
• El ID de la cuenta de AWS es 123456789012.

Una solicitud realizada para recuperar my-image.jpg directamente a través del bucket aparece
en los registros con el nombre de host my-bucket.s3.us-west-2.amazonaws.com. Si en lugar
de ello realiza la solicitud a través del punto de acceso, Amazon S3 recupera el mismo objeto, pero
registra la solicitud con el nombre de host my-bucket-ap-123456789012.s3-accesspoint.us-
west-2.amazonaws.com.

Para obtener más información acerca de los registros de acceso al servidor de S3, consulte Registro de
acceso al servidor de Amazon S3 (p. 794). Para obtener más información acerca de AWS CloudTrail,
consulte ¿Qué es AWS CloudTrail? en la AWS CloudTrail User Guide.
Note

En este momento, los puntos de acceso de S3 no son compatibles con las métricas de Amazon
CloudWatch.

Ejemplos
Example

Ejemplo: Solicitar un objeto a través de un punto de acceso

En el ejemplo siguiente se muestra cómo solicitar el objeto my-image.jpg a través del punto de acceso
prod que es propiedad del ID de cuenta 123456789012 de la región us-west-2; a continuación, se
guarda el archivo descargado como download.jpg.

AWS CLI

aws s3api get-object --key my-image.jpg --bucket arn:aws:s3:us-


west-2:123456789012:accesspoint/prod download.jpg

Example

Ejemplo: Cargar un objeto a través de un punto de acceso

En el ejemplo siguiente se muestra cómo cargar el objeto my-image.jpg a través del punto de acceso
prod que es propiedad del ID de cuenta 123456789012 de la región us-west-2.

Versión de API 2006-03-01


110
Amazon Simple Storage Service Guía del desarrollador
Ejemplos

AWS CLI

aws s3api put-object --bucket arn:aws:s3:us-west-2:123456789012:accesspoint/prod --key


my-image.jpg --body my-image.jpg

Example

Ejemplo: Eliminar un objeto a través de un punto de acceso

En el ejemplo siguiente se muestra cómo eliminar el objeto my-image.jpg a través del punto de acceso
prod que es propiedad del ID de cuenta 123456789012 de la región us-west-2.

AWS CLI

aws s3api delete-object --bucket arn:aws:s3:us-west-2:123456789012:accesspoint/prod --


key my-image.jpg

Example

Ejemplo: Enumeración de objetos a través de un punto de acceso

En el ejemplo siguiente se muestra cómo enumerar objetos a través del punto de acceso prod que es
propiedad de ID de cuenta 123456789012 de la región us-west-2.

AWS CLI

aws s3api list-objects-v2 --bucket arn:aws:s3:us-west-2:123456789012:accesspoint/prod

Example

Ejemplo: Añadir un conjunto de etiquetas a un objeto a través de un punto de acceso

En el ejemplo siguiente se muestra cómo añadir un conjunto de etiquetas al objeto my-image.jpg


existente a través del punto de acceso prod que es propiedad del ID de cuenta 123456789012 de la
región us-west-2.

AWS CLI

aws s3api put-object-tagging --bucket arn:aws:s3:us-west-2:123456789012:accesspoint/


prod --key my-image.jpg --tagging TagSet=[{Key="finance",Value="true"}]

Example

Ejemplo: Conceder permisos de acceso a través de un punto de acceso mediante una ACL

En el ejemplo siguiente se muestra cómo aplicar una ACL a un objeto my-image.jpg existente a través
del punto de acceso prod que es propiedad de ID de cuenta 123456789012 de la región us-west-2.

AWS CLI

aws s3api put-object-acl --bucket arn:aws:s3:us-west-2:123456789012:accesspoint/prod --


key my-image.jpg --acl private

Versión de API 2006-03-01


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

Restricciones y limitaciones de los puntos de


acceso
Los umbrales de error de Amazon S3 tienen en cuenta las siguientes restricciones y limitaciones:

• Solo puede crear puntos de acceso para los buckets que posee.
• Cada punto de acceso está asociado con exactamente un bucket, que debe especificar al crear el
punto de acceso. Después de crear un punto de acceso, no puede asociarlo a un bucket diferente.
Sin embargo, puede eliminar un punto de acceso y, a continuación, crear otro con el mismo nombre
asociado a un bucket diferente.
• Después de crear un punto de acceso, no puede cambiar su configuración de nube privada virtual
(VPC).
• Las políticas de punto de acceso tienen un límite de tamaño de 20 KB.
• Puede crear un máximo de 1.000 puntos de acceso por cuenta y región de AWS. Si necesita más de
1.000 puntos de acceso para una sola cuenta en una sola región, puede solicitar un aumento de la cuota
de servicio. Para obtener más información sobre las cuotas de servicio y solicitar un aumento, consulte
Cuotas de servicio de AWS en la AWS General Reference.
• No puede utilizar un punto de acceso como destino para la replicación entre regiones de S3. Para
obtener más información sobre la replicación, consulte Replicación (p. 684).
• Solo puede direccionar los puntos de acceso mediante URL de tipo de host virtual. Para obtener más
información acerca del direccionamiento de tipo de host virtual, consulte Acceso a un bucket.
• Las API que controlan la funcionalidad de los puntos de acceso (por ejemplo, PutAccessPoint y
GetAccessPointPolicy) no admiten llamadas entre cuentas.
• Debe usar AWS Signature Version 4 cuando realice solicitudes a un punto de acceso mediante las
API REST. Para obtener más información acerca de la autenticación de solicitudes, consulte el artículo
sobre autenticación de solicitudes (AWS Signature Version 4) en la Amazon Simple Storage Service API
Reference.
• Los puntos de acceso solo admiten el acceso a través de HTTPS.
• Los puntos de acceso no admiten el acceso anónimo.

Versión de API 2006-03-01


112
Amazon Simple Storage Service Guía del desarrollador

Trabajo con objetos de Amazon S3


Amazon S3 es un almacén sencillo de valores clave diseñado para almacenar tantos objetos como quiera.
Almacene estos objetos en uno o más buckets. Cada objeto puede tener un tamaño de hasta 5 TB. 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. 114).
• 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. 125).
• 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. 190).
• 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. 114).
• 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. 124).
• 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. 325).

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. Es
necesario 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. 187).

Temas
• Clave y metadatos de objetos (p. 114)
• Clases de almacenamiento de Amazon S3 (p. 119)
• Subrecursos de objeto (p. 124)
• Control de versiones de objetos (p. 125)
• Etiquetado de objetos (p. 127)
• Administrar el ciclo de vida de los objetos (p. 136)

Versión de API 2006-03-01


113
Amazon Simple Storage Service Guía del desarrollador
Clave y metadatos de objetos

• Compartir recursos entre orígenes (CORS) (p. 171)


• Operaciones en objetos (p. 181)

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 de forma única 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. 114)
• Metadatos de objetos (p. 117)

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, al destacar un bucket aparece una lista de 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


114
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. Sin embargo, al usar prefijos y
delimitadores en un nombre de clave de objeto, la consola de Amazon S3 y los SDK de AWS
pueden inferir la jerarquía e introducir 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


115
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 acaba con 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 que termina por "." o "..", debe utilizar la AWS Command Line Interface (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 que su navegador podría no admitir, 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 ("<")

Versión de API 2006-03-01


116
Amazon Simple Storage Service Guía del desarrollador
Metadatos de objetos

• Almohadilla ("#")
• 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. 119).

Para obtener más información acerca del cifrado del lado del servidor, consulte Protección de datos
mediante cifrado (p. 286).

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

Content-Type Tipo de objeto. Sí

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. Sí

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 (AWS KMS) o desde un cifrado
administrado por Amazon S3 (SSE-S3). Para obtener más
información, consulte Proteger los datos con el cifrado del
lado del servidor (p. 287).

Versión de API 2006-03-01


117
Amazon Simple Storage Service Guía del desarrollador
Metadatos de objetos

Nombre Descripción ¿El usuario


puede
modificar el
valor?

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 Usar el control de versiones (p. 509).

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. 119).

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) Configurar el
redireccionamiento de páginas web (p. 630).

x-amz-server-side- Si existe el cifrado x-amz en el servidor y tiene el valor Sí


encryption-aws-kms- aws:kms, indica el ID de la clave maestra del cliente (CMK)
key-id simétrica de AWS KMS usada para el objeto.

x-amz-server-side- Indica si se ha habilitado el cifrado en el servidor con Sí


encryption-customer- claves de cifrado proporcionadas por el cliente (SSE-C).
algorithm Para obtener más información, consulte Proteger datos
con el cifrado del lado del servidor con claves de cifrado
proporcionadas por el cliente (SSE-C) (p. 303).

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 por HTTP está obsoleta, 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.

Amazon S3 permite caracteres Unicode arbitrarios en los valores de metadatos.

Versión de API 2006-03-01


118
Amazon Simple Storage Service Guía del desarrollador
Clases de almacenamiento

Para evitar problemas en la presentación de estos valores de metadatos, debe cumplir con el uso de
caracteres US-ASCII al utilizar REST y UTF-8 al utilizar SOAP o cargas basadas en navegador a través de
POST.

Cuando se utilizan caracteres no US-ASCII en los valores de metadatos, la cadena Unicode proporcionada
se examina en busca de caracteres no US-ASCII. Si la cadena contiene solo caracteres US-ASCII, se
presenta tal cual. Si la cadena contiene caracteres no US-ASCII, primero se codifica con caracteres
usando UTF-8 y luego se codifica en US-ASCII.

Ejemplo:

PUT /Key HTTP/1.1


Host: awsexamplebucket1.s3.amazonaws.com
x-amz-meta-nonascii: ÄMÄZÕÑ S3

HEAD /Key HTTP/1.1


Host: awsexamplebucket1.s3.amazonaws.com
x-amz-meta-nonascii: =?UTF-8?B?w4PChE3Dg8KEWsODwpXDg8KRIFMz?=

PUT /Key HTTP/1.1


Host: awsexamplebucket1.s3.amazonaws.com
x-amz-meta-ascii: AMAZONS3

HEAD /Key HTTP/1.1


Host: awsexamplebucket1.s3.amazonaws.com
x-amz-meta-ascii: AMAZONS3

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
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.

Versión de API 2006-03-01


119
Amazon Simple Storage Service Guía del desarrollador
Clases de almacenamiento para objetos a
los que se obtiene acceso con frecuencia

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. 120)
• Clase de almacenamiento para optimizar automáticamente los objetos a los que se obtiene acceso
frecuente e infrecuentemente (p. 120)
• Clases de almacenamiento para objetos a los que se obtiene acceso con poca frecuencia (p. 121)
• Clases de almacenamiento para el archivado de objetos (p. 122)
• Comparación de las clases de almacenamiento de Amazon S3 (p. 123)
• Establecimiento de la clase de almacenamiento de un objeto (p. 123)

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:

• S3 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 S3 Standard.
• Reduced Redundancy (Redundancia reducida): 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 S3 Standard.
Important

Recomendamos que no utilice esta clase de almacenamiento. La clase de almacenamiento S3


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 para optimizar


automáticamente los objetos a los que se obtiene
acceso frecuente e infrecuentemente
La clase de almacenamiento S3 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. S3
Intelligent-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 S3 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.

Versión de API 2006-03-01


120
Amazon Simple Storage Service Guía del desarrollador
Clases de almacenamiento para objetos a los
que se obtiene acceso con poca frecuencia

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 S3 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 S3 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 del tipo de almacenamiento S3 Intelligent-Tiering.
Note

La clases de almacenamiento S3 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 S3 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 S3 Standard-IA (Estándar de acceso poco frecuente) y S3 One Zone-IA
(Única zona- Acceso poco frecuente de S3 están diseñadas para datos de larga duración y acceso poco
frecuente. (IA significa infrequent access (acceso poco frecuente). Los objetos S3 Standard-IA y S3 One
Zone-IA están disponibles para el acceso en milisegundos (igual que la clase de almacenamiento S3
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.

Por ejemplo, puede elegir las clases de almacenamiento S3 Standard-IA y S3 One Zone-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
S3 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 S3 One Zone-IA o a S3 Standard-IA.

Para obtener más información sobre la administración del ciclo de vida, consulte Administrar el ciclo de
vida de los objetos (p. 136).

Note

Las clases de almacenamiento S3 Standard-IA y S3 One Zone-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:

• S3 Standard-IA: Amazon S3 almacena los datos del objeto de forma redundante en varias zonas de
disponibilidad separadas geográficamente (similar a la clase de almacenamiento —). Los objetos S3
Standard-IA son resistentes a la pérdida de una zona de disponibilidad. Esta clase de almacenamiento
ofrece mayor disponibilidad y resistencia que la clase S3 One Zone-IA.

Versión de API 2006-03-01


121
Amazon Simple Storage Service Guía del desarrollador
Clases de almacenamiento para el archivado de objetos

• S3 One Zone-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 S3 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 S3 One Zone-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:

• S3 Standard-IA: utilice esta clase para su copia principal o única de los datos que no se puedan volver a
crear.
• S3 One Zone-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 de S3 (CRR).

Clases de almacenamiento para el archivado de


objetos
Las clases de almacenamiento S3 Glacier y S3 Glacier 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 S3 Standard. Para ver una comparación de durabilidad y disponibilidad entre las
distintas clases de almacenamiento, consulte la tabla situada al final de esta sección.

Estas clases de almacenamiento se diferencian en lo siguiente:

• 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 S3 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.
• S3 Glacier Deep Archive: se usa para archivar datos a los que en contadas ocasiones se necesita
obtener acceso. Los datos almacenados en la clase S3 Glacier 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.

S3 Glacier Deep Archive es la opción de almacenamiento más económica en AWS. Los costos de
almacenamiento de S3 Glacier Deep Archive son menores que los de la clase de almacenamiento
S3 Glacier. Se pueden reducir los costos de recuperación de S3 Glacier 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 S3 Glacier o S3 Glacier 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. 123). Sin embargo, los objetos S3
Glacier y S3 Glacier Deep Archive no están disponibles para su acceso en tiempo real. Para poder obtener
acceso a los objetos de S3 Glacier y S3 Glacier Deep Archive, primero debe restaurarlos (los objetos S3
Standard, RRS, S3 Standard-IA, S3 One Zone-IA y S3 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. 270).

Versión de API 2006-03-01


122
Amazon Simple Storage Service Guía del desarrollador
Comparación de las clases de
almacenamiento de Amazon S3

Important

Si elige la clase de almacenamiento S3 Glacier o S3 Glacier 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.

Todas las clases de almacenamiento, excepto S3 One Zone-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 S3 Glacier o S3 Glacier 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:

Versión de API 2006-03-01


123
Amazon Simple Storage Service Guía del desarrollador
Subrecursos

• 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 de Ciclo de vida de S3 a un bucket. Para obtener más información, consulte Administrar el
ciclo de vida de los objetos (p. 136).
• 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 S3 Glacier o S3 Glacier Deep Archive. Para obtener más
información, consulte Información general de la configuración de replicación (p. 690).

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.

Restringir permisos de política de acceso a una clase de


almacenamiento específica
Cuando concede permisos de política de acceso para operaciones de Amazon S3, 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. Por ejemplo, cuando concede el permiso de s3:PUTObject,
puede restringir las cargas de objetos a una clase de almacenamiento específica. 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. 383). Para obtener más información sobre el uso de condiciones en políticas y una lista
completa de claves de condición de Amazon S3, consulte lo siguiente:

• Acciones, recursos y claves de condiciones de Amazon S3 (p. 388)


• Claves de condición de Amazon S3 (p. 376)

Subrecursos de objeto
Amazon S3 define un conjunto de subrecursos asociados con buckets y objetos. Los subrecursos están
subordinados a los objetos. Esto significa que los subrecursos no existen por sí solos. Siempre están
asociados a alguna otra entidad, como un objeto o un bucket.

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. 474).

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

Versión de API 2006-03-01


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

Subrecurso Descripción
crear, actualizar ni eliminar el subrecurso torrent. Para obtener más información,
consulte Uso de BitTorrent con Amazon S3 (p. 782).
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 de Amazon S3 para mantener varias versiones de un objeto en un bucket.
Por ejemplo, puede almacenar my-image.jpg (versión 111111) y my-image.jpg (versión 222222)
en un solo bucket. El Control de versiones de S3 le protege de las consecuencias de sobrescrituras y
eliminaciones no deseadas. También puede utilizarlo para archivar objetos de manera que tenga acceso a
las versiones anteriores.
Note

La API de SOAP no es admite el Control de versiones de S3. 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 Administrar el ciclo de vida de los objetos (p. 136).
Para obtener información acerca de cómo crear políticas de Ciclo de vida de S3 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 de S3 en su bucket. De forma predeterminada,


Control de versiones de S3 está deshabilitado. 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 del ID de versión como null. Si el Control de versiones de S3 está
habilitado, Amazon S3 asigna un valor de ID de versión para el objeto. Este valor lo distingue de otras
versiones de la misma clave.

La habilitación y suspensión del control de versiones se realiza en el nivel del bucket. Cuando se habilita
el control de versiones en un bucket existente, los objetos que ya están almacenados en el bucket no se
modifican. Los ID de versión (null), el contenido y los permisos siguen siendo los mismos. Después de
habilitar el Control de versiones de S3 en un bucket, cada objeto que se agrega al bucket obtiene un ID de
versión, que lo distingue de otras versiones de la misma clave.

Solo Amazon S3 genera ID de versión y no se pueden editar. Los ID de versión son cadenas
opacas unicode, codificadas en UTF-8, listas para URL que no tienen más de 1024 bytes de
longitud. A continuación se muestra un ejemplo: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY
+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo.
Note

Para simplificar, todos los ejemplos usan identificadores mucho más cortos.

Versión de API 2006-03-01


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

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.

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 404 Not
Found, 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, se realiza 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.

Versión de API 2006-03-01


126
Amazon Simple Storage Service Guía del desarrollador
Etiquetado de objetos

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.

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. 511).
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 de Amazon S3 en un bucket con Control de
versiones de S3 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. 789).

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

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

Versión de API 2006-03-01


127
Amazon Simple Storage Service Guía del desarrollador
Etiquetado de objetos

• 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:

• 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.

Versión de API 2006-03-01


128
Amazon Simple Storage Service Guía del desarrollador
Operaciones de la API relacionadas
con el etiquetado de objetos

Para agregar conjuntos de etiquetas de objetos a más de un objeto de Amazon S3 con una sola solicitud,
puede utilizar Operaciones por lotes de S3. En las Operaciones por lotes de S3 se proporciona una lista
de objetos en los que se puede operar. Las Operaciones por lotes de S3 llaman a la API correspondiente
para realizar la operación especificada. Una sola Operaciones por lotes de S3 puede realizar la operación
especificada en miles de millones de objetos que contiene exabytes de datos.

Las Operaciones por lotes de S3 hacen un seguimiento del avance, envían notificaciones y almacenan un
informe de finalización de todas las acciones, lo que proporciona una experiencia sin servidor, auditable,
completamente administrada. Puede usar Operaciones por lotes de S3 hasta la Consola de administración
de AWS, AWS CLI, los SDK de AWS o la API de REST. Para obtener más información, consulte the
section called “Conceptos básicos: trabajos” (p. 547).

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

• 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.

Versión de API 2006-03-01


129
Amazon Simple Storage Service Guía del desarrollador
Etiquetar objetos e información adicional

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.

Etiquetar objetos e información adicional


En esta sección, se explica cómo el etiquetado de objetos se relaciona con otras configuraciones.

Etiquetar objetos y administrar el 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 S3 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 Administrar el ciclo de vida de los objetos (p. 136).

Etiquetar y replicar 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. 689).

Etiquetar 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:

• Ejemplo: operaciones con objetos (p. 374)


• Ejemplo: operaciones del bucket de — (p. 375)

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:

Versión de API 2006-03-01


130
Amazon Simple Storage Service Guía del desarrollador
Etiquetar objetos e información adicional

• 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.
• 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 de Amazon S3 (p. 376). 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 leer solo 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/*",
"Principal": "*",
"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": [

Versión de API 2006-03-01


131
Amazon Simple Storage Service Guía del desarrollador
Etiquetar objetos e información adicional

"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Principal":{
"CanonicalUser":[
"64-digit-alphanumeric-value"
]
},
"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/*"
],
"Principal":{
"AWS":[
"arn:aws:iam::account-number-without-hyphens:user/username"
]
},
"Condition": {
"ForAllValues:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
},
"ForAnyValue:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}

Versión de API 2006-03-01


132
Amazon Simple Storage Service Guía del desarrollador
Administrar etiquetas de objetos

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.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Principal":{
"AWS":[
"arn:aws:iam::account-number-without-hyphens:user/username"
]
},
"Condition": {
"StringEquals": {
"s3:RequestObjectTag/Project": "X"
}
}
}
]
}

Temas relacionados

Administrar etiquetas de objetos (p. 133)

Administrar 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
• Administrar etiquetas de objetos mediante la consola (p. 133)
• Administrar etiquetas con AWS SDK for Java (p. 134)
• Administrar etiquetas con el AWS SDK para .NET (p. 135)

Administrar 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.

Versión de API 2006-03-01


133
Amazon Simple Storage Service Guía del desarrollador
Administrar etiquetas de objetos

Administrar etiquetas con 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. 127). 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. 827).

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

Versión de API 2006-03-01


134
Amazon Simple Storage Service Guía del desarrollador
Administrar etiquetas de objetos

}
}
}

Administrar 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. 127).

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. 829).

using Amazon.S3;
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);

Versión de API 2006-03-01


135
Amazon Simple Storage Service Guía del desarrollador
Administración del ciclo de vida

for (int i = 0; i < objectTags.Tagging.Count; i++)


Console.WriteLine("Key: {0}, Value: {1}", objectTags.Tagging[i].Key,
objectTags.Tagging[i].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,
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[i].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);
}
}
}
}

Administrar el 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 de Amazon S3. Una configuración del Ciclo de vida de S3 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 S3 Standard-IA 30 días después
de su creación o archivar objetos en la clase de almacenamiento S3 Glacier un año después de su
creación.

Versión de API 2006-03-01


136
Amazon Simple Storage Service Guía del desarrollador
¿Cuándo se debe usar la configuración del ciclo de vida?

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 Descripción del vencimiento de los objetos (p. 143).

Para obtener más información acerca de las reglas del Ciclo de vida de S3, consulte Elementos de
configuración del ciclo de vida (p. 145).

¿Cuándo se debe usar la configuración del ciclo de


vida?
Defina reglas de configuración del Ciclo de vida de S3 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 de S3, 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 se puede configurar un ciclo de vida?


Una configuración de Ciclo de vida de S3, 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 Configurar el ciclo de vida
de un bucket (p. 162).

Versión de API 2006-03-01


137
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

Para obtener más información, consulte los siguientes temas:

• Consideraciones adicionales para la configuración del ciclo de vida (p. 138)


• Elementos de configuración del ciclo de vida (p. 145)
• Ejemplos de configuración del ciclo de vida (p. 152)
• Configurar el ciclo de vida de un bucket (p. 162)

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.

Temas
• Transición de objetos con el ciclo de vida de Amazon S3 (p. 138)
• Descripción del vencimiento de los objetos (p. 143)
• Configuraciones del ciclo de vida y otras configuraciones del bucket (p. 143)

Transición de objetos con el ciclo de vida de Amazon S3


Puede agregar reglas a una configuración del Ciclo de vida de S3 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 S3 Standard-IA.
• Se recomienda archivar los objetos a los que no necesita obtener acceso en tiempo real en la clase de
almacenamiento S3 Glacier.

En las siguientes secciones se describen las transiciones admitidas, las limitaciones relacionadas y la
transición a la clase de almacenamiento S3 Glacier.

Transiciones admitidas y limitaciones relacionadas


En una configuración del Ciclo de vida de S3, 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 S3 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. 119).

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


138
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

Transiciones del ciclo de vida admitidas

Amazon S3 admite las siguientes transiciones de ciclo de vida entre clases de almacenamiento con una
configuración del ciclo de vida de S3.

Puede realizar la transición de lo siguiente:

• La clase de almacenamiento S3 Standard a cualquier otra clase de almacenamiento.


• Cualquier clase de almacenamiento a las clases de almacenamiento S3 Glacier Deep Archive o S3
Glacier.
• La clase de almacenamiento S3 Standard-IA a las clases de almacenamiento S3 Intelligent-Tiering o S3
One Zone-IA.
• La clase de almacenamiento S3 Intelligent-Tiering a la clase de almacenamiento S3 One Zone-IA.
• La clase de almacenamiento S3 Glacier a la clase de almacenamiento S3 Glacier Deep Archive.

Transiciones del ciclo de vida no admitidas

Amazon S3 no admite ninguna de las siguientes transiciones de ciclo de vida.

No se puede realizar la transición de lo siguiente:

• Cualquier clase de almacenamiento a la clase de almacenamiento S3 Standard.


• Cualquier clase de almacenamiento a la clase de almacenamiento de redundancia reducida.
• La clase de almacenamiento S3 Intelligent-Tiering a la clase de almacenamiento S3 Standard-IA.

Versión de API 2006-03-01


139
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

• La clase de almacenamiento S3 One Zone-IA a las clases de almacenamiento S3 Standard-IA o S3


Intelligent-Tiering.

Restricciones

Las transiciones de clases de almacenamiento de ciclo de vida tienen las siguientes limitaciones:

Tamaño de objeto y transiciones desde S3 Standard o S3 Standard-IA a S3 Intelligent-Tiering, S3


Standard-IA o S3 One Zone-IA

Al hacer la transición de objetos de las clases de almacenamiento S3 Standard o S3 Standard-IA a S3


Intelligent-Tiering, S3 Standard-IA o S3 One Zone-IA, se aplican las siguientes restricciones de tamaño de
objeto:

• Objetos grandes ‐ para las siguientes transiciones, la transición de objetos grandes supone un beneficio
económico:
• De las clases de almacenamiento S3 Standard o S3 Standard-IA a S3 Intelligent-Tiering.
• De la clase de almacenamiento S3 Standard a S3 Standard-IA o S3 One Zone-IA.
• Objetos menores de 128 KB ‐ para las siguientes transiciones, Amazon S3 no realiza la transición de
objetos menores de 128 KB porque no es rentable económicamente:
• De las clases de almacenamiento S3 Standard o S3 Standard-IA a S3 Intelligent-Tiering.
• De la clase de almacenamiento S3 Standard a S3 Standard-IA o S3 One Zone-IA.

Días mínimos para la transición de S3 Standard o S3 Standard-IA a S3 Standard-IA o S3 One Zone-IA

Antes de transicionar objetos de las clases de almacenamiento S3 Standard o S3 Standard-IA a S3


Standard-IA o S3 One Zone-IA, debe almacenarlas como mínimo 30 días en la clase de almacenamiento
S3 Standard. Por ejemplo, no puede crear una regla de ciclo de vida para la transición de objetos a la clase
de almacenamiento S3 Standard-IA un día después de crearlos. Amazon S3 no realiza la transición de
objetos dentro de los primeros 30 días porque a menudo se obtiene acceso a los objetos más nuevos con
más frecuencia o se eliminan antes de lo que es adecuado para el almacenamiento S3 Standard-IA o S3
One Zone-IA.

Asimismo, si pasa objetos no actuales (en los buckets con control de versiones), solo podrá pasarlos a las
clases de almacenamiento S3 Standard-IA u S3 One Zone-IA si cumplen la condición de ser no actuales
durante, al menos, 30 días.

Cargo mínimo de almacenamiento de 30 días para S3 Intelligent-Tiering, S3 Standard-IA y S3 One Zone-IA

Las clases de almacenamiento S3 Intelligent-Tiering, S3 Standard-IA y S3 One Zone-IA tienen un cargo


mínimo de almacenamiento de 30 días. Por lo tanto, no puede especificar una sola regla de ciclo de vida
para una transición S3 Intelligent-Tiering, S3 Standard-IA o S3 One Zone-IA y una transición S3 Glacier
o S3 Glacier Deep Archive a la vez cuando la transición de S3 Glacier o S3 Glacier Deep Archive suceda
menos de 30 días después de la transición S3 Intelligent-Tiering, S3 Standard-IA o S3 One Zone-IA.

Este mismo cargo mínimo de 30 días se aplica cuando se especifica una transición del almacenamiento S3
Standard-IA al almacenamiento S3 One Zone-IA o S3 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 costes, consulte Precios de Amazon S3.

Administrar el ciclo de vida completo de un objeto

Puede combinar estas acciones de Ciclo de vida de S3 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

Versión de API 2006-03-01


140
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

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 de S3 en la que especifique la acción de
transición inicial a la clase de almacenamiento S3 Intelligent-Tiering, S3 Standard-IA o S3 One Zone-IA),
otra acción de transición al almacenamiento S3 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 costes, consulte
Precios de Amazon S3.

Transición a las clases de almacenamiento S3 Glacier y S3 Glacier Deep Archive


(archivo de objetos)
Con la configuración del Ciclo de vida de S3, puede pasar objetos a las clases de almacenamiento S3
Glacier o S3 Glacier Deep Archive para archivarlos. Si elige la clase de almacenamiento S3 Glacier o
S3 Glacier 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 almacenados en las clases de almacenamiento S3 Glacier o S3 Glacier 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. 270).
• Los objetos que se almacenan en la clase de almacenamiento S3 Glacier solo se pueden transferir a la
clase de almacenamiento S3 Glacier Deep Archive.

Puede usar una regla de configuración del Ciclo de vida de S3 para convertir la clase de
almacenamiento de un objeto de S3 Glacier a la clase de almacenamiento S3 Glacier Deep Archive
solamente. Si desea cambiar la clase de almacenamiento de un objeto almacenado en S3 Glacier a
otra clase de almacenamiento que no sea S3 Glacier 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 que especifica S3 Standard, S3 Intelligent-Tiering, S3 Standard-IA, S3 One Zone-IA
o redundancia reducida como la clase de almacenamiento.
• La transición de objetos a la clase de almacenamiento S3 Glacier Deep Archive es unidireccional.

No puede usar una regla de configuración del Ciclo de vida de S3 para convertir la clase de
almacenamiento de un objeto de S3 Glacier 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 que especifica S3 Standard, S3
Intelligent-Tiering, S3 Standard-IA, S3 One Zone-IA, S3 Glacier o Reduced redundancy como la clase de
almacenamiento.

Versión de API 2006-03-01


141
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

• Los objetos que se almacenan en las clases de almacenamiento S3 Glacier y S3 Glacier Deep Archive
son visibles y están disponibles solo 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 S3 Glacier y S3 Glacier Deep Archive pueden reducir los
costos de almacenamiento. Sin embargo, para asegurarse de que la clase de almacenamiento S3 Glacier
o S3 Glacier Deep Archive es apropiada para usted, debe considerar lo siguiente:

• Cargos generales de almacenamiento – Cuando pasa objetos a las clases de almacenamiento S3


Glacier o S3 Glacier 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 S3 Glacier o S3 Glacier 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 S3 Glacier o S3 Glacier 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 S3
Glacier o S3 Glacier 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.
• Cantidad de días prevista para tener los objetos archivados — S3 Glacier y S3 Glacier Deep Archive
es una solución de archivo a largo plazo. El periodo mínimo de almacenamiento es de 90 días para la
clase de almacenamiento S3 Glacier y de 180 para S3 Glacier 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 transición de S3 Glacier y S3 Glacier Deep Archive: Cada objeto que se pasa a
la clase de almacenamiento S3 Glacier o S3 Glacier 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 S3 Glacier y S3 Glacier Deep Archive: S3 Glacier y S3 Glacier
Deep Archive se han diseñado para archivar a largo plazo 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. 270).

Cuando archiva objetos en Amazon S3 Glacier por medio de la administración del Ciclo de vida de S3 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. Para obtener más información, consulte la sección Amazon S3 Glacier de las Preguntas frecuentes
de Amazon S3.

Versión de API 2006-03-01


142
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

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 S3 Glacier o S3 Glacier Deep Archive. (Una solicitud de la
operación de API HEAD Object o GET Object devolverá S3 Glacier o S3 Glacier Deep Archive como clase
de almacenamiento).
Note

Cuando se restaura un archivo, se paga tanto por el archivado (la tarifa de S3 Glacier o S3
Glacier Deep Archive) como por la copia que se ha restaurado de manera temporal (tarifa de
almacenamiento de redundancia reducida). 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. 270).

Descripción del vencimiento de los 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 de S3 para provocar el vencimiento de objetos que han
estado en el almacenamiento S3 Intelligent-Tiering, S3 Standard-IA o S3 One Zone-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 S3 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
objetos que han estado en el almacenamiento S3 Glacier 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 de S3, puede asociar otras configuraciones con el
bucket. En esta sección se explica cómo la configuración del Ciclo de vida de S3 se relaciona con otras
configuraciones del bucket.

Versión de API 2006-03-01


143
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales

Ciclos de vida y control de versiones


Puede añadir configuraciones del Ciclo de vida de S3 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. 125).

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. 145). Para
obtener más información acerca del control de versiones de S3, consulte Control de versiones de
objetos (p. 125).

Configuración del ciclo de vida en buckets habilitados para la MFA


No se admite la configuración del ciclo de vida en buckets habilitados para autenticación multifactor (MFA).

Ciclos de vida y registros


Las acciones del ciclo de vida de Amazon S3 no se capturan por el registro de nivel del objeto de AWS
CloudTrail. CloudTrail captura las solicitudes de API realizadas a puntos de enlace de Amazon S3 externos
mientras que las acciones del Ciclo de vida de 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 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 Server access logging (Registro de acceso del servidor) (p. 794).

Si tiene el registro habilitado en su bucket, los registros de acceso del servidor de Amazon S3 notifican los
resultados de las siguientes operaciones.

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 S3 Standard-IA.

S3.TRANSITION_ZIA.OBJECT Amazon S3 transita el objeto a la clase de


almacenamiento S3 One Zone-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 S3 Glacier.

S3.TRANSITION_GDA.OBJECT Amazon S3 inicia la transición de un objeto a la


clase de almacenamiento S3 Glacier o S3 Glacier
Deep Archive.

S3.DELETE.UPLOAD Amazon S3 anula la carga multiparte incompleta.

Versión de API 2006-03-01


144
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

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. 145)


• Transición a las clases de almacenamiento S3 Glacier y S3 Glacier Deep Archive (archivo de
objetos) (p. 141)
• Configurar el ciclo de vida de un bucket (p. 162)

Elementos de configuración del ciclo de vida


Temas
• Elemento ID (p. 145)
• Elemento Status (p. 146)
• Elemento Filter (p. 146)
• Elementos para describir las acciones del ciclo de vida (p. 148)

La configuración del Ciclo de vida de S3 se especifica mediante un XML que consiste en una o varias
reglas de ciclo de vida.

<LifecycleConfiguration>
<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 de S3.
Para ver configuraciones de ejemplo, consulte Ejemplos de configuración del ciclo de vida (p. 152).

Elemento ID
Una configuración de Ciclo de vida de S3 puede tener hasta 1000 reglas. El elemento <ID> identifica
unívocamente una regla. La longitud del ID está limitada a 255 caracteres.

Versión de API 2006-03-01


145
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

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 de S3 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>

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. 114).
• 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>

Versión de API 2006-03-01


146
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

<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>
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>
Versión de API 2006-03-01
147
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

</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 de S3. El
efecto de estas acciones depende del estado del control de versiones del bucket.

• 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. 138). 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. 119). 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
Versión de API 2006-03-01
148
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

relación con cómo administra Amazon S3 la acción expiration. Para obtener más información,
consulte Usar el control de versiones (p. 509). 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: Eliminar marcadores de eliminación de objetos
que vencieron (p. 160).

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.

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. 138).
• 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.

Versión de API 2006-03-01


149
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

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. 198).
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 objeto vencidos. Para ver un ejemplo, consulte Ejemplo 7: Eliminar marcadores de
eliminación de objetos que vencieron (p. 160).
Note

No puede especificar esta acción de ciclo de vida en una regla que establezca un filtro basado
en etiquetas de objetos.

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.
Restaurar versiones anteriores de un objeto al utilizar configuraciones del ciclo de vida

Como se explica en detalle en el tema Restaurar versiones anteriores (p. 527), 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.

Cuando use las reglas de configuración del Ciclo de vida de S3 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

Versión de API 2006-03-01


150
Amazon Simple Storage Service Guía del desarrollador
Elementos de configuración del ciclo de vida

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 de S3, 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.
• 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 de S3, puede especificar la fecha en la que desea
que Amazon S3 realice la acción. Cuando llegue la fecha específica, Amazon 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 de S3 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 única. Amazon 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 Expiration basada en una fecha para
eliminar todos los objetos (y supongamos también que la regla no especifica filtro alguno). En la

Versión de API 2006-03-01


151
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

fecha especificada, Amazon 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


Esta sección proporciona ejemplos de configuración del Ciclo de vida de S3. Cada ejemplo muestra cómo
puede especificar el archivo XML en cada uno de los ejemplos de casos.

Temas
• Ejemplo 1: Especificar un filtro (p. 152)
• Ejemplo 2: Deshabilitar una regla del ciclo de vida (p. 154)
• Ejemplo 3: Transición entre clases de almacenamiento durante la vida útil de un objeto (p. 155)
• Ejemplo 4: Especificar varias reglas (p. 155)
• Ejemplo 5: Superponer filtros, conflictos entre acciones del ciclo de vida y lo que hace Amazon S3
(p. 156)
• Ejemplo 6: Especificar una regla del ciclo de vida para un bucket habilitado para el control de versiones
(p. 159)
• Ejemplo 7: Eliminar marcadores de eliminación de objetos que vencieron (p. 160)
• Ejemplo 8: Configuración del ciclo de vida para anular cargas multipartes (p. 162)

Ejemplo 1: Especificar un filtro


Cada regla de Ciclo de vida de S3 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 de S3 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 S3 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>S3 Glacier</StorageClass>
</Transition>

Versión de API 2006-03-01


152
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

<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 S3 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>S3 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).

...
<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>

Versión de API 2006-03-01


153
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

<Key>key2</Key>
<Value>value2</Value>
</Tag>
</And>
</Filter>
...

Important

Cuando tiene varias reglas en una configuración de Ciclo de vida de S3, un objeto puede reunir
los requisitos para varias acciones de ciclo de vida. En tales casos, Amazon S3 sigue estas reglas
generales:

• 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 es elegible para una transición S3 Glacier y S3 Standard-IA (o S3 One Zone-
IA), Amazon S3 elige la transición S3 Glacier.

Para ver ejemplos, consulte Ejemplo 5: Superponer filtros, conflictos entre acciones del ciclo de
vida y lo que hace Amazon S3 (p. 156).

Ejemplo 2: Deshabilitar una regla del 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
S3 Glacier inmediatamente después de su creación.
• La regla 2 indica a Amazon S3 que pase los objetos con el prefijo documents/ a la clase de
almacenamiento S3 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 realiza ninguna
acción con reglas deshabilitadas.

<LifecycleConfiguration>
<Rule>
<ID>Rule1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>S3 Glacier</StorageClass>
</Transition>
</Rule>
<Rule>
<ID>Rule2</ID>
<Prefix>documents/</Prefix>
<Status>Disabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>S3 Glacier</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>

Versión de API 2006-03-01


154
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

Ejemplo 3: Transición entre clases de almacenamiento durante la


vida útil de un objeto
En este ejemplo, se usa 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 acerca de los precios, consulte Precios de
Amazon S3.

La siguiente configuración de Ciclo de vida de S3 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 S3 Standard-IA 30 días después de su creación
• Pasar objetos a la clase de almacenamiento S3 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>
<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: Especificar 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 S3 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 S3 Standard-IA 90 días después de su creación y que los
elimine un año después de su creación.

Versión de API 2006-03-01


155
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

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

Ejemplo 5: Superponer filtros, conflictos entre acciones del ciclo


de vida y lo que hace Amazon S3
Es posible que especifique una configuración de Ciclo de vida de S3 en la que especifique prefijos o
acciones superpuestos.

En general, el ciclo de vida de Amazon S3 optimiza el costo. Por ejemplo, si dos políticas de vencimiento
se superponen, se respeta 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 de S3 pasa los objetos a la
clase de almacenamiento con costos inferiores. En ambos casos, Ciclo de vida de S3 intenta elegir la ruta
que es menos costosa para usted. Una excepción a esta regla general es con la clase de almacenamiento
S3 Intelligent-Tiering. S3 Intelligent-Tiering es favorecida por el ciclo de vida de S3 sobre cualquier clase
de almacenamiento, aparte de las clases de almacenamiento S3 Glacier y S3 Glacier Deep Archive.

En los siguientes ejemplos se muestra cómo Amazon S3 elige resolver posibles conflictos.

Example 1: Superponer 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.

Versión de API 2006-03-01


156
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

La regla 1 solicita a Amazon S3 que elimine todos los objetos un año después de su creación. La regla
2 solicita a Amazon S3 la transición de un subconjunto de objetos a la clase de almacenamiento S3
Standard-IA 30 días después de la 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 del 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:

• 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 S3 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>

Versión de API 2006-03-01


157
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

</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: Superponer prefijos causa conflictos entre acciones del 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>
</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 de S3 con 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 S3 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.

Versión de API 2006-03-01


158
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

<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
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: Especificar una regla del 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 acerca de Control de versiones
de S3, consulte Control de versiones de objetos (p. 125).

Además, desea reducir los costos de almacenamiento mediante la transición de las versiones no actuales
a la clase de almacenamiento S3 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 S3 Standard-IA.

<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>90</Days>
<StorageClass>STANDARD_IA</StorageClass>

Versión de API 2006-03-01


159
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

</Transition>
<NoncurrentVersionTransition>
<NoncurrentDays>30</NoncurrentDays>
<StorageClass>S3 Glacier</StorageClass>
</NoncurrentVersionTransition>
<NoncurrentVersionExpiration>
<NoncurrentDays>365</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>

Ejemplo 7: Eliminar 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 de S3 para indicarle a Amazon
S3 que elimine los marcadores de eliminación de objetos que vencieron.

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 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>
...

Versión de API 2006-03-01


160
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuración del ciclo de vida

<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 Usar
el control de versiones (p. 509).
Note

Esta regla realizará automáticamente la limpieza ExpiredObjectDeleteMarker


en un bucket con control de versiones, por lo que no es preciso incluir una etiqueta
ExpiredObjectDeleteMarker.

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,
en este ejemplo todas las versiones de objetos se eliminan permanentemente 90 días después de la
creación del objeto. Tendrá marcadores de eliminación de objetos vencidos, pero Amazon S3 detecta y
elimina los marcadores de eliminación de objetos vencidos 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>
<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.
Versión de API 2006-03-01
161
Amazon Simple Storage Service Guía del desarrollador
Configurar el ciclo de vida

Ejemplo 8: Configuración del 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. 196).

Por medio de la configuración de Ciclo de vida de S3, 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 de S3 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>

Configurar el ciclo de vida de un bucket


Temas
• Administrar el ciclo de vida de un objeto con la consola de Amazon S3 (p. 163)
• Establecer configuraciones de ciclo de vida con la AWS CLI (p. 163)
• Administrar los ciclos de vida de los objetos con AWS SDK for Java (p. 166)
• Administrar el ciclo de vida de un objeto con AWS SDK para .NET (p. 168)
• Administrar el ciclo de vida de un objeto con AWS SDK parar Ruby (p. 171)
• Administrar el ciclo de vida de un objeto con la API de REST (p. 171)

En esta sección se explica cómo puede establecer configuraciones de Ciclo de vida de S3 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 de S3 a un bucket, por lo general se produce 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
entre en vigor completamente. Este retraso también se puede producir cuando elimina una configuración
de Ciclo de vida de S3.

Versión de API 2006-03-01


162
Amazon Simple Storage Service Guía del desarrollador
Configurar el 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 su eliminación o transición. Cualquier objeto que ya haya sido
programado se desprograma y no se elimina ni se traslada.
• 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 S3 Glacier. Las transiciones del ciclo de vida a la clase de almacenamiento S3
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 S3 Intelligent-Tiering.

Para obtener información sobre la configuración de Ciclo de vida de S3, consulte Administrar el ciclo de
vida de los objetos (p. 136).

Administrar el ciclo de vida de un objeto con la consola de


Amazon S3
Puede especificar las reglas de Ciclo de vida de S3 en un bucket con la consola de Amazon S3.

Para obtener instrucciones acerca de cómo configurar reglas de Ciclo de vida de S3 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.

Establecer configuraciones de ciclo de vida con la AWS CLI


Puede utilizar los siguientes comandos de AWS CLI para administrar configuraciones de Ciclo de vida de
S3:

• put-bucket-lifecycle-configuration
• get-bucket-lifecycle-configuration
• delete-bucket-lifecycle

Para obtener instrucciones acerca de cómo configurar la AWS CLI, consulte Configuración de la CLI de
AWS (p. 825).

La configuración de ciclo de vida de Amazon S3 es un archivo XML. Pero cuando se usa la AWS CLI
no se puede especificar el XML. Debe especificar el JSON en su lugar. A continuación se describen
configuraciones de ciclo de vida de ejemplo de JSON equivalentes que puede especificar en el comando
de la AWS CLI.

• Considere la siguiente configuración del Ciclo de vida de S3 de ejemplo.

<LifecycleConfiguration>
<Rule>
<ID>ExampleRule</ID>

Versión de API 2006-03-01


163
Amazon Simple Storage Service Guía del desarrollador
Configurar el ciclo de vida

<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"
}
]
}

• Considere la siguiente configuración del Ciclo de vida de S3 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.

Versión de API 2006-03-01


164
Amazon Simple Storage Service Guía del desarrollador
Configurar el ciclo de vida

{
"Rules": [
{
"ID": "id-1",
"Filter": {
"And": {
"Prefix": "myprefix",
"Tags": [
{
"Value": "mytagvalue1",
"Key": "mytagkey1"
},
{
"Value": "mytagvalue2",
"Key": "mytagkey2"
}
]
}
},
"Status": "Enabled",
"Expiration": {
"Days": 1
}
}
]
}

Puede probar la put-bucket-lifecycle-configuration de la siguiente manera.

Para probar la configuración

1. Guarde la configuración del ciclo de vida de JSON en un archivo (lifecycle.json).


2. Ejecute el siguiente comando de la AWS CLI para establecer la configuración del ciclo de vida en su
bucket.

$ aws s3api put-bucket-lifecycle-configuration  \


--bucket bucketname  \
--lifecycle-configuration file://lifecycle.json

3. Para verificar, recupere la configuración del Ciclo de vida de S3 con el comando get-bucket-
lifecycle-configuration de la AWS CLI de la siguiente manera.

$ aws s3api get-bucket-lifecycle-configuration  \


--bucket bucketname

4. Para eliminar la configuración del Ciclo de vida de S3, utilice el comando delete-bucket-
lifecycle de la AWS CLI de la siguiente manera.

aws s3api delete-bucket-lifecycle \


--bucket bucketname

Versión de API 2006-03-01


165
Amazon Simple Storage Service Guía del desarrollador
Configurar el ciclo de vida

Administrar los ciclos 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 S3 de un bucket.
Para obtener más información acerca de cómo administrar la configuración del Ciclo de vida de S3,
consulte Administrar el ciclo de vida de los objetos (p. 136).
Note
Cuando añade una configuración de Ciclo de vida de S3 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 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. 827).

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;
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/")))

Versión de API 2006-03-01


166
Amazon Simple Storage Service Guía del desarrollador
Configurar el ciclo de vida

.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)
.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) {

Versión de API 2006-03-01


167
Amazon Simple Storage Service Guía del desarrollador
Configurar el ciclo de vida

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

Administrar el 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 de S3 en un bucket.
Para obtener más información acerca de cómo administrar la configuración del ciclo de vida, consulte
Administrar el ciclo de vida de los objetos (p. 136).
Note

Cuando añade una configuración de ciclo de vida, Amazon S3 reemplaza la configuración


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.

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. 829).

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

Versión de API 2006-03-01


168
Amazon Simple Storage Service Guía del desarrollador
Configurar el ciclo de vida

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,
Transitions = new List<LifecycleTransition>
{
new LifecycleTransition
{
Days = 30,
StorageClass =
S3StorageClass.StandardInfrequentAccess
},
new LifecycleTransition
{
Days = 365,
StorageClass = S3StorageClass.Glacier
}
},
Expiration = new LifecycleRuleExpiration()
{
Days = 3650
}
}
}
};

Versión de API 2006-03-01


169
Amazon Simple Storage Service Guía del desarrollador
Configurar el ciclo de vida

// 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)
{
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

Versión de API 2006-03-01


170
Amazon Simple Storage Service Guía del desarrollador
Compartir recursos entre orígenes (CORS)

{
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);
}
}
}

Administrar el 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 de S3 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. 830).
Para obtener más información acerca de cómo administrar la configuración del ciclo de vida, consulte
Administrar el ciclo de vida de los objetos (p. 136).

Administrar el ciclo de vida de un objeto con la API de REST


Puede usar la Consola de administración de AWS para establecer una configuración de Ciclo de vida de
S3 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 de S3.

• Ciclo de vida de PUT Bucket


• Ciclo de vida de GET Bucket
• Ciclo de vida de DELETE Bucket

Compartir recursos entre orígenes (CORS)


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
• Compartir recursos entre orígenes: escenarios de casos de uso (p. 172)
• ¿Cómo se configura CORS en mi bucket? (p. 172)
• ¿Cómo Amazon S3 evalúa la configuración CORS en un bucket? (p. 174)

Versión de API 2006-03-01


171
Amazon Simple Storage Service Guía del desarrollador
Compartir recursos entre orígenes:
escenarios de casos de uso

• Habilitar el uso compartido de recursos entre orígenes (CORS) (p. 175)


• Solución de problemas de CORS (p. 180)

Compartir recursos entre orígenes: escenarios de


casos de uso
A continuación, se muestran ejemplos de casos de uso de CORS:

Escenario 1

Suponga que aloja un sitio web en un bucket de Amazon S3 denominado website como se describe en
Alojar un sitio web estático en Amazon S3 (p. 618). Sus usuarios cargan el punto de enlace de sitio web.

http://website.s3-website.us-east-1.amazonaws.com

Ahora desea usar 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.us-east-1.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 su 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 se configura 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 Habilitar el uso compartido de recursos entre orígenes (CORS) (p. 175).

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 acerca
de su propio dominio, consulte Configurar un sitio web estático mediante un dominio personalizado
registrado con Route 53 (p. 647). 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.

Versión de API 2006-03-01


172
Amazon Simple Storage Service Guía del desarrollador
¿Cómo se configura CORS en mi bucket?

<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:

• 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:

Versión de API 2006-03-01


173
Amazon Simple Storage Service Guía del desarrollador
¿Cómo Amazon S3 evalúa la
configuración CORS en un bucket?

• 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.

¿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.

Versión de API 2006-03-01


174
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

• 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.

Habilitar el 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
• Habilitar el uso compartido de recursos entre orígenes (CORS) con la Consola de administración de
AWS (p. 175)
• Habilitar el uso compartido de recursos entre orígenes (CORS) con AWS SDK for Java (p. 175)
• Habilitar el uso compartido de recursos entre orígenes (CORS) con AWS SDK para .NET (p. 177)
• Habilitar el uso compartido de recursos entre orígenes (CORS) con la API de REST (p. 180)

Habilitar el 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.

Habilitar el uso compartido de recursos entre orígenes (CORS)


con 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 Compartir recursos entre orígenes (CORS) (p. 171).

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. 827).

import com.amazonaws.AmazonServiceException;

Versión de API 2006-03-01


175
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

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

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

Versión de API 2006-03-01


176
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

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

Habilitar el uso compartido de recursos entre orígenes (CORS)


con 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 Compartir recursos entre
orígenes (CORS) (p. 171).

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

Versión de API 2006-03-01


177
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

• 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. 829).

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"},
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" },

Versión de API 2006-03-01


178
Amazon Simple Storage Service Guía del desarrollador
Habilitar CORS

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


{
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);

Versión de API 2006-03-01


179
Amazon Simple Storage Service Guía del desarrollador
Solución de problemas de CORS

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

Habilitar el 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

Solución de problemas de 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:

Versión de API 2006-03-01


180
Amazon Simple Storage Service Guía del desarrollador
Operaciones en objetos

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 de S3 en el 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. 195).
• 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. 229).

Puede utilizar la API REST (consulte Realizar 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

Versión de API 2006-03-01


181
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

• Recursos relacionados (p. 182)


• Obtención de un objeto con AWS SDK for Java (p. 182)
• Obtención de un objeto con AWS SDK para .NET (p. 184)
• Obtención de un objeto con AWS SDK para PHP (p. 186)
• Obtención de un objeto con la API REST (p. 187)
• Compartir un objeto con otros (p. 187)

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, deberá proporcionar los encabezados
de solicitud apropiados. Para obtener más información, consulte Protección de datos mediante
cifrado (p. 286).

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

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.

Versión de API 2006-03-01


182
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

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. 181)) 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. 827).

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 GetObject2 {

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

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

Versión de API 2006-03-01


183
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

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

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:

Versión de API 2006-03-01


184
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

• 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. 181)) 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. 829).

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;

Versión de API 2006-03-01


185
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

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
sentado que está familiarizado con las instrucciones para Uso del AWS SDK para PHP y ejecución de
ejemplos de PHP (p. 829) 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',

Versión de API 2006-03-01


186
Amazon Simple Storage Service Guía del desarrollador
Obtención de objetos

'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. 181).

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. 830).

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

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


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.

Versión de API 2006-03-01


187
Amazon Simple Storage Service Guía del desarrollador
Obtención de 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.
• Las credenciales que puede utilizar para crear una URL prefirmada incluyen:
• Perfil de instancia de IAM: válido hasta 6 horas
• AWS Security Token Service : válido hasta 36 horas cuando se firma con las credenciales
permanentes como, por ejemplo, las credenciales del usuario raíz de la cuenta de AWS o un
usuario de IAM
• Usuario de IAM: válido hasta 7 días cuando se utiliza AWS Signature Version 4

Para crear una URL prefirmada que es válida hasta 7 días, primero designe las credenciales
de usuario de IAM (la clave de acceso y la clave de acceso secreta) al SDK que está
utilizando. A continuación, genere una URL prefirmada utilizando AWS Signature Version 4.
• Si ha creado una URL prefirmada utilizando un token temporal, entonces la URL caduca cuando
caduca el token, incluso si la URL se creó con un tiempo de caducidad posterior.

Puede generar una URL prefirmada mediante programación usando la API de REST, AWS Command Line
Interface y AWS SDK for Java, .NET, Ruby, PHP, Node.js y Python.

Temas
• Generar una URL de objeto prefirmada con AWS Explorer para Visual Studio (p. 188)
• Generar una URL de objeto prefirmada con AWS SDK for Java (p. 188)
• Generar una URL de objeto prefirmada con AWS SDK para .NET (p. 189)

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. 818).

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. 187).

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. 827).

Versión de API 2006-03-01


188
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. 187).

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. 829).

Versión de API 2006-03-01


189
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 Cargar un objeto en una única operación (p. 191).
• 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


190
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. 195).

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. 196).

Temas
• Cargar un objeto en una única operación (p. 191)
• Carga de objetos con la API de carga multiparte (p. 195)
• Cargar objetos con URL prefirmadas (p. 225)

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. 286).

Temas relacionados

Uso de los SDK, la CLI y los exploradores de AWS (p. 818)

Cargar un objeto en una única operación


Temas
• Cargar un objeto con AWS SDK for Java (p. 191)
• Cargar un objeto con AWS SDK para .NET (p. 192)
• Cargar un objeto con AWS SDK para PHP (p. 194)
• Cargar un objeto con AWS SDK parar Ruby (p. 195)
• Carga de un objeto con la API REST (p. 195)
• Cargar un objeto con la CLI (p. 195)

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. También puede utilizar la AWS Command Line Interface.

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,

Versión de API 2006-03-01


191
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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. 827).

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("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:

Versión de API 2006-03-01


192
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

• 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.
• 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. 829).

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"

Versión de API 2006-03-01


193
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

, e.Message);
}
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. 195).

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. 829) 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. 830).

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


194
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.

Cargar un objeto con la CLI


Puede utilizar el SDK de AWS para cargar un objeto. Sin embargo, si su aplicación lo requiere, puede
enviar solicitudes de AWS Command Line Interface directamente. Puede enviar una solicitud PUT para
cargar datos en una única operación. Para obtener más información, consulte PUT Object en la guía AWS
CLI Command Reference.

Carga de objetos con la API de carga multiparte


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

Versión de API 2006-03-01


195
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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.

Temas
• Información general de carga multiparte (p. 196)
• Usar AWS Java SDK para carga multiparte (API de nivel alto) (p. 202)
• Usar AWS Java SDK para una carga multiparte (API de bajo nivel) (p. 206)
• Utilizar AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 210)
• Usar AWS SDK para .NET para cargas multiparte (API de bajo nivel) (p. 216)
• Usar el SDK de AWS para PHP para carga multiparte (p. 220)
• Usar AWS SDK para PHP para cargas multiparte (API de bajo nivel) (p. 221)
• Uso de AWS SDK parar Ruby para carga multiparte (p. 224)
• Usar la API de REST para carga multiparte (p. 224)
• Usar la AWS Command Line Interface para carga multiparte (p. 225)

• Uso de AWS SDK for JavaScript in Node.js para carga multiparte

Información general de carga multiparte


Temas
• Operaciones simultáneas de carga multiparte (p. 198)
• Carga multiparte y precios (p. 198)
• Anulación de cargas multiparte incompletas con la política de ciclo de vida de buckets (p. 198)
• Límites de carga multiparte de Amazon S3 (p. 200)
• Compatibilidad de API para carga multiparte (p. 200)
• API de carga multiparte y permisos (p. 201)

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. 181)).

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.

Versión de API 2006-03-01


196
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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.

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

Versión de API 2006-03-01


197
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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.
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>

Versión de API 2006-03-01


198
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

</LifecycleConfiguration>

En el ejemplo, la regla no especifica un valor para el elemento Prefix (prefijo de nombre de clave de
objeto). Por lo tanto, se aplica a todos los objetos del bucket para los que se han iniciado cargas multiparte.
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 de anulación no afecta a las cargas multiparte completadas.

Para obtener más información acerca de la configuración del ciclo de vida del bucket, consulte Administrar
el ciclo de vida de los objetos (p. 136).
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
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 de la CLI put-bucket-lifecycle-configuration agrega la configuración del


ciclo de vida para el bucket especificado.

$ aws s3api put-bucket-lifecycle-configuration  \


--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. 825).
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",
"Filter": {
"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-configuration   \


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

Versión de API 2006-03-01


199
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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. 196).

Elemento Especificación

Tamaño máximo de objeto 5 TB

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
• AWS SDK parar Ruby
• AWS SDK for Python (Boto)
• AWS SDK for JavaScript in Node.js

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

Versión de API 2006-03-01


200
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

En las siguientes secciones de la AWS Command Line Interface se describen las operaciones para la
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 listas de control de acceso (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, una política de bucket o una 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
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.

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.

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
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.

Versión de API 2006-03-01


201
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Acción Permisos necesarios


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.

Cifrado y Para realizar una carga multiparte con el cifrado mediante una clave maestra del
descifrado de cliente (CMK) de AWS Key Management Service (AWS KMS), el solicitante debe
AWS KMS tener permiso para las acciones kms:Encrypt, kms:Decrypt, kms:ReEncrypt*,
de permisos kms:GenerateDataKey* y kms:DescribeKey en la clave. Estos permisos son
relacionados necesarios, ya que Amazon S3 debe descifrar y leer 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 CMK 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 CMK, 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. 478). Para obtener información acerca de los usuarios de IAM,
consulte Trabajo con usuarios y grupos.

Usar AWS Java SDK para carga multiparte (API de nivel alto)
Temas
• Carga de un archivo (p. 203)
• Anular cargas multiparte (p. 204)
• Realizar un seguimiento del progreso de las cargas multiparte (p. 205)

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. 195)). Puede
cargar datos desde un archivo o una secuencia. También puede configurar opciones avanzadas,

Versión de API 2006-03-01


202
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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. 195).

Carga de 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. 827).

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

Versión de API 2006-03-01


203
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Anular 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. 827).

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

Versión de API 2006-03-01


204
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Realizar un 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;

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

Versión de API 2006-03-01


205
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Usar AWS Java SDK para una carga multiparte (API de bajo nivel)
Temas
• Carga de un archivo (p. 206)
• Mostrar cargas multiparte (p. 208)
• Anular una carga multiparte (p. 209)

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. 195)). 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 Usar AWS Java SDK para carga multiparte (API de nivel
alto) (p. 202))

Carga de 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. 827).

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;

Versión de API 2006-03-01


206
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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.


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.

Versión de API 2006-03-01


207
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Mostrar cargas multiparte

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;

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

Versión de API 2006-03-01


208
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

}
}

Anular 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;

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

Versión de API 2006-03-01


209
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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 Anular cargas multiparte (p. 204).

Utilizar AWS SDK para .NET para carga multiparte (API de alto nivel)
Temas
• Cargar un archivo en un bucket de S3 con AWS SDK para .NET (API de alto nivel) (p. 210)
• Cargar un directorio (p. 212)
• Anular cargas multiparte en un bucket de S3 con AWS SDK para .NET (API de alto nivel) (p. 214)
• Realizar un seguimiento del progreso de una carga multiparte en un bucket de S3 con AWS SDK
para .NET (API de alto nivel) (p. 215)

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. 195)). 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. 196).

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.

Cargar 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. 829).

Versión de API 2006-03-01


210
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Versión de API 2006-03-01


211
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Cargar 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".

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. 829).

using Amazon.S3;
using Amazon.S3.Transfer;

Versión de API 2006-03-01


212
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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");

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

Versión de API 2006-03-01


213
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

}
}
}
}

Anular cargas multiparte en 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. 196). Para obtener información sobre
los precios, consulte Carga multiparte y precios (p. 198).

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. 829).

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

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

Versión de API 2006-03-01


214
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

}
}
}
}

Note

También puede anular una carga multiparte específica. Para obtener más información, consulte
Mostrar cargas multiparte a un bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 218).

Más información

AWS SDK para .NET

Realizar un seguimiento del progreso de una carga multiparte en 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. 829).

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

namespace Amazon.DocSamples.S3
{
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
};

Versión de API 2006-03-01


215
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Usar 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 Usar la API de REST para carga multiparte (p. 224)). 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 Utilizar AWS SDK
para .NET para carga multiparte (API de alto nivel) (p. 210)) cuando no tenga estas necesidades.

Temas
• Cargar un archivo en un bucket de S3 con AWS SDK para .NET (API de bajo nivel) (p. 216)
• Mostrar cargas multiparte a un bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 218)
• Realizar un seguimiento de una carga multiparte a un bucket de S3 con AWS SDK para .NET (bajo
nivel) (p. 219)
• Anular las cargas multiparte a un bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 219)

Cargar 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. 196).
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.

Versión de API 2006-03-01


216
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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. 829).

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

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,

Versión de API 2006-03-01


217
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Mostrar 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

Versión de API 2006-03-01


218
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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. 196).

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. 829).

ListMultipartUploadsRequest request = new ListMultipartUploadsRequest


{
BucketName = bucketName // Bucket receiving the uploads.
};

ListMultipartUploadsResponse response = await


AmazonS3Client.ListMultipartUploadsAsync(request);

Más información
AWS SDK para .NET

Realizar un seguimiento de una 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
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 Cargar un archivo en un
bucket de S3 con AWS SDK para .NET (API de bajo nivel) (p. 216).

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

Anular las 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.

Versión de API 2006-03-01


219
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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. 196).

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 Cargar un archivo en un bucket de S3 con
AWS SDK para .NET (API de bajo nivel) (p. 216).

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 Anular cargas multiparte en un bucket de S3 con
AWS SDK para .NET (API de alto nivel) (p. 214).

Más información
AWS SDK para .NET

Usar el SDK de AWS para PHP 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 Usar AWS SDK para PHP para cargas multiparte (API de bajo nivel) (p. 221).

Para obtener más información acerca de las cargas multipartes, consulte Carga de objetos con la API
de carga multiparte (p. 195). 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. 194).

Cargar 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. 829) 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. 830).

require 'vendor/autoload.php';

use Aws\Common\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;

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

Versión de API 2006-03-01


220
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

$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

Usar AWS SDK para PHP para cargas multiparte (API de bajo nivel)
Temas
• Cargar un archivo en varias partes con la API de bajo nivel del SDK para PHP (p. 221)
• Mostrar cargas multiparte con la API de AWS SDK para PHP de bajo nivel (p. 223)
• Anular una carga multiparte (p. 223)

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 Usar la API de REST para carga multiparte (p. 224)). 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 Usar el SDK de AWS para PHP para carga
multiparte (p. 220)).

Cargar un archivo en varias partes con la API de bajo nivel del SDK 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. 829) 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. 830).

require 'vendor/autoload.php';

use Aws\S3\S3Client;

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


$keyname = '*** Your Object Key ***';

Versión de API 2006-03-01


221
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

$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,
'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

Versión de API 2006-03-01


222
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

• Cargas multiparte de Amazon S3


• Documentación de AWS SDK para PHP

Mostrar 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. 829) 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.


$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

Anular 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. 829) 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. 830).

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'

Versión de API 2006-03-01


223
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

]);

// 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 cargas de archivos administrados. Para obtener más información, consulte
Uploading Files to Amazon S3 en el Blog de AWS Developer. Las cargas de archivos administrados son el
método recomendado para cargar archivos en un bucket. Proporcionan 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.
• Utiliza varios subprocesos para cargar las partes de objetos grandes simultáneamente.

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. 830).

Usar 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

Para realizar sus propias solicitudes REST puede utilizar estas API, la AWS Command Line Interface o uno
de los SDK que ofrecemos. Para obtener más información sobre el uso de la carga multiparte con la AWS
CLI, consulte Usar la AWS Command Line Interface para carga multiparte (p. 225). Para obtener más
información sobre SDKs, consulte Compatibilidad de API para carga multiparte (p. 200).

Versión de API 2006-03-01


224
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Usar la AWS Command Line Interface para carga multiparte


En las siguientes secciones de la AWS Command Line Interface se describen las operaciones para la
carga multiparte.

• Initiate Multipart Upload


• Upload Part
• Upload Part (Copy)
• Complete Multipart Upload
• Abort Multipart Upload
• List Parts
• List Multipart Uploads

Puede utilizar también la API de REST para realizar sus propias solicitudes REST o puede utilizar uno
de los SDK que ofrecemos. Para obtener más información sobre la API de REST, consulte Usar la
API de REST para carga multiparte (p. 224). Para obtener más información sobre SDKs, consulte
Compatibilidad de API para carga multiparte (p. 200).

Cargar objetos con URL prefirmadas


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.
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.

Puede generar una URL prefirmada mediante programación usando la API de REST, la AWS Command
Line Interface y AWS SDK for Java, .NET, Ruby, PHP, Node.js y Python.

Si utiliza Microsoft Visual Studio, también puede usar AWS Explorer para generar una URL de 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. 818).

Temas

• the section called “Mediante SDK para Java” (p. 226)


• the section called “Mediante AWS SDK para .NET” (p. 227)
• the section called “Mediante AWS SDK parar Ruby” (p. 228)
• Cargar un objeto mediante una URL prefirmada (AWS SDK para PHP)

Versión de API 2006-03-01


225
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

Cargar 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. 827).

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

Versión de API 2006-03-01


226
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Cargar un objeto 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 Cargar objetos con URL prefirmadas (p. 225).

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. 829).

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;

Versión de API 2006-03-01


227
Amazon Simple Storage Service Guía del desarrollador
Carga de objetos

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

Cargar 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.

Cargar objetos: SDK para Ruby: version 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.

Versión de API 2006-03-01


228
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

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

# Upload 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')

# Replace BucketName with the name of your bucket.


# Replace KeyName with the name of the object you are creating or replacing.
obj = s3.bucket('BucketName').object('KeyName')

url = URI.parse(obj.presigned_url(:put))

# The contents of your object, as a string


body = 'Hello World!'

Net::HTTP.start(url.host) do |http|
http.send_request('PUT', url.request_uri, body,
# Or else Net::HTTP adds a default, unsigned content-type
'content-type' => '')
end

# Print the contents of your object to the terminal window


puts obj.get.body.read

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


• Cambiar el nombre de objetos copiándolos y eliminando los originales
• Mover objetos entre ubicaciones de Amazon S3 (p. ej. us-west-1 y Europa)
• 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

Versión de API 2006-03-01


229
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

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. 114).
Note

• La copia de objetos entre ubicaciones genera cargos por uso de ancho de banda.
• Si el objeto de origen se archiva en S3 Glacier o S3 Glacier 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 S3 Glacier y S3 Glacier Deep Archive (archivo de objetos) (p. 141).

Al copiar objetos, puede solicitar a Amazon S3 que guarde el objeto de destino cifrado con una clave
maestra del cliente (CMK) de AWS Key Management Service (AWS KMS), una clave de cifrado
administrada por Amazon S3 o una clave de cifrado proporcionada 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
enAmazon 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. 286).

Para copiar más de un objeto de Amazon S3 con una sola solicitud, puede utilizar operaciones por lotes
de Amazon S3. En las Operaciones por lotes de S3 se proporciona una lista de objetos en los que se
puede operar. Las Operaciones por lotes de S3 llaman a la API correspondiente para realizar la operación
especificada. Una sola Operaciones por lotes de S3 puede realizar la operación especificada en miles de
millones de objetos que contiene exabytes de datos.

Las Operaciones por lotes de S3 hacen un seguimiento del avance, envían notificaciones y almacenan un
informe de finalización de todas las acciones, lo que proporciona una experiencia sin servidor, auditable,
completamente administrada. Puede usar Operaciones por lotes de S3 hasta la Consola de administración
de AWS, AWS CLI, los SDK de AWS o la API de REST. Para obtener más información, consulte the
section called “Conceptos básicos: trabajos” (p. 547).

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

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 Copiar objetos con la API de carga multiparte (p. 235).

Temas
• Copiar un objeto con AWS SDK for Java (p. 231)
• Copiar un objeto de Amazon S3 en una única operación con AWS SDK para .NET (p. 231)

Versión de API 2006-03-01


230
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

• Copiar un objeto con AWS SDK para PHP (p. 233)


• Copiar un objeto con AWS SDK parar Ruby (p. 234)
• Copia de un objeto con la API REST (p. 235)

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. 827).

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

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 Copiar un objeto de Amazon S3 con la API de
carga multiparte de AWS SDK para .NET (p. 238).

Versión de API 2006-03-01


231
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

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. 829).

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)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
}
}

Más información

AWS SDK para .NET

Versión de API 2006-03-01


232
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

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. 829) 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}",
]);

// 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}",
]);
}

Versión de API 2006-03-01


233
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

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 Realizar solicitudes con las
credenciales de usuario de IAM o de 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')
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

Versión de API 2006-03-01


234
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

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>

Copiar 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. 230).

Temas
• Copiar un objeto con la API de carga multiparte de AWS SDK for Java (p. 236)
• Copiar un objeto de Amazon S3 con la API de carga multiparte de AWS SDK para .NET (p. 238)
• Copiar objetos con la API de carga multiparte de REST (p. 240)

Versión de API 2006-03-01


235
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

Copiar 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. 231).

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. 827).

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()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

// Initiate the multipart upload.


InitiateMultipartUploadRequest initRequest = new
InitiateMultipartUploadRequest(destBucketName, destObjectKey);

Versión de API 2006-03-01


236
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

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

Versión de API 2006-03-01


237
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

Copiar 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. 231). Para obtener
más información acerca de las cargas multiparte de Amazon S3, consulte Información general de carga
multiparte (p. 196).

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. 829).

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
};

// Initiate the upload.


InitiateMultipartUploadResponse initResponse =
await s3Client.InitiateMultipartUploadAsync(initiateRequest);

// Save the upload ID.

Versión de API 2006-03-01


238
Amazon Simple Storage Service Guía del desarrollador
Copia de objetos

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)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
}

Versión de API 2006-03-01


239
Amazon Simple Storage Service Guía del desarrollador
Listas de claves de objetos

Más información

AWS SDK para .NET

Copiar objetos 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. 200).

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 por HTTP está obsoleta, 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
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

Versión de API 2006-03-01


240
Amazon Simple Storage Service Guía del desarrollador
Listas de claves de objetos

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. 241).

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. 242)


• Lista de claves con AWS SDK para .NET (p. 244)
• Lista de claves con AWS SDK para PHP (p. 245)

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

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/Nueva 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


241
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


242
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. 827).

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


243
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. 829).

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


244
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. 829) 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. 830).

require 'vendor/autoload.php';

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

Versión de API 2006-03-01


245
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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

// 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
• Eliminar objetos de un bucket habilitado para el control de versiones (p. 247)
• Eliminar objetos de un bucket habilitado para la MFA (p. 247)
• Recursos relacionados (p. 248)
• Eliminar un objeto por solicitud (p. 248)

Versión de API 2006-03-01


246
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

• Eliminar varios objetos por solicitud (p. 254)

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.

Eliminar 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. 125).
• 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.

Eliminar objetos de un bucket habilitado para la MFA


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


247
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 Eliminar MFA (p. 511).

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

Eliminar un objeto por solicitud


Temas
• Eliminar un objeto con AWS SDK for Java (p. 248)
• Eliminar un objeto con AWS SDK para .NET (p. 250)
• Eliminar un objeto con AWS SDK para PHP (p. 253)
• Eliminar un objeto con la API de REST (p. 254)

• Eliminación de un objeto con AWS Command Line Interface

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. 246).

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.

Eliminar un objeto con AWS SDK for Java


Puede eliminar un objeto de un bucket. Si el bucket tiene habilitado el Control de versiones de S3, 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 acerca de Control de versiones de S3, consulte Control de versiones de
objetos (p. 125).

Example Ejemplo 1: Eliminar 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. 827).

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;

Versión de API 2006-03-01


248
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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 ****";

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: Eliminar 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 {

Versión de API 2006-03-01


249
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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

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

Eliminar 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 de S3, 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. 125).

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 acerca de Control de versiones de
S3, consulte Control de versiones de objetos (p. 125).

Example Eliminar 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 de API 2006-03-01


250
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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. 829).

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 deleting
an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
deleting an object", e.Message);
}
}
}
}

Example Eliminar 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 de S3 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.

Versión de API 2006-03-01


251
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

Note

También puede obtener el ID de versión de un objeto con la solicitud ListVersions:

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. 829).

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 deleting
an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
deleting an object", e.Message);
}
}

static async Task<string> PutAnObject(string objectKey)

Versión de API 2006-03-01


252
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

{
PutObjectRequest request = new PutObjectRequest
{
BucketName = bucketName,
Key = objectKey,
ContentBody = "This is the content body!"
};
PutObjectResponse response = await client.PutObjectAsync(request);
return response.VersionId;
}
}
}

Eliminar 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 Eliminar un objeto con la API de REST (p. 254).

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. 829) 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. 830).

<?php

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'
]);

// 1. Delete the object from the bucket.


try
{
echo 'Attempting to delete ' . $keyname . '...' . PHP_EOL;

$result = $s3->deleteObject([
'Bucket' => $bucket,
'Key' => $keyname
]);

if ($result['DeleteMarker'])
{
echo $keyname . ' was deleted or does not exist.' . PHP_EOL;
} else {
exit('Error: ' . $keyname . ' was not deleted.' . PHP_EOL);
}
}
catch (S3Exception $e) {
exit('Error: ' . $e->getAwsErrorMessage() . PHP_EOL);
}

Versión de API 2006-03-01


253
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

// 2. Check to see if the object was deleted.


try
{
echo 'Checking to see if ' . $keyname . ' still exists...' . PHP_EOL;

$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname
]);

echo 'Error: ' . $keyname . ' still exists.';


}
catch (S3Exception $e) {
exit($e->getAwsErrorMessage());
}

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Documentación de AWS SDK para PHP

Eliminar 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.

Eliminar varios objetos por solicitud


Temas
• Eliminar varios objetos con AWS SDK for Java (p. 254)
• Eliminar varios objetos con AWS SDK para .NET (p. 258)
• Eliminar varios objetos con AWS SDK para PHP (p. 263)
• Eliminar varios objetos con la API de REST (p. 265)

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. 246).

Puede utilizar directamente la API de REST o los SDK de AWS.

Eliminar 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.

Versión de API 2006-03-01


254
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

• 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. 246).
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. 827).

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 ****";

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.

Versión de API 2006-03-01


255
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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 ***";

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.

Versión de API 2006-03-01


256
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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.");

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

Versión de API 2006-03-01


257
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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

Eliminar 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 Eliminar 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. 829).

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,

Versión de API 2006-03-01


258
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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

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;
}
}
}

Versión de API 2006-03-01


259
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

Example Eliminar 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. 829).

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;

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

Versión de API 2006-03-01


260
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

// 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,
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.

Versión de API 2006-03-01


261
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

// 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,
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,

Versión de API 2006-03-01


262
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

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;
}
}
}

Eliminar 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 Usar el control de versiones (p. 509).

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. 829) y ha instalado AWS SDK para PHP adecuadamente.

Example Eliminar 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. 830).

<?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
]);

// 3. Delete the objects.


foreach ($keys['Contents'] as $key)

Versión de API 2006-03-01


263
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

{
$s3->deleteObjects([
'Bucket' => $bucket,
'Delete' => [
'Objects' => [
[
'Key' => $key['Key']
]
]
]
]);
}

Example Eliminar 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. 830).

<?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,
'VersioningConfiguration' => [
'Status' => 'Enabled'
]
]);

// 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]);

// 4. Delete the object versions.


$deletedResults = 'The following objects were deleted successfully:' . PHP_EOL;
$deleted = false;
$errorResults = 'The following objects could not be deleted:' . PHP_EOL;
$errors = false;

foreach ($versions['Versions'] as $version)


{
$result = $s3->deleteObjects([

Versión de API 2006-03-01


264
Amazon Simple Storage Service Guía del desarrollador
Eliminación de objetos

'Bucket' => $bucket,


'Delete' => [
'Objects' => [
[
'Key' => $version['Key'],
'VersionId' => $version['VersionId']
]
]
]
]);

if (isset($result['Deleted']))
{
$deleted = true;

$deletedResults .= "Key: {$result['Deleted'][0]['Key']}, " .


"VersionId: {$result['Deleted'][0]['VersionId']}" . PHP_EOL;
}

if (isset($result['Errors']))
{
$errors = true;

$errorResults .= "Key: {$result['Errors'][0]['Key']}, " .


"VersionId: {$result['Errors'][0]['VersionId']}, " .
"Message: {$result['Errors'][0]['Message']}" . PHP_EOL;
}
}

if ($deleted)
{
echo $deletedResults;
}

if ($errors)
{
echo $errorResults;
}

// 5. Suspend object versioning for the bucket.


$s3->putBucketVersioning([
'Bucket' => $bucket,
'VersioningConfiguration' => [
'Status' => 'Suspended'
]
]);

Recursos relacionados

• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3


• Documentación de AWS SDK para PHP

Eliminar 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.

Versión de API 2006-03-01


265
Amazon Simple Storage Service Guía del desarrollador
Seleccionar contenido de los objetos

Seleccionar 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.

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 S3 Glacier (p. 866).

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 un registro en la entrada o resultado es de 1 MB.
• Amazon S3 Select solo puede emitir datos anidados utilizando el formato de salida de JSON.

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 grupo de filas sin comprimir máximo es de 256 MB.
• Debe utilizar los tipos de datos especificados en el esquema del objeto.
• Seleccionar en un campo repetido devuelve solo el último valor.

Crear 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 acerca de la creación de una solicitud de Amazon S3 Select, consulte
SELECTObjectContent 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.

Versión de API 2006-03-01


266
Amazon Simple Storage Service Guía del desarrollador
Seleccionar contenido de los objetos

Solicitudes que utilizan intervalos de análisis


Amazon S3 Select le permite analizar un subconjunto de un objeto especificando el intervalo de bytes
que se desea consultar. Esto le permite paralelizar el análisis del objeto completo dividiendo el trabajo en
solicitudes separadas de Amazon S3 Select para una serie de intervalos de análisis sin solapamiento. No
es necesario que los intervalos de análisis estén alineados con los límites de registros. Una solicitud de
intervalo de análisis de Amazon S3 Select se ejecuta en el intervalo de bytes especificado. La consulta
procesará un registro que comienza dentro del intervalo de análisis especificado pero se extiende más allá
del intervalo de análisis. Por ejemplo, a continuación se muestra un objeto de Amazon S3 que contiene
una serie de registros en formato CSV delimitado por líneas:

A,B
C,D
D,E
E,F
G,H
I,J

Utilice el parámetro ScanRange de Amazon S3 Select y establezca Start (Inicio) en (Byte) 1 y End (Fin) en
(Byte) 4. De este modo, el intervalo de análisis empezaría en "," y analizaría hasta el final del registro que
comienza en "C" y devolvería el resultado C, D ya que es el final del registro.

El rango de análisis de Amazon S3 Select es compatible con objetos Parquet, CSV (sin delimitadores
entrecomillados) y JSON (solo en modo de LÍNEAS). Los objetos CSV y JSON deben estar sin comprimir.
Para objetos JSON y CSV basados en líneas, cuando se especifica un intervalo de análisis como parte de
la solicitud de Amazon S3 Select, se procesan todos los registros que comienzan dentro del intervalo de
análisis. Para objetos de Parquet, se procesan todos los grupos de filas que comienzan dentro del rango
de análisis solicitado.

Las solicitudes de intervalo de análisis de Amazon S3 Select están disponibles para su uso en la CLI, la
API y el SDK de Amazon S3. Puede utilizar el parámetro ScanRange en la solicitud de Amazon S3 Select
para esta funcionalidad. Para obtener más información, consulte Amazon S3 SELECT Object Content en
la Amazon Simple Storage Service API Reference.

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 obtener una lista de códigos de error y descripciones,
consulte la sección Lista de códigos de error de contenido de objetos SELECT de la página Respuestas de
error en la Amazon Simple Storage Service API Reference.

Temas
• Recursos relacionados (p. 267)
• Seleccionar contenido de objetos mediante SDK para Java (p. 268)
• Seleccionar contenido de los objetos mediante la API de REST (p. 269)
• Seleccionar contenido de los objetos mediante otros SDK (p. 270)

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

Versión de API 2006-03-01


267
Amazon Simple Storage Service Guía del desarrollador
Seleccionar contenido de los objetos

Seleccionar contenido de objetos mediante 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. 827).

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 {

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(

Versión de API 2006-03-01


268
Amazon Simple Storage Service Guía del desarrollador
Seleccionar contenido de los objetos

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


outputSerialization.setCsv(new CSVOutput());
request.setOutputSerialization(outputSerialization);

return request;
}
}

Seleccionar 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.

Versión de API 2006-03-01


269
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

Seleccionar 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. 831).

Restaurar objetos archivados


No se puede obtener acceso en tiempo real a los objetos que se archivan en las clases de
almacenamiento S3 Glacier o S3 Glacier 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 S3 Glacier, S3 Glacier Deep Archive y otras clases de almacenamiento de Amazon
S3, consulte Clases de almacenamiento de Amazon S3 (p. 119).

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 S3 Glacier o S3 Glacier Deep Archive. (Una solicitud de las operaciones de API HEAD Object o
GET Object devuelve S3 Glacier o S3 Glacier 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 (solo disponible para
S3 Glacier), Standard 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 Configurar
notificaciones de eventos de Amazon S3 (p. 662).

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 S3
Glacier o S3 Glacier Deep Archive) y una copia que se restaura de manera temporal (Almacenamiento de
redundancia reducida (RRS) o estándar, el almacenamiento con menor costo en la región). Para obtener
más información acerca de los precios, consulte Precios de Amazon S3.

Cuando sea necesario, puede restaurar grandes segmentos de los datos almacenados en las clases
de almacenamiento S3 Glacier y S3 Glacier 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 S3 Glacier y S3 Glacier 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 la
clase de almacenamiento S3 Glacier o S3 Glacier Deep Archive, consulte Transición a las clases de
almacenamiento S3 Glacier y S3 Glacier Deep Archive (archivo de objetos) (p. 141).

Para restaurar más de un objeto de Amazon S3 con una sola solicitud, puede utilizar Operaciones por lotes
de S3. En las Operaciones por lotes de S3 se proporciona una lista de objetos en los que se puede operar.

Versión de API 2006-03-01


270
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

Las Operaciones por lotes de S3 llaman a la API correspondiente para realizar la operación especificada.
Una sola Operaciones por lotes de S3 puede realizar la operación especificada en miles de millones de
objetos que contiene exabytes de datos.

Las Operaciones por lotes de S3 hacen un seguimiento del avance, envían notificaciones y almacenan un
informe de finalización de todas las acciones, lo que proporciona una experiencia sin servidor, auditable,
completamente administrada. Puede usar Operaciones por lotes de S3 hasta la Consola de administración
de AWS, AWS CLI, los SDK de AWS o la API de REST. Para obtener más información, consulte the
section called “Conceptos básicos: trabajos” (p. 547).

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. 271)
• Actualizar la velocidad de una restauración en curso (p. 272)
• Restaurar un objeto archivado con la consola de Amazon S3 (p. 272)
• Restaurar un objeto archivado con AWS SDK for Java (p. 272)
• Restaurar un objeto archivado con AWS SDK para .NET (p. 273)
• Restaurar un objeto archivado con la API REST (p. 275)

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 S3 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. 272). Las recuperaciones rápidas y
la capacidad aprovisionada no están disponibles para los objetos almacenados en la clase S3 Glacier
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 S3 Glacier y
S3 Glacier 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 S3 Glacier. Suelen finalizar en un plazo de 12 horas para los objetos que están
almacenados en la clase de almacenamiento S3 Glacier 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 S3 Glacier. Suelen finalizar en un plazo
de 48 horas para los objetos que están almacenados en la clase de almacenamiento S3 Glacier 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.

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

Versión de API 2006-03-01


271
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

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 S3 Glacier 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
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. 270). Para obtener instrucciones sobre la creación

Versión de API 2006-03-01


272
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon
S3 (p. 827).

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. 829).

using Amazon.S3;

Versión de API 2006-03-01


273
Amazon Simple Storage Service Guía del desarrollador
Restaurar objetos archivados

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


274
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 S3 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 S3 Glacier sin necesidad de restaurar todo el objeto en
Amazon S3.

Cuando realiza consultas Select, S3 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. 277).

Puede utilizar el tipo de restauración Select con los SDK de AWS, la API REST de S3 Glacier y la AWS
Command Line Interface (AWS CLI).

Temas
• Requisitos y límites de Select (p. 275)
• ¿Cómo consulto los datos con el trabajo Select? (p. 276)
• Control de errores (p. 277)
• Niveles de acceso a los datos (p. 277)
• Más información (p. 278)

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 S3 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 Ejemplo:
operaciones de subrecurso del bucket (p. 375).
• 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.
• Las expresiones SQL tienen un límite de 128 KB.

Versión de API 2006-03-01


275
Amazon Simple Storage Service Guía del desarrollador
Consultar objetos archivados

¿Cómo consulto los datos con el trabajo Select?


Si utiliza el trabajo Select, puede utilizar comandos SQL para consultar objetos de archivo de S3 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 S3 Glacier. Por ejemplo, puede buscar un nombre o ID
específico en un conjunto de documentos de texto archivados.

Para consultar los datos de S3 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

S3 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 S3 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. Select admite cifrado de AWS Key Management Service (SSE-KMS) y
Amazon S3 (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. 119) y Proteger los datos con el cifrado del lado del
servidor (p. 287).

Los resultados de S3 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, ya no 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
examplekne1209ualkdjh812elkassdu9012e. Una vez que finalice el trabajo Select, podrá ver los
siguientes objetos de Amazon S3 en el bucket:

Versión de API 2006-03-01


276
Amazon Simple Storage Service Guía del desarrollador
Consultar objetos archivados

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. S3 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. 278).
• 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.
• Bulk: la opción de acceso a datos de menor costo en S3 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.

Versión de API 2006-03-01


277
Amazon Simple Storage Service Guía del desarrollador
Consultar objetos archivados

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 S3 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 S3
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 S3 Glacier.

Más información
• POST Object restore en la Amazon Simple Storage Service API Reference
• Referencia de SQL para Amazon S3 Select y S3 Glacier Select en la Guía para desarrolladores de
Amazon Simple Storage Service

Versión de API 2006-03-01


278
Amazon Simple Storage Service Guía del desarrollador
Cómo se configura 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. 119).

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 S3 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. También puede exportar estos datos de uso diario a un bucket de S3 y verlos en una
aplicación de hoja de cálculo, o con herramientas de inteligencia empresarial, como Amazon QuickSight.

Hay costos asociados con el análisis de clases de almacenamiento. Para obtener información sobre los
precios, consulte Administración y replicación en Precios de Amazon S3.

Temas
• ¿Cómo se configura el análisis de clases de almacenamiento? (p. 279)
• ¿Cómo se usa el análisis de clases de almacenamiento? (p. 280)
• ¿Cómo se pueden exportar los datos del análisis de clases de almacenamiento? (p. 283)
• API de REST de análisis de Amazon S3 (p. 284)

¿Cómo se configura 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


279
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 se usa 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


280
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 KB.


• 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


281
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 se acceso frecuente o de acceso infrecuente que se muestra es una ayuda visual para ayudarle en
el proceso de creación del ciclo de vida.

Versión de API 2006-03-01


282
Amazon Simple Storage Service Guía del desarrollador
¿Cómo se pueden exportar los datos del
análisis de clases de almacenamiento?

¿Cómo se pueden 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. 448).

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 los objetos se proporciona como ALL. Las filas ALL contienen
totales acumulados, incluidos los objetos inferiores a 128 KB, para todos los grupos de edad de ese día.

Versión de API 2006-03-01


283
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ñar el archivo exportado


En la siguiente tabla se describe el diseño del archivo exportado.

API de 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


284
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
• Proteger los datos en Amazon S3 (p. 285)
• Administración de identidad y acceso en Amazon S3 (p. 325)
• Registro y monitoreo en Amazon S3 (p. 497)
• Validación de la conformidad en Amazon S3 (p. 498)
• Resiliencia en Amazon S3 (p. 508)
• Seguridad de la infraestructura de Amazon S3 (p. 539)
• Configuración y análisis de vulnerabilidades en Amazon S3 (p. 540)
• Prácticas recomendadas de seguridad para Amazon S3 (p. 540)

Proteger los 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


285
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 las 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. 449).

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


286
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.

Para obtener más información sobre el cifrado del lado del servidor y el cifrado del lado del cliente, revise
los temas que se enumeran a continuación.

Temas

• Proteger los datos con el cifrado del lado del servidor (p. 287)
• Proteger datos con el cifrado del lado del cliente (p. 318)

Proteger los datos con el cifrado del lado del servidor


El cifrado en el servidor es el cifrado de los datos en su destino por parte de la aplicación o servicio que los
recibe. Amazon S3 cifra los datos en el nivel de objeto a medida que los escribe en discos en sus centros
de datos y los descifra para usted cuando obtiene acceso a ellos. 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. Además, al enumerar los objetos en su bucket, la API de listado devuelve una lista de
todos los objetos, independientemente de si están cifrados.
Note

No es posible aplicar tipos diferentes de cifrado en el servidor al mismo objeto simultáneamente.

Tiene tres opciones mutuamente excluyentes en función de cómo seleccione administrar las claves de
cifrado.

Cifrado del lado del servidor con claves administradas por Amazon S3 (SSE-S3)

Cuando se usa el 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. 294).

Cifrado del lado del servidor con claves maestras del cliente (CMK) almacenadas en AWS Key
Management Service (SSE-KMS)

Cifrado en el servidor con claves maestras del cliente (CMK) almacenadas en AWS Key Management
Service (SSE-KMS) es similar a SSE-S3, pero con algunos beneficios adicionales y cargos adicionales
por el uso de este servicio. Hay permisos separados para usar una CMK que proporcionan protección
adicional contra el acceso no autorizado de sus objetos en Amazon S3. SSE-KMS le proporciona también
un seguimiento de auditoría que muestra cuándo se usó la CMK y quién la usó. Además, puede crear y
administrar CMK administradas por el cliente o utilizar CMK administradas por AWS que sean únicas para
usted, su servicio y su región. Para obtener más información, consulte Protección de datos con el cifrado
en el servidor mediante CMK almacenadas en AWS Key Management Service (SSE-KMS) (p. 288).

Cifrado en el servidor con claves proporcionadas por el cliente (SSE-C)

Con el 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

Versión de API 2006-03-01


287
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

acceso a los objetos. Para obtener más información, consulte Proteger datos con el cifrado del lado del
servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 303).

Protección de datos con el cifrado en el servidor mediante CMK almacenadas en


AWS Key Management Service (SSE-KMS)
El cifrado del lado del servidor es el cifrado de los datos en su destino por parte de la aplicación o servicio
que los recibe. 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. Amazon S3 usa claves maestras del cliente (CMK) de AWS KMS para cifrar
sus objetos de Amazon S3. AWS KMS cifra solo los datos de objeto. Los metadatos de los objetos no se
cifran.

Cuando se usan CMK, se utiliza AWS KMS a través de la Consola de administración de AWS o las API
de AWS KMS para crear CMK de forma centralizada, definir las políticas que controlan cómo se pueden
utilizar las CMK y auditar el uso de las CMK para demostrar que se están utilizando correctamente. Puede
usar estas CMK para proteger sus datos en buckets de Amazon S3. Al utilizar el cifrado SSE-KMS con un
bucket de S3, la CMK de AWS KMS debe estar en la misma región que el bucket.

La utilización de CMK de AWS KMS conlleva cargos adicionales. Para obtener más información, consulte
Conceptos de AWS Key Management Service: claves maestras del cliente (CMK) y Precios de AWS Key
Management Service en AWS Key Management Service Developer Guide.
Note

Necesita el permiso kms:Decrypt cuando cargue o descargue un objeto de Amazon


S3 cifrado con una CMK de AWS KMS, 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 CMK de
AWS KMS.

CMK administradas por AWS y CMK administradas por el cliente

Cuando utiliza el cifrado del lado del servidor con AWS KMS (SSE-KMS), puede utilizar la CMK
administrada por AWS predeterminada o puede especificar una CMK administrada por el cliente que ya
haya creado.

Si no especifica una CMK administrada por el cliente, Amazon S3 crea automáticamente una CMK
administrada por AWS en su cuenta de AWS la primera vez que agrega un objeto cifrado con SSE-KMS a
un bucket. De forma predeterminada, Amazon S3 utiliza esta CMK para SSE-KMS.

Si desea utilizar una CMK administrada por el cliente para SSE-KMS, puede crear la CMK antes de
configurar SSE-KMS. A continuación, cuando configure SSE-KMS para el bucket, puede especificar la
CMK administrada por el cliente existente.

La creación de su propia CMK administrada por el cliente le da más flexibilidad y control sobre la CMK.
Por ejemplo, puede crear, rotar y deshabilitar las CMK administradas por el cliente. También puede definir
controles de acceso y auditar las CMK administradas por el cliente que utiliza para proteger sus datos.
Para obtener más información acerca de las CMK administradas por el cliente y administradas por AWS,
consulte el tema sobre conceptos de AWS KMS en la AWS Key Management Service Developer Guide.
Important

Cuando se utiliza un CMK de AWS KMS para el cifrado del lado del servidor en Amazon S3, debe
elegir un CMK simétrico. Amazon S3 solo admite CMK simétricos, no asimétricos. Para obtener
más información, consulte Uso de claves simétricas y asimétricas en la Guía para desarrolladores
de AWS Key Management Service.

Versión de API 2006-03-01


288
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

AWS Signature Version 4

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.
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.

Aspectos destacados de SSE-KMS

Los aspectos más destacados de SSE-KMS son los siguientes:

• Puede elegir una CMK administrada por el cliente y encargarse de crearla y administrarla, o bien
elegir una CMK administrada por AWS que Amazon S3 cree en su cuenta de AWS y administre
automáticamente. Al igual que una CMK administrada por el cliente, su CMK administrada por AWS
es única para su región y cuenta de AWS. Solo Amazon S3 tiene permiso para usar esta CMK en su
nombre. Amazon S3 solo admite CMK simétricas.
• Puede crear, rotar y deshabilitar las CMK auditables administradas por el cliente de la consola de AWS
KMS.
• 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.
• Los controles de seguridad de AWS KMS pueden ayudarle a cumplir los requisitos de conformidad
relacionados con el cifrado.

Requisito de cifrado en lado del servidor

Para requerir el cifrado del lado del servidor para todos los objetos en un bucket de Amazon S3
particular, utilice una política. 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"
}
}
}
]
}

Para requerir que una CMK de AWS KMS particular se utilice para cifrar los objetos en un bucket,
puede utilizar la clave de condición s3:x-amz-server-side-encryption-aws-kms-key-id. Para
especificar la CMK de AWS KMS, debe utilizar un nombre de recurso de Amazon (ARN) que esté en
formato "arn:aws:kms:region:acct-id:key/key-id".

Versión de API 2006-03-01


289
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

Note

Al cargar un objeto, puede especificar la CMK de AWS KMS con el encabezado x-amz-server-
side-encryption-aws-kms-key-id. Si el encabezado no está presente en la solicitud,
Amazon S3 adopta la CMK administrada de AWS. Independientemente de esto, el ID de la clave
de AWS KMS que usa Amazon S3 para el cifrado de objetos debe coincidir con el ID de la clave
de AWS KMS en la política. De lo contrario, Amazon S3 denegará la solicitud.

Para obtener una lista completa de las claves de condición específicas de Amazon S3 y más información
sobre la especificación de claves de condición, consulte Claves de condición de Amazon S3 (p. 376).

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 CMK almacenadas en
AWS KMS, consulte ¿Cómo puedo añadir cifrado a un objeto 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

Para solicitar SSE-KMS en las API REST de creación de objetos, utilice el encabezado de solicitud x-
amz-server-side-encryption. Para especificar el ID de la CMK de AWS KMS que se utilizó para el
objeto, utilice x-amz-server-side-encryption-aws-kms-key-id. La API de Amazon S3 también
admite el contexto de cifrado, con el encabezado x-amz-server-side-encryption-context. Para
obtener más información, consulte Especificación de AWS Key Management Service en Amazon S3 con la
API REST (p. 292).

Los SDK de AWS también proporcionan API de encapsulamiento para que solicite SSE-KMS con Amazon
S3. Para obtener más información, consulte Especificación de AWS Key Management Service en Amazon
S3 mediante los SDK de AWS (p. 290).

Especificación de AWS Key Management Service en Amazon S3 mediante los SDK de AWS

Al utilizar los SDK de AWS, puede solicitar Amazon S3 para utilizar claves maestras del cliente (CMK)
de AWS Key Management Service (AWS KMS). En esta sección se brindan ejemplos de uso de SDK de
AWS para Java y .NET. Para obtener información acerca de otros SDK, consulte Código de muestra y
bibliotecas.
Important

Cuando se utiliza un CMK de AWS KMS para el cifrado del lado del servidor en Amazon S3, debe
elegir un CMK simétrico. Amazon S3 solo admite CMK simétricos, no asimétricos. Para obtener
más información, consulte Uso de claves simétricas y asimétricas en la Guía para desarrolladores
de AWS Key Management Service.

AWS SDK para Java

En esta sección se explican varias operaciones de Amazon S3 en las que se usa AWS SDK for Java y
cómo utiliza los CMK de AWS KMS.

Operación PUT

Al cargar un objeto utilizando AWS SDK para Java, puede solicitar que Amazon S3 utilice una CMK de
AWS KMS añadiendo la propiedad SSEAwsKeyManagementParams como se muestra en la solicitud
siguiente.

PutObjectRequest putRequest = new PutObjectRequest(bucketName,


keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());

Versión de API 2006-03-01


290
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

En este caso, Amazon S3 utiliza la CMK administrada por AWS (consulte Uso de cifrado en el servidor con
CMK almacenadas en AWS KMS (p. 288)). Opcionalmente, puede crear una CMK simétrica administrada
por el cliente y especificarla en la solicitud.

PutObjectRequest putRequest = new PutObjectRequest(bucketName,


keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));

Para obtener más información acerca de la creación de CMK administradas por el cliente, consulte
Programación de la API de AWS KMS 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. 191).
• Para una carga multiparte, consulte los siguientes temas:
• Para utilizar la API de carga multiparte de alto nivel, consulte Carga de un archivo (p. 203).
• Si utiliza la API de carga multiparte de bajo nivel, consulte Carga de un archivo (p. 206).

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
CMK de AWS KMS. Para obtener más información acerca de la copia de objetos, consulte Copia de
objetos (p. 229).

URL prefirmadas

Al crear una URL prefirmada para un objeto cifrado con una CMK de 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. 188).

AWS SDK para .NET

En esta sección se explican varias operaciones de Amazon S3 que utilizan AWS SDK para .NET y cómo
se utilizan las CMK de AWS KMS.

Operación PUT

Al cargar un objeto utilizando AWS SDK para .NET, puede solicitar que Amazon S3 utilice una CMK de
AWS KMS añadiendo la propiedad ServerSideEncryptionMethod como se muestra en la siguiente
solicitud.

PutObjectRequest putRequest = new PutObjectRequest


{
BucketName = bucketName,
Key = keyName,

Versión de API 2006-03-01


291
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

// other properties.
ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS
};

En este caso, Amazon S3 utiliza la CMK administrada por AWS. Para obtener más información, consulte
Protección de datos con el cifrado en el servidor mediante CMK almacenadas en AWS Key Management
Service (SSE-KMS) (p. 288). Opcionalmente, puede crear su propia CMK simétrica administrada por el
cliente 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 la creación de CMK administradas por el cliente, consulte
Programación de la API de AWS KMS 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. 192).
• Para una carga multiparte, consulte los siguientes temas:
• Para utilizar la API de carga multiparte de alto nivel, consulte Cargar un archivo en un bucket de S3
con AWS SDK para .NET (API de alto nivel) (p. 210).
• Para utilizar la API de carga multiparte de bajo nivel, consulte Cargar un archivo en un bucket de S3
con AWS SDK para .NET (API de bajo nivel) (p. 216).

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
CMK de AWS KMS. Para obtener más información acerca de la copia de objetos, consulte Copia de
objetos (p. 229).

URL prefirmadas

Al crear una URL prefirmada para un objeto cifrado con una CMK de 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. 189).

Especificación de AWS Key Management Service en Amazon S3 con la API REST

Cuando cree un objeto, es decir, cuando cargue un objeto nuevo o copie un objeto existente, podrá
especificar el uso del cifrado del lado del servidor con claves maestras del cliente (CMK) de AWS
Key Management Service (AWS KMS) para cifrar los datos. Para ello, añada el encabezado x-amz-
server-side-encryption a la solicitud. Configure el valor del encabezado para el algoritmo de cifrado

Versión de API 2006-03-01


292
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

aws:kms. Amazon S3 confirma que su objeto se guardó con SSE-KMS al devolver el encabezado de
respuesta x-amz-server-side-encryption.

Si especifica el encabezado x-amz-server-side-encryption con un valor de aws:kms, también


puede utilizar los siguientes encabezados de solicitud:

• x-amz-server-side-encryption-aws-kms-key-id
• x-amz-server-side-encryption-context

API de REST de Amazon S3 que admiten SSE-KMS

Las siguientes API de REST aceptan encabezados de solicitud de x-amz-server-side-encryption,


x-amz-server-side-encryption-aws-kms-key-id y x-amz-server-side-encryption-
context.

• PUT Object: cuando cargue datos mediante la API PUT, podrá especificar estos encabezados de
solicitud.
• PUT Object - Copy: cuando copie un objeto, tiene un objeto de origen y otro de destino. Al pasar
encabezados SSE-KMS con la operación COPY, se aplicarán solo al objeto de destino. 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.
• POST Object: cuando utilice una operación POST para cargar un objeto, en vez de proporcionar los
encabezados de solicitud, debe proporcionar la misma información en los campos del formulario.
• Iniciar carga multiparte: al cargar objetos grandes mediante la API de carga multiparte, puede especificar
estos encabezados. Especifique estos encabezados en la solicitud de inicio.

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

Important

• Todas las solicitudes GET y PUT para un objeto protegido por AWS KMS fallarán si no las
realiza mediante Secure Sockets Language (SSL) o Signature Version 4.
• Si su objeto utiliza SSE-KMS, no envíe encabezados de solicitud de cifrado para solicitudes GET
y HEAD u obtendrá un error HTTP 400 BadRequest.

Contexto de cifrado (x-amz-server-side-encryption-context)

Si especifica x-amz-server-side-encryption:aws:kms, la API de Amazon S3 admitirá un contexto


de cifrado con el encabezado x-amz-server-side-encryption-context. Un contexto de cifrado
es un conjunto opcional de pares clave-valor que pueden contener información contextual adicional sobre

Versión de API 2006-03-01


293
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

los datos. Para obtener más información acerca del contexto de cifrado, consulte Conceptos de AWS Key
Management Service: Contexto de cifrado en la AWS Key Management Service Developer Guide.

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.

Además, Amazon S3 podría adjuntar una clave predefinida de aws:s3:arn con un valor igual al nombre
de recurso de Amazon (ARN) del objeto para el contexto de cifrado proporcionado. Esto solo ocurre si
la clave aws:s3:arn no está ya en el contexto de cifrado que proporcionó. En este caso, esta clave
predefinida se añade 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.

Tener esta clave predefinida como parte del contexto de cifrado significa que puede realizar un
seguimiento de las solicitudes relevantes en CloudTrail. Por lo tanto, siempre puede ver qué ARN del
objeto de Amazon S3 se usó con qué clave de cifrado. Además, esta clave predefinida como parte de su
contexto de cifrado ayuda a garantizar 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.

ID de clave de AWS KMS (x-amz-server-side-encryption-aws-kms-key-id)

Puede utilizar el encabezado de x-amz-server-side-encryption-aws-kms-key-id para especificar


el ID de la CMK administrada por el cliente utilizado para proteger los datos. Si especifica x-amz-
server-side-encryption:aws:kms, pero no proporciona x-amz-server-side-encryption-aws-
kms-key-id, Amazon S3 utiliza la CMK administrada de AWS en AWS KMS para proteger los datos. Si
desea utilizar una CMK de AWS KMS administrada por el cliente, debe proporcionar el x-amz-server-
side-encryption-aws-kms-key-id de dicha CMK.
Important

Cuando se utiliza un CMK de AWS KMS para el cifrado del lado del servidor en Amazon S3, debe
elegir un CMK simétrico. Amazon S3 solo admite CMK simétricos, no asimétricos. Para obtener
más información, consulte Uso de claves simétricas y asimétricas en la Guía para desarrolladores
de AWS Key Management Service.

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 para cifrar los datos, Advanced Encryption Standard de 256 bits (AES-256).

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",

Versión de API 2006-03-01


294
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

"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.

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. 302).

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

Versión de API 2006-03-01


295
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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 Usar AWS
Java SDK para carga multiparte (API de nivel alto) (p. 202).
• 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 Carga de un archivo (p. 206).

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.


• 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. 302). 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. 827).

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 ***";

Versión de API 2006-03-01


296
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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

// 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.

Versión de API 2006-03-01


297
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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:

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. 231).

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. 829).

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

Versión de API 2006-03-01


298
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

{
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)
{
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);
}
}
}
}

Especificar el 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. 829) 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. 302).

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 ***';

Versión de API 2006-03-01


299
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

$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 Usar AWS SDK para PHP para cargas multiparte (API de bajo
nivel) (p. 221).
• 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
Usar el SDK de AWS para PHP para carga multiparte (p. 220).

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 del lado del servidor de 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

Versión de API 2006-03-01


300
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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',
]);

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 AWS SDK parar Ruby – versión 3 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. 195).

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.

Versión de API 2006-03-01


301
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

# 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.

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. 234).

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

Versión de API 2006-03-01


302
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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.

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. 70)

Proteger 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. Este cifrado solo cifra datos de objetos,
no metadatos de objetos. 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. 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.
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

Versión de API 2006-03-01


303
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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.

Información general de SSE-C

En esta sección, se proporciona información general acerca del SSE-C:

• 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.
• 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.

Temas

Para obtener más información, consulte los siguientes temas:

• Especificar el cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente mediante
AWS SDK for Java (p. 304)
• Especificar el cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente mediante
AWS SDK para .NET (p. 309)
• Especificar el cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente mediante
la API de REST (p. 316)

Especificar el 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.
Versión de API 2006-03-01
304
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• 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 Usar AWS Java SDK para carga multiparte (API de nivel alto) (p. 202) y Usar AWS Java
SDK para una carga multiparte (API de bajo nivel) (p. 206).

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 Especificar el cifrado del lado del
servidor con claves de cifrado proporcionadas por el cliente mediante la API de REST (p. 316).

Para obtener más información acerca de SSE-C, consulte Proteger datos con el cifrado del lado del
servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 303). 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. 827).

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;

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

Versión de API 2006-03-01


305
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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

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");
}

Versión de API 2006-03-01


306
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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. 195)). 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 Usar AWS Java SDK para carga multiparte (API de nivel
alto) (p. 202)).
• 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 Usar AWS Java SDK para una
carga multiparte (API de bajo nivel) (p. 206).

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.

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;

Versión de API 2006-03-01


307
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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

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

Versión de API 2006-03-01


308
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

}
}
}

Especificar el 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
Utilizar AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 210) y Usar AWS SDK
para .NET para cargas multiparte (API de bajo nivel) (p. 216).

Para obtener más información acerca de SSE-C, consulte Proteger datos con el cifrado del lado del
servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 303). 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. 829).

Example

using Amazon.S3;
using Amazon.S3.Model;
using System;
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()

Versión de API 2006-03-01


309
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

{
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
};
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
};

Versión de API 2006-03-01


310
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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

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
};

Versión de API 2006-03-01


311
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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. 195)). 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 Utilizar AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 210).

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 Usar AWS SDK para .NET para cargas multiparte (API
de bajo nivel) (p. 216).

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á.
• 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
{

Versión de API 2006-03-01


312
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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;

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 ***"
};

Versión de API 2006-03-01


313
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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

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

Versión de API 2006-03-01


314
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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;
}

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

Versión de API 2006-03-01


315
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

{
Console.WriteLine("Exception occurred: {0}", exception.Message);
AbortMultipartUploadRequest abortMPURequest = new
AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
UploadId = initResponse.UploadId
};
await s3Client.AbortMultipartUploadAsync(abortMPURequest);
}
}
}
}

Especificar el cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante la API de REST
En el momento de la creación de objetos con la API de REST, puede especificar el cifrado del lado del
servidor con claves de cifrado proporcionadas por el cliente (SSE-C). Cuando utilice SSE-C, deberá
proporcionar información sobre 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 API de REST de Amazon S3 que admiten SSE-C


Las siguientes API de Amazon S3 admiten el cifrado del lado del servidor con claves de cifrado (SSE-C)
proporcionadas por el cliente.

• 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 de PUT Object (consulte PUT Object), puede especificar
estos encabezados de solicitud.

Versión de API 2006-03-01


316
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

• 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 Iniciar carga
multiparte) y en cada solicitud de carga de partes subsiguiente (Cargar partes) o

Cargar partes: Copiar).

). 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.
• Operación Copy: cuando copia un objeto (consulte PUT Object - Copy), tiene un objeto de origen y uno
de destino.
• 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 prefirmadas 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.

Versión de API 2006-03-01


317
Amazon Simple Storage Service Guía del desarrollador
Cifrado de 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.

Más información

• Especificar el cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente mediante
AWS SDK para .NET (p. 309)
• Especificar el cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente mediante
AWS SDK for Java (p. 304)

Proteger 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:

• Utilice una clave maestra del cliente (CMK) almacenada en AWS Key Management Service (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:

• 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 CMK 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
a AWS KMS para obtener una CMK que pueda usar para cifrar los datos de los objetos. — devuelve dos
versiones de una clave 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 datos que el cliente carga en Amazon S3 como metadatos de
objetos.
Note

El cliente obtiene una clave 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 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 datos 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 en

Versión de API 2006-03-01


318
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

el lado 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 instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 827).

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;

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

Versión de API 2006-03-01


319
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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.
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.

Versión de API 2006-03-01


320
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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:

• 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. 827).

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

Versión de API 2006-03-01


321
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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

// 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");

Versión de API 2006-03-01


322
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

}
}

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. 827).

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 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.

Versión de API 2006-03-01


323
Amazon Simple Storage Service Guía del desarrollador
Cifrado de datos

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

Versión de API 2006-03-01


324
Amazon Simple Storage Service Guía del desarrollador
Administración de identidades y accesos

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


}
}

Administración de identidad y acceso en Amazon


S3
De forma predeterminada, todos los recursos de Amazon S3 —a saber, 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.

Introducción a la administración del acceso a los


recursos de Amazon S3
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:

• Información general sobre la administración del acceso (p. 326)


• Cómo Amazon S3 autoriza una solicitud (p. 332)
• Directrices para usar las opciones de política de acceso disponibles (p. 339)
• Tutoriales de ejemplo: Administrar acceso a sus recursos de Amazon S3 (p. 342)

Varias prácticas recomendadas de seguridad también abarcan el control de acceso, entre ellas se
encuentran:

Versión de API 2006-03-01


325
Amazon Simple Storage Service Guía del desarrollador
Opciones de acceso a los recursos de Amazon S3

• 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)
• Identificar u auditar todos sus buckets de Amazon S3
• Monitorizar Security Advisories de AWS

Opciones de acceso a los recursos de Amazon S3


Después de revisar los temas introductorios sobre la administración del acceso a los recursos de Amazon
S3, puede utilizar los siguientes temas para obtener más información acerca de las opciones específicas
de políticas de acceso:

• Uso de políticas de bucket y usuario (p. 370)


• Administración de acceso con ACL (p. 474)
• Usar Block Public Access de Amazon S3 (p. 488)

Información general sobre la administración del


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. 326)
• Propiedad de los buckets y objetos de Amazon S3 (p. 327)
• Operaciones de recursos (p. 328)
• Administración del acceso a los recursos (p. 328)
• ¿Qué método de control de acceso debo usar? (p. 331)
• Más información (p. 332)

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 Administrar el ciclo de
vida de los objetos (p. 136)).
• website – almacena información de configuración del sitio web, si configura su bucket para el
alojamiento web (véase Alojar un sitio web estático en Amazon S3 (p. 618)).
• 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 Compartir recursos entre orígenes (CORS) (p. 171)).
• logging – le permite solicitar a Amazon S3 que guarde los registros de acceso al bucket.

Versión de API 2006-03-01


326
Amazon Simple Storage Service Guía del desarrollador
Información general

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. 474)).
• restore – permite temporalmente la restauración de un objeto archivado (véase POST Object restore).
Un objeto en la clase de almacenamiento S3 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 Administrar el ciclo
de vida de los objetos (p. 136).

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:

• 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 Administrar el ciclo de
vida de los objetos (p. 136).

Autenticación de la propiedad 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 Realizar 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. 492).

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
Versión de API 2006-03-01
327
Amazon Simple Storage Service Guía del desarrollador
Información general

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 Usar Block Public Access
de Amazon S3 (p. 488). 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. 475).
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.

Operaciones de recursos
Amazon S3 proporciona un conjunto de operaciones para trabajar con los recursos de Amazon S3. Para
ver la lista de las operaciones disponibles, consulte Acciones definidas por Amazon S3 (p. 388).

Administración del acceso a los recursos


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.

Opciones de la política de acceso


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.

Versión de API 2006-03-01


328
Amazon Simple Storage Service Guía del desarrollador
Información general

• 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"
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.  Si
especifica el principal con un signo de comodín (*), la política permite el acceso anónimo, aunque

Versión de API 2006-03-01


329
Amazon Simple Storage Service Guía del desarrollador
Información general

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
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"
]

Versión de API 2006-03-01


330
Amazon Simple Storage Service Guía del desarrollador
Información general

},
{
"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. 332).

Access Analyzer for S3


En la consola de Amazon S3, puede utilizar Access Analyzer for S3 para revisar todos los buckets que
tienen listas de control de acceso (ACL) de bucket, políticas de bucket o políticas de punto de acceso
que conceden acceso público o compartido. Access Analyzer for S3 le avisa de los buckets que están
configurados para permitir el acceso a cualquier usuario de Internet u otras cuentas de AWS, incluidas las
cuentas de AWS ajenas a su organización. Para cada bucket público o compartido, recibirá resultados que
le informarán del origen y el nivel de acceso público o compartido.

En Access Analyzer for S3, puede bloquear todo el acceso público a un bucket con un solo clic. Le
recomendamos que bloquee todo el acceso a sus buckets a menos que necesite acceso público para
admitir un caso de uso específico. Antes de bloquear todo el acceso público, asegúrese de que las
aplicaciones seguirán funcionando correctamente sin ese acceso público. Para obtener más información,
consulte Usar Block Public Access de Amazon S3 (p. 488).

También puede examinar a fondo las configuraciones de permisos de nivel de bucket para configurar
niveles detallados de acceso. Para casos de uso específicos y verificados que requieren acceso público
o compartido, puede reconocer y registrar su intención de que el bucket continúe siendo público o
compartido archivando los resultados del bucket. Puede volver a visitar y modificar estas configuraciones
de bucket en cualquier momento. También puede descargar sus resultados en un informe CSV con fines
de auditoría.

Access Analyzer for S3 está disponible sin costo adicional en la consola de Amazon S3. Access Analyzer
for S3 se basa en AWS Identity and Access Management (IAM) Access Analyzer. Para usar Access
Analyzer for S3 en la consola de Amazon S3, debe visitar la consola de IAM y crear un analizador de nivel
de cuenta en Access Analyzer de IAM por cada región.

Para obtener más información acerca de Access Analyzer for S3, consulte Uso de Access Analyzer for S3
en la Guía del usuario de la consola de Amazon Simple Storage Service.

¿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?

Versión de API 2006-03-01


331
Amazon Simple Storage Service Guía del desarrollador
Cómo Amazon S3 autoriza una solicitud

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. 332)


• Directrices para usar las opciones de política de acceso disponibles (p. 339)
• Tutoriales de ejemplo: Administrar acceso a sus recursos de Amazon S3 (p. 342)

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 Administración de identidad y acceso en Amazon S3 (p. 325). 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. 370)


• Administración de acceso con ACL (p. 474)

Cómo Amazon S3 autoriza una solicitud


Temas
• Temas relacionados (p. 333)
• Cómo hace Amazon S3 para autorizar una solicitud para una operación de bucket (p. 333)
• Cómo hace Amazon S3 para autorizar una solicitud para una operación de objeto (p. 337)

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.

Versión de API 2006-03-01


332
Amazon Simple Storage Service Guía del desarrollador
Cómo Amazon S3 autoriza una solicitud

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.
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. 333)
• Cómo hace Amazon S3 para autorizar una solicitud para una operación de objeto (p. 337)

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 del acceso a los recursos de Amazon S3 (p. 325). 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. 370)


• Administración de acceso con ACL (p. 474)

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.

Versión de API 2006-03-01


333
Amazon Simple Storage Service Guía del desarrollador
Cómo Amazon S3 autoriza una solicitud

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. 794).
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.

Versión de API 2006-03-01


334
Amazon Simple Storage Service Guía del desarrollador
Cómo Amazon S3 autoriza una solicitud

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.

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.

Versión de API 2006-03-01


335
Amazon Simple Storage Service Guía del desarrollador
Cómo Amazon S3 autoriza una solicitud

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


336
Amazon Simple Storage Service Guía del desarrollador
Cómo Amazon S3 autoriza una solicitud

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.

Versión de API 2006-03-01


337
Amazon Simple Storage Service Guía del desarrollador
Cómo Amazon S3 autoriza una solicitud

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.
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 para usar las opciones de
política de acceso disponibles (p. 339).

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.

Versión de API 2006-03-01


338
Amazon Simple Storage Service Guía del desarrollador
Directrices para usar las opciones
de política de acceso disponibles

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.

Directrices para usar 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 los recursos (p. 328)). 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.

Versión de API 2006-03-01


339
Amazon Simple Storage Service Guía del desarrollador
Directrices para usar las opciones
de política de acceso disponibles

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. 475)).
• 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
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.

Versión de API 2006-03-01


340
Amazon Simple Storage Service Guía del desarrollador
Directrices para usar las opciones
de política de acceso disponibles

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. 794)). 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 desea administrar permisos entre cuentas para todos los permisos de Amazon S3: puede usar las
ACL para conceder permisos entre cuentas a otras cuentas, pero las ACL solo admiten un conjunto
limitado de permisos (¿Qué permisos puedo conceder? (p. 478)) 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. 325)) 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 Acciones de Amazon S3 (p. 374)), 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.

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:

Versión de API 2006-03-01


341
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

• 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 del acceso a los recursos de Amazon S3 (p. 325).
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. 370)


• Información general de las Access Control Lists (ACL, Listas de control de acceso) (p. 475)
• Administración de acceso con ACL (p. 474)

Tutoriales de ejemplo: Administrar 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. 345)

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. 350)

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


342
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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. 356)

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 entre cuentas para objetos que no les
pertenecen (p. 361)

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. 342)). 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. 344).

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.

Versión de API 2006-03-01


343
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

Configuración de las herramientas para los tutoriales de ejemplo


En los ejemplos introductorios (consulte Tutoriales de ejemplo: Administrar acceso a sus recursos de
Amazon S3 (p. 342)) utilice 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, 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

Versión de API 2006-03-01


344
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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

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: Prepararse para el tutorial (p. 346)
• Paso 1: Crear recursos (un bucket y un usuario de IAM) en la cuenta A y conceder permisos (p. 347)
• Paso 2: Probar los permisos (p. 349)
Versión de API 2006-03-01
345
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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. El propietario del bucket y la cuenta principal son el
mismo. Por tanto, para conceder permisos al usuario en el bucket, la cuenta de AWS puede utilizar
una política de bucket, una política de usuario o ambas. El propietario de la cuenta concederá algunos
permisos utilizando una política de bucket y otros permisos mediante una política de usuario.

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. 343)). Nos referimos a la cuenta de AWS y al usuario administrador de la
siguiente manera:

ID de cuenta Cuenta denominada Usuario administrador de 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: Prepararse 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.

Versión de API 2006-03-01


346
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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:

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. 344).

Paso 1: Crear recursos (un bucket y un usuario de IAM) en la cuenta A y


conceder 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

Versión de API 2006-03-01


347
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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.
• 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 Políticas y permisos en Amazon
S3 (p. 370).

{
"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": [

Versión de API 2006-03-01


348
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
}
]
}

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: Probar los permisos


Compruebe que los permisos funcionan con las credenciales de Dave. Puede utilizar uno de los dos
procedimientos siguientes.

Probar 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. 344).

[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

Probar usando 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

Versión de API 2006-03-01


349
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

Descargue el objeto que cargó en el paso anterior.

Read-S3Object -bucketname examplebucket -key HappyFace.jpg -file Output.jpg -


StoredCredentials AccountADave

Ejemplo 2: Propietario del bucket que concede permisos de


bucket entre cuentas
Temas
• Paso 0: Prepararse para el tutorial (p. 351)
• Paso 1: Realizar las tareas de la cuenta A (p. 352)
• Paso 2: Realizar las tareas de la cuenta B (p. 353)
• Paso 3: Crédito adicional: Probar la denegación explícita (p. 355)
• Paso 4: Limpieza (p. 355)

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

Versión de API 2006-03-01


350
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

uso de un usuario administrador para crear recursos y conceder permisos (p. 343)), 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 de 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: Prepararse 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. 344).

Versión de API 2006-03-01


351
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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. 344).

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: Realizar las tareas de la cuenta A


Paso 1.1: Iniciar 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: Crear 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: Asociar 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.

Versión de API 2006-03-01


352
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

"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"
]
}
]
}

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: Realizar 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: Iniciar 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: Crear 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: Delegar 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",

Versión de API 2006-03-01


353
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket"
]
}
]
}

Para obtener instrucciones, consulte Uso de políticas insertadas en la Guía del usuario de IAM.

Paso 2.4: Probar 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.

Probar 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. 344).

[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

Probar utilizando 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

Versión de API 2006-03-01


354
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

Paso 3: Crédito adicional: Probar 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
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: Limpieza
1. Después de que haya terminado de probar, puede realizar lo siguiente para limpiar.

Versión de API 2006-03-01


355
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

• 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.

Ejemplo 3: Propietario del bucket que le concede a sus usuarios


permisos para objetos que no posee
Temas
• Paso 0: Prepararse para el tutorial (p. 357)
• Paso 1: Realizar las tareas de la cuenta A (p. 358)
• Paso 2: Realizar las tareas de la cuenta B (p. 359)
• Paso 3: Probar los permisos (p. 360)
• Paso 4: Limpieza (p. 361)

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. 327).

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:

Versión de API 2006-03-01


356
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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.
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. 343)), 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 de 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: Prepararse 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.

Versión de API 2006-03-01


357
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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:

• 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. 344).

Paso 1: Realizar las tareas de la cuenta A


Paso 1.1: Iniciar 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: Crear un bucket, un usuario y agregar una política de bucket que conceda 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

Versión de API 2006-03-01


358
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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 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"
]
},
{
"Sid": "Statement3",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
}
]
}

Paso 2: Realizar 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

Versión de API 2006-03-01


359
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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

Paso 3: Probar 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. 344).

[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.

Versión de API 2006-03-01


360
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

Read-S3Object -BucketName examplebucket -Key HappyFace.jpg -file HappyFace.jpg -


StoredCredentials UserDaveAccountA

Paso 4: Limpieza
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.

Ejemplo 4: Propietarios de buckets que conceden permisos entre


cuentas para objetos que no les pertenecen
Temas
• Introducción: Permisos a otras cuentas y uso de roles de IAM (p. 362)
• Paso 0: Prepararse para el tutorial (p. 363)
• Paso 1: Realizar las tareas de la cuenta A (p. 364)
• Paso 2: Realizar las tareas de la cuenta B (p. 367)
• Paso 3: Realizar las tareas de la cuenta C (p. 367)
• Paso 4: Limpieza (p. 369)
• Recursos relacionados (p. 369)

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. 356)), pero no puede delegar permisos a otras cuentas de AWS, ya que no se admite la delegación
entre cuentas.

Versión de API 2006-03-01


361
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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 roles 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
Acciones de Amazon S3 (p. 374).

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.

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.

Versión de API 2006-03-01


362
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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. 343)),
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 de la


cuenta

1111-1111-1111 Cuenta A AccountAadmin

2222-2222-2222 Cuenta B AccountBadmin

3333-3333-3333 Cuenta C AccountCadmin

Paso 0: Prepararse 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.

Versión de API 2006-03-01


363
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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.
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. 344).

Paso 1: Realizar 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.

Versión de API 2006-03-01


364
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

Paso 1.1: Iniciar 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: Crear un bucket y asociar 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",
"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: Crear un rol de IAM para permitir 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).

Versión de API 2006-03-01


365
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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).
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": [
{

Versión de API 2006-03-01


366
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

"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: Realizar 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.

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: Realizar 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: Crear un usuario en la cuenta C y delegar 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.

Versión de API 2006-03-01


367
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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"
}
]
}

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: Asumir el rol (rol de ejemplo) y acceder 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).
Versión de API 2006-03-01
368
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de ejemplo: Administrar acceso

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.

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: Limpieza
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.

Versión de API 2006-03-01


369
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• Trabajo con políticas en la Guía del usuario de IAM.

Uso de políticas de bucket y usuario


Las directivas de bucket y las directivas de usuario son dos opciones de directiva de acceso disponibles
para conceder permisos a 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
Las políticas de bucket tienen un límite de tamaño de 20 KB.
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 del acceso a
los recursos de Amazon S3 (p. 325).

Temas
• Políticas y permisos en Amazon S3 (p. 370)
• Ejemplos de política de bucket (p. 442)
• Ejemplos de políticas de usuario (p. 451)

Políticas y permisos en Amazon S3


Esta página proporciona una descripción general de las directivas de bucket y usuario en Amazon S3 y
describe los elementos básicos de una directiva. Los elementos que aparecen se vinculan a más detalles
sobre ese elemento y ejemplos de cómo usarlo.

Para obtener una lista completa de acciones, recursos y condiciones de Amazon S3, consulte Acciones,
recursos y claves de condiciones de Amazon S3 (p. 388).

Información general del lenguaje de la política


Una política contiene los siguientes elementos básicos:

• Recursos (p. 371): los buckets, los objetos, los puntos de acceso y los trabajos son recursos de
Amazon S3 para los que puede permitir o denegar permisos. En una política, se usa el nombre de
recurso de Amazon (ARN) para identificar el recurso. Para obtener más información, consulte Recursos
de Amazon S3 (p. 371).
• Acciones (p. 374): 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.

Por ejemplo, el permiso s3:ListBucket autoriza al usuario utilizar la operación GET Bucket (List
Objects) de Amazon S3. Para obtener más información, consulte Acciones de Amazon S3 (p. 374).
• Efecto: el efecto obtenido cuando el usuario solicita la acción específica; esta 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 explícitamente el acceso a un recurso para asegurarse de que un
usuario no pueda obtener acceso a él, aunque otra política le conceda acceso. Para obtener más
información, consulte Elementos de la política de JSON de IAM.
• Entidad principal (p. 373): 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. Para obtener más información, consulte Entidades principales (p. 373).

Versión de API 2006-03-01


370
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• Condición (p. 376): condiciones para cuando surte efecto una política. Puede utilizar AWS‐claves
generales y Amazon S3‐claves específicas para especificar condiciones en una política de acceso
Amazon S3. Para obtener más información, consulte Claves de condición de Amazon S3 (p. 376).

La política de bucket del ejemplo siguiente ilustra los elementos 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"
]
}
]
}

Para obtener información completa acerca del lenguaje de políticas, consulte Políticas y permisos y
Referencia de políticas de JSON de IAM en Guía del usuario de IAM.

Recursos de Amazon S3
El siguiente formato de nombre común de recurso de Amazon (ARN) identifica los recursos en AWS:

arn:partition:service:region:namespace:relative-id

Para obtener información acerca de los ARN, consulte Nombres de recurso de Amazon (ARN) en la AWS
General Reference.

Para obtener información sobre recursos, consulte Elementos de la política de JSON de IAM: Recurso en
la Guía del usuario de IAM.

Un ARN de Amazon S3 excluye la región y el espacio de nombres de AWS, pero incluye lo siguiente:

• Partición: aws es 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.
• Servicio: s3.
• ID relativo: bucket-name o 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/key_name

Versión de API 2006-03-01


371
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Para obtener una lista completa de recursos de Amazon S3, consulte Acciones, recursos y claves de
condiciones de Amazon S3 (p. 388).

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 los siguientes temas de la Guía del usuario de la consola de Amazon
Simple Storage Service:

• ¿Cómo agrego una política de bucket en S3?


• ¿Cómo permito que se compartan recursos entre dominios con CORS?

Ejemplos de ARN de Amazon S3


A continuación, se muestran ejemplos de ARN para recursos de Amazon S3.

Nombre del bucket y clave de objeto especificados

El siguiente ARN identifica el objeto /developers/design_info.doc en el bucket examplebucket.

arn:aws:s3:::examplebucket/developers/design_info.doc

Caracteres comodín

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.

• El ARN siguiente 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/*

• El siguiente ARN utiliza * para indicar todos los recursos de Amazon S3 (todos los buckets de S3 y
objetos en su cuenta).

arn:aws:s3:::*

• El siguiente ARN utiliza ambos comodines, * y ?, en la parte relative-ID. Identifica todos los objetos
en los buckets como example1bucket, example2bucket, example3bucket, etc.

arn:aws:s3:::example?bucket/*

Variables de las políticas

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.

Versión de API 2006-03-01


372
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Entidades principales
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.

Conceder permisos a una cuenta de AWS

Para conceder permisos para una cuenta de AWS, use el siguiente formato para identificar la cuenta.

"AWS":"account-ARN"

A continuación se muestran algunos ejemplos.

"Principal":{"AWS":"arn:aws:iam::AccountNumber-WithoutHyphens:root"}

"Principal":{"AWS":["arn:aws:iam::AccountNumber1-
WithoutHyphens:root","arn:aws:iam::AccountNumber2-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"

A continuación se muestra un ejemplo.

"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.

Conceder permisos a un usuario de IAM

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"}

Conceder permisos anónimos

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":"*"}

Versión de API 2006-03-01


373
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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.

Requerir acceso a través de URL de CloudFront


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 de
CloudFront (OAI). A continuación, cambie los permisos en el bucket o en los objetos del 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.

Acciones de Amazon S3
Amazon S3 define un conjunto de permisos que puede especificar en una política. Estas son las palabras
clave, cada una de las cuales se asigna a una operación específica de Amazon S3. Para obtener más
información sobre operaciones Amazon S3, consulte Acciones en la Amazon Simple Storage Service API
Reference.

Para ver cómo especificar permisos en Amazon S3 en una política, revise las siguientes políticas de
ejemplo. Para obtener una lista de acciones, recursos y claves de condición de Amazon S3 para su uso en
políticas, consulte Acciones, recursos y claves de condiciones de Amazon S3 (p. 388). Para obtener una
lista completa de acciones de Amazon S3, consulte Acciones.

Temas
• Ejemplo: operaciones con objetos (p. 374)
• Ejemplo: operaciones del bucket de — (p. 375)
• Ejemplo: operaciones de subrecurso del bucket (p. 375)
• Ejemplo: operaciones de cuenta (p. 376)

Ejemplo: operaciones con objetos


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. Son operaciones con objetos. En consecuencia, la parte relative-id del Resource ARN
identifica los objetos (examplebucket/*). Para obtener más información, consulte Recursos de Amazon
S3 (p. 371).

{
"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/*"
}
]

Versión de API 2006-03-01


374
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Permisos para todas las acciones de Amazon S3

Puede utilizar un carácter comodín para conceder permisos para todas las acciones de Amazon S3.

"Action": "*"

Ejemplo: operaciones del bucket de —

La política de usuario del ejemplo siguiente concede los permisos s3:CreateBucket,


s3:ListAllMyBuckets y s3:GetBucketLocation a un usuario. Para todos estos permisos,
establezca la parte relative-id 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 Recursos de Amazon
S3 (p. 371).

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:CreateBucket",
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::*"
]
}
]
}

Política para el acceso a la consola

Si un usuario quiere usar Consola de administración de AWS para ver buckets y el contenido de esos
buckets, el usuario debe tener los permisos de s3:ListAllMyBuckets y s3:GetBucketLocation.
Para ver un ejemplo, consulte la Política para acceso a la consola en la entrada de blog Escribir políticas
de IAM: cómo conceder acceso a un bucket de S3.

Ejemplo: operaciones de subrecurso del bucket

En la siguiente política de usuario de ejemplo se concede el permiso s3:GetBucketAcl en el bucket


examplebucket para el usuario Dave.

{
"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"

Versión de API 2006-03-01


375
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

}
]
}

Permisos de objetos DELETE

Para eliminar objetos, puede llamar de forma explícita a la API DELETE Object o configurar el ciclo
de vida (consulte Administrar el ciclo de vida de los objetos (p. 136)) 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.

Denegar de forma explícita

De forma predeterminada, los usuarios no tienen permisos. Sin embargo, a medida que crea usuarios,
añade usuarios a grupos y les concede permisos, es posible que obtengan ciertos permisos que no quería
conceder. 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.

Ejemplo: operaciones de cuenta

La política de usuario del ejemplo siguiente concede el permiso s3:GetAccountPublicAccessBlock


a un usuario. Para todos estos permisos, estableció el valor Resource en "*". Para obtener más
información, consulte Recursos de Amazon S3 (p. 371).

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:GetAccountPublicAccessBlock"
],
"Resource":[
"*"
]
}
]
}

Claves de condición de Amazon S3


El lenguaje de la política de acceso permite especificar las condiciones cuando se conceden permisos.
Para especificar condiciones para cuándo una política surte efecto, puede utilizar el elemento Condition
opcional o el bloque Condition para especificar condiciones para cuando una política está en vigor.
Puede utilizar AWS‐claves generales predefinidas y Amazon S3‐claves específicas para especificar
condiciones en una política de acceso Amazon S3.

En el elemento Condition, 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",

Versión de API 2006-03-01


376
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": [
"public-read"
]
}
}
}
]
}

En el ejemplo, 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.

Temas
• AWS: claves de condición generales (p. 377)
• Amazon S3: claves de condición específica (p. 378)
• Ejemplos: claves de condición de Amazon S3 para operaciones de objetos (p. 379)
• Ejemplos: Claves de condición de Amazon S3 para operaciones de bucket (p. 384)

AWS: claves de condición generales

AWS proporciona un conjunto de claves comunes admitidas por todos los servicios de AWS que admiten
políticas. Estas claves se denominan claves generales de AWS y usan el prefijo aws:. Para ver una
lista completa de claves de condición generales de AWS, consulte Claves de AWS disponibles para
condiciones en la Guía del usuario de IAM.

Puedes usar las teclas de condición generales de AWS en Amazon S3. 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 intervalo específico de direcciones IP (192.0.2.0.*), a menos que la dirección IP
sea 192.0.2.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/*",

Versión de API 2006-03-01


377
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Condition" : {
"IpAddress" : {
"aws:SourceIp": "192.0.2.0/24"
},
"NotIpAddress" : {
"aws:SourceIp": "192.0.2.188/32"
}
}
}
]
}

También puede usar otras claves de condición generales de AWS en las políticas Amazon S3. Por
ejemplo, puede especificar las claves de condición aws:sourceVpce y aws:sourceVpc en las políticas
de bucket para los puntos de enlace de la VPC. Para ver ejemplos, consulte Ejemplo de políticas de bucket
para puntos de enlace de la VPC para Amazon S3 (p. 449).

Amazon S3: claves de condición específica


Puede usar las claves de condición de Amazon S3 con acciones de Amazon S3 específicas. 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. Las claves de condición específicas de Amazon S3 indican el
comportamiento de los encabezados de solicitud con el mismo nombre. Para obtener una lista completa
de claves de condición específicas de Amazon S3, consulte Acciones, recursos y claves de condiciones de
Amazon S3 (p. 388).

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.

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. 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:.

{
"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"]
}
}
}
]
}

Versión de API 2006-03-01


378
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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 de
Amazon S3 s3:CreateBucket. Sin embargo, no es adecuado incluir una condición en una
política que concede 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 Amazon S3 no válida
semánticamente, no se reportará ningún error porque IAM no puede validar condiciones de
Amazon S3.

Ejemplos: claves de condición de Amazon S3 para operaciones de objetos


Esta sección proporciona ejemplos que muestran cómo puede utilizar claves de condición específicas de
Amazon S3 para operaciones de objetos. Para obtener una lista completa de acciones, claves de condición
y recursos de Amazon S3 que puede especificar en las directivas, consulte Acciones, recursos y claves de
condiciones de Amazon S3 (p. 388).

Varias de las directivas de ejemplo muestran cómo se pueden utilizar las claves de condiciones con las
operaciones PUT Object . La operación PUT Object permite encabezados específicos para la lista de
control de acceso (ACL) que puede utilizar para conceder permisos basados en la ACL. Con estas claves,
el propietario del bucket puede configurar una condición para solicitar permisos de acceso específicos
cuando el usuario carga un objeto. También puede conceder permisos basados en – con la operación
PutObjectAcl. Para obtener más información, consulte PutObjectAcl en la Amazon Simple Storage Service
API Reference de Amazon S3. 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. 475).

Ejemplo 1: Concesión de permisos s3:PutObject con una condición que solicita que el propietario
del bucket tenga control total
La operación PUT Object permite encabezados específicos para la lista de control de acceso (ACL) que
puede utilizar para conceder permisos basados en la ACL. Con estas claves, el propietario del bucket
puede configurar una condición para solicitar permisos de acceso específicos cuando el usuario carga un
objeto.

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. Para obtener más información, consulte PUT Object.

Requerir el encabezado x-amz-full-control


Puede requerir 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",

Versión de API 2006-03-01


379
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
}
]
}

Note

En este ejemplo se describe el permiso entre cuentas. No obstante, si Dave (quien recibe el
permiso) pertenece a la cuenta de AWS que posee el bucket, este permiso condicional no es
necesario. Esto se debe a que la cuenta principal a la que pertenece Dave es propietaria de los
objetos que carga el usuario.

Añadir denegación de forma explícita

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 el ejemplo de política de acceso revisado con
denegación explícita añadida.

{
"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"
}
}
}
]
}

Versión de API 2006-03-01


380
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Probar la política con la AWS CLI

Si tiene dos cuentas de AWS, puede probar la política mediante AWS Command Line Interface (AWS CLI).
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. 344).

aws s3api put-object --bucket examplebucket --key HappyFace.jpg --body c:\HappyFace.jpg --


grant-full-control id="AccountA-CanonicalUserID" --profile AccountBUserProfile

Requerir el encabezado x-amz-acl

Puede solicitar que el encabezado x-amz-acl con una ACL predefinida 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:

Versión de API 2006-03-01


381
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• 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 de sourcebucket; por ejemplo, sourcebucket/
example.jpg.

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/*"
}
}
}
]
}

Probar la política con la AWS CLI

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. 344).

aws s3api copy-object --bucket examplebucket --key HappyFace.jpg


--copy-source examplebucket/public/PublicHappyFace1.jpg --profile AccountADave

Conceder permiso para copiar solo un objeto específico

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": {

Versión de API 2006-03-01


382
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"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. En este caso,
Dave tiene que saber el ID de versión exacta del objeto para recuperar el objeto.

Para obtener más información, consulte GetObject en Amazon Simple Storage Service API Reference.

{
"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"
}
}
}
]
}

Probar la política con la AWS CLI

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 restringir las cargas de objetos a una clase de
almacenamiento específica, el administrador de cuenta A puede utilizar la clave de condición s3:x-amz-
storage-class, como se muestra en la siguiente política de bucket de ejemplo.

Versión de API 2006-03-01


383
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:PutObject",
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-storage-class": [
"STANDARD_IA"
]
}
}
}
]
}

Ejemplo 6: Conceder permisos basados en etiquetas de objeto


Para obtener ejemplos sobre cómo utilizar claves de condición de etiquetado de objetos con operaciones
de Amazon S3, consulte Etiquetar objetos y políticas de control de acceso (p. 130).

Ejemplos: Claves de condición de Amazon S3 para operaciones de bucket


Esta sección proporciona políticas de ejemplo que muestran cómo puede utilizar claves de condición
específicas de Amazon S3 para operaciones de bucket.

Ejemplo 1: Concesión 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:::*"
],

Versión de API 2006-03-01


384
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"Condition": {
"StringLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
}
]
}

Añadir denegación de forma explícita

La política anterior 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 la política anterior.

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. La
siguiente política incluye una declaración de denegación explícita.

{
"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"
}
}
}
]
}

Probar la política con la AWS CLI

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

Versión de API 2006-03-01


385
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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. 344).

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: Obtener una lista de objetos en un bucket con un prefijo específico


Puede utilizar la clave de condición de s3:prefix para limitar la respuesta de la API GET Bucket
(ListObjects) a nombres de clave con un prefijo específico. Si es el propietario del bucket, puede restringir
el permiso para que un usuario pueda enumerar el contenido de un prefijo específico en el bucket. Esta
clave de condición resulta útil si los objetos en el bucket están organizados por prefijos de nombre de
clave. La consola de Amazon S3 utiliza prefijos de nombre de clave para mostrar un concepto de carpeta.
Solo la consola admite el concepto de carpetas; la API de Amazon S3 solo admite buckets y objetos. Para
obtener más información sobre el uso de prefijos y delimitadores para filtrar permisos de acceso, consulte
Tutorial: Controlar el acceso a un bucket con las políticas de usuario (p. 456).

Por ejemplo, tiene dos objetos con nombres de clave public/object1.jpg y public/object2.jpg,
la consola muestra los objetos en la carpeta public. En la API de Amazon S3, estos son objetos con
prefijos, no objetos en carpetas. Sin embargo, en la API de Amazon S3, si organiza las claves de objetos,
puede conceder el permiso s3:ListBucket con la condición s3:prefix que permitirá al usuario
obtener una lista de nombres de clave con esos prefijos específicos.

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. Para
obtener más información acerca de otras claves de condición que puede utilizar con la API GET Bucket
(ListObjects), consulte ListObjects.

Política de usuario de

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",

Versión de API 2006-03-01


386
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"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,
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. Sin embargo, 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.

Política de bucket

Si añade el elemento Principal a la política de usuario anterior, 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"

Versión de API 2006-03-01


387
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

}
}
}
]
}

Probar la política con la AWS CLI

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. 344).

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:ListBucketVersions, debe conceder el permiso s3:ListBucket en la política
anterior. Este permiso también admite la clave de condición s3:prefix.

Ejemplo 3: Establecer el número máximo de claves


Puede utilizar la clave de condición s3:max-keys para establecer el número máximo de claves que el
solicitante puede devolver en una solicitud GET Bucket (ListObjects) o ListObjectVersions . De forma
predeterminada, la API devuelve hasta 1000 claves. Para obtener una lista de los operadores de condición
numéricos que se pueden utilizar con s3:max-keys y los ejemplos adjuntos, consulte Operadores de
condición numérica en Guía del usuario de IAM.

Acciones, recursos y claves de condiciones de Amazon S3


Amazon S3 (prefijo de servicio: s3) proporciona las claves de contexto de condición, acciones y recursos
específicas de servicios siguientes para su uso en las políticas de permisos de IAM.

Referencias:

• Obtenga información para configurar este servicio.


• Vea una lista de las operaciones de API disponibles para este servicio.
• Obtenga información sobre el modo de proteger este servicio y sus recursos mediante las políticas de
permisos de IAM.

Note

Estamos en proceso de actualización de esta sección. Para ver tablas completas, vuelva a
consultar más adelante este mes.

Temas
• Acciones definidas por Amazon S3 (p. 388)
• Tipos de recurso definidos por Amazon S3 (p. 439)
• Claves de condición de Amazon S3 (p. 439)

Acciones definidas por Amazon S3


Puede especificar las siguientes acciones en el elemento Action de una declaración de política de IAM.
Utilice políticas para conceder permisos para realizar una operación en AWS. Cuando utiliza una acción
en una política, normalmente permite o deniega el acceso a la operación de la API o comandos de la CLI
con el mismo nombre. Sin embargo, en algunos casos, una sola acción controla el acceso a más de una
operación. Asimismo, algunas operaciones requieren varias acciones diferentes.

Versión de API 2006-03-01


388
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

La columna Tipos de recurso indica si la acción admite permisos de nivel de recursos. Si no hay ningún
valor para esta columna, debe especificar todos los recursos ("*") en el elemento Resource de la
instrucción de la política. Si la columna incluye un tipo de recurso, puede especificar un ARN de ese tipo
en una instrucción con dicha acción. Los recursos necesarios se indican en la tabla con un asterisco (*). Si
especifica un ARN de permiso de nivel de recursos en una instrucción mediante esta acción, debe ser de
este tipo. Algunas acciones admiten varios tipos de recursos. Si el tipo de recurso es opcional (no se indica
como obligatorio), puede elegir utilizar uno pero no el otro.

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Anula una carga multiparte. Escritura object*    


AbortMultipartUpload (p. 439)

  s3:DataAccessPointArn
 
(p. 440)

s3:DataAccessPointAccount
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Permite eludir la configuración de Administración


object*    
BypassGovernanceRetention
retención de objetos en modo de de (p. 439)
gobierno. permisos
  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:RequestObjectTag/
<key>
(p. 440)

s3:RequestObjectTagKeys
(p. 440)

s3:authtype
(p. 440)

Versión de API 2006-03-01


389
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-
amz-acl
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:x-amz-
copy-
source
(p. 441)

s3:x-amz-
grant-full-
control
(p. 441)

s3:x-amz-
grant-read
(p. 441)

s3:x-amz-
grant-
read-acp
(p. 441)

s3:x-amz-
grant-write
(p. 441)

s3:x-amz-
grant-
write-acp
(p. 441)

s3:x-amz-
metadata-
directive
(p. 441)

s3:x-amz-
server-
side-
encryption
(p. 441)

Versión de API 2006-03-01


390
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)
s3:x-amz-
server-
side-
encryption-
aws-kms-
key-id
(p. 442)

s3:x-amz-
storage-
class
(p. 442)

s3:x-amz-
website-
redirect-
location
(p. 442)

s3:object-
lock-mode
(p. 441)

s3:object-
lock-retain-
until-date
(p. 441)

s3:object-
lock-
remaining-
retention-
days
(p. 441)

s3:object-
lock-
legal-hold
(p. 441)

Crea un nuevo punto de acceso. Escritura accesspoint*    


CreateAccessPoint (p. 439)

Versión de API 2006-03-01


391
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:locationconstraint
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-
amz-acl
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

CreateBucket Crea un bucket nuevo. Escritura bucket*    


(p. 439)

Versión de API 2006-03-01


392
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:locationconstraint
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-
amz-acl
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:x-amz-
grant-full-
control
(p. 441)

s3:x-amz-
grant-read
(p. 441)

s3:x-amz-
grant-
read-acp
(p. 441)

s3:x-amz-
grant-write
(p. 441)

s3:x-amz-
grant-
write-acp
(p. 441)

Versión de API 2006-03-01


393
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

CreateJob Crea un nuevo trabajo de Escritura   s3:authtype  


Operaciones por lotes de S3. (p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:RequestJobPriority
(p. 440)

s3:RequestJobOperation
(p. 440)

Elimina el punto de acceso Escritura accesspoint*    


DeleteAccessPointdenominado en el URI. (p. 439)

  s3:DataAccessPointArn
 
(p. 440)

s3:DataAccessPointAccount
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Elimina la política en un punto de Administración


accesspoint*    
DeleteAccessPointPolicy
acceso especificado. de (p. 439)
permisos

Versión de API 2006-03-01


394
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointArn
 
(p. 440)

s3:DataAccessPointAccount
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

DeleteBucket Elimina el bucket denominado en Escritura bucket*    


el URI. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Elimina la política en un bucket Administración


bucket*    
DeleteBucketPolicy
especificado. de (p. 439)
permisos

Versión de API 2006-03-01


395
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Elimina la configuración del sitio Escritura bucket*    


DeleteBucketWebsite
web para un bucket. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


396
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

DeleteObject Elimina la versión nula (si Escritura object*    


existe) de un objeto e inserta un (p. 439)
marcador de eliminación, que se
convierte en la versión actual del   s3:DataAccessPointAccount
 
objeto. (p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Esta aplicación de la operación Etiquetado object*    


DeleteObjectTagging
DELETE utiliza el subrecurso de (p. 439)
etiquetado para quitar todo el
conjunto de etiquetas del objeto   s3:DataAccessPointAccount
 
especificado. (p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


397
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Para quitar una versión Escritura object*    


DeleteObjectVersion
específica de un objeto, debe (p. 439)
ser el propietario del bucket y
debe utilizar el subrecurso de   s3:DataAccessPointAccount
 
versionId. (p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:versionid
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

DELETE Object tagging (una Etiquetado object*    


DeleteObjectVersionTagging
versión específica del objeto) (p. 439)

Versión de API 2006-03-01


398
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:versionid
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

DescribeJob Recupera los parámetros de Lectura job*    


configuración y el estado de un (p. 439)
trabajo de Operaciones por lotes
de S3.   s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


399
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Esta implementación de Lectura bucket*    


GetAccelerateConfiguration
la operación GET utiliza el (p. 439)
subrecurso de aceleración para
volver al estado de Transfer   s3:authtype  
Acceleration de un bucket, (p. 440)
que puede estar habilitado o
suspendido. s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Recupera los metadatos del Lectura   s3:DataAccessPointAccount


 
GetAccessPoint punto de acceso. (p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la política de un punto Lectura accesspoint*    


GetAccessPointPolicy
de acceso especificado. (p. 439)

Versión de API 2006-03-01


400
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Recupera el estado de la Lectura accesspoint*    


GetAccessPointPolicyStatus
política de un punto de acceso (p. 439)
específico.
  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


401
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Recupera la configuración Lectura   s3:authtype  


GetAccountPublicAccessBlock
PublicAccessBlock de una (p. 440)
cuenta de AWS.
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Esta implementación de la Lectura bucket*    


GetAnalyticsConfiguration
operación GET devuelve (p. 439)
una configuración de análisis
(identificada por el ID de   s3:authtype  
configuración de análisis) del (p. 440)
bucket.
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

GetBucketAcl Devuelve la lista de control de Lectura bucket*    


acceso (ACL) de un bucket. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la información de Lectura bucket*    


GetBucketCORS configuración CORS establecida (p. 439)
para el bucket.

Versión de API 2006-03-01


402
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la región de un bucket. Lectura bucket*    


GetBucketLocation (p. 439)

Devuelve el estado de registro Lectura bucket*    


GetBucketLoggingde un bucket y los permisos que (p. 439)
los usuarios tienen para ver y
modificar dicho estado.   s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la configuración de Lectura bucket*    


GetBucketNotification
notificaciones de un bucket. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Configuración de Bloqueo de Lectura bucket*    


GetBucketObjectLockConfiguration
objetos GET para un bucket (p. 439)
específico

Versión de API 2006-03-01


403
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

Devuelve la política de un bucket Lectura bucket*    


GetBucketPolicy especificado. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Recupera el estado de una Lectura bucket*    


GetBucketPolicyStatus
política de bucket de S3 (p. 439)
específico, que indica si el bucket
es público.   s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Recupera la configuración Lectura bucket*    


GetBucketPublicAccessBlock
PublicAccessBlock de un bucket (p. 439)
de S3 específico.

Versión de API 2006-03-01


404
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la configuración del Lectura bucket*    


GetBucketRequestPayment
pago de la solicitud de un bucket. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve el conjunto de Lectura bucket*    


GetBucketTaggingetiquetas asociado al bucket. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve el estado del control de Lectura bucket*    


GetBucketVersioning
versiones de un bucket. (p. 439)

Versión de API 2006-03-01


405
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la configuración del Lectura bucket*    


GetBucketWebsitesitio web asociada a un bucket. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la información Lectura bucket*    


GetEncryptionConfiguration
de configuración de cifrado (p. 439)
establecida en el bucket.
  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


406
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Esta implementación de la Lectura bucket*    


GetInventoryConfiguration
operación GET devuelve una (p. 439)
configuración de inventario
(identificada por el ID de   s3:authtype  
configuración de inventario) del (p. 440)
bucket.
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la información de Lectura bucket*    


GetLifecycleConfiguration
configuración de ciclo de vida (p. 439)
establecida en el bucket.
  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Obtiene una configuración Lectura bucket*    


GetMetricsConfiguration
para las métricas de solicitud (p. 439)
de CloudWatch (especificada
por el ID de configuración de   s3:authtype  
métricas) desde el bucket. (p. 440)
Tenga en cuenta que esto no
incluye las métricas diarias de s3:signatureage
almacenamiento. (p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

GetObject Recupera objetos de Amazon S3. Lectura object*    


(p. 439)

Versión de API 2006-03-01


407
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

GetObjectAcl Devuelve la lista de control de Lectura object*    


acceso (ACL) de un objeto. (p. 439)

Versión de API 2006-03-01


408
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

GET Object Legal Hold para un Lectura object*    


GetObjectLegalHold
objeto específico. (p. 439)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

GET Object Legal Hold para un Lectura object*    


GetObjectRetention
objeto específico. (p. 439)

Versión de API 2006-03-01


409
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Esta implementación de la Lectura object*    


GetObjectTaggingoperación GET devuelve las (p. 439)
etiquetas asociadas a un
objeto. Puede enviar la solicitud   s3:DataAccessPointAccount
 
GET frente al subrecurso de (p. 440)
etiquetado asociado al objeto.
s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

devuelve los archivos torrent de Lectura object*    


GetObjectTorrent un bucket. (p. 439)

Versión de API 2006-03-01


410
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Para devolver una versión Lectura object*    


GetObjectVersion diferente, utilice el subrecurso de (p. 439)
versionId.
  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:versionid
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Para devolver información de Lectura object*    


GetObjectVersionAcl
ACL sobre una versión diferente, (p. 439)
utilice el subrecurso de versionId.

Versión de API 2006-03-01


411
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:versionid
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Permiso ejercido por la Lectura object*    


GetObjectVersionForReplication
replicación de S3. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

GET Object tagging (para una Lectura object*    


GetObjectVersionTagging
versión específica del objeto) (p. 439)

Versión de API 2006-03-01


412
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:versionid
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Para devolver archivos Torrent Lectura object*    


GetObjectVersionTorrent
sobre una versión diferente, (p. 439)
utilice el subrecurso de versionId.
  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:versionid
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve la información de Lectura bucket*    


GetReplicationConfiguration
configuración de replicación (p. 439)
establecida en el bucket.

Versión de API 2006-03-01


413
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Enumera los puntos de acceso. Lectura   s3:authtype  


ListAccessPoints (p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Devuelve una lista de todos List   s3:authtype  


ListAllMyBuckets los buckets pertenecientes al (p. 440)
remitente autenticado de la
solicitud. s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

ListBucket Devuelve algunos de los objetos List bucket*    


de un bucket o todos ellos (hasta (p. 439)
1 000).

Versión de API 2006-03-01


414
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:delimiter
(p. 440)

s3:max-
keys
(p. 440)

s3:prefix
(p. 441)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Muestra una lista de cargas Lectura bucket*    


ListBucketMultipartUploads
multiparte en curso. (p. 439)

Versión de API 2006-03-01


415
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Usa el subrecurso de versiones Lectura bucket*    


ListBucketVersions
para enumerar los metadatos (p. 439)
de todas las versiones de los
objetos de un bucket.

Versión de API 2006-03-01


416
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:delimiter
(p. 440)

s3:max-
keys
(p. 440)

s3:prefix
(p. 441)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

ListJobs Muestra una lista de trabajos Lectura   s3:authtype  


actuales y trabajos que han (p. 440)
finalizado recientemente.
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Muestra las partes que se Lectura object*    


ListMultipartUploadParts
han cargado para una carga (p. 439)
multiparte específica.

Versión de API 2006-03-01


417
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Permiso ejercido por la Administración


object*    
ObjectOwnerOverrideToBucketOwner
replicación de S3. de (p. 439)
permisos
  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


418
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Esta implementación de Escritura bucket*    


PutAccelerateConfiguration
la operación PUT utiliza el (p. 439)
subrecurso de aceleración
para establecer el estado de   s3:authtype  
Transfer Acceleration de un (p. 440)
bucket existente.
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Agrega o reemplaza una política Administración


accesspoint*    
PutAccessPointPolicy
de datos en un punto de acceso. de (p. 439)
permisos
  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


419
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Crea o modifica la configuración Administración


  s3:authtype  
PutAccountPublicAccessBlock
PublicAccessBlock en una de (p. 440)
cuenta de AWS. permisos
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Esta implementación de la Escritura bucket*    


PutAnalyticsConfiguration
operación PUT agrega una (p. 439)
configuración de análisis
(identificada por el ID de análisis)   s3:authtype  
al bucket. Puede tener hasta (p. 440)
1 000 configuraciones de análisis
por bucket. s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

PutBucketAcl Establece los permisos en un Administración


bucket*    
bucket existente con listas de de (p. 439)
control de acceso (ACL). permisos

Versión de API 2006-03-01


420
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-
amz-acl
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:x-amz-
grant-full-
control
(p. 441)

s3:x-amz-
grant-read
(p. 441)

s3:x-amz-
grant-
read-acp
(p. 441)

s3:x-amz-
grant-write
(p. 441)

s3:x-amz-
grant-
write-acp
(p. 441)

Establece la configuración CORS Escritura bucket*    


PutBucketCORS para el bucket. (p. 439)

Versión de API 2006-03-01


421
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Establece los parámetros de Escritura bucket*    


PutBucketLoggingregistro para un bucket. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Le permite recibir notificaciones Escritura bucket*    


PutBucketNotification
cuando se producen ciertos (p. 439)
eventos en su bucket.
  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Configuración de Bloqueo Escritura bucket*    


PutBucketObjectLockConfiguration
de objetos PUT en un bucket (p. 439)
específico

Versión de API 2006-03-01


422
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

Agrega a o sustituye una política Administración


bucket*    
PutBucketPolicy en un bucket. de (p. 439)
permisos
  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Crea o modifica la configuración Administración


bucket*    
PutBucketPublicAccessBlock
PublicAccessBlock en un bucket de (p. 439)
de S3 específico. permisos
  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Establece la configuración del Escritura bucket*    


PutBucketRequestPayment
pago de la solicitud de un bucket. (p. 439)

Versión de API 2006-03-01


423
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Agrega un conjunto de etiquetas Etiquetado bucket*    


PutBucketTagginga un bucket existente. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Establece el estado del control Escritura bucket*    


PutBucketVersioning
de versiones de un bucket (p. 439)
existente.
  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Establece la configuración del Escritura bucket*    


PutBucketWebsitesitio web que está especificado (p. 439)
en el subrecurso del sitio web.

Versión de API 2006-03-01


424
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Establece la configuración de Escritura bucket*    


PutEncryptionConfiguration
cifrado para el bucket. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Esta implementación de la Escritura bucket*    


PutInventoryConfiguration
operación PUT agrega una (p. 439)
configuración de inventario
(identificada por el ID de   s3:authtype  
inventario) al bucket. Puede tener (p. 440)
hasta 1 000 configuraciones de
inventario por bucket. s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


425
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Crea una nueva una Escritura bucket*    


PutLifecycleConfiguration
configuración de ciclo de vida (p. 439)
para el bucket o sustituye una
configuración de ciclo de vida   s3:authtype  
existente. (p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Establece o actualiza una Escritura bucket*    


PutMetricsConfiguration
configuración para las métricas (p. 439)
de solicitud de CloudWatch
(especificada por el ID de   s3:authtype  
configuración de métricas) desde (p. 440)
el bucket.
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

PutObject Agrega un objeto a un bucket. Escritura object*    


(p. 439)

Versión de API 2006-03-01


426
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:RequestObjectTag/
<key>
(p. 440)

s3:RequestObjectTagKeys
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-
amz-acl
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:x-amz-
copy-
source
(p. 441)

s3:x-amz-
grant-full-
control
(p. 441)

s3:x-amz-
grant-read
(p. 441)

s3:x-amz-
grant-
read-acp
(p. 441)

Versión de API 2006-03-01


427
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)
s3:x-amz-
grant-write
(p. 441)

s3:x-amz-
grant-
write-acp
(p. 441)

s3:x-amz-
metadata-
directive
(p. 441)

s3:x-amz-
server-
side-
encryption
(p. 441)

s3:x-amz-
server-
side-
encryption-
aws-kms-
key-id
(p. 442)

s3:x-amz-
storage-
class
(p. 442)

s3:x-amz-
website-
redirect-
location
(p. 442)

s3:object-
lock-mode
(p. 441)

s3:object-
lock-retain-
until-date
(p. 441)

s3:object-
lock-
remaining-
retention-
days
(p. 441)

Versión de API 2006-03-01


428
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)
s3:object-
lock-
legal-hold
(p. 441)

PutObjectAcl Establece los permisos de la lista Administración


object*    
de control de acceso (ACL) para de (p. 439)
un objeto que ya existe en un permisos
bucket.

Versión de API 2006-03-01


429
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-
amz-acl
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:x-amz-
grant-full-
control
(p. 441)

s3:x-amz-
grant-read
(p. 441)

s3:x-amz-
grant-
read-acp
(p. 441)

s3:x-amz-
grant-write
(p. 441)

s3:x-amz-
grant-
write-acp
(p. 441)

Versión de API 2006-03-01


430
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)
s3:x-amz-
storage-
class
(p. 442)

PUT Object Legal Hold en un Escritura object*    


PutObjectLegalHold
objeto específico. (p. 439)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:object-
lock-
legal-hold
(p. 441)

PUT Object Retention en un Escritura object*    


PutObjectRetention
objeto específico. (p. 439)

Versión de API 2006-03-01


431
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:object-
lock-mode
(p. 441)

s3:object-
lock-retain-
until-date
(p. 441)

s3:object-
lock-
remaining-
retention-
days
(p. 441)

Versión de API 2006-03-01


432
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

Esta aplicación de la operación Etiquetado object*    


PutObjectTaggingPUT utiliza el subrecurso de (p. 439)
etiquetado para agregar un
conjunto de etiquetas a un objeto   s3:DataAccessPointAccount
 
existente. (p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:RequestObjectTag/
<key>
(p. 440)

s3:RequestObjectTagKeys
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

La ACL de un objeto se Administración


object*    
PutObjectVersionAcl
establece en el nivel de versión de (p. 439)
del objeto. permisos

Versión de API 2006-03-01


433
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:versionid
(p. 441)

s3:x-
amz-acl
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:x-amz-
grant-full-
control
(p. 441)

s3:x-amz-
grant-read
(p. 441)

s3:x-amz-
grant-
read-acp
(p. 441)

s3:x-amz-
grant-write
(p. 441)

s3:x-amz-
grant-

Versión de API 2006-03-01


434
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)
write-acp
(p. 441)

s3:x-amz-
storage-
class
(p. 442)

PUT Object tagging (para una Etiquetado object*    


PutObjectVersionTagging
versión específica del objeto) (p. 439)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:ExistingObjectTag/
<key>
(p. 440)

s3:RequestObjectTag/
<key>
(p. 440)

s3:RequestObjectTagKeys
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:versionid
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Versión de API 2006-03-01


435
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

En un bucket con control de Escritura bucket*    


PutReplicationConfiguration
versiones habilitado, esta (p. 439)
operación crea una nueva
configuración de replicación (o   s3:authtype  
sustituye una existente, si la (p. 440)
hay).
s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Permiso ejercido por la Escritura object*    


ReplicateDelete replicación de S3. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Permiso ejercido por la Escritura object*    


ReplicateObject replicación de S3. (p. 439)

Versión de API 2006-03-01


436
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:x-amz-
server-
side-
encryption
(p. 441)

s3:x-amz-
server-
side-
encryption-
aws-kms-
key-id
(p. 442)

ReplicateTags Permiso ejercido por la Etiquetado object*    


replicación de S3. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

RestoreObject Restaura una copia temporal de Escritura object*    


un objeto archivado. (p. 439)

Versión de API 2006-03-01


437
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:DataAccessPointAccount
 
(p. 440)

s3:DataAccessPointArn
(p. 440)

s3:AccessPointNetworkOrigin
(p. 440)

s3:authtype
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

Actualiza la prioridad de un Escritura job*    


UpdateJobPrioritytrabajo existente. (p. 439)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:RequestJobPriority
(p. 440)

s3:ExistingJobPriority
(p. 440)

s3:ExistingJobOperation
(p. 440)

Actualiza el estado del trabajo Escritura job*    


UpdateJobStatus especificado. (p. 439)

Versión de API 2006-03-01


438
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Actions Descripción Nivel de Tipos de Claves de Acciones


acceso recursos condición dependientes
(*necesarios)

  s3:authtype  
(p. 440)

s3:signatureage
(p. 441)

s3:signatureversion
(p. 441)

s3:x-amz-
content-
sha256
(p. 441)

s3:ExistingJobPriority
(p. 440)

s3:ExistingJobOperation
(p. 440)

s3:JobSuspendedCause
(p. 440)

Tipos de recurso definidos por Amazon S3


Los siguientes tipos de recurso están definidos por este servicio y se pueden utilizar en el
elemento Resource de las instrucciones de política de permisos de IAM. Cada acción de la tabla
Acciones (p. 388) identifica los tipos de recurso que se pueden especificar con dicha acción. Un tipo de
recurso también puede definir qué claves de condición se pueden incluir en una política. Estas claves se
muestran en la última columna de la tabla.

Tipos de ARN Claves de condición


recurso

accesspoint arn:${Partition}:s3:${Region}:  
${Account}:accesspoint/${AccessPointName}

bucket arn:${Partition}:s3:::${BucketName}  

object arn:${Partition}:s3:::${BucketName}/  
${ObjectName}

job arn:${Partition}:s3:${Region}:  
${Account}:job/${JobId}

Claves de condición de Amazon S3


Amazon S3 define las siguientes claves de condiciones que se pueden utilizar en el elemento Condition
de una política de IAM. Puede utilizar estas claves para ajustar más las condiciones en las que se aplica la
instrucción de política.

Para ver las claves de condición globales que están disponibles para todos los servicios, consulte Claves
de condición globales disponibles en la Referencia de políticas de IAM.

Versión de API 2006-03-01


439
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Claves de Descripción Tipo


condición

Es el tipo de red desde el que puede recibir tráfico el punto de Cadena


s3:AccessPointNetworkOrigin
acceso involucrado en la solicitud.

Es el ID de cuenta de AWS de la cuenta propietaria del Cadena


s3:DataAccessPointAccount
punto de acceso de operaciones de datos involucrado en la
solicitud.

Es el ARN del punto de acceso de operaciones de datos Cadena


s3:DataAccessPointArn
involucrado en la solicitud.

Filtra el acceso a la actualización de la prioridad de trabajo Cadena


s3:ExistingJobOperation
por operación.

Filtra el acceso a la cancelación de trabajos existentes por Numérico


s3:ExistingJobPriorityrango de prioridad.

Permite verificar que una etiqueta de objeto existente tenga Cadena


s3:ExistingObjectTag/una clave y un valor específicos para la etiqueta.
<key>

Filtra el acceso a la cancelación de trabajos suspendidos por Cadena


s3:JobSuspendedCause
una causa de suspensión de trabajo específica (por ejemplo,
AWAITING_CONFIRMATION).

Permite restringir a los usuarios la creación de buckets en Cadena


s3:LocationConstraintsolo una región específica.

Filtra el acceso a la actualización de la prioridad de trabajo Cadena


s3:RequestJobOperation
por operación.

Filtra el acceso a la creación de nuevos trabajos por rango de Numérico


s3:RequestJobPriorityprioridad.

Restringe las claves y valores de etiqueta que quiera permitir Cadena


s3:RequestObjectTag/en objetos.
<key>

Restringe las claves de etiqueta que quiera permitir en Cadena


s3:RequestObjectTagKeys
objetos.

s3:VersionId Permite limitar el permiso para la acción Cadena


s3:PutObjectVersionTagging a una versión específica de
objeto.

s3:authtype Restringe las solicitudes entrantes a un método de Cadena


autenticación específico.

s3:delimiter Permite solicitar al usuario que especifique el parámetro Cadena


delimitador en la solicitud de versiones de GET Bucket
Object.

Permite restringir al usuario la creación de un bucket en solo Cadena


s3:locationconstraint una región específica.

s3:max-keys Permite limitar el número de claves que devuelve Amazon S3 Numérico


como respuesta a las solicitudes de ListBucket al solicitar al
usuario que especifique el parámetro de claves máximas.

Versión de API 2006-03-01


440
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Claves de Descripción Tipo


condición

s3:object-lock- Permite aplicar el estado de retención legal del objeto Cadena


legal-hold especificado.

s3:object-lock- Permite aplicar el modo de retención del objeto especificado. Cadena


mode

s3:object- Permite aplicar el cumplimiento de un objeto en relación al Cadena


lock-remaining- resto de días de retención.
retention-days

s3:object-lock- Permite aplicar una fecha de finalización de la retención Cadena


retain-until-date específica.

s3:prefix Permite limitar la respuesta de la API de ListBucket a los Cadena


nombres de clave con prefijos específicos.

s3:signatureage Identifica el periodo, en milisegundos, que una firma es válida Numérico


en una solicitud autenticada.

Identifica la versión de AWS Signature compatible con las Cadena


s3:signatureversion solicitudes autenticadas.

s3:versionid Filtra el acceso por una versión de objeto específica. Cadena

s3:x-amz-acl Permite solicitar permisos de acceso específicos al cargar un Cadena


objeto.

s3:x-amz-content- No permite el contenido sin firmar en el bucket. Cadena


sha256

s3:x-amz-copy- Permite restringir el origen de la copia a un bucket específico, Cadena


source una carpeta específica en el bucket o un objeto específico en
un bucket.

s3:x-amz-grant- Requiere el encabezado x-amz-grant-full-control (control total) Cadena


full-control en una solicitud.

s3:x-amz-grant- Requiere el encabezado x-amz-grant-read (acceso de lectura) Cadena


read en una solicitud.

s3:x-amz-grant- Requiere el encabezado x-amz-grant-read-acp (permisos de Cadena


read-acp lectura para la ACL) en una solicitud.

s3:x-amz-grant- Requiere el encabezado x-amz-grant-write (acceso de Cadena


write escritura) en una solicitud.

s3:x-amz-grant- Requiere el encabezado x-amz-grant-write-acp (permisos de Cadena


write-acp escritura para la ACL) en una solicitud.

s3:x-amz- Permite aplicar un determinado comportamiento (COPIAR vs. Cadena


metadata-directive SUSTITUIR) cuando se cargan objetos.

s3:x-amz-server- Permite solicitar que el usuario especifique este encabezado Cadena


side-encryption en la solicitud para garantizar que los objetos cargados por el
usuario estén cifrados cuando se guarden.

Versión de API 2006-03-01


441
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Claves de Descripción Tipo


condición

s3:x-amz-server- Requiere una CMK administrada por el cliente de AWS KMS Cadena
side-encryption- específico para el cifrado del lado del servidor.
aws-kms-key-id

s3:x-amz-storage- Filtra el acceso por clase de almacenamiento. Cadena


class

s3:x-amz-website- Filtra el acceso por una ubicación de redireccionamiento de Cadena


redirect-location sitios web específica.

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 Políticas y permisos en Amazon S3 (p. 370).
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. A continuación, 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: Controlar el
acceso a un bucket con las políticas de usuario (p. 456).

Temas
• Concesión de permisos a varias cuentas con condiciones adicionales (p. 442)
• Concesión de permisos de solo lectura a un usuario anónimo (p. 443)
• Restricción del acceso a direcciones IP específicas (p. 443)
• Restricción del acceso a un Referer de HTTP específico (p. 445)
• Concesión de permiso a una OAI de Amazon CloudFront (p. 445)
• Incorporación de una política de bucket para requerir MFA (p. 446)
• 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. 448)
• Concesión de permisos para el inventario de Amazon S3 y el análisis de Amazon S3 (p. 448)
• Ejemplo de políticas de bucket para puntos de enlace de la VPC para Amazon S3 (p. 449)

Concesión de permisos a varias cuentas con condiciones adicionales


En la siguiente política de ejemplo se conceden los permisos s3:PutObject y s3:PutObjectAcl a
varias cuentas de AWS y se requiere que cualquier solicitud de estas operaciones incluya la lista de control

Versión de API 2006-03-01


442
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

de acceso (ACL) predefinida public-read. Para obtener más información, consulte Acciones de Amazon
S3 (p. 374) y Claves de condición de Amazon S3 (p. 376).

{
"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"]}}
}
]
}

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
Acciones de Amazon S3 (p. 374)). 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. Antes de utilizar una política de bucket para conceder permiso de solo lectura a un
usuario anónimo, debe deshabilitar la configuración de bloqueo de acceso público para su bucket. Para
obtener más información, consulte Configurar permisos para el acceso a sitios web (p. 624).

{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PublicRead",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}

Warning

Tenga cuidado al conceder acceso anónimo a su bucket de Amazon S3 o al deshabilitar la


configuración de bloqueo de acceso público. Al otorgar acceso anónimo, cualquier persona puede
acceder a su bucket. Le recomendamos que no conceda nunca acceso anónimo a su bucket de
Amazon S3 a menos que lo necesite específicamente, por ejemplo con alojamiento de sitios web
estáticos (p. 618).

Restricción del acceso a direcciones IP específicas


El siguiente ejemplo deniega los permisos a cualquier usuario para realizar cualquier operación de
Amazon S3 en objetos en el bucket de S3 especificado, a menos que la solicitud se origine en el rango de
direcciones IP especificado en la condición.

Esta instrucción identifica el intervalo 54.240.143.0/24 como el intervalo de direcciones IP permitidas en


formato de Protocolo de Internet versión 4 (IPv4).

El bloque Condition utiliza la condición 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,

Versión de API 2006-03-01


443
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

consulte Claves de condición de Amazon S3 (p. 376). Los valores de IPv4 aws:SourceIp utilizan la
notación CIDR estándar. Para obtener más información, consulte Referencia de elementos de la política
JSON de IAM en la Guía del usuario de IAM.
Important

Sustituya el intervalo de direcciones IP del ejemplo con un valor adecuado para su caso de uso
antes de utilizar esta política. De lo contrario, perderá la capacidad de acceder a su bucket.

{
"Version": "2012-10-17",
"Id": "S3PolicyId1",

"Statement": [

{
"Sid": "IPAllow",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"NotIpAddress": {"aws:SourceIp": "54.240.143.0/24"}

}
}
]
}

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.
Important

Sustituya los intervalos de direcciones IP del ejemplo con valores adecuados para su caso de uso
antes de utilizar esta política. De lo contrario, puede perder la capacidad de acceder a su bucket.

{
"Id":"PolicyId2",
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AllowIPmix",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:*",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {

Versión de API 2006-03-01


444
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

"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 Referer de HTTP específico


Suponga que tiene un sitio web con un nombre de dominio (www.example.com o example.com) con
enlaces a fotografías y vídeos almacenados en su bucket de Amazon S3, examplebucket. De forma
predeterminada, todos los recursos de Amazon 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.

{
"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.

Concesión de permiso a una OAI de Amazon CloudFront


El siguiente ejemplo de política de buckets concede un permiso de identidad de acceso de origen (OAI)
de CloudFront para obtener (leer) todos los objetos del bucket de Amazon S3. Puede utilizar una OAI de
CloudFront para permitir a los usuarios acceder a los objetos del bucket a través de CloudFront, pero no
directamente a través de Amazon S3. Para obtener más información, consulte Restricción del acceso a
contenido de Amazon S3 utilizando una identidad de acceso de origen en la Guía para desarrolladores de
Amazon CloudFront.

La política siguiente utiliza el ID de la OAI como Principal de la política. Para obtener más información
acerca del uso de políticas de buckets de S3 para conceder acceso a una OAI de CloudFront, consulte
Uso de políticas de buckets de Amazon S3 en la Guía para desarrolladores de Amazon CloudFront.

Para usar este ejemplo:

Versión de API 2006-03-01


445
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• Sustituya EH1HDMB1FH2TC por el ID de la OAI. Para buscar el ID de la OAI, consulte la página


Origin Access Identity (Identidad de acceso de origen) en la consola de CloudFront o utilice
ListCloudFrontOriginAccessIdentities en la API de CloudFront.
• Sustituya aws-example-bucket por el nombre del bucket de Amazon S3.

{
"Version": "2012-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access
Identity EH1HDMB1FH2TC"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::aws-example-bucket/*"
}
]
}

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, consulte AWS Multi-Factor Authentication.
Puede solicitar MFA para cualquier solicitud de acceso a sus recursos de Amazon S3.

Puede obligar a usar el requisito MFA mediante la clave aws:MultiFactorAuthAge en una política de
bucket. Los usuarios de AWS Identity and Access Management (IAM) pueden acceder a los recursos de
Amazon S3 utilizando credenciales temporales emitidas por AWS Security Token Service (AWS STS).
Usted facilita el código de MFA al realizar la solicitud al AWS STS.

Cuando Amazon S3 recibe una solicitud con autenticación multifactor, la clave


aws:MultiFactorAuthAge proporciona 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 se autentica mediante MFA. Para obtener más información acerca de
MFA, consulte Uso de la autenticación multifactor (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


446
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 permite el permiso s3:GetObject en un bucket (examplebucket) para todo
el mundo. Otra instrucción limita el acceso a la carpeta examplebucket/taxdocuments en el bucket
solicitando la 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


447
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 Claves de condición de Amazon S3 (p. 376)).

{
"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 Amazon 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 Amazon S3 y cuando configura la exportación de análisis. Para obtener más
información, consulte Inventario de Amazon S3 (p. 499) y Análisis de Amazon S3: análisis de clases de
almacenamiento (p. 279).

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


448
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
Amazon 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 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 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 a través de las
políticas de bucket de Amazon 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. 450)
• Restricción del acceso a una VPC específica (p. 450)
• Recursos relacionados (p. 451)

Important
Al aplicar las políticas de bucket de Amazon S3 para los puntos de enlace de la VPC que se
describen en esta sección, puede bloquear el acceso al bucket sin querer. Los permisos de bucket

Versión de API 2006-03-01


449
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

pensados 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 corregir este problema, consulte Mi política de bucket tiene una VPC o un ID de punto de
enlace de la VPC incorrectos. ¿Cómo puedo corregir la política para tener acceso al bucket? 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 Amazon S3 que restringe el acceso a un bucket
específico, awsexamplebucket1, solo desde el punto de enlace 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) para el recurso de punto de
enlace de la VPC, solo el ID del punto de enlace de la VPC. Para obtener más información acerca del uso
de las condiciones en una política, consulte Claves de condición de Amazon S3 (p. 376).
Important

• Antes de utilizar la política de ejemplo siguiente, reemplace el ID del punto de enlace de la VPC
por un valor adecuado para su caso de uso. De lo contrario, no podrá acceder a su bucket.
• Esta política deshabilita el acceso a la consola al bucket especificado, ya que las solicitudes de
consola no se originan en el punto de enlace de la VPC especificado.

{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::awsexamplebucket1",
"arn:aws:s3:::awsexamplebucket1/*"],
"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 Amazon 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 awsexamplebucket1 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.
Important

• Antes de utilizar la política de ejemplo siguiente, reemplace el ID de VPC por un valor adecuado
para su caso de uso. De lo contrario, no podrá acceder a su bucket.
• Esta política deshabilita el acceso a la consola al bucket especificado, ya que las solicitudes de
consola no se originan en la VPC especificada.

Versión de API 2006-03-01


450
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

{
"Version": "2012-10-17",
"Id": "Policy1415115909153",
"Statement": [
{
"Sid": "Access-to-specific-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::awsexamplebucket1",
"arn:aws:s3:::awsexamplebucket1/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbb22"
}
}
}
]
}

Recursos relacionados

• Ejemplos de política de bucket (p. 442)


• 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 Políticas y
permisos en Amazon S3 (p. 370).

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: Controlar el acceso a un bucket con las políticas de usuario (p. 456).

Temas
• Permiso para que el usuario de IAM tenga acceso a uno de los buckets (p. 451)
• Permiso para que cada usuario de IAM tenga acceso a una carpeta en un bucket (p. 452)
• Permiso para que un grupo tenga una carpeta compartida en Amazon S3 (p. 455)
• Permiso para que sus usuarios lean objetos en una parte del bucket corporativo (p. 455)
• Permiso para que un socio coloque archivos en una parte específica del bucket corporativo (p. 456)
• Tutorial: Controlar el acceso a un bucket con las políticas de usuario (p. 456)

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: Controlar el acceso a un bucket con las políticas de
usuario (p. 456).

Versión de API 2006-03-01


451
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:ListAllMyBuckets"
],
"Resource":"arn:aws:s3:::*"
},
{
"Effect":"Allow",
"Action":[
"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/*"
}

Versión de API 2006-03-01


452
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

]
}

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.

{
"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: Controlar el acceso a un bucket con las políticas
de usuario (p. 456).

{
"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":["/"]
}
}

Versión de API 2006-03-01


453
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

},
{
"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",
"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

Versión de API 2006-03-01


454
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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
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/*"
}
]

Versión de API 2006-03-01


455
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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ñada
una instrucción que deniega explícitamente el permiso para cualquier permiso de Amazon S3, excepto
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: Controlar el 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,
puede crear un bucket con carpetas. A continuación, cree usuarios de AWS Identity and Access
Management (IAM) en la cuenta de AWS y conceda a estos usuarios permisos graduales en el bucket de
Amazon S3 y sus carpetas.

Temas
• Conceptos básicos de buckets y carpetas (p. 457)
• Resumen del tutorial (p. 459)
• Prepararse para el tutorial (p. 459)
• Paso 1: Crear un bucket (p. 460)
• Paso 2: Crear usuarios y un grupo de IAM (p. 461)
• Paso 3: Comprobar que los usuarios de IAM no tienen permisos (p. 461)
• Paso 4: Conceder permisos en el nivel de grupo (p. 461)
• Paso 5: Conceder permisos específicos al usuario Alice de IAM (p. 468)

Versión de API 2006-03-01


456
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

• Paso 6: Conceder permisos específicos al usuario Bob de IAM (p. 472)


• Paso 7: Proteger la carpeta privada (p. 472)
• Paso 8: Eliminar (p. 474)
• Recursos relacionados (p. 474)

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.

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


457
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.

Versión de API 2006-03-01


458
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Resumen del tutorial

En este tutorial, creará un bucket con tres carpetas: (Private, Development y Finance).

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.

Prepararse 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

Versión de API 2006-03-01


459
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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: Crear 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
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

Versión de API 2006-03-01


460
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Paso 2: Crear 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: Comprobar que los usuarios de IAM no tienen 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. 460)), 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/.

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: Conceder 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.

Versión de API 2006-03-01


461
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Paso 4.1: Conceder 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. 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:::*"]
}
]
}

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.
Versión de API 2006-03-01
462
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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. 460)), 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: Habilitar a los usuarios para mostrar el contenido en el nivel raíz de un bucket
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.

Note
En este ejemplo se utiliza companybucket a título ilustrativo. Debe utilizar el nombre del bucket
que creó.

Versión de API 2006-03-01


463
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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>
</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.

Versión de API 2006-03-01


464
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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>

La consola muestra las claves de objeto.

Versión de API 2006-03-01


465
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

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


466
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. 460)), 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


467
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: Conceder 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: Conceder permiso al usuario Alice de IAM para mostrar el contenido de la carpeta de
desarrollo

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


468
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. 460)), 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


469
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario

Paso 5.2: Conceder permisos al usuario Alice de IAM para obtener y colocar objetos en la carpeta
de desarrollo

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


470
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. 460)), 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: Denegar permisos de forma explícita al usuario Alice de IAM 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


471
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: Habilitar a los usuarios para mostrar el contenido en el nivel raíz de
un bucket (p. 463).
• 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: Conceder 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: Conceder permisos específicos al
usuario Alice de IAM (p. 468).

Paso 7: Proteger la carpeta privada


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


472
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


473
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: Eliminar
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. 475)
• Administración de las ACL (p. 481)

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 del acceso (p. 326)) 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


474
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

• Introducción a la administración del acceso a los recursos de Amazon S3 (p. 325)


• Directrices para usar las opciones de política de acceso disponibles (p. 339)

Información general de las Access Control Lists (ACL, Listas de


control de acceso)
Temas
• ¿Quién es un beneficiario? (p. 476)
• ¿Qué permisos puedo conceder? (p. 478)
• ACL de muestra (p. 479)
• ACL predefinidas (p. 480)
• Cómo especificar una ACL (p. 481)

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. 476). 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


475
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.

Cuando conceda derechos de acceso, especifique cada beneficiario como par tipo=valor, donde el tipo sea
uno de los siguientes:

• id: si el valor especificado es el ID de usuario canónico de una cuenta de AWS.


• uri: si está otorgando permisos a un grupo predefinido.
• emailAddress: si el valor especificado es la dirección de correo electrónico de una 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)
• Europa (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.

Example Ejemplo: dirección de correo electrónico

Por ejemplo, el encabezado x-amz-grant-read siguiente otorga a las cuentas de AWS identificadas por
direcciones de correo electrónico permisos para leer datos de objeto y sus metadatos:

x-amz-grant-read: emailAddress="xyz@amazon.com", emailAddress="abc@amazon.com"

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

Versión de API 2006-03-01


476
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

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. 327).

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:

• 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. 478).
• 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. 794)) 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.

Versión de API 2006-03-01


477
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

¿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

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. 475) 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
Acciones de Amazon S3 (p. 374)). 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 para usar
las opciones de política de acceso disponibles (p. 339).

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

Versión de API 2006-03-01


478
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
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 asigna a una combinación de permisos
de permisos de política de acceso de política de acceso correspondientes.
correspondientes.

Claves de condición
Cuando concede permisos de directiva de acceso, puede utilizar claves de condición para restringir el valor
de la ACL en un objeto mediante una directiva de bucket. Las claves de contexto siguientes corresponden
a las ACL. Puede utilizar estas claves de contexto para ordenar el uso de una ACL específica en una
solicitud:

• s3:x-amz-grant-read: requerir acceso de lectura.


• s3:x-amz-grant-write: requerir acceso de escritura.
• s3:x-amz-grant-read-acp: requerir acceso de lectura a la ACL del bucket.
• s3:x-amz-grant-write-acp: requerir acceso de escritura a la ACL del bucket.
• s3:x-amz-grant-full-control: requerir control total.
• s3:x-amz-acl: requerir un ACL predefinidas (p. 480).

Por ejemplo, para las directivas que implican encabezados específicos de ACL, consulte Ejemplo 1:
Concesión de permisos s3:PutObject con una condición que solicita que el propietario del bucket tenga
control total (p. 379). Para obtener una lista completa de claves de condición específicas de Amazon S3,
consulte Acciones, recursos y claves de condiciones de Amazon S3 (p. 388).

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/">

Versión de API 2006-03-01


479
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

<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>
<Permission>WRITE</Permission>
</Grant>

</AccessControlList>
</AccessControlPolicy>

ACL predefinidas
Amazon S3 admite un conjunto de concesiones predeterminadas, 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. 476)) obtiene
acceso READ.

Versión de API 2006-03-01


480
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

ACL predefinidas Se aplica a Permisos añadidos a la ACL

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. 794)).

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


Para obtener más información sobre cómo especificar una ACL, consulte estos temas:

• Administración de las ACL en la Consola de administración de AWS (p. 482)


• Administración de ACL con AWS SDK for Java (p. 482)
• Administración de ACL con AWS SDK para .NET (p. 484)
• Administración de ACL con la API de REST (p. 487)

Administración de las ACL


Temas
• Administración de las ACL en la Consola de administración de AWS (p. 482)
• Administración de ACL con AWS SDK for Java (p. 482)
• Administración de ACL con AWS SDK para .NET (p. 484)
• Administración de ACL con la API de REST (p. 487)

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

Versión de API 2006-03-01


481
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

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. 480)), 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 {

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

Versión de API 2006-03-01


482
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

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
• Añadir dos permisos: acceso completo para el propietario y WRITE_ACP (consulte ¿Qué permisos
puedo conceder? (p. 478)) 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 ***";

Versión de API 2006-03-01


483
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

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

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. 829).

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;

Versión de API 2006-03-01


484
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

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)
{
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. 829).

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

Versión de API 2006-03-01


485
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

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

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

Versión de API 2006-03-01


486
Amazon Simple Storage Service Guía del desarrollador
Administración de acceso con ACL

}
catch (Exception e)
{
Console.WriteLine("Exception: " + e.ToString());
}
}
}
}

Administración de ACL con la API de REST


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:

• 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 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

Encabezados de solicitud específicos de la lista de control de acceso (ACL)

Puede utilizar encabezados para conceder permisos basados en listas de control de acceso (ACL). De
forma predeterminada, todos los objetos son privados. Solo el propietario tiene control de acceso total. Al
añadir un objeto nuevo, puede conceder permisos a cuentas individuales de AWS o a grupos predefinidos
de Amazon S3. Estos permisos se añaden a la lista de control de acceso (ACL) del objeto. Para obtener
más información, consulte Uso de ACL.

Con esta operación, puede conceder permisos de acceso mediante uno de estos dos métodos:

• ACL predefinidas (x-amz-acl): Amazon S3 admite un conjunto de ACL conservadas, conocidas como
"ACL predefinidas". Cada ACL predefinida tiene un conjunto predefinido de beneficiarios y permisos.
Para obtener más información, consulte ACL predefinidas (p. 480).
• Permisos de acceso: para conceder permisos de acceso explícitamente a cuentas o grupos específicos
de AWS, utilice los encabezados siguientes. Cada encabezado se asigna a permisos específicos que
Amazon S3 admite en una ACL. Para obtener más información, consulte Información general de las
Access Control Lists (ACL, Listas de control de acceso) (p. 475). En el encabezado, especifique una
lista de beneficiarios que obtienen el permiso específico.
• x-amz-grant-read
• x-amz-grant-write

Versión de API 2006-03-01


487
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

• x-amz-grant-read-acp
• x-amz-grant-write-acp
• x-amz-grant-full-control

Usar Block Public Access de Amazon S3


La función Block Public Access (Bloqueo de acceso público) de Amazon S3 proporciona la configuración
de los puntos de acceso, los buckets y las cuentas, con el fin de ayudarle a administrar el acceso público
a los recursos de Amazon S3. De forma predeterminada, los buckets, puntos de acceso y objetos nuevos
no permiten el acceso público. Sin embargo, los usuarios pueden modificar las políticas de bucket, las
políticas de punto de acceso o los permisos de objeto para permitir el acceso público. La configuración
de S3 Block Public Access anula estas políticas y permisos para poder limitar el acceso público a estos
recursos.

Con 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 la solicitud
se realizó a través de un punto de acceso, Amazon S3 también comprueba la configuración de bloqueo
de acceso público del punto de acceso. 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. Cada configuración se puede aplicar a un
punto de acceso, a un bucket o a una cuenta completa de AWS. Si la configuración de bloqueo de acceso
público para el punto de acceso, el bucket o la cuenta es diferente, Amazon S3 aplicará la combinación
más restrictiva de la configuración del punto de acceso, el bucket y la cuenta.

Cuando Amazon S3 evalúa si una configuración de Block Public Access prohíbe una operación, rechaza
cualquier solicitud que infrinja un punto de acceso, un bucket o una configuración de cuenta.
Note
• Puede habilitar configuraciones de Block Public Access solo para puntos de acceso, 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
• Habilitar Block Public Access en la consola de Amazon S3 (p. 488)
• Configurar Block Public Access (p. 489)
• Qué significa "pública" (p. 492)
• Usar Access Analyzer for S3 para revisar buckets públicos (p. 494)
• Permisos (p. 494)
• Ejemplos (p. 495)

Habilitar 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 puntos de acceso o buckets individuales o a cuentas de AWS completas. En

Versión de API 2006-03-01


488
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

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.

Configurar Block Public Access


S3 Block Public Access proporciona cuatro configuraciones. Puede aplicar estas configuraciones en
cualquier combinación a puntos de acceso o buckets individuales o a cuentas de AWS completas. Si
aplica una configuración a una cuenta, se aplica a todos los buckets y puntos de acceso propiedad de esa
cuenta. Del mismo modo, si aplica una configuración a un bucket, se aplica a todos los puntos de acceso
asociados a ese bucket.

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.

Versión de API 2006-03-01


489
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

Nombre Descripción
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.
Note

Los puntos de acceso no tienen ACL asociadas a ellos. Si aplica esta


configuración a un punto de acceso, actúa como paso a través del
bucket subyacente. Si un punto de acceso tiene esta configuración
habilitada, las solicitudes realizadas a través del punto de acceso se
comportan como si el bucket subyacente tuviera esta configuración
habilitada, independientemente de si el bucket la tiene habilitada o no.

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.
Note

Los puntos de acceso no tienen ACL asociadas a ellos. Si aplica esta


configuración a un punto de acceso, actúa como paso a través del
bucket subyacente. Si un punto de acceso tiene esta configuración
habilitada, las solicitudes realizadas a través del punto de acceso se
comportan como si el bucket subyacente tuviera esta configuración
habilitada, independientemente de si el bucket la tiene habilitada o no.

Versión de API 2006-03-01


490
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

Nombre Descripción

BlockPublicPolicy Si esta opción se establece en TRUE para un bucket, Amazon S3 rechazará las
llamadas a la política de bucket PUT si la política de bucket especificada permite
el acceso público y rechazará las llamadas a la política de punto de acceso PUT
para todos los puntos de acceso del bucket si la política especificada permite el
acceso público. Si se establece esta opción en TRUE para un punto de acceso,
Amazon S3 rechazará las llamadas a la política de punto de acceso PUT y a la
política de bucket PUT que se realicen a través del punto de acceso si la política
especificada (ya sea para el punto de acceso o para el bucket subyacente) es
pública.

Con esta configuración, puede permitir a los usuarios administrar políticas de


punto de acceso y de bucket sin permitirles compartir públicamente el bucket ni
los objetos que contiene. Habilitar esta configuración no afecta a las políticas de
punto de acceso o 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 restringe el acceso a un punto de


RestrictPublicBuckets
acceso o un bucket con una política pública tan solo a los servicios de AWS
y a los usuarios autorizados dentro de la cuenta del propietario del bucket.
Este ajuste bloquea todo acceso entre cuentas al punto de acceso o al bucket
(salvo a los servicios de AWS) al tiempo que permite a los usuarios de la cuenta
administrar el punto de acceso o el bucket.

La habilitación de este ajuste no afecta a las políticas de punto de acceso o


bucket existentes, salvo que Amazon S3 bloquea el acceso público y entre
cuentas derivado de cualquier política de punto de acceso o bucket 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.

Versión de API 2006-03-01


491
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

Qué significa "pública"


Buckets
ACL
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. 477).
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:*"
• s3:DataAccessPointArn
Note

Cuando se utiliza en una política de bucket, este valor puede contener un comodín
para el nombre del punto de acceso sin mostrar la política pública, siempre y
cuando el ID de cuenta sea fijo. Por ejemplo, permitir el acceso a arn:aws:s3:us-
west-2:123456789012:accesspoint/* permitiría el acceso a cualquier punto
de acceso asociado con la cuenta 123456789012 de la región us-west-2 sin hacer
pública la política de bucket. Tenga en cuenta que este comportamiento es diferente
para las políticas de punto de acceso. Para obtener más información, consulte Puntos de
acceso (p. 494).
• s3:DataAccessPointAccount
En virtud de 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"
} Versión de API 2006-03-01
492
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

{
"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, como el siguiente:

{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow",
"Condition": {"StringEquals": {"aws:SourceVpc": "vpc-91237329"}}
}

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

Ejemplo

Este ejemplo muestra cómo evalúa Amazon S3 una política de bucket 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.

Versión de API 2006-03-01


493
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

Puntos de acceso
Amazon S3 evalúa la configuración de bloqueo de acceso público de un modo ligeramente diferente para
los puntos de acceso en comparación con los buckets. Las reglas que Amazon S3 aplica para determinar
cuándo una política de punto de acceso es pública suelen ser las mismas para los puntos de acceso que
para los buckets, excepto en las situaciones siguientes:

• Un punto de acceso que tiene un origen de red VPC siempre se considera no público,
independientemente del contenido de su política de punto de acceso.
• Una política de punto de acceso que concede acceso a un conjunto de puntos de acceso que utilizan
s3:DataAccessPointArn se considera pública. Tenga en cuenta que este comportamiento
es diferente al de las políticas de bucket. Por ejemplo, una política de bucket que concede
acceso a los valores de s3:DataAccessPointArn que coinciden con arn:aws:s3:us-
west-2:123456789012:accesspoint/* no se considera pública. Sin embargo, la misma instrucción
en una política de punto de acceso haría público el punto de acceso.

Usar Access Analyzer for S3 para revisar buckets públicos


Puede utilizar Access Analyzer for S3 para revisar los buckets que tengan ACL de bucket, políticas de
bucket o políticas de punto de acceso que conceden acceso público. Access Analyzer for S3 avisa de los
buckets que están configurados para permitir el acceso a cualquier usuario de Internet o a otras cuentas
de AWS, incluidas las cuentas de AWS ajenas a su organización. Para cada bucket público o compartido,
recibirá resultados que le informarán del origen y el nivel de acceso público o compartido.

Dotado del conocimiento que se presenta en los resultados, puede tomar medidas correctivas inmediatas
y precisas. En Access Analyzer for S3, puede bloquear todo el acceso público a un bucket con un solo
clic. También puede examinar a fondo las configuraciones de permisos de nivel de bucket para configurar
niveles detallados de acceso. Para casos de uso específicos y verificados que requieren acceso público
o compartido, puede reconocer y registrar su intención de que el bucket continúe siendo público o
compartido archivando los resultados del bucket.

En escasas situaciones, Access Analyzer for S3 podría no encontrar resultados para un bucket que una
evaluación de Amazon S3 Block Public Access registra como público. Esto sucede porque Amazon S3
Block Public Access revisa las políticas de las acciones actuales y todas las acciones posibles que podrían
añadirse en el futuro, lo que lleva a que un bucket se convierta en público. Por otro lado, Access Analyzer
for S3 solo analiza las acciones actuales especificadas para el servicio de Amazon S3 en la evaluación del
estado de acceso.

Para obtener más información acerca de Access Analyzer for S3, consulte Uso de Access Analyzer for S3
en la Guía del usuario de la consola de Amazon Simple Storage Service.

Permisos
Para usar características de Block Public Access de Amazon S3, debe contar con los siguientes permisos:

Operation 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

Versión de API 2006-03-01


494
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

Operation Permisos necesarios

Configuración de Block Public Access de GET s3:GetAccountPublicAccessBlock


account

Configuración de Block Public Access de PUT s3:PutAccountPublicAccessBlock


account

Configuración de Block Public Access de DELETE s3:PutAccountPublicAccessBlock


account

Configuración de bloqueo de acceso público de s3:PutAccessPointPublicAccessBlock


punto de acceso PUT

Note

Las operaciones DELETE necesitan los mismos permisos que las operaciones PUT. NO hay
permisos separados para las operaciones DELETE.

Ejemplos
Usar Block Public Access con la AWS CLI
Para ello, puede usar Block Public Access de Amazon S3 a través de la AWS CLI. El comando utilizado
depende de si quiere realizar una llamada Block Public Access en un punto de acceso, un bucket o 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?

• Punto de acceso
Para realizar operaciones de Block Public Access en un punto de acceso, use el servicio de la AWS
CLI s3control. Tenga en cuenta que actualmente no es posible cambiar la configuración de bloqueo
de acceso público de un punto de acceso después de haberlo creado. Por lo tanto, la única forma de
especificar la configuración de bloqueo de acceso público para un punto de acceso es incluirla al crear
el punto de acceso.
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)

Usar Block Public Access con AWS SDK for Java


Los siguientes ejemplos muestran cómo usar Block Public Access de Amazon S3 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. 826).

Versión de API 2006-03-01


495
Amazon Simple Storage Service Guía del desarrollador
Bloquear acceso público

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

Usar Block Public Access con otros SDK de AWS


Para obtener información acerca de cómo otros AWS SDK, consulte Uso de los SDK, la CLI y los
exploradores de AWS (p. 818).

Usar Block Public Access con las API de REST


Para obtener más información sobre el uso de Block Public Access de Amazon S3 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

Versión de API 2006-03-01


496
Amazon Simple Storage Service Guía del desarrollador
Registro y monitorización

• GET PublicAccessBlock
• DELETE PublicAccessBlock

• Operaciones de nivel de bucket


• PUT PublicAccessBlock
• GET PublicAccessBlock
• DELETE PublicAccessBlock
• GET BucketPolicyStatus

Registro y monitoreo 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 Monitoreo de métricas
con Amazon CloudWatch (p. 754).
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. 766).
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. 794).
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.

Versión de API 2006-03-01


497
Amazon Simple Storage Service Guía del desarrollador
Validación de la conformidad

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
• 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.
• S3 Bloqueo de objetos 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
"escritura única y lectura múltiple" (WORM) para determinados tipos de libros e información de registros.

Versión de API 2006-03-01


498
Amazon Simple Storage Service Guía del desarrollador
Inventario

• Inventario de Amazon S3 (p. 499) 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
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). Si es semanal, se genera un informe cada
domingo (zona horaria UTC) después del informe inicial. 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 al utilizar 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 se configura el inventario de Amazon S3? (p. 499)
• ¿Qué incluye un inventario de Amazon S3? (p. 502)
• ¿Dónde se ubican las listas de inventario? (p. 503)
• ¿Cómo se sabe cuándo está completo un inventario? (p. 505)
• Consultar inventario con Amazon Athena (p. 506)
• API de REST del inventario de Amazon S3 (p. 507)

¿Cómo se configura 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.

Versión de API 2006-03-01


499
Amazon Simple Storage Service Guía del desarrollador
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:

• 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. 504)
• 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. 448).
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 de lista de inventario se cifra mediante una clave administrada de
Amazon S3 (SSE-S3) o una clave maestra de cliente (CMK) de AWS Key Management Service (AWS
KMS) administrada por el cliente. Para obtener más información sobre SSE-S3 y SSE-KMS, consulte
Proteger los datos con el cifrado del lado del servidor (p. 287). 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 AWS SDK.
3. Para cifrar el archivo con la lista de inventario con SSE-KMS, conceda a Amazon S3 permiso para
utilizar la CMK almacenada en AWS KMS.

Versión de API 2006-03-01


500
Amazon Simple Storage Service Guía del desarrollador
Inventario

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 CMK administrada por el cliente de AWS
KMS para cifrar el archivo de inventario. Para conceder permiso a Amazon S3, se modifica la política
de claves para la CMK administrada por el cliente que desea utilizar para cifrar el archivo de inventario.
Para obtener más información, consulte la siguiente sección, Conceder permiso a Amazon S3 para usar
la CMK de AWS KMS para el cifrado (p. 501).

Conceder permiso a Amazon S3 para usar la CMK de AWS KMS para el cifrado

Para conceder permiso a Amazon S3 para cifrar mediante una clave maestra de cliente (CMK) de AWS
Key Management Service (AWS KMS) administrada por el cliente, debe utilizar una política de claves. Para
actualizar la política de claves de tal forma que pueda utilizar una CMK administrada por el cliente de AWS
KMS para cifrar el archivo de inventario, siga estos pasos.

Para conceder permiso para cifrar mediante su CMK de AWS KMS

1. Con la cuenta de AWS que es propietaria de la CMK administrada por el cliente, inicie sesión en la
Consola de administración de AWS.
2. Abra la consola de AWS KMS en https://console.aws.amazon.com/kms.
3. Para cambiar la región AWS, utilice el selector de regiones en la esquina superior derecha de la
página.
4. En el panel de navegación izquierdo, elija Customer managed keys (Claves administradas por el
cliente).
5. En Customer managed keys (Claves administradas por el cliente), seleccione la CMK administrada por
el cliente que desee usar para cifrar el archivo de inventario.
6. En Key policy (Política de claves), seleccione Switch to policy view (Cambie a la vista de política).
7. Para actualizar la política de claves, elija Edit (Editar).
8. En Edit key policy (Editar política de claves), agregue la siguiente política de claves a la política de
claves existente.

{
"Sid": "Allow Amazon S3 use of the CMK",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey"
],
"Resource": "*"
}

9. Elija Save changes.

Para obtener más información acerca de la creación de CMK de AWS KMS administradas por el
cliente y del uso de las políticas de claves, consulte los siguientes temas en la AWS Key Management
Service Developer Guide:

• Introducción
• Uso de políticas de claves en AWS KMS

También puede utilizar la API de política PutKeyPolicy de la clave PUT de AWS KMS para copiar la
política de claves en la CMK administrada por el cliente que desea utilizar para cifrar el archivo de
inventario.

Versión de API 2006-03-01


501
Amazon Simple Storage Service Guía del desarrollador
Inventario

¿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
información, consulte Control de versiones de objetos (p. 125). (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. 119).
• Intelligent-Tiering access tier (Capa de acceso de capas avanzadas) – capa de acceso (frecuente o
infrecuente) del objeto si está almacenado en capas avanzadas. Para obtener más información, consulte
Capas avanzadas de Amazon S3.
• 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. 196).
• 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. 125). (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. 735).
• 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. 286).
• Fecha hasta la que se retiene S3 Bloqueo de objetos: fecha hasta la cual no se puede eliminar un
objeto bloqueado. Para obtener más información, consulte Bloquear objetos mediante S3 Bloqueo de
objetos (p. 532).
• Modo de S3 Bloqueo de objetos: establecido en Governance o Compliance para objetos que están
bloqueados. Para obtener más información, consulte Bloquear objetos mediante S3 Bloqueo de
objetos (p. 532).
• Estado de retención legal de S3 Bloqueo de objetos: 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
Bloquear objetos mediante S3 Bloqueo de objetos (p. 532).

Versión de API 2006-03-01


502
Amazon Simple Storage Service Guía del desarrollador
Inventario

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 Administrar el ciclo de vida de los objetos (p. 136).

Consistencia 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
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 ubican 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.
• 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.

Versión de API 2006-03-01


503
Amazon Simple Storage Service Guía del desarrollador
Inventario

• 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.

¿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. Estos archivos pueden sobrescribirse entre sí y en buckets con el
control de versiones habilitado creará una nueva versión de los 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",

Versión de API 2006-03-01


504
Amazon Simple Storage Service Guía del desarrollador
Inventario

"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"
}
]
}

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 se sabe 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.

Versión de API 2006-03-01


505
Amazon Simple Storage Service Guía del desarrollador
Inventario

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 Configurar notificaciones de eventos de Amazon S3 (p. 662).

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>
<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.

Consultar 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,

Versión de API 2006-03-01


506
Amazon Simple Storage Service Guía del desarrollador
Inventario

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

Si utiliza Athena para consultar un informe de inventario con formato CSV, 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.serde2.OpenCSVSerde'

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 los siguientes ejemplos.

# Get list of latest inventory report dates available


SELECT DISTINCT dt FROM your-table-name ORDER BY 1 DESC limit 10;

# Get encryption status for a provided report date.


SELECT encryption_status, count(*) FROM your-table-name WHERE dt = 'YYYY-MM-DD-HH-MM'
GROUP BY encryption_status;

# Get encryption status for report dates in the provided range.


SELECT dt, encryption_status, count(*) FROM your-table-name
WHERE dt > 'YYYY-MM-DD-HH-MM' AND dt < 'YYYY-MM-DD-HH-MM' GROUP BY dt,
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

Versión de API 2006-03-01


507
Amazon Simple Storage Service Guía del desarrollador
Resiliencia

• 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. 684), 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.

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 Administrar el ciclo de vida de los
objetos (p. 136).
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 Usar el control de versiones (p. 509).
S3 Bloqueo de objetos

Puede usar S3 Bloqueo de objetos para almacenar objetos mediante un modelo de escritura única
y lectura múltiple (WORM). Al utilizar S3 Bloqueo de objetos puede evitar que se elimine o se
sobrescriba un objeto durante un periodo de tiempo determinado o de manera indefinida. S3 Bloqueo
de objetos le permite cumplir con los requisitos normativos que precisen de almacenamiento WORM
o simplemente agregar una capa de protección adicional contra cambios y eliminaciones de objetos.
Para obtener más información, consulte Bloquear objetos mediante S3 Bloqueo de objetos (p. 532).
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 S3 Glacier para archivar objetos a los que no necesita acceder en tiempo
real. Para obtener más información, consulte Clases de almacenamiento de Amazon S3 (p. 119).

Versión de API 2006-03-01


508
Amazon Simple Storage Service Guía del desarrollador
Cifrar copia de seguridad

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

Cifrar 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. 70).

Usar 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. Cuando habilite el control
de versiones para un bucket, si Amazon S3 recibe varias solicitudes de escritura para el mismo objeto
simultáneamente, almacena todos los objetos.

Si habilita el control de versiones para un bucket, Amazon S3 genera automáticamente un identificador de


versión único para el objeto que se almacena. 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).

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 Eliminar versiones de objetos (p. 522).
• 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

Versión de API 2006-03-01


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

¿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.

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 Administrar objetos en un bucket con control de versiones
habilitado (p. 514).
• 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 Administrar
objetos en un bucket con control de versiones suspendido (p. 529).

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.


• 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. 59)) 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.

Versión de API 2006-03-01


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

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. 325).

Para ver un ejemplo de cómo configurar el control de versiones, consulte Ejemplos de habilitar el control de
versiones de buckets (p. 512).

Eliminar 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.

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.

Versión de API 2006-03-01


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

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. 446).
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 habilitar el control de versiones de buckets (p. 512)


• Administrar objetos en un bucket con control de versiones habilitado (p. 514)
• Administrar objetos en un bucket con control de versiones suspendido (p. 529)
• Aumentos significativos en las respuestas HTTP 503 a solicitudes de Amazon S3 para buckets con
control de versiones habilitado (p. 789)

Ejemplos de habilitar el control de versiones de buckets


Temas
• Uso de la consola de Amazon S3 (p. 512)
• Mediante el AWS SDK para Java (p. 512)
• Mediante el AWS SDK para .NET (p. 513)
• Usar otros SDK de AWS (p. 514)

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 Usar el control de versiones (p. 509).

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. 827).

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;

Versión de API 2006-03-01


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

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

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. 829).

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)

Versión de API 2006-03-01


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

{
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);


}

static string RetrieveBucketVersioningConfiguration(IAmazonS3 client)


{
GetBucketVersioningRequest request = new GetBucketVersioningRequest
{
BucketName = bucketName
};

GetBucketVersioningResponse response = client.GetBucketVersioning(request);


return response.VersioningConfig.Status;
}
}
}

Usar otros SDK de AWS


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

Administrar objetos en un bucket con control de versiones


habilitado
Temas
• Agregar objetos a buckets con control de versiones habilitado (p. 515)
• Mostrar objetos en un bucket con control de versiones habilitado (p. 516)

Versión de API 2006-03-01


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

• Recuperar versiones de objetos (p. 520)


• Eliminar versiones de objetos (p. 522)
• Transición de versiones de objetos (p. 527)
• Restaurar versiones anteriores (p. 527)
• Permisos de objetos versionados (p. 528)

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.

Agregar 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.

Temas
• Mediante la consola (p. 515)
• Uso de los SDK de AWS (p. 515)
• Mediante la API de REST (p. 515)

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. 190). 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

Agregar 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.

Versión de API 2006-03-01


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

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

Mostrar objetos en un bucket con control de versiones habilitado


Temas
• Mediante la consola (p. 516)
• Uso de los SDK de AWS (p. 516)
• Mediante la API de REST (p. 519)

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. 59)) asociado con el bucket.

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.

Versión de API 2006-03-01


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

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. 827).

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

Versión de API 2006-03-01


517
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. 829).

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

Versión de API 2006-03-01


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

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
Date: Wed, 28 Oct 2009 22:32:00 +0000
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Recuperar 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: Recuperar todas las versiones de solo un 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.

Versión de API 2006-03-01


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

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 Recuperar objetos mediante 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: Recuperar un listado de objetos adicionales si la respuesta está truncada

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.

Recuperar respuestas adicionales que satisfagan la solicitud GET original

1 Establezca el valor de key-marker de acuerdo con la clave devuelta en


NextKeyMarker en la respuesta anterior.

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 Recuperar 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=

Recuperar 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.

Versión de API 2006-03-01


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

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. 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 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 Recuperar 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

Versión de API 2006-03-01


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

Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

Temas relacionados

Recuperar los metadatos de una versión de un objeto (p. 522)

Recuperar los metadatos de una versión de un 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 Recuperar 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

Eliminar 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.

Versión de API 2006-03-01


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

Para obtener más información, consulte Administrar el ciclo de vida de los objetos (p. 136).

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.

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. 246). 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.

Versión de API 2006-03-01


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

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. 524)

Trabajar con marcadores de eliminación (p. 524)

Eliminar marcadores de eliminación (p. 526)

Usar el control de versiones (p. 509)

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 Eliminar un objeto de un bucket habilitado para eliminar 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
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 Eliminar
MFA (p. 511).

Trabajar 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,

Versión de API 2006-03-01


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

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 una llamada DELETE a la API de
Amazon S3. Para ello, necesitará realizar la solicitud DELETE mediante un usuario o rol de AWS Identity
and Access Management (IAM) que tenga los permisos apropiados.

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. 114). Para obtener
información acerca de cómo eliminar marcadores de eliminación, consulte Eliminar marcadores de
eliminación (p. 526).

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

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.

Versión de API 2006-03-01


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

Eliminar 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.

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.

Versión de API 2006-03-01


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

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 Eliminar 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 S3 Glacier
en un momento específico del periodo de vida del objeto. Para obtener más información, consulte
Administrar el ciclo de vida de los objetos (p. 136).

Restaurar 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.
• 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.

Versión de API 2006-03-01


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

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. 325).

Example Establecer 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
Date: Wed, 28 Oct 2009 22:32:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
Content-Length: 124

<AccessControlPolicy>
<Owner>

Versión de API 2006-03-01


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

<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 Recuperar los permisos para una versión de objeto especificada

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.

Administrar objetos en un bucket con control de versiones


suspendido
Temas
• Agregar objetos a buckets con control de versiones suspendido (p. 529)
• Recuperar objetos desde buckets con control de versiones suspendido (p. 530)
• Eliminar objetos de buckets con control de versiones suspendido (p. 531)

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.

Agregar 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.

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.

Versión de API 2006-03-01


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

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.

Recuperar 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


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

Eliminar 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


531
Amazon Simple Storage Service Guía del desarrollador
Bloquear objetos

Bloquear objetos mediante S3 Bloqueo de objetos


Con S3 Bloqueo de objetos, 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. Bloqueo de objetos 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 S3 Bloqueo de objetos en entornos sujetos a las normativas
SEC 17a-4, CTCC y FINRA. Para obtener más información acerca de cómo Bloqueo de objetos está
relacionado con estas regulaciones, consulte la evaluación de cumplimiento de Cohasset Associates.

Bloqueo de objetos 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 de S3
Bloqueo de objetos (p. 533).

Bloqueo de objetos 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 S3 Bloqueo de objetos, siga estos pasos básicos:

1. Cree un nuevo bucket con Bloqueo de objetos habilitado.


2. De manera opcional, puede configurar un período de retención predeterminado para los objetos
colocados en el bucket.
3. Coloque los objetos que quiera bloquear en el bucket.

Versión de API 2006-03-01


532
Amazon Simple Storage Service Guía del desarrollador
Bloquear objetos

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 Bloqueo de objetos 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 de S3 Bloqueo de objetos (p. 533)
• Administrar bloqueos de objetos de Amazon S3 (p. 536)

Información general de S3 Bloqueo de objetos


Puede usar S3 Bloqueo de objetos 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 S3 Bloqueo de objetos 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 “Administrar bloqueos de objetos” (p. 536).
Note

Los buckets de S3 con S3 Bloqueo de objetos no se pueden utilizar como buckets de destino para
Server access logging (Registro de acceso del servidor) (p. 794)

En las siguientes secciones se describen las características principales deS3 Bloqueo de objetos.

Temas
• Modos de retención (p. 533)
• Periodos de retención (p. 534)
• Retenciones legales (p. 535)
• Configuración del bucket (p. 535)
• Permisos necesarios (p. 536)

Modos de retención
S3 Bloqueo de objetos 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 Bloqueo de objetos.

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-

Versión de API 2006-03-01


533
Amazon Simple Storage Service Guía del desarrollador
Bloquear objetos

amz-bypass-governance-retention:true como encabezado de la solicitud con cualquier solicitud


que requiera la anulación del modo Gobierno.
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:BypassGovernanceRetention y
s3:GetBucketObjectLockConfiguration, 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

Cuando se actualizan los metadatos de la versión del objeto, como ocurre cuando coloca o altera
un Bloqueo de objetos, no se sobrescribe la versión del objeto ni se 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 Bloqueo de objetos, 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.

Versión de API 2006-03-01


534
Amazon Simple Storage Service Guía del desarrollador
Bloquear objetos

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
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
Bloqueo de objetos 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. Para obtener una lista completa de permisos de Amazon S3, consulte Acciones,
recursos y claves de condiciones de Amazon S3 (p. 388).

Las retenciones legales son independientes de los periodos de retención. Siempre que el bucket que
contiene el objeto tenga el Bloqueo de objetos 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 Bloqueo de objetos, 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 S3 Bloqueo de objetos

Para poder bloquear un objeto, debe configurar el bucket para que use el S3 Bloqueo de objetos. Para
hacerlo, cuando crea el bucket debe especificar que desea habilitar el Bloqueo de objetos. Tras configurar
el bucket para el Bloqueo de objetos, puede bloquear objetos en ese bucket con periodos de retención,
retenciones legales o ambas opciones.
Note

• Solo puede habilitar el Bloqueo de objetos en buckets nuevos. Si desea activar Bloqueo de
objetos para un bucket existente, entre en contacto con AWS Support.
• Cuando crea un bucket con Bloqueo de objetos habilitado, Amazon S3 habilita
automáticamente el control de versiones para ese bucket.
• Una vez que cree un bucket con Bloqueo de objetos habilitado, no puede deshabilitar Bloqueo
de objetos ni suspender el control de versiones del bucket.

Para obtener información acerca de la habilitación de Bloqueo de objetos 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 Bloqueo de objetos 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

Versión de API 2006-03-01


535
Amazon Simple Storage Service Guía del desarrollador
Bloquear objetos

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.
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. 533).

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, Bloqueo de
objetos 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 Bloqueo de objetos necesitan permisos específicos. Para obtener más información
acerca de los permisos requeridos, consulte Ejemplo: operaciones con objetos (p. 374). Para obtener
información sobre el uso de condiciones con permisos, consulte Claves de condición de Amazon
S3 (p. 376).

Administrar bloqueos de objetos de Amazon S3


S3 Bloqueo de objetos 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 deS3 Bloqueo de
objetos, consulte Información general de S3 Bloqueo de objetos (p. 533).

Versión de API 2006-03-01


536
Amazon Simple Storage Service Guía del desarrollador
Bloquear objetos

Temas
• Consultar información de bloqueo de un objeto (p. 537)
• Omitir el modo de gobierno (p. 537)
• Configurar eventos y notificaciones (p. 537)
• Configurar límites de retención (p. 538)
• Administrar marcadores de eliminación y ciclos de vida de los objetos (p. 538)
• Usar S3 Bloqueo de objetos con replicación (p. 539)

Consultar información de bloqueo de un objeto


Puede consultar 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 consultar 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 de una configuración de Bloqueo
de objetos en un bucket que no tiene S3 Bloqueo de objetos habilitado, Amazon S3 devuelve un error.
Para obtener más información sobre los permisos, consulte Ejemplo: operaciones con objetos (p. 374).

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. 499).

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 Bloqueo de objetos aplicando
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 de S3 con
S3 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 agregan o actualizan metadatos de Bloqueo de objetos para un objeto, esas acciones también

Versión de API 2006-03-01


537
Amazon Simple Storage Service Guía del desarrollador
Bloquear objetos

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 Configurar notificaciones de
eventos de Amazon S3 (p. 662).

Puede usar las notificaciones de eventos de Amazon S3 para realizar un seguimiento del acceso y los
cambios en 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.

Configurar 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 utiliza la clave de condición s3:object-
lock-remaining-retention-days para establecer 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, consulte los siguientes temas:

• Acciones, recursos y claves de condiciones de Amazon S3 (p. 388)


• Ejemplo: operaciones con objetos (p. 374)
• Claves de condición de Amazon S3 (p. 376)

Administrar 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

Versión de API 2006-03-01


538
Amazon Simple Storage Service Guía del desarrollador
Seguridad de la infraestructura

el objeto se hubiese eliminado. Para obtener más información, consulte Trabajar con marcadores de
eliminación (p. 524).
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 Administrar el ciclo de vida de los objetos (p. 136).

Usar S3 Bloqueo de objetos con replicación


Puede utilizar S3 Bloqueo de objetos con replicación para habilitar copias asíncronas y automáticas de
objetos bloqueados y sus metadatos de retención en los buckets de S3 de diferentes o 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. 684).

Para configurar S3 Bloqueo de objetos con replicación, puede elegir una de las siguientes opciones.

Opción 1: Habilitar primero Bloqueo de objetos.

1. Habilite 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 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, debe 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 Bloqueo
de objetos con replicación:

• El bucket de destino de Amazon S3 debe tener habilitado Bloqueo de objetos.


• 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. 699).

Para obtener más información acerca de S3 Bloqueo de objetos, consulte Bloquear objetos mediante S3
Bloqueo de objetos (p. 532).

Seguridad de la infraestructura de 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.

Versión de API 2006-03-01


539
Amazon Simple Storage Service Guía del desarrollador
Configuración y análisis de vulnerabilidades

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. 449).

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

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. 498)


• 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. 541)

Versión de API 2006-03-01


540
Amazon Simple Storage Service Guía del desarrollador
Prácticas recomendadas preventivas
de seguridad de Amazon S3

• Monitorización y auditoría de prácticas recomendadas de Amazon S3 (p. 544)

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 Usar
Block Public Access de Amazon S3 (p. 488).
• 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 del acceso a los recursos de Amazon
S3 (p. 325).
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

Versión de API 2006-03-01


541
Amazon Simple Storage Service Guía del desarrollador
Prácticas recomendadas preventivas
de seguridad de Amazon S3

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.

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 Eliminar MFA (p. 511).


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 proporciona estas opciones de cifrado del lado del servidor:


• Cifrado del lado del servidor con claves administradas por Amazon S3 (SSE-S3).
• Cifrado del lado del servidor con claves maestras del cliente almacenadas en AWS Key
Management Service (SSE-KMS).
• Cifrado en el servidor con claves proporcionadas por el cliente (SSE-C).

Para obtener más información, consulte Proteger los datos con el cifrado del lado del
servidor (p. 287).
• 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 Proteger datos con el cifrado del lado del cliente (p. 318).
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

Versión de API 2006-03-01


542
Amazon Simple Storage Service Guía del desarrollador
Prácticas recomendadas preventivas
de seguridad de Amazon S3

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.
Considerar S3 Bloqueo de objetos

S3 Bloqueo de objetos le permite almacenar objetos utilizando el modelo de "escritura única y lectura
múltiple" (WORM). S3 Bloqueo de objetos puede ayudar a prevenir la eliminación accidental o
inapropiada de datos. Por ejemplo, podría usar S3 Bloqueo de objetos para ayudar a 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 Usar el control de versiones (p. 509).
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. 684).
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. 449).

Versión de API 2006-03-01


543
Amazon Simple Storage Service Guía del desarrollador
Monitorización y auditoría de prácticas
recomendadas de Amazon S3

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. 499).

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.
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 Monitoreo de métricas con Amazon CloudWatch (p. 754) y Monitorización de Amazon
S3 (p. 753).

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. 794).

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. Se puede usar la información que recopila CloudTrail para 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. Por ejemplo, puede identificar entradas
de CloudTrail para acciones Put que afecten al acceso a los datos, sobre todo PutBucketAcl,
PutObjectAcl, PutBucketPolicy y PutBucketWebsite. Cuando se configura una cuenta de
AWS, CloudTrail está habilitado de forma predeterminada. Puede ver los eventos recientes en la
consola de CloudTrail. Para crear un registro continuo de actividad y eventos para los buckets de

Versión de API 2006-03-01


544
Amazon Simple Storage Service Guía del desarrollador
Monitorización y auditoría de prácticas
recomendadas de Amazon S3

Amazon S3, puede crear un seguimiento en la consola de CloudTrail. Para obtener más información,
consulte el artículo sobre registro de eventos de datos para seguimiento en la AWS CloudTrail User
Guide.

Al crear un seguimiento, puede configurar CloudTrail para que registre los eventos de datos. Los
eventos de datos son registros de operaciones de recursos realizadas en o dentro de un recurso.
En Amazon S3, los eventos de datos registran la actividad de API del nivel de objeto para buckets
individuales. CloudTrail admite un subconjunto de operaciones de API de Amazon S3 del nivel de
objeto, como GetObject, DeleteObject y PutObject. Para obtener más información sobre cómo
funciona CloudTrail con Amazon S3, consulte Registro de llamadas a la API de Amazon S3 mediante
AWS CloudTrail (p. 766). En la consola de Amazon S3, también puede configurar los buckets de S3
con el fin de habilitar el registro del nivel de objeto para CloudTrail.

AWS Config proporciona una regla administrada (cloudtrail-s3-dataevents-enabled)


que puede utilizar para confirmar que al menos un seguimiento de CloudTrail está registrando los
eventos de datos para los buckets de S3. Para obtener más información, consulte cloudtrail-s3-
dataevents-enabled en la AWS Config Developer 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
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


545
Amazon Simple Storage Service Guía del desarrollador
Terminología

Ejecutar Operaciones por lotes de S3


Puede utilizar las Operaciones por lotes de S3 para realizar operaciones por lotes a gran escala en objetos
de Amazon S3. Las Operaciones por lotes de 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 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 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. 546)
• Conceptos básicos: Operaciones por lotes de S3 (p. 547)
• Crear un trabajo de Operaciones por lotes de S3 (p. 548)
• Operaciones (p. 555)
• Administrar trabajos de Operaciones por lotes de S3 (p. 568)
• Ejemplos de Operaciones por lotes de S3 (p. 573)

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

La operación es el tipo de acción de API, como copiar objetos, que debe ejecutar el trabajo
Operaciones por lotes. Cada trabajo realiza un único tipo de operación en todos los objetos
especificados en el manifiesto.
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
objeto. En el transcurso de la vida útil de un trabajo, Operaciones por lotes de S3 crea una tarea para
cada objeto especificado en el manifiesto.

Versión de API 2006-03-01


546
Amazon Simple Storage Service Guía del desarrollador
Conceptos básicos: trabajos

Conceptos básicos: Operaciones por lotes de S3


Puede utilizar las Operaciones por lotes de S3 para realizar operaciones por lotes a gran escala en objetos
de Amazon S3. Las Operaciones por lotes de S3 pueden ejecutar la misma operación o acción en las listas
de objetos de Amazon S3 que se especifiquen.

Temas
• Cómo funciona un trabajo de Operaciones por lotes de S3 (p. 547)
• Especificar un manifiesto (p. 547)

Cómo funciona un trabajo de Operaciones por lotes de


S3
Un trabajo es la unidad de trabajo básica para Operaciones por lotes de 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 S3 una lista de objetos y
especificar la acción que se debe realizar con dichos objetos. Las Operaciones por lotes de S3 admiten las
siguientes operaciones:

• PUT copy object


• PUT object tagging
• PUT object ACL
• Iniciar restauración de S3 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. 499) 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 Administrar trabajos de Operaciones por lotes de S3 (p. 568).

Especificar 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) o cifrado en el servidor con claves maestras del cliente (CMK) de AWS Key Management Service (SSE-
KMS). El manifiesto debe contener el nombre del bucket, la clave del objeto y, de manera opcional, la
versión del objeto. Operaciones por lotes de S3 no utiliza ningún otro campo del manifiesto.

Puede especificar un manifiesto en una solicitud de creación de trabajo utilizando uno de los dos formatos
siguientes.

Versión de API 2006-03-01


547
Amazon Simple Storage Service Guía del desarrollador
Crear un trabajo

• 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. 499).
Si el informe de inventario incluye los identificadores de las versiones, las Operaciones por lotes de 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 manifiesto de ejemplo 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 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.

Crear un trabajo de Operaciones por lotes de S3


Operaciones por lotes de S3 puede realizar Operaciones por lotes a gran escala en una lista de objetos
específicos de Amazon S3. Puede crear trabajos de Operaciones por lotes de S3 mediante la Consola de
administración de AWS, la AWS Command Line Interface (AWS CLI), los SDK de AWS o la API de REST.

Esta sección contiene la información que necesita para crear un trabajo de Operaciones por lotes de S3.
También incluye los resultados de una solicitud Create Job.
Note

Para obtener instrucciones paso a paso para crear un trabajo mediante la consola de Amazon S3,
consulte Crear un trabajo de Operaciones por lotes de S3 en la Guía del usuario de la consola de
Amazon Simple Storage Service.

Versión de API 2006-03-01


548
Amazon Simple Storage Service Guía del desarrollador
Crear una solicitud de trabajo

Crear una solicitud de trabajo


Para crear un trabajo de Operaciones por lotes de S3, debe proporcionar la siguiente información:

Operación

Especifique la operación que quiere que Operaciones por lotes de S3 ejecute en los objetos del
manifiesto. Cada tipo de operación acepta parámetros específicos de dicha operación. Esto le permite
realizar las mismas tareas que si hubiera realizado la operación una por una en cada objeto.
Manifiesto

El manifiesto es una lista de todos los objetos en los que quiere que Operaciones por lotes de S3
ejecute la acción especificada. Puede utilizar un informe con formato CSV Inventario de Amazon
S3 (p. 499) como manifiesto o usar su propia lista CSV de objetos personalizada.

Para obtener más información sobre los manifiestos, consulte Especificar un manifiesto (p. 547).
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 trabajo solo tienen significado en relación con las prioridades establecidas para
otros trabajos de la misma cuenta y región. Así que puede elegir el sistema de numeración que mejor
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.

Operaciones por lotes de S3 prioriza los trabajos en función de los números de prioridad, pero no se
garantiza el orden estricto. 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

Especifique un rol de AWS Identity and Access Management (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 en la Guía del usuario de
IAM.

Para obtener más información sobre los permisos de Amazon S3, consulte Acciones de Amazon
S3 (p. 374).
Informe

Especifique si desea que Operaciones por lotes de 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.
Etiquetado (Opcional)

Puede etiquetar y controlar el acceso a sus trabajos de Operaciones por lotes de S3 agregando
etiquetas. Las etiquetas se pueden usar para identificar quién es responsable de un trabajo de
Operaciones por lotes. Puede crear trabajos con etiquetas asociadas a ellos y puede añadir
etiquetas a los trabajos después de crearlos. Por ejemplo, puede otorgar permiso a un usuario

Versión de API 2006-03-01


549
Amazon Simple Storage Service Guía del desarrollador
Crear una respuesta de trabajo

de IAM para invocar una CreateJob siempre que el trabajo se haya creado con la etiqueta
"Department=Finance".

Para obtener más información, consulte the section called “Controlar el acceso y etiquetar trabajos
usando etiquetas” (p. 569).
Descripción (opcional)

Para monitorear y seguir el trabajo, también puede proporcionar una descripción de hasta
256 caracteres. 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.

Crear 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 su
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 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á.

Conceder permisos de Operaciones por lotes para


Amazon S3
Esta sección describe cómo conceder los permisos necesarios solicitados para crear y llevar acabo
trabajos de Operaciones por lotes de S3.

Temas
• Permisos necesarios para crear un trabajo de Operaciones por lotes de S3 (p. 550)
• Crear un rol de Operaciones por lotes de S3 IAM (p. 550)

Permisos necesarios para crear un trabajo de Operaciones por


lotes de 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 Crear un rol
de Operaciones por lotes de S3 IAM (p. 550).

Crear un rol de Operaciones por lotes de S3 IAM


Amazon S3 debe tener sus permisos para ejecutar Operaciones por lotes de S3 en su nombre. Estos
permisos se conceden a través de un rol de AWS Identity and Access Management (IAM). Esta sección

Versión de API 2006-03-01


550
Amazon Simple Storage Service Guía del desarrollador
Conceder permisos para Operaciones por lotes

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. Para ver ejemplos, consulte Ejemplo: Uso de
etiquetas de trabajo para controlar los permisos de Operaciones por lotes de S3 (p. 602).

En las políticas de IAM, también puede utilizar claves de condición para filtrar permisos de acceso para
trabajos de Operaciones por lotes de S3. Para obtener más información y una lista completa de claves de
condición específicas de Amazon S3, consulte Acciones, recursos y claves de condiciones de Amazon
S3 (p. 388).

En el siguiente vídeo se muestra cómo configurar permisos de IAM para trabajos de Operaciones por lotes
mediante la Consola de administración de AWS.

Política de confianza
Para permitir que el servicio principal de Operaciones por lotes de S3 asuma el rol de IAM, adjunte la
siguiente política de confianza al rol.

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},
"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 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.
• Si ejecuta Operaciones por lotes de S3 en objetos cifrados, el rol de IAM también debe tener
acceso a las claves de AWS KMS utilizadas para cifrarlos.

• PUT copy object

{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging"
],

Versión de API 2006-03-01


551
Amazon Simple Storage Service Guía del desarrollador
Conceder permisos para Operaciones por lotes

"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"
],
"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"

Versión de API 2006-03-01


552
Amazon Simple Storage Service Guía del desarrollador
Conceder permisos para Operaciones por lotes

],
"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"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}

• Iniciar restauración de S3 Glacier

{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:RestoreObject"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],

Versión de API 2006-03-01


553
Amazon Simple Storage Service Guía del desarrollador
Conceder permisos para Operaciones por lotes

"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}

• retención PUT de S3 Bloqueo de objetos

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetBucketObjectLockConfiguration",
"Resource": [
"arn:aws:s3:::{{TargetResource}}"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObjectRetention",
"s3:BypassGovernanceRetention"
],
"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}}/*"
]
}
]
}

• retención legal PUT de S3 Bloqueo de objetos

Versión de API 2006-03-01


554
Amazon Simple Storage Service Guía del desarrollador
Operaciones

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetBucketObjectLockConfiguration",
"Resource": [
"arn:aws:s3:::{{TargetResource}}"
]
},
{
"Effect": "Allow",
"Action": "s3:PutObjectLegalHold",
"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: Operaciones por lotes de S3 (p. 547)
• Operaciones (p. 555)
• Administrar trabajos de Operaciones por lotes de S3 (p. 568)

Operaciones
Operaciones por lotes de S3 admite varias operaciones diferentes. En los temas de esta sección, se
describen las distintas operaciones.

Temas
• Copiar objetos PUT (p. 556)
• Iniciar objetos para restauración (p. 556)
• Invocar una función Lambda desde operaciones por lotes de Amazon S3 (p. 557)

Versión de API 2006-03-01


555
Amazon Simple Storage Service Guía del desarrollador
Copiar objetos PUT

• ACL del objeto PUT (p. 565)


• Etiquetar objeto PUT (p. 565)
• Administración de fechas de retención S3 Bloqueo de objetos (p. 566)
• Gestión de la retención legal S3 Bloqueo de objetos (p. 567)

Copiar objetos PUT


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 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. 229).

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 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.
• No se admite la copia de objetos en la clase de almacenamiento de redundancia reducida (RRS).

Iniciar objetos para restauración


Se puede utilizar Operaciones por lotes de S3 para realizar operaciones Operaciones por lotes a gran
escala con objetos de Amazon S3. Operaciones por lotes de S3 puede ejecutar una sola operación en
una lista de objetos de Amazon S3 que especifique, incluido el inicio de restauraciones de objetos desde
Amazon S3 Glacier. Para obtener más información, consulte Operaciones por lotes de S3 (p. 546).

No se puede obtener acceso en tiempo real a los objetos que se archivan en las clases de
almacenamiento S3 Glacier o S3 Glacier Deep Archive. La operación InitiateRestore de Operaciones
por lotes de S3 envía una solicitud de restauración a 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. 270).

Versión de API 2006-03-01


556
Amazon Simple Storage Service Guía del desarrollador
Invocar una función Lambda

• 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 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. 271). 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 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 Configurar notificaciones de eventos de Amazon S3 (p. 662).

Solapar restauraciones
Si un trabajo Initiate Restore Object intenta restaurar un objeto que ya está en proceso de restaurarse, las
Operaciones por lotes de 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 en este momento.
En este caso, las Operaciones por lotes de 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 S3 no admite el comando SELECT de S3 Glacier.
• Operaciones por lotes de S3 no admite el nivel de recuperación Expedited.

Invocar una función Lambda desde operaciones por


lotes de Amazon S3
Las Operaciones por lotes de 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

Versión de API 2006-03-01


557
Amazon Simple Storage Service Guía del desarrollador
Invocar una función Lambda

función de Lambda para utilizarla con Operaciones por lotes de S3 y cómo crear un trabajo para invocar la
función. El trabajo de Operaciones por lotes de 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 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 S3 con Lambda.

Temas
• Usar Lambda con operaciones por lotes de Amazon S3 (p. 558)
• Crear una función Lambda para usar con Operaciones por lotes de S3 (p. 559)
• Crear un trabajo de Operaciones por lotes de S3 que invoca una función Lambda (p. 562)
• Proporcionar información de nivel de tarea en manifiestos de Lambda (p. 562)

Usar Lambda con operaciones por lotes de Amazon S3


Cuando se utilizan Operaciones por lotes de S3 con AWS Lambda, debe crear nuevas funciones de
Lambda específicamente para utilizarlas con Operaciones por lotes de S3. No es posible reutilizar
funciones basadas en eventos de Amazon S3 con Operaciones por lotes de S3. Las funciones de eventos
solo pueden recibir mensajes; no devuelven mensajes. Las funciones de Lambda que se utilizan con
Operaciones por lotes de 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 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 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 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 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 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 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.

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

Versión de API 2006-03-01


558
Amazon Simple Storage Service Guía del desarrollador
Invocar una función Lambda

Código de respuesta Descripción


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.

Crear una función Lambda para usar con Operaciones por lotes
de 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 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 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 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 S3.

Example — Política de confianza de Operaciones por lotes de S3

El siguiente es un ejemplo de la política de confianza que puede usar para el rol de IAM Operaciones
por lotes. Este rol de IAM se especifica al crear el trabajo y ofrece a Operaciones por lotes permiso para
asumir el rol de IAM.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "batchoperations.s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

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
S3 permiso para invocar la función de Lambda y leer el manifiesto de entrada.

{
"Version": "2012-10-17",

Versión de API 2006-03-01


559
Amazon Simple Storage Service Guía del desarrollador
Invocar una función Lambda

"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:awsexamplebucket1"
}
]
}

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\"]"
}
]
}

Ejemplo de función Lambda para Operaciones por lotes de 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.

Versión de API 2006-03-01


560
Amazon Simple Storage Service Guía del desarrollador
Invocar una función Lambda

Como muestra el ejemplo, las claves de las Operaciones por lotes de 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 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 Operaciones por lotes de S3


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 Operaciones por lotes de S3 will make the task for retry. If
# any other exceptions are received, mark as permanent failure.
errorCode = e.response['Error']['Code']
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:

Versión de API 2006-03-01


561
Amazon Simple Storage Service Guía del desarrollador
Invocar una función Lambda

# 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'

Crear un trabajo de Operaciones por lotes de S3 que invoca una


función Lambda
Cuando cree un trabajo de Operaciones por lotes de 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 S3,
consulte Crear un trabajo de Operaciones por lotes de S3 (p. 548) y Operaciones (p. 555).

En el siguiente ejemplo se crea un trabajo de Operaciones por lotes de 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:::awsexamplebucket1","Format":"Report_CSV_20180820","Enabled":true,"Prefix":"Re
--priority 2
--role-arn arn:aws:iam::AccountID:role/BatchOperationsRole
--region Region
--description “Lambda Function"

Proporcionar información de nivel de tarea en manifiestos de


Lambda
Cuando utiliza funciones AWS Lambda con Operaciones por lotes de S3, es posible que desee adjuntar
datos adicionales a cada tarea/clave en la que se opera. Por ejemplo, es posible que desee tener tanto una

Versión de API 2006-03-01


562
Amazon Simple Storage Service Guía del desarrollador
Invocar una función Lambda

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 S3 para usarlos en el
código de la función 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 proporcionarse a Operaciones por lotes de 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 proporcionarse a Operaciones por lotes de 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
Esta función Lambda muestra cómo analizar JSON que está codificado en el manifiesto de Operaciones
por lotes de S3.

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:
#
# bucket,{"origKey": "object1key", "newKey": "newObject1Key"}
# bucket,{"origKey": "object2key", "newKey": "newObject2Key"}
# bucket,{"origKey": "object3key", "newKey": "newObject3Key"}
#

Versión de API 2006-03-01


563
Amazon Simple Storage Service Guía del desarrollador
Invocar una función Lambda

# 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 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 not 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
})

return {
'invocationSchemaVersion': invocationSchemaVersion,
'treatMissingKeysAs': 'PermanentFailure',

Versión de API 2006-03-01


564
Amazon Simple Storage Service Guía del desarrollador
ACL del objeto PUT

'invocationId': invocationId,
'results': results
}

ACL del objeto PUT


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 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 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 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 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 Usar Block Public Access de Amazon S3 (p. 488).

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 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 S3. Para obtener más información, consulte la sección Recursos
relacionados (p. 565) de esta página.

Recursos relacionados
• Administración de acceso con ACL (p. 474)
• GET Object ACL en la Amazon Simple Storage Service API Reference

Etiquetar objeto PUT


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.

Para crear un trabajo Put Object Tagging, tiene que proporcionar el conjunto de etiquetas que desee
aplicar. Las Operaciones por lotes de S3 aplican el mismo conjunto de etiquetas a todos los objetos. El

Versión de API 2006-03-01


565
Amazon Simple Storage Service Guía del desarrollador
Administración de fechas de
retención S3 Bloqueo de objetos

conjunto de etiquetas que proporcione sustituirá a los conjuntos que ya estén asociados con los objetos del
manifiesto. Las Operaciones por lotes de 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 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 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 S3. Para obtener más información, consulte la sección Recursos
relacionados (p. 566) de esta página.

Recursos relacionados
• Etiquetado de objetos (p. 127)
• 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 fechas de retención S3 Bloqueo de


objetos
Puede utilizar S3 Bloqueo de objetos con fechas de retención para el objeto mediante dos modos: el modo
governance y el modo compliance. Estos modos de retención aplican diferentes niveles de protección a
los objetos. Puede aplicar cualquiera de los modos de retención a cualquier versión de objeto. Las fechas
de retención, como las retenciones legales, impiden que un objeto se sobrescriba o elimine. Amazon
S3 almacena la retención hasta la fecha especificada en los metadatos del objeto y protege la versión
especificada de la versión del objeto hasta que expire el período de retención.

Puede utilizar Operaciones por lotes de S3 con Bloqueo de objetos para administrar las fechas de
retención de muchos objetos de Amazon S3 a la vez. Especifique la lista de objetos de destino en el
manifiesto y envíelo a Operaciones por lotes para su finalización. Para obtener más información, consulte
S3 Bloqueo de objetos the section called “Periodos de retención” (p. 534).

Su trabajo Operaciones por lotes de S3 con fecha de retención dura hasta su finalización, hasta su
cancelación o hasta que se alcance un estado de fallo. Debe utilizar la retención de Operaciones por lotes
de S3 y S3 Bloqueo de objetos cuando desee agregar, cambiar o quitar la fecha de retención de muchos
objetos con una sola solicitud.

Operaciones por lotes verifica que Bloqueo de objetos está habilitado en el bucket de S3 antes de procesar
cualquier clave en el manifiesto. Para realizar las operaciones y la validación, Operaciones por lotes
necesita permisos s3:GetBucketObjectLockConfiguration y s3:PutObjectRetention en un rol
de IAM para permitir a Operaciones por lotes llamar a Bloqueo de objetos en su nombre.

Para obtener información acerca de cómo utilizar esta operación con la API de REST, consulte
S3PutObjectRetention en la operación CreateJob en la Amazon Simple Storage Service API
Reference.

Versión de API 2006-03-01


566
Amazon Simple Storage Service Guía del desarrollador
Gestión de la retención legal S3 Bloqueo de objetos

Para obtener un ejemplo de la AWS Command Line Interface del uso de esta operación, consulte the
section called “Utilizar Operaciones por lotes con la retención de Bloqueo de objetos” (p. 595). Para
ver un ejemplo de AWS SDK for Java, consulte the section called “Utilizar Operaciones por lotes con la
retención de Bloqueo de objetos” (p. 581).

Restricciones y limitaciones
• Operaciones por lotes de S3 no realiza ningún cambio en el nivel de bucket.
• Las versiones y S3 Bloqueo de objetos deben configurarse en el bucket donde se realiza el trabajo.
• Todos los objetos enumerados en el manifiesto deben estar en el mismo bucket.
• La operación funciona en la versión más reciente del objeto a menos que se especifique explícitamente
una versión en el manifiesto.
• Necesita permisos s3:PutObjectRetention en su rol de IAM para usar esto.
• Se necesita el permiso s3:GetBucketObjectLockConfiguration de IAM para confirmar que
Bloqueo de objetos está activado para el bucket de S3.
• Solo se puede ampliar el período de retención de objetos con fechas de retención de modo
COMPLIANCE aplicadas y no se puede acortar.

Gestión de la retención legal S3 Bloqueo de objetos


S3 Bloqueo de objetos 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.

Puede usar Operaciones por lotes de S3 con Bloqueo de objetos para colocar retenciones legales a
muchos objetos Amazon S3 a la vez. Puede hacerlo enumerando los objetos de destino en su manifiesto
y enviando esa lista a Operaciones por lotes. Su trabajo Operaciones por lotes de S3 con retención legal
Bloqueo de objetos dura hasta su finalización, hasta su cancelación o hasta que se alcance un estado de
fallo.

Operaciones por lotes de S3 verifica que Bloqueo de objetos está habilitado en el bucket S3 antes de
procesar cualquier clave en el manifiesto. Para realizar las operaciones de objeto y validación en el
nivel de bucket, Operaciones por lotes de S3 necesita s3:GetBucketObjectLockConfiguration y
s3:PutObjectLegalHold en un rol de IAM que permite a Operaciones por lotes de S3 establecer S3
Bloqueo de objetos por usted.

Al crear el trabajo Operaciones por lotes de S3 para eliminar la retención legal, solo tiene que especificar
Desactivado como estado de retención legal. Para obtener más información, consulte the section called
“Administrar bloqueos de objetos” (p. 536).

Para obtener información acerca de cómo utilizar esta operación con la API de REST, consulte
S3PutObjectRetention en la operación CreateJob en la Amazon Simple Storage Service API
Reference.

Para obtener un ejemplo AWS Command Line Interface del uso de esta operación, consulte the section
called “Utilizar Operaciones por lotes con el modo de retención legal de Bloqueo de objetos” (p. 600).

Para ver un ejemplo de AWS SDK for Java, consulte the section called “Utilizar Operaciones por lotes con
el modo de retención legal de Bloqueo de objetos” (p. 586).

Restricciones y limitaciones
• Operaciones por lotes de S3 no realiza ningún cambio en el nivel de bucket.

Versión de API 2006-03-01


567
Amazon Simple Storage Service Guía del desarrollador
Administrar trabajos

• Todos los objetos enumerados en el manifiesto deben estar en el mismo bucket.


• Las versiones y S3 Bloqueo de objetos deben configurarse en el bucket donde se realiza el trabajo.
• La operación funciona en la versión más reciente del objeto a menos que se especifique explícitamente
una versión en el manifiesto.
• El permiso s3:PutObjectLegalHold se necesita en su rol de IAM para añadir o quitar la retención
legal de objetos.
• Se necesita el permiso s3:GetBucketObjectLockConfiguration de IAM para confirmar que S3
Bloqueo de objetos está activado para el bucket S3.

Administrar trabajos de Operaciones por lotes de


S3
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 crearlos. 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
• Mostrar trabajos (p. 568)
• Consultar detalles del trabajo (p. 568)
• Controlar el acceso y etiquetar trabajos usando etiquetas (p. 569)
• Asignar prioridad a los trabajos (p. 570)
• Estado del trabajo (p. 570)
• Realizar un seguimiento de los errores de los trabajos (p. 572)
• Notificaciones y registro (p. 573)
• Informes de finalización (p. 573)

En el siguiente vídeo se describe brevemente cómo puede utilizar la consola de Amazon S3 para
administrar sus trabajos de Operaciones por lotes de S3.

Mostrar trabajos
Puede recuperar una lista de sus trabajos de Operaciones por lotes de S3. 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.

Consultar detalles del 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.

Versión de API 2006-03-01


568
Amazon Simple Storage Service Guía del desarrollador
Controlar el acceso y etiquetar trabajos usando etiquetas

Controlar el acceso y etiquetar trabajos usando


etiquetas
Puede etiquetar y controlar el acceso a sus trabajos de Operaciones por lotes de S3 agregando etiquetas.
Las etiquetas se pueden usar para identificar quién es responsable de un trabajo de Operaciones por lotes.
La presencia de etiquetas de trabajo puede conceder o limitar la capacidad de un usuario para cancelar un
trabajo, activar un trabajo en estado de confirmación o cambiar el nivel de prioridad de un trabajo. Puede
crear trabajos con etiquetas asociadas a ellos y agregar etiquetas a los trabajos después de que se hayan
creado. Cada etiqueta es un par clave-valor que se puede incluir al crear el trabajo o se puede actualizar
más tarde.
Warning

Las etiquetas de trabajo no deben contener información confidencial ni datos personales.

Considere el siguiente ejemplo de etiquetado: Suponga que quiere que su departamento de Finanzas cree
un trabajo de Operaciones por lotes. Puede escribir una política de AWS Identity and Access Management
(IAM) que permita a un usuario invocar CreateJob, dado que se ha creado el trabajo con la etiqueta
Department asignada al valor Finance. Además, puede añadir esa política a todos los usuarios que
sean miembros del departamento de Finanzas.

Siguiendo con este ejemplo, se podría escribir una política que permita a los usuarios actualizar la
prioridad de cualquier trabajo que tenga las etiquetas deseadas, o cancelar cualquier trabajo con
esas etiquetas. Para obtener más información, consulte the section called “Ejemplos de etiquetas de
trabajo” (p. 602).

Puede añadir etiquetas a los nuevos trabajos de Operaciones por lotes de S3 cuando los cree, o puede
añadirlas a trabajos ya existentes.

Tenga en cuenta las siguientes restricciones de las etiquetas:

• Puede asociar hasta 50 etiquetas a un trabajo siempre que tengan claves de etiqueta únicas.
• 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 en la Guía del usuario de AWS Billing and Cost Management.

Operaciones de API relacionadas con el etiquetado de trabajos


de Operaciones por lotes de S3
Amazon S3 admite las siguientes operaciones de API que son específicas para el etiquetado de trabajos
de Operaciones por lotes de S3:

• GetJobTagging: devuelve el conjunto de etiquetas asociado a un trabajo de Operaciones por lotes.


• PutJobTagging: reemplaza el conjunto de etiquetas asociado a un trabajo. Hay dos escenarios diferentes
de administración de etiquetas de trabajos de Operaciones por lotes de S3 con esta acción de la API:
• El trabajo no tiene etiquetas: Puede agregar un conjunto de etiquetas a un trabajo (el trabajo no tiene
etiquetas anteriores).
• El trabajo tiene un conjunto de etiquetas existente: para modificar el conjunto de etiquetas existente,
puede reemplazar todo el conjunto de etiquetas existente o realizar cambios dentro del conjunto de
etiquetas existente al recuperar el conjunto de etiquetas existente mediante GetJobTagging, modificar
el conjunto de etiquetas y usar esta acción de la API para sustituir el conjunto de etiquetas con el que
ha modificado.

Versión de API 2006-03-01


569
Amazon Simple Storage Service Guía del desarrollador
Asignar prioridad a los trabajos

Note
Si envía esta solicitud con un conjunto de etiquetas vacío, Operaciones por lotes de 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.
Para eliminar etiquetas existentes para su trabajo de Operaciones por lotes, se prefiere la
acción DeleteJobTagging porque logra el mismo resultado sin incurrir en cargos.
• DeleteJobTagging: elimina el conjunto de etiquetas asociado a un trabajo de Operaciones por lotes.

Asignar prioridad a los trabajos


Puede asignar a cada trabajo una prioridad numérica; para ello, puede utilizar un número entero positivo.
Operaciones por lotes de 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 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


570
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


571
Amazon Simple Storage Service Guía del desarrollador
Realizar un 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 S3 lo ha cancelado alcanza el estado Cancelled,
correctamente. El trabajo ya no ya no adopta ningún otro estado.
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 el Failed es un estado terminal.


trabajo y ya no está en ejecución. Cuando un trabajo alcanza el
Para obtener más información estado Failed, ya no adopta
acerca de los errores de los ningún otro estado.
trabajos, consulte Realizar un
seguimiento de los errores de los
trabajos (p. 572).

Realizar un seguimiento de los errores de los trabajos


Si un trabajo de Operaciones por lotes de S3 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 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


572
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 dejará 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 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 AWS CloudTrail. Como las Operaciones por 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 Configurar notificaciones de
eventos de Amazon S3 (p. 662).

Informes de finalización
Al crear un trabajo, puede solicitar un informe de finalización. Si Operaciones por lotes de S3 invoca
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. 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 Ejemplo: Solicitar informes de finalización de Operaciones por lotes de
S3 (p. 607).

Aunque no se configure un informe de finalización, es posible monitorizar y auditar el trabajo y las


tareas con CloudTrail y Amazon CloudWatch. Para obtener más información, consulte the section called
“Creación de reglas EventBridge para ver eventos de trabajos Operaciones por lotes” (p. 614).

Ejemplos de Operaciones por lotes de S3


Puede utilizar Operaciones por lotes de S3 para realizar Operaciones por lotes de S3 a gran escala
en miles de millones de objetos de S3 que contienen exabytes de datos. Puede utilizar la Consola de
administración de AWS, la AWS Command Line Interface (AWS CLI), los SDK de AWS o la API de REST
para administrar sus trabajos de Operaciones por lotes.

Versión de API 2006-03-01


573
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

Esta sección contiene los siguientes ejemplos de creación y administración de trabajos de Operaciones por
lotes en Amazon S3. En los ejemplos, reemplace cualquier valor variable por aquellos que se adapten a
sus necesidades.

Temas
• Ejemplos de Operaciones por lotes de S3 usando la AWS CLI (p. 574)
• Ejemplos de Operaciones por lotes de S3 usando AWS SDK for Java (p. 587)
• Ejemplo: Uso de etiquetas de trabajo para controlar los permisos de Operaciones por lotes de
S3 (p. 602)
• Ejemplo: Solicitar informes de finalización de Operaciones por lotes de S3 (p. 607)
• Ejemplo: Copiar objetos entre cuentas de AWS mediante Operaciones por lotes de S3 (p. 609)
• Ejemplo: Seguimiento de un trabajo Operaciones por lotes de S3 en Amazon EventBridge a través de
AWS CloudTrail (p. 614)

Ejemplos de Operaciones por lotes de S3 usando la


AWS CLI
Las Operaciones por lotes de S3 hacen un seguimiento del avance, envían notificaciones y almacenan un
informe de finalización de todas las acciones, lo que proporciona una experiencia sin servidor, auditable,
completamente administrada. Puede usar Operaciones por lotes de S3 hasta la Consola de administración
de AWS, AWS CLI, los SDK de AWS o la API de REST. Para obtener más información, consulte the
section called “Conceptos básicos: trabajos” (p. 547).

Los siguientes ejemplos muestran cómo se pueden utilizar Operaciones por lotes de S3 con la AWS
Command Line Interface (AWS CLI).

Temas
• Creación y administración de trabajos Operaciones por lotes de S3 (p. 574)
• Administrar etiquetas en trabajos Operaciones por lotes de S3 (p. 577)
• Usar Operaciones por lotes de S3 con S3 Bloqueo de objetos (p. 580)

Creación y administración de trabajos Operaciones por lotes de


S3
Puede utilizar la AWS CLI para crear y administrar el sus trabajos Operaciones por lotes de S3. Puede
obtener una descripción de un trabajo Operaciones por lotes, actualizar su estado o prioridad y averiguar
qué trabajos están Activos y Finalizados.

Temas
• Crear un trabajo Operaciones por lotes de S3. (p. 574)
• Contiene la descripción de un trabajo Operaciones por lotes de S3 (p. 576)
• Obtener una lista de trabajos activos y finalizados (p. 576)
• Actualizar la prioridad del trabajo (p. 576)
• Actualizar el estado del trabajo (p. 577)

Crear un trabajo Operaciones por lotes de S3.


El siguiente ejemplo crea un trabajo S3PutObjectTagging de Operaciones por lotes de S3 mediante la
AWS CLI.

Versión de API 2006-03-01


574
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

Para crear un trabajo de Operaciones por lotes S3PutObjectTagging

1. Crear un rol de AWS Identity and Access Management (IAM) y asignar 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"
},
"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 Conceder permisos de Operaciones por
lotes para Amazon S3 (p. 550).

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}}/*"

Versión de API 2006-03-01


575
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

]
}
]
}'

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"}] }}' \
--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

Contiene la descripción de un trabajo Operaciones por lotes de S3


En el ejemplo siguiente se obtiene la descripción de un trabajo Operaciones por lotes de S3 mediante la
AWS CLI.

aws s3control describe-job \


--region us-west-2 \
--account-id acct-id \
--job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c

Obtener una lista de trabajos activos y finalizados


En el ejemplo siguiente de AWS CLI se obtiene una lista de los trabajos Active y Complete.

aws s3control list-jobs \


--region us-west-2 \
--account-id acct-id \
--job-statuses '["Active","Complete"]' \
--max-results 20

Actualizar la prioridad del trabajo


En el ejemplo siguiente se actualiza la prioridad del trabajo mediante la AWS CLI. Un número más alto
indica una prioridad de ejecución más alta.

Versión de API 2006-03-01


576
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

aws s3control update-job-priority \


--region us-west-2 \
--account-id acct-id \
--priority 98 \
--job-id 00e123a4-c0d8-41f4-a0eb-b46f9ba5b07c

Actualizar el estado del trabajo


• Si no especificó el parámetro --no-confirmation-required en el ejemplo anterior de 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'

• 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

Administrar etiquetas en trabajos Operaciones por lotes de S3


Puede etiquetar y controlar el acceso a sus trabajos de Operaciones por lotes de S3 agregando etiquetas.
Las etiquetas se pueden usar para identificar quién es responsable de un trabajo de Operaciones por lotes.
Puede crear trabajos con etiquetas asociadas a ellos y agregar etiquetas a los trabajos después de que se
hayan creado. Para obtener más información, consulte the section called “Controlar el acceso y etiquetar
trabajos usando etiquetas” (p. 569).

Temas
• Crear un trabajo de Operaciones por lotes de S3 con etiquetas (p. 577)
• Eliminar las etiquetas de un trabajo Operaciones por lotes de S3 (p. 579)
• Obtener las etiquetas de trabajo de un trabajo de Operaciones por lotes de S3 (p. 579)
• Poner etiquetas de trabajo en un trabajo de Operaciones por lotes de S3 existente (p. 579)

Crear un trabajo de Operaciones por lotes de S3 con etiquetas


En el siguiente ejemplo de AWS CLI se crea un trabajo S3PutObjectCopy de Operaciones por lotes de
S3 mediante el uso de etiquetas de trabajo como las etiquetas del trabajo.

1. Seleccione la acción o la OPERATION que quiera que realice la Operaciones por lotes y seleccione su
TargetResource.

read -d '' OPERATION <<EOF


{
"S3PutObjectCopy": {
"TargetResource": "arn:aws:s3:::destination-bucket"
}

Versión de API 2006-03-01


577
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

}
EOF

2. Identifique la tarea TAGS que quiera para el trabajo. En este caso, se aplican dos etiquetas,
department y FiscalYear, con los valores Marketing y 2020 respectivamente.

read -d '' TAGS <<EOF


[
{
"Key": "department",
"Value": "Marketing"
},
{
"Key": "FiscalYear",
"Value": "2020"
}
]
EOF

3. Especifique el MANIFEST del trabajo Operaciones por lotes.

read -d '' MANIFEST <<EOF


{
"Spec": {
"Format": "EXAMPLE_S3BatchOperations_CSV_20180820",
"Fields": [
"Bucket",
"Key"
]
},
"Location": {
"ObjectArn": "arn:aws:s3:::example-bucket/example_manifest.csv",
"ETag": "example-5dc7a8bfb90808fc5d546218"
}
}
EOF

4. Configure el REPORT del trabajo Operaciones por lotes.

read -d '' REPORT <<EOF


{
"Bucket": "arn:aws:s3:::example-report-bucket",
"Format": "Example_Report_CSV_20180820",
"Enabled": true,
"Prefix": "reports/copy-with-replace-metadata",
"ReportScope": "AllTasks"
}
EOF

5. Ejecute la acción create-job para crear su trabajo Operaciones por lotes con los datos de entrada
establecidos en los pasos previos.

aws \
s3control create-job \
--account-id 123456789012 \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn arn:aws:iam::123456789012:role/batch-operations-role \
--tags "${TAGS//$'\n'/}" \
--client-request-token "$(uuidgen)" \
--region us-west-2 \

Versión de API 2006-03-01


578
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

--description "Copy with Replace Metadata";

Eliminar las etiquetas de un trabajo Operaciones por lotes de S3


En el siguiente ejemplo se eliminan las etiquetas de un trabajo de Operaciones por lotes mediante la AWS
CLI.

aws \
s3control delete-job-tagging \
--account-id 123456789012 \
--job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
--region us-east-1;

Obtener las etiquetas de trabajo de un trabajo de Operaciones por lotes de S3


En el ejemplo siguiente se obtienen las etiquetas de un trabajo de Operaciones por lotes mediante la AWS
CLI.

aws \
s3control get-job-tagging \
--account-id 123456789012 \
--job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
--region us-east-1;

Poner etiquetas de trabajo en un trabajo de Operaciones por lotes de S3 existente


A continuación se muestra un ejemplo del uso de s3control put-job-tagging para añadir etiquetas
de trabajo a un trabajo de Operaciones por lotes de S3 mediante la AWS CLI.
Note

Si envía esta solicitud con un conjunto de etiquetas vacío, Operaciones por lotes de S3 elimina el
conjunto de etiquetas existente en el objeto. Además, si utiliza este método, se le cobra por una
solicitud de nivel 1 (PUT). Para obtener más información, consulte Precios de Amazon S3.
Para eliminar etiquetas existentes para su trabajo de Operaciones por lotes, se prefiere la acción
DeleteJobTagging porque logra el mismo resultado sin incurrir en cargos.

1. Identifique la tarea TAGS que quiera para el trabajo. En este caso, se aplican dos etiquetas,
department y FiscalYear, con los valores Marketing y 2020 respectivamente.

read -d '' TAGS <<EOF


[
{
"Key": "department",
"Value": "Marketing"
},
{
"Key": "FiscalYear",
"Value": "2020"
}
]
EOF

2. Ejecute la acción put-job-tagging con los parámetros requeridos.

aws \
s3control put-job-tagging \
--account-id 123456789012 \

Versión de API 2006-03-01


579
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

--tags "${TAGS//$'\n'/}" \
--job-id Example-e25a-4ed2-8bee-7f8ed7fc2f1c \
--region us-east-1;

Usar Operaciones por lotes de S3 con S3 Bloqueo de objetos


Puede utilizar Operaciones por lotes de S3 con S3 Bloqueo de objetos para administrar la retención o
habilitar una retención legal para muchos objetos Amazon S3 a la vez. Especifique la lista de objetos
de destino en el manifiesto y envíelo a Operaciones por lotes para su finalización. Para obtener
más información, consulte the section called “Administración de fechas de retención S3 Bloqueo de
objetos” (p. 566) y the section called “Gestión de la retención legal S3 Bloqueo de objetos” (p. 567).

En los ejemplos siguientes se muestra cómo crear un rol de IAM con permisos de Operaciones por lotes
de S3 y actualizar los permisos de rol para crear trabajos que habilitan Bloqueo de objetos usando la AWS
CLI. En los ejemplos, reemplace cualquier valor variable por aquellos que se adapten a sus necesidades.
También debe tener un manifiesto CSV que identifique los objetos para su trabajo Operaciones por lotes de
S3. Para obtener más información, consulte the section called “Especificar un manifiesto” (p. 547).

En esta sección, realice dos pasos:

1. Crear un rol de IAM y asignar permisos Operaciones por lotes de S3 para ejecutarlo.

Este paso es obligatorio para todos los trabajos Operaciones por lotes de S3.

export AWS_PROFILE='aws-user'

read -d '' bops_trust_policy <<EOF


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"batchoperations.s3.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
EOF
aws iam create-role --role-name bops-objectlock --assume-role-policy-document
"${bops_trust_policy}"

2. Configurar Operaciones por lotes de S3 con S3 Bloqueo de objetos para ejecutarlo.

En este paso, permite que el rol haga lo siguiente:

a. Ejecute Bloqueo de objetos en el bucket de S3 que contiene los objetos de destino en los que
desea ejecutar Operaciones por lotes.
b. Lea el bucket de S3 donde se encuentran el archivo CSV de manifiesto y los objetos.
c. Escriba los resultados del trabajo Operaciones por lotes de S3 en el bucket de informes.

read -d '' bops_permissions <<EOF


{
"Version": "2012-10-17",
"Statement": [

Versión de API 2006-03-01


580
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

{
"Effect": "Allow",
"Action": "s3:GetBucketObjectLockConfiguration",
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}"
]
},
{
"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}}/*"
]
}
]
}
EOF

aws iam put-role-policy --role-name bops-objectlock --policy-name object-lock-


permissions --policy-document "${bops_permissions}"

Temas
• Utilizar Operaciones por lotes de S3 para establecer la retención de S3 Bloqueo de objetos (p. 581)
• Utilizar Operaciones por lotes de S3 para desactivar la retención legal de S3 Bloqueo de
objetos (p. 586)

Utilizar Operaciones por lotes de S3 para establecer la retención de S3 Bloqueo


de objetos
El siguiente ejemplo permite que la regla establezca la retención de S3 Bloqueo de objetos para los objetos
en el bucket del manifiesto.

Actualizar el rol para incluir permisos de s3:PutObjectRetention de modo que pueda ejecutar la
retención de Bloqueo de objetos en los objetos del bucket.

export AWS_PROFILE='aws-user'

read -d '' retention_permissions <<EOF


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectRetention"
],

Versión de API 2006-03-01


581
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
}
]
}
EOF

aws iam put-role-policy --role-name bops-objectlock --policy-name retention-permissions --


policy-document "${retention_permissions}"

Utilizar Operaciones por lotes de S3 con el modo de cumplimiento de la retención de S3 Bloqueo


de objetos
El siguiente ejemplo se basa en los ejemplos anteriores de creación de una política de confianza y en
establecer permisos de configuración de Operaciones por lotes de S3 y S3 Bloqueo de objetos en sus
objetos. En este ejemplo se establece el modo de retención en COMPLIANCE y la retain until date
del 1 de enero de 2020. Crea un trabajo que apunta a objetos del bucket del manifiesto e informa de los
resultados en el bucket de informes que ha identificado.

export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'

read -d '' OPERATION <<EOF


{
"S3PutObjectRetention": {
"Retention": {
"RetainUntilDate":"Jan 1 00:00:00 PDT 2020",
"Mode":"COMPLIANCE"
}
}
}
EOF

read -d '' MANIFEST <<EOF


{
"Spec": {
"Format": "S3BatchOperations_CSV_20180820",
"Fields": [
"Bucket",
"Key"
]
},
"Location": {
"ObjectArn": "arn:aws:s3:::ManifestBucket/complaince-objects-manifest.csv",
"ETag": "Your-manifest-ETag"
}
}
EOF

read -d '' REPORT <<EOF


{
"Bucket": "arn:aws:s3:::ReportBucket",
"Format": "Report_CSV_20180820",
"Enabled": true,
"Prefix": "reports/compliance-objects-bops",
"ReportScope": "AllTasks"
}
EOF

aws \
s3control create-job \

Versión de API 2006-03-01


582
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \
--description "Set compliance retain-until to 1 Jul 2030";

El siguiente ejemplo extiende la retain until date del modo de COMPLIANCE hasta el 15 de enero de
2020.

export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'

read -d '' OPERATION <<EOF


{
"S3PutObjectRetention": {
"Retention": {
"RetainUntilDate":"Jan 15 00:00:00 PDT 2020",
"Mode":"COMPLIANCE"
}
}
}
EOF

read -d '' MANIFEST <<EOF


{
"Spec": {
"Format": "S3BatchOperations_CSV_20180820",
"Fields": [
"Bucket",
"Key"
]
},
"Location": {
"ObjectArn": "arn:aws:s3:::ManifestBucket/complaince-objects-manifest.csv",
"ETag": "Your-manifest-ETag"
}
}
EOF

read -d '' REPORT <<EOF


{
"Bucket": "arn:aws:s3:::ReportBucket",
"Format": "Report_CSV_20180820",
"Enabled": true,
"Prefix": "reports/compliance-objects-bops",
"ReportScope": "AllTasks"
}
EOF

aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \

Versión de API 2006-03-01


583
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

--region "${AWS_DEFAULT_REGION}" \
--description "Extend compliance retention to 15 Jan 2020";

Utilizar Operaciones por lotes de S3 con el modo Gobierno de la retención de S3 Bloqueo de


objetos
El siguiente ejemplo se basa en el ejemplo anterior de creación de una política de confianza y en
establecer permisos de configuración de Operaciones por lotes de S3 y S3 Bloqueo de objetos. Muestra
cómo aplicar el control de la retención de S3 Bloqueo de objetos con la retain until date del 30 de
enero de 2020 en varios objetos. Crea un trabajo Operaciones por lotes que utiliza el bucket del manifiesto
e informa de los resultados en el bucket de informes.

export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'

read -d '' OPERATION <<EOF


{
"S3PutObjectRetention": {
"Retention": {
"RetainUntilDate":"Jan 30 00:00:00 PDT 2020",
"Mode":"GOVERNANCE"
}
}
}
EOF

read -d '' MANIFEST <<EOF


{
"Spec": {
"Format": "S3BatchOperations_CSV_20180820",
"Fields": [
"Bucket",
"Key"
]
},
"Location": {
"ObjectArn": "arn:aws:s3:::ManifestBucket/governance-objects-manifest.csv",
"ETag": "Your-manifest-ETag"
}
}
EOF

read -d '' REPORT <<EOF


{
"Bucket": "arn:aws:s3:::ReportBucketT",
"Format": "Report_CSV_20180820",
"Enabled": true,
"Prefix": "reports/governance-objects",
"ReportScope": "AllTasks"
}
EOF

aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \

Versión de API 2006-03-01


584
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

--description "Put governance retention";

El siguiente ejemplo se basa en el ejemplo anterior de creación de una política de confianza y en


establecer permisos de configuración de Operaciones por lotes de S3 y S3 Bloqueo de objetos. Muestra
cómo omitir el control de retención en varios objetos y crea un trabajo Operaciones por lotes que utiliza el
bucket del manifiesto e informa de los resultados en el bucket de informes.

export AWS_PROFILE='aws-user'

read -d '' bypass_governance_permissions <<EOF


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:BypassGovernanceRetention"
],
"Resource": [
"arn:aws:s3:::ManifestBucket/*"
]
}
]
}
EOF

aws iam put-role-policy --role-name bops-objectlock --policy-name bypass-governance-


permissions --policy-document "${bypass_governance_permissions}"

export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'

read -d '' OPERATION <<EOF


{
"S3PutObjectRetention": {
"BypassGovernanceRetention": true,
"Retention": {
}
}
}
EOF

read -d '' MANIFEST <<EOF


{
"Spec": {
"Format": "S3BatchOperations_CSV_20180820",
"Fields": [
"Bucket",
"Key"
]
},
"Location": {
"ObjectArn": "arn:aws:s3:::ManifestBucket/governance-objects-manifest.csv",
"ETag": "Your-manifest-ETag"
}
}
EOF

read -d '' REPORT <<EOF


{
"Bucket": "arn:aws:s3:::REPORT_BUCKET",
"Format": "Report_CSV_20180820",

Versión de API 2006-03-01


585
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando la AWS CLI

"Enabled": true,
"Prefix": "reports/bops-governance",
"ReportScope": "AllTasks"
}
EOF

aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \
--description "Remove governance retention";

Utilizar Operaciones por lotes de S3 para desactivar la retención legal de S3


Bloqueo de objetos
El siguiente ejemplo se basa en los ejemplos anteriores de creación de una política de confianza y en
establecer permisos de configuración de Operaciones por lotes de S3 y S3 Bloqueo de objetos. Muestra
cómo deshabilitar la retención legal de Bloqueo de objetos en objetos usando Operaciones por lotes.

En el ejemplo se actualiza primero el rol para conceder permisos de s3:PutObjectLegalHold, se crea


un trabajo Operaciones por lotes que desactiva (quita) la retención legal de los objetos identificados en el
manifiesto e informa sobre él.

export AWS_PROFILE='aws-user'

read -d '' legal_hold_permissions <<EOF


{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectLegalHold"
],
"Resource": [
"arn:aws:s3:::ManifestBucket/*"
]
}
]

EOF

aws iam put-role-policy --role-name bops-objectlock --policy-name legal-hold-permissions --


policy-document "${legal_hold_permissions}"

El siguiente ejemplo desactiva la retención legal.

export AWS_PROFILE='aws-user'
export AWS_DEFAULT_REGION='us-west-2'
export ACCOUNT_ID=123456789012
export ROLE_ARN='arn:aws:iam::123456789012:role/bops-objectlock'

read -d '' OPERATION <<EOF


{
"S3PutObjectLegalHold": {

Versión de API 2006-03-01


586
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

"LegalHold": {
"Status":"OFF"
}
}
}
EOF

read -d '' MANIFEST <<EOF


{
"Spec": {
"Format": "S3BatchOperations_CSV_20180820",
"Fields": [
"Bucket",
"Key"
]
},
"Location": {
"ObjectArn": "arn:aws:s3:::ManifestBucket/legalhold-object-manifest.csv",
"ETag": "Your-manifest-ETag"
}
}
EOF

read -d '' REPORT <<EOF


{
"Bucket": "arn:aws:s3:::ReportBucket",
"Format": "Report_CSV_20180820",
"Enabled": true,
"Prefix": "reports/legalhold-objects-bops",
"ReportScope": "AllTasks"
}
EOF

aws \
s3control create-job \
--account-id "${ACCOUNT_ID}" \
--manifest "${MANIFEST//$'\n'}" \
--operation "${OPERATION//$'\n'/}" \
--report "${REPORT//$'\n'}" \
--priority 10 \
--role-arn "${ROLE_ARN}" \
--client-request-token "$(uuidgen)" \
--region "${AWS_DEFAULT_REGION}" \
--description "Turn off legal hold";

Ejemplos de Operaciones por lotes de S3 usando


AWS SDK for Java
En esta sección se ofrecen ejemplos acerca de cómo crear y administrar trabajos de Operaciones por lotes
de 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. 827).

Temas
• Crear un trabajo de Operaciones por lotes (p. 588)
• Cancelar un trabajo de Operaciones por lotes (p. 589)
• Actualizar el estado de un trabajo de Operaciones por lotes (p. 590)
• Actualizar la prioridad de un trabajo de Operaciones por lotes (p. 591)
• Usar Operaciones por lotes con etiquetas (p. 591)
• Usar Operaciones por lotes de S3 con S3 Bloqueo de objetos (p. 594)

Versión de API 2006-03-01


587
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

Crear un trabajo de Operaciones por lotes


En el siguiente ejemplo se crea un trabajo de Operaciones por lotes de S3 mediante AWS SDK for Java.

Para obtener más información sobre la creación de un trabajo, consulte Crear un trabajo de Operaciones
por lotes de S3 (p. 548).

Para obtener información sobre la configuración de permisos que necesita para crear un trabajo, consulte
Conceder permisos de Operaciones por lotes para Amazon S3 (p. 550).

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"));

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

Versión de API 2006-03-01


588
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

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

Cancelar un trabajo de Operaciones por lotes


En el siguiente ejemplo se cancela un trabajo de Operaciones por lotes de S3 utilizando AWS SDK for
Java.

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 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"));

Versión de API 2006-03-01


589
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

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

Actualizar el estado de un trabajo de Operaciones por lotes


En el siguiente ejemplo se actualiza el estado de un trabajo de Operaciones por lotes de S3 mediante AWS
SDK for Java.

Para obtener más información acerca del estado de un trabajo, consulte Estado del trabajo (p. 570).

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

Versión de API 2006-03-01


590
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

Actualizar la prioridad de un trabajo de Operaciones por lotes


En el siguiente ejemplo se actualiza la prioridad de un trabajo de Operaciones por lotes de S3 mediante
AWS SDK for Java.

Para obtener más información acerca de la prioridad de un trabajo, consulte Asignar prioridad a los
trabajos (p. 570).

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

Usar Operaciones por lotes con etiquetas


Puede etiquetar y controlar el acceso a sus trabajos de Operaciones por lotes de S3 agregando etiquetas.
Las etiquetas se pueden usar para identificar quién es responsable de un trabajo de Operaciones por lotes.
Puede crear trabajos con etiquetas asociadas a ellos y agregar etiquetas a los trabajos después de que se
hayan creado. Para obtener más información, consulte the section called “Controlar el acceso y etiquetar
trabajos usando etiquetas” (p. 569).

Temas

Versión de API 2006-03-01


591
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

• Crear un trabajo de Operaciones por lotes con etiquetas de trabajo utilizadas para el
etiquetado (p. 592)
• Eliminar las etiquetas de trabajo de un trabajo de Operaciones por lotes (p. 593)
• Obtener las etiquetas de trabajo de un trabajo de Operaciones por lotes (p. 593)
• Poner etiquetas de trabajo en un trabajo de Operaciones por lotes (p. 593)

Crear un trabajo de Operaciones por lotes con etiquetas de trabajo utilizadas para
el etiquetado
Example

El siguiente ejemplo crea un trabajo de AWS SDK for Java con etiquetas mediante Operaciones por lotes
de S3.

public String createJob(final AWSS3ControlClient awss3ControlClient) {


final String manifestObjectArn = "arn:aws:s3:::example-manifest-bucket/
manifests/10_manifest.csv";
final String manifestObjectVersionId = "example-5dc7a8bfb90808fc5d546218";

final JobManifestLocation manifestLocation = new JobManifestLocation()


.withObjectArn(manifestObjectArn)
.withETag(manifestObjectVersionId);

final JobManifestSpec manifestSpec =


new
JobManifestSpec().withFormat(JobManifestFormat.S3InventoryReport_CSV_20161130);

final JobManifest manifestToPublicApi = new JobManifest()


.withLocation(manifestLocation)
.withSpec(manifestSpec);

final String jobReportBucketArn = "arn:aws:s3:::example-report-bucket";


final String jobReportPrefix = "example-job-reports";

final JobReport jobReport = new JobReport()


.withEnabled(true)
.withReportScope(JobReportScope.AllTasks)
.withBucket(jobReportBucketArn)
.withPrefix(jobReportPrefix)
.withFormat(JobReportFormat.Report_CSV_20180820);

final String lambdaFunctionArn = "arn:aws:lambda:us-


west-2:123456789012:function:example-function";

final JobOperation jobOperation = new JobOperation()


.withLambdaInvoke(new
LambdaInvokeOperation().withFunctionArn(lambdaFunctionArn));

final S3Tag departmentTag = new S3Tag().withKey("department").withValue("Marketing");


final S3Tag fiscalYearTag = new S3Tag().withKey("FiscalYear").withValue("2020");

final String roleArn = "arn:aws:iam::123456789012:role/example-batch-operations-role";


final Boolean requiresConfirmation = true;
final int priority = 10;

final CreateJobRequest request = new CreateJobRequest()


.withAccountId("123456789012")
.withDescription("Test lambda job")
.withManifest(manifestToPublicApi)
.withOperation(jobOperation)
.withPriority(priority)

Versión de API 2006-03-01


592
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

.withRoleArn(roleArn)
.withReport(jobReport)
.withTags(departmentTag, fiscalYearTag)
.withConfirmationRequired(requiresConfirmation);

final CreateJobResult result = awss3ControlClient.createJob(request);

return result.getJobId();
}

Eliminar las etiquetas de trabajo de un trabajo de Operaciones por lotes


Example

En el siguiente ejemplo se eliminan las etiquetas de un trabajo de Operaciones por lotes de S3 mediante
AWS SDK for Java.

public void deleteJobTagging(final AWSS3ControlClient awss3ControlClient,


final String jobId) {
final DeleteJobTaggingRequest deleteJobTaggingRequest = new DeleteJobTaggingRequest()
.withJobId(jobId);

final DeleteJobTaggingResult deleteJobTaggingResult =


awss3ControlClient.deleteJobTagging(deleteJobTaggingRequest);
}

Obtener las etiquetas de trabajo de un trabajo de Operaciones por lotes


Example

En el siguiente ejemplo se obtienen las etiquetas de un trabajo de Operaciones por lotes de S3 mediante
AWS SDK for Java.

public List<S3Tag> getJobTagging(final AWSS3ControlClient awss3ControlClient,


final String jobId) {
final GetJobTaggingRequest getJobTaggingRequest = new GetJobTaggingRequest()
.withJobId(jobId);

final GetJobTaggingResult getJobTaggingResult =


awss3ControlClient.getJobTagging(getJobTaggingRequest);

final List<S3Tag> tags = getJobTaggingResult.getTags();

return tags;
}

Poner etiquetas de trabajo en un trabajo de Operaciones por lotes


Example

En el siguiente ejemplo se colocan las etiquetas de un trabajo de Operaciones por lotes de S3 mediante
AWS SDK for Java.

public void putJobTagging(final AWSS3ControlClient awss3ControlClient,


final String jobId) {
final S3Tag departmentTag = new S3Tag().withKey("department").withValue("Marketing");
final S3Tag fiscalYearTag = new S3Tag().withKey("FiscalYear").withValue("2020");

final PutJobTaggingRequest putJobTaggingRequest = new PutJobTaggingRequest()

Versión de API 2006-03-01


593
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

.withJobId(jobId)
.withTags(departmentTag, fiscalYearTag);

final PutJobTaggingResult putJobTaggingResult =


awss3ControlClient.putJobTagging(putJobTaggingRequest);
}

Usar Operaciones por lotes de S3 con S3 Bloqueo de objetos


Puede usar Operaciones por lotes de S3 con S3 Bloqueo de objetos para administrar la retención o
para habilitar una retención legal para muchos objetos de Amazon S3 a la vez. Especifique la lista de
objetos de destino en el manifiesto y envíelo a Operaciones por lotes para su finalización. Para obtener
más información, consulte the section called “Administración de fechas de retención S3 Bloqueo de
objetos” (p. 566) y the section called “Gestión de la retención legal S3 Bloqueo de objetos” (p. 567).

En los ejemplos siguientes se muestra cómo crear un rol de IAM con permisos de Operaciones por lotes
de S3 y actualizar los permisos de rol para crear trabajos que habilitan el bloqueo de objetos usando
AWS SDK for Java. En el código, reemplace cualquier valor de variable por aquellos que se adapten
a sus necesidades. También debe tener un manifiesto CSV que identifique los objetos para su trabajo
Operaciones por lotes de S3. Para obtener más información, consulte the section called “Especificar un
manifiesto” (p. 547).

Debe realizar los pasos siguientes:

1. Crear un rol de IAM y asignar permisos Operaciones por lotes de S3 para ejecutarlo. Este paso es
obligatorio para todos los trabajos Operaciones por lotes de S3.
2. Configurar Operaciones por lotes de S3 con S3 Bloqueo de objetos para ejecutarlo.

Permite que el rol realice lo siguiente:

1. Ejecute Bloqueo de objetos en el bucket de S3 que contiene los objetos de destino en los que
desea ejecutar Operaciones por lotes.
2. Lea el bucket de S3 donde se encuentran el archivo CSV de manifiesto y los objetos.
3. Escriba los resultados del trabajo Operaciones por lotes de S3 en el bucket de informes.

public void createObjectLockRole() {


final String roleName = "bops-object-lock";

final String trustPolicy = "{" +


" \"Version\": \"2012-10-17\", " +
" \"Statement\": [ " +
" { " +
" \"Effect\": \"Allow\", " +
" \"Principal\": { " +
" \"Service\": [" +
" \"batchoperations.s3.amazonaws.com\"" +
" ]" +
" }, " +
" \"Action\": \"sts:AssumeRole\" " +
" } " +
" ]" +
"}";

final String bopsPermissions = "{" +


" \"Version\": \"2012-10-17\"," +
" \"Statement\": [" +
" {" +
" \"Effect\": \"Allow\"," +
" \"Action\": \"s3:GetBucketObjectLockConfiguration\"," +

Versión de API 2006-03-01


594
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

" \"Resource\": [" +


" \"arn:aws:s3:::ManifestBucket\"" +
" ]" +
" }," +
" {" +
" \"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/*\"" +
" ]" +
" }" +
" ]" +
"}";

final AmazonIdentityManagement iam =


AmazonIdentityManagementClientBuilder.defaultClient();

final CreateRoleRequest createRoleRequest = new CreateRoleRequest()


.withAssumeRolePolicyDocument(bopsPermissions)
.withRoleName(roleName);

final CreateRoleResult createRoleResult = iam.createRole(createRoleRequest);

final PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest()


.withPolicyDocument(bopsPermissions)
.withPolicyName("bops-permissions")
.withRoleName(roleName);

final PutRolePolicyResult putRolePolicyResult =


iam.putRolePolicy(putRolePolicyRequest);
}

Temas
• Utilizar Operaciones por lotes de S3 con retención de S3 Bloqueo de objetos (p. 595)
• Utilizar Operaciones por lotes de S3 con la retención legal de S3 Bloqueo de objetos (p. 600)

Utilizar Operaciones por lotes de S3 con retención de S3 Bloqueo de objetos


El siguiente ejemplo permite que la regla establezca la retención de S3 Bloqueo de objetos para los objetos
en el bucket del manifiesto.

Actualizar el rol para incluir permisos de s3:PutObjectRetention de modo que pueda ejecutar la
retención de Bloqueo de objetos en los objetos del bucket.

public void allowPutObjectRetention() {


final String roleName = "bops-object-lock";

final String retentionPermissions = "{" +

Versión de API 2006-03-01


595
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

" \"Version\": \"2012-10-17\"," +


" \"Statement\": [" +
" {" +
" \"Effect\": \"Allow\"," +
" \"Action\": [" +
" \"s3:PutObjectRetention\"" +
" ]," +
" \"Resource\": [" +
" \"arn:aws:s3:::ManifestBucket*\"" +
" ]" +
" }" +
" ]" +
"}";

final AmazonIdentityManagement iam =


AmazonIdentityManagementClientBuilder.defaultClient();

final PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest()


.withPolicyDocument(retentionPermissions)
.withPolicyName("retention-permissions")
.withRoleName(roleName);

final PutRolePolicyResult putRolePolicyResult =


iam.putRolePolicy(putRolePolicyRequest);
}

Utilizar Operaciones por lotes de S3 con el modo de cumplimiento de la retención de S3 Bloqueo


de objetos
El siguiente ejemplo se basa en los ejemplos anteriores de creación de una política de confianza y en
establecer permisos de configuración de Operaciones por lotes de S3 y S3 Bloqueo de objetos en sus
objetos. En este ejemplo se establece el modo de retención en COMPLIANCE y la retain until date
del 1 de enero de 2020, se crea un trabajo para objetos de destino en el bucket del manifiesto y se informa
de los resultados en el bucket de informes que ha identificado.

public String createComplianceRetentionJob(final AWSS3ControlClient awss3ControlClient)


throws ParseException {
final String manifestObjectArn = "arn:aws:s3:::ManifestBucket/complaince-objects-
manifest.csv";
final String manifestObjectVersionId = "your-object-version-Id";

final JobManifestLocation manifestLocation = new JobManifestLocation()


.withObjectArn(manifestObjectArn)
.withETag(manifestObjectVersionId);

final JobManifestSpec manifestSpec =


new JobManifestSpec()
.withFormat(JobManifestFormat.S3BatchOperations_CSV_20180820)
.withFields("Bucket", "Key");

final JobManifest manifestToPublicApi = new JobManifest()


.withLocation(manifestLocation)
.withSpec(manifestSpec);

final String jobReportBucketArn = "arn:aws:s3:::ReportBucket";


final String jobReportPrefix = "reports/compliance-objects-bops";

final JobReport jobReport = new JobReport()


.withEnabled(true)
.withReportScope(JobReportScope.AllTasks)
.withBucket(jobReportBucketArn)
.withPrefix(jobReportPrefix)
.withFormat(JobReportFormat.Report_CSV_20180820);

Versión de API 2006-03-01


596
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

final SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");


final Date janFirst = format.parse("01/01/2020");

final JobOperation jobOperation = new JobOperation()


.withS3PutObjectRetention(new S3SetObjectRetentionOperation()
.withRetention(new S3Retention()
.withMode(S3ObjectLockRetentionMode.COMPLIANCE)
.withRetainUntilDate(janFirst)));

final String roleArn = "arn:aws:iam::123456789012:role/bops-object-lock";


final Boolean requiresConfirmation = true;
final int priority = 10;

final CreateJobRequest request = new CreateJobRequest()


.withAccountId("123456789012")
.withDescription("Set compliance retain-until to 1 Jan 2020")
.withManifest(manifestToPublicApi)
.withOperation(jobOperation)
.withPriority(priority)
.withRoleArn(roleArn)
.withReport(jobReport)
.withConfirmationRequired(requiresConfirmation);

final CreateJobResult result = awss3ControlClient.createJob(request);

return result.getJobId();
}

El siguiente ejemplo extiende la retain until date del modo COMPLIANCE hasta el 15 de enero de
2020.

public String createExtendComplianceRetentionJob(final AWSS3ControlClient


awss3ControlClient) throws ParseException {
final String manifestObjectArn = "arn:aws:s3:::ManifestBucket/complaince-objects-
manifest.csv";
final String manifestObjectVersionId = "15ad5ba069e6bbc465c77bf83d541385";

final JobManifestLocation manifestLocation = new JobManifestLocation()


.withObjectArn(manifestObjectArn)
.withETag(manifestObjectVersionId);

final JobManifestSpec manifestSpec =


new JobManifestSpec()
.withFormat(JobManifestFormat.S3BatchOperations_CSV_20180820)
.withFields("Bucket", "Key");

final JobManifest manifestToPublicApi = new JobManifest()


.withLocation(manifestLocation)
.withSpec(manifestSpec);

final String jobReportBucketArn = "arn:aws:s3:::ReportBucket";


final String jobReportPrefix = "reports/compliance-objects-bops";

final JobReport jobReport = new JobReport()


.withEnabled(true)
.withReportScope(JobReportScope.AllTasks)
.withBucket(jobReportBucketArn)
.withPrefix(jobReportPrefix)
.withFormat(JobReportFormat.Report_CSV_20180820);

final SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");


final Date jan15th = format.parse("15/01/2020");

final JobOperation jobOperation = new JobOperation()

Versión de API 2006-03-01


597
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

.withS3PutObjectRetention(new S3SetObjectRetentionOperation()
.withRetention(new S3Retention()
.withMode(S3ObjectLockRetentionMode.COMPLIANCE)
.withRetainUntilDate(jan15th)));

final String roleArn = "arn:aws:iam::123456789012:role/bops-object-lock";


final Boolean requiresConfirmation = true;
final int priority = 10;

final CreateJobRequest request = new CreateJobRequest()


.withAccountId("123456789012")
.withDescription("Extend compliance retention to 15 Jan 2020")
.withManifest(manifestToPublicApi)
.withOperation(jobOperation)
.withPriority(priority)
.withRoleArn(roleArn)
.withReport(jobReport)
.withConfirmationRequired(requiresConfirmation);

final CreateJobResult result = awss3ControlClient.createJob(request);

return result.getJobId();
}

Utilizar Operaciones por lotes de S3 con el modo Gobierno de la retención de S3 Bloqueo de


objetos
El siguiente ejemplo se basa en el ejemplo anterior de creación de una política de confianza y en
establecer permisos de configuración de Operaciones por lotes de S3 y S3 Bloqueo de objetos. Muestra
cómo aplicar el control de S3 Bloqueo de objetos retención con el retain until date conjunto hasta el
30 de enero de 2020 en múltiples objetos. Crea un trabajo Operaciones por lotes que utiliza el bucket del
manifiesto e informa de los resultados en el bucket de informes.

public String createGovernanceRetentionJob(final AWSS3ControlClient awss3ControlClient)


throws ParseException {
final String manifestObjectArn = "arn:aws:s3:::ManifestBucket/governance-objects-
manifest.csv";
final String manifestObjectVersionId = "15ad5ba069e6bbc465c77bf83d541385";

final JobManifestLocation manifestLocation = new JobManifestLocation()


.withObjectArn(manifestObjectArn)
.withETag(manifestObjectVersionId);

final JobManifestSpec manifestSpec =


new JobManifestSpec()
.withFormat(JobManifestFormat.S3BatchOperations_CSV_20180820)
.withFields("Bucket", "Key");

final JobManifest manifestToPublicApi = new JobManifest()


.withLocation(manifestLocation)
.withSpec(manifestSpec);

final String jobReportBucketArn = "arn:aws:s3:::ReportBucket";


final String jobReportPrefix = "reports/governance-objects";

final JobReport jobReport = new JobReport()


.withEnabled(true)
.withReportScope(JobReportScope.AllTasks)
.withBucket(jobReportBucketArn)
.withPrefix(jobReportPrefix)
.withFormat(JobReportFormat.Report_CSV_20180820);

final SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");


final Date jan30th = format.parse("30/01/2020");

Versión de API 2006-03-01


598
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

final JobOperation jobOperation = new JobOperation()


.withS3PutObjectRetention(new S3SetObjectRetentionOperation()
.withRetention(new S3Retention()
.withMode(S3ObjectLockRetentionMode.GOVERNANCE)
.withRetainUntilDate(jan30th)));

final String roleArn = "arn:aws:iam::123456789012:role/bops-object-lock";


final Boolean requiresConfirmation = true;
final int priority = 10;

final CreateJobRequest request = new CreateJobRequest()


.withAccountId("123456789012")
.withDescription("Put governance retention")
.withManifest(manifestToPublicApi)
.withOperation(jobOperation)
.withPriority(priority)
.withRoleArn(roleArn)
.withReport(jobReport)
.withConfirmationRequired(requiresConfirmation);

final CreateJobResult result = awss3ControlClient.createJob(request);

return result.getJobId();
}

El siguiente ejemplo se basa en el ejemplo anterior de creación de una política de confianza y en


establecer permisos de configuración de Operaciones por lotes de S3 y S3 Bloqueo de objetos. Muestra
cómo omitir el control de retención en varios objetos y crea un trabajo Operaciones por lotes que utiliza el
bucket del manifiesto e informa de los resultados en el bucket de informes.

public void allowBypassGovernance() {


final String roleName = "bops-object-lock";

final String bypassGovernancePermissions = "{" +


" \"Version\": \"2012-10-17\"," +
" \"Statement\": [" +
" {" +
" \"Effect\": \"Allow\"," +
" \"Action\": [" +
" \"s3:BypassGovernanceRetention\"" +
" ]," +
" \"Resource\": [" +
" \"arn:aws:s3:::ManifestBucket/*\"" +
" ]" +
" }" +
" ]" +
"}";

final AmazonIdentityManagement iam =


AmazonIdentityManagementClientBuilder.defaultClient();

final PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest()


.withPolicyDocument(bypassGovernancePermissions)
.withPolicyName("bypass-governance-permissions")
.withRoleName(roleName);

final PutRolePolicyResult putRolePolicyResult =


iam.putRolePolicy(putRolePolicyRequest);
}
public String createRemoveGovernanceRetentionJob(final AWSS3ControlClient
awss3ControlClient) {
final String manifestObjectArn = "arn:aws:s3:::ManifestBucket/governance-objects-
manifest.csv";

Versión de API 2006-03-01


599
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

final String manifestObjectVersionId = "15ad5ba069e6bbc465c77bf83d541385";

final JobManifestLocation manifestLocation = new JobManifestLocation()


.withObjectArn(manifestObjectArn)
.withETag(manifestObjectVersionId);

final JobManifestSpec manifestSpec =


new JobManifestSpec()
.withFormat(JobManifestFormat.S3BatchOperations_CSV_20180820)
.withFields("Bucket", "Key");

final JobManifest manifestToPublicApi = new JobManifest()


.withLocation(manifestLocation)
.withSpec(manifestSpec);

final String jobReportBucketArn = "arn:aws:s3:::ReportBucket";


final String jobReportPrefix = "reports/bops-governance";

final JobReport jobReport = new JobReport()


.withEnabled(true)
.withReportScope(JobReportScope.AllTasks)
.withBucket(jobReportBucketArn)
.withPrefix(jobReportPrefix)
.withFormat(JobReportFormat.Report_CSV_20180820);

final JobOperation jobOperation = new JobOperation()


.withS3PutObjectRetention(new S3SetObjectRetentionOperation()
.withRetention(new S3Retention()));

final String roleArn = "arn:aws:iam::123456789012:role/bops-object-lock";


final Boolean requiresConfirmation = true;
final int priority = 10;

final CreateJobRequest request = new CreateJobRequest()


.withAccountId("123456789012")
.withDescription("Remove governance retention")
.withManifest(manifestToPublicApi)
.withOperation(jobOperation)
.withPriority(priority)
.withRoleArn(roleArn)
.withReport(jobReport)
.withConfirmationRequired(requiresConfirmation);

final CreateJobResult result = awss3ControlClient.createJob(request);

return result.getJobId();
}

Utilizar Operaciones por lotes de S3 con la retención legal de S3 Bloqueo de


objetos
El siguiente ejemplo se basa en los ejemplos anteriores de creación de una política de confianza y en
establecer permisos de configuración de Operaciones por lotes de S3 y S3 Bloqueo de objetos. Muestra
cómo deshabilitar la retención legal de Bloqueo de objetos en objetos usando Operaciones por lotes.

En el ejemplo se actualiza primero el rol para conceder permisos de s3:PutObjectLegalHold, se crea


un trabajo Operaciones por lotes que desactiva (quita) la retención legal de los objetos identificados en el
manifiesto e informa sobre él.

public void allowPutObjectLegalHold() {


final String roleName = "bops-object-lock";

final String legalHoldPermissions = "{" +

Versión de API 2006-03-01


600
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de Operaciones por lotes usando Java

" \"Version\": \"2012-10-17\"," +


" \"Statement\": [" +
" {" +
" \"Effect\": \"Allow\"," +
" \"Action\": [" +
" \"s3:PutObjectLegalHold\"" +
" ]," +
" \"Resource\": [" +
" \"arn:aws:s3:::ManifestBucket/*\"" +
" ]" +
" }" +
" ]" +
"}";

final AmazonIdentityManagement iam =


AmazonIdentityManagementClientBuilder.defaultClient();

final PutRolePolicyRequest putRolePolicyRequest = new PutRolePolicyRequest()


.withPolicyDocument(legalHoldPermissions)
.withPolicyName("legal-hold-permissions")
.withRoleName(roleName);

final PutRolePolicyResult putRolePolicyResult =


iam.putRolePolicy(putRolePolicyRequest);
}

Utilice el ejemplo siguiente si desea desactivar la retención legal.

public String createLegalHoldOffJob(final AWSS3ControlClient awss3ControlClient) {


final String manifestObjectArn = "arn:aws:s3:::ManifestBucket/legalhold-object-
manifest.csv";
final String manifestObjectVersionId = "15ad5ba069e6bbc465c77bf83d541385";

final JobManifestLocation manifestLocation = new JobManifestLocation()


.withObjectArn(manifestObjectArn)
.withETag(manifestObjectVersionId);

final JobManifestSpec manifestSpec =


new JobManifestSpec()
.withFormat(JobManifestFormat.S3BatchOperations_CSV_20180820)
.withFields("Bucket", "Key");

final JobManifest manifestToPublicApi = new JobManifest()


.withLocation(manifestLocation)
.withSpec(manifestSpec);

final String jobReportBucketArn = "arn:aws:s3:::ReportBucket";


final String jobReportPrefix = "reports/legalhold-objects-bops";

final JobReport jobReport = new JobReport()


.withEnabled(true)
.withReportScope(JobReportScope.AllTasks)
.withBucket(jobReportBucketArn)
.withPrefix(jobReportPrefix)
.withFormat(JobReportFormat.Report_CSV_20180820);

final JobOperation jobOperation = new JobOperation()


.withS3PutObjectLegalHold(new S3SetObjectLegalHoldOperation()
.withLegalHold(new S3ObjectLockLegalHold()
.withStatus(S3ObjectLockLegalHoldStatus.OFF)));

final String roleArn = "arn:aws:iam::123456789012:role/bops-object-lock";


final Boolean requiresConfirmation = true;
final int priority = 10;

Versión de API 2006-03-01


601
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de etiquetas de trabajo

final CreateJobRequest request = new CreateJobRequest()


.withAccountId("123456789012")
.withDescription("Turn off legal hold")
.withManifest(manifestToPublicApi)
.withOperation(jobOperation)
.withPriority(priority)
.withRoleArn(roleArn)
.withReport(jobReport)
.withConfirmationRequired(requiresConfirmation);

final CreateJobResult result = awss3ControlClient.createJob(request);

return result.getJobId();
}

Ejemplo: Uso de etiquetas de trabajo para controlar


los permisos de Operaciones por lotes de S3
Para ayudarle a administrar sus trabajos de Operaciones por lotes de S3, puede agregar etiquetas de
trabajo. Con las etiquetas de trabajo, puede controlar el acceso a sus trabajos de Operaciones por lotes y
hacer que las etiquetas se apliquen cuando se cree cualquier trabajo.

Puede aplicar hasta 50 etiquetas de trabajo a cada trabajo de Operaciones por lotes. Esto le permite
establecer políticas muy granulares que restringen el conjunto de usuarios que pueden editar el trabajo.
Las etiquetas de trabajo pueden conceder o limitar la capacidad de un usuario para cancelar un trabajo,
activar un trabajo en estado de confirmación o cambiar el nivel de prioridad de un trabajo. Además,
puede exigir que las etiquetas se apliquen a todos los trabajos nuevos y especificar los pares clave-valor
permitidos para las etiquetas. Puede expresar todas estas condiciones utilizando el mismo lenguaje de
política de IAM. Para obtener más información, consulte Acciones, recursos y claves de condiciones de
Amazon S3 (p. 388).

En el ejemplo siguiente se muestra cómo puede utilizar etiquetas de trabajo de Operaciones por lotes
de S3 para conceder a los usuarios permiso para crear y editar solo los trabajos que se ejecutan en un
departamento específico (por ejemplo, el departamento Finanzas o Conformidad ). También puede asignar
trabajos en función de la etapa de desarrollo con la que están relacionados, como Control de calidad o
Producción.

En este ejemplo, se utilizan etiquetas de trabajo de Operaciones por lotes de S3 en las políticas de AWS
Identity and Access Management (IAM) para conceder a los usuarios permiso para crear y editar solo los
trabajos que se ejecutan en su departamento. Los trabajos se asignan en función de la etapa de desarrollo
con la que están relacionados, como Control de calidad o Producción.

En este ejemplo se utilizan los siguientes departamentos, cada uno de los cuales usa las Operaciones por
lotes de distinta forma:

• Finanzas
• Conformidad
• Inteligencia de negocio
• Diseño

Control del acceso mediante la asignación de etiquetas a


usuarios y recursos
En este escenario, los administradores están utilizando el control de acceso basado en atributos (ABAC).
El ABAC es una estrategia de autorización de IAM que define los permisos adjuntando etiquetas tanto a los
usuarios de IAM como a los recursos de AWS.

Versión de API 2006-03-01


602
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de etiquetas de trabajo

A los usuarios y los trabajos se les asigna una de las siguientes etiquetas de departamento:

Clave : Valor

• department : Finance
• department : Compliance
• department : BusinessIntelligence
• department : Engineering
Note

Las claves y los valores de las etiquetas de trabajo distinguen entre mayúsculas y minúsculas.

Mediante la estrategia de control de acceso de ABAC, se otorga a un usuario del departamento de


Finanzas permiso para crear y administrar trabajos de Operaciones por lotes de S3 en su departamento al
asociar la etiqueta department=Finance a su usuario de IAM.

Además, puede adjuntar una política administrada al usuario de IAM que permita a cualquier usuario
de su empresa crear o modificar trabajos de Operaciones por lotes de S3 dentro de sus respectivos
departamentos.

La política de este ejemplo incluye tres instrucciones de políticas:

• La primera instrucción de la política permite al usuario crear un trabajo de Operaciones por lotes siempre
que la solicitud de creación de trabajo incluya una etiqueta de trabajo que coincida con su departamento
respectivo. Esto se expresa utilizando la sintaxis "${aws:PrincipalTag/department}", que se
reemplaza por la etiqueta de departamento del usuario de IAM en el momento de la evaluación de
políticas. La condición se cumple cuando el valor proporcionado para la etiqueta de departamento en la
solicitud ("aws:RequestTag/department") coincide con el departamento del usuario.
• La segunda instrucción de la política permite a los usuarios cambiar la prioridad de los trabajos
o actualizar el estado de un trabajo siempre que el trabajo que está actualizando coincida con el
departamento del usuario.
• La tercera declaración permite a un usuario actualizar las etiquetas de un trabajo Operaciones por lotes
en cualquier momento a través de una solicitud PutJobTagging siempre y cuando (1) se conserve su
etiqueta de departamento y (2) el trabajo que está actualizando esté dentro de su departamento.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateJob",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}"

}
}
},
{
"Effect": "Allow",
"Action": [
"s3:UpdateJobPriority",
"s3:UpdateJobStatus"
],
"Resource": "*",
"Condition": {

Versión de API 2006-03-01


603
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de etiquetas de trabajo

"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/
department}"
}
}
},
{
"Effect": "Allow",
"Action": "s3:PutJobTagging",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/
department}",
"aws:ResourceTag/department": "${aws:PrincipalTag/
department}"
}
}
}
]
}

Etiquetado de trabajos de Operaciones por lotes por etapa y


aplicación de límites a la prioridad del trabajo
Todos los trabajos de Operaciones por lotes de S3 tienen una prioridad numérica, que Amazon S3 utiliza
para decidir en qué orden ejecutar los trabajos. En este ejemplo, se restringe la prioridad máxima que la
mayoría de los usuarios pueden asignar a los trabajos, con rangos de prioridad más altos reservados para
un conjunto limitado de usuarios privilegiados, de la siguiente manera:

• Rango de prioridad de fase de control de calidad (bajo): 1-100


• Rango de prioridad de la etapa de producción (alto): 1-300

Para ello, introduzca un nuevo conjunto de etiquetas que represente la etapa del trabajo:

Clave : Valor

• stage : QA
• stage : Production

Creación y actualización de trabajos de baja prioridad dentro de un departamento


Esta política introduce dos nuevas restricciones a la creación y actualización de trabajos de Operaciones
por lotes de S3, además de la restricción basada en departamentos:

• Permite a los usuarios crear o actualizar trabajos en su departamento con una nueva condición que
requiere que el trabajo incluya la etiqueta stage=QA.
• Permite a los usuarios crear o actualizar la prioridad de un trabajo hasta una nueva prioridad máxima de
100.

{
        "Version": "2012-10-17",
        "Statement": [
        {
        "Effect": "Allow",
        "Action": "s3:CreateJob",
        "Resource": "*",

Versión de API 2006-03-01


604
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de etiquetas de trabajo

        "Condition": {
            "StringEquals": {
                "aws:RequestTag/department": "${aws:PrincipalTag/department}",
                "aws:RequestTag/stage": "QA"
            },
            "NumericLessThanEquals": {
                "s3:RequestJobPriority": 100
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:UpdateJobStatus"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:ResourceTag/department": "${aws:PrincipalTag/department}"
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": "s3:UpdateJobPriority",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:ResourceTag/department": "${aws:PrincipalTag/department}",
                "aws:ResourceTag/stage": "QA"
            },
            "NumericLessThanEquals": {
                "s3:RequestJobPriority": 100
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": "s3:PutJobTagging",
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:RequestTag/department" : "${aws:PrincipalTag/department}",
                "aws:ResourceTag/department": "${aws:PrincipalTag/department}",
                "aws:RequestTag/stage": "QA",
                "aws:ResourceTag/stage": "QA"
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": "s3:GetJobTagging",
        "Resource": "*"
    }
    ]
}

Creación y actualización de trabajos de alta prioridad dentro de un departamento


Es posible que un pequeño número de usuarios requiera la capacidad de crear trabajos de alta prioridad
en Control de calidad o Producción. Para dar soporte a esta necesidad, cree una política administrada que
se adapte a la política de baja prioridad de la sección anterior.

Esta política hace lo siguiente:

Versión de API 2006-03-01


605
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de etiquetas de trabajo

• Permite a los usuarios crear o actualizar trabajos en su departamento con las etiquetas stage=QA o
stage=Production.
• Permite a los usuarios crear o actualizar la prioridad de un trabajo hasta un máximo de 300.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:CreateJob",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:RequestTag/stage": [
"QA",
"Production"
]
},
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}"

},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 300
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:UpdateJobStatus"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"

}
}
},
{
"Effect": "Allow",
"Action": "s3:UpdateJobPriority",
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:ResourceTag/stage": [
"QA",
"Production"
]
},
"StringEquals": {
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"

},
"NumericLessThanEquals": {
"s3:RequestJobPriority": 300
}
}
},
{
"Effect": "Allow",
"Action": "s3:PutJobTagging",

Versión de API 2006-03-01


606
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de informes de finalización

"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/department": "${aws:PrincipalTag/department}",
"aws:ResourceTag/department": "${aws:PrincipalTag/department}"

},
"ForAnyValue:StringEquals": {
"aws:RequestTag/stage": [
"QA",
"Production"
],
"aws:ResourceTag/stage": [
"QA",
"Production"
]
}
}
}
]
}

Ejemplo: Solicitar informes de finalización de


Operaciones por lotes de S3
Al crear un trabajo de las Operaciones por lotes de 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, Operaciones por lotes de S3 genera 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 fallida se puede utilizar para diagnosticar problemas que surgen 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"

Versión de API 2006-03-01


607
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de informes de finalización

Example — Informes de tareas que producen error

Los informes de tareas fallidas contienen la siguiente información para todas las tareas fallidas :

• Bucket
• Key
• VersionId
• TaskStatus
• ErrorCode
• HTTPStatusCode
• ResultMessage

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.

awsexamplebucket1,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""}"
awsexamplebucket1,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""}"
awsexamplebucket1,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""}"
awsexamplebucket1,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""}"
awsexamplebucket1,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""}"
awsexamplebucket1,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 lo siguiente para las tareas finalizadas:

• Bucket
• Key
• VersionId
• TaskStatus
• ErrorCode
• HTTPStatusCode
• ResultMessage

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 S3 y, a continuación, se
escribe en el informe de finalización final.

Versión de API 2006-03-01


608
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de copias entre cuentas

awsexamplebucket1,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'}}}"
awsexamplebucket1,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'}}}"
awsexamplebucket1,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'}}}"

Ejemplo: Copiar objetos entre cuentas de AWS


mediante Operaciones por lotes de S3
Puede utilizar las Operaciones por lotes de S3 para crear un trabajo de copia PUT para copiar objetos
en otra cuenta de AWS (la cuenta de destino). En las secciones siguientes, se explica cómo almacenar
y utilizar un manifiesto que se encuentra en otra cuenta de AWS. En la primera sección, 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 destino, como se muestra en la segunda sección.

Temas
• Usar un informe de inventario entregado a la cuenta de destino para copiar objetos en cuentas de
AWS (p. 609)
• Usar un manifiesto CSV almacenado en la cuenta de origen para copiar objetos entre cuentas de
AWS (p. 612)

Usar un informe de inventario entregado a la cuenta de destino


para copiar objetos en cuentas de AWS
Puede usar su inventario de Amazon S3 para entregar el informe de inventario a la cuenta de destino
para su uso durante la creación de trabajos. Para utilizar un manifiesto CSV en la cuenta de origen o

Versión de API 2006-03-01


609
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de copias entre cuentas

destino, consulte the section called “Usar un manifiesto CSV almacenado en la cuenta de origen para
copiar objetos entre cuentas de AWS” (p. 612).

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.

Se puede configurar el informe de inventario de Amazon S3 para que se entregue a otra cuenta de AWS.
Esto permite a las Operaciones por lotes de 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 se configura el inventario de Amazon S3? (p. 499).

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 Command Line Interface (AWS CLI) o los SDK de
AWS.

El siguiente procedimiento de la consola contiene los pasos de alto nivel para establecer permisos para un
trabajo Operaciones por lotes de S3. En este procedimiento, se copian objetos de una cuenta de origen a
una cuenta de destino, con el informe del inventario almacenado en la cuenta AWS de destino.

Para configurar el inventario de Amazon S3 para buckets de origen y destino pertenecientes a


distintas cuentas

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. 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.
3. 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).

A continuación, la consola muestra una política de bucket que se puede utilizar para el bucket de
destino.

Versión de API 2006-03-01


610
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de copias entre cuentas

4. Copie la política de bucket de destino que aparece en la consola.


5. 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.
6. En la cuenta de destino, cree un rol basado en la política de confianza de las Operaciones por
lotes de S3. Para obtener más información sobre la política de confianza, consulte Política de
confianza (p. 551).

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 de S3 y, a continuación, elija el caso
de uso S3 bucket Operaciones por lotes (Operaciones por lotes del 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.
7. 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 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",
"Statement": [
{

Versión de API 2006-03-01


611
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de copias entre cuentas

"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/*"
}
]
}

8. Una vez que el informe de inventario esté disponible, cree un trabajo de copia del objeto PUT de las
Operaciones por lotes de 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 Crear un trabajo de
Operaciones por lotes de S3 (p. 548).

Para obtener información sobre la creación de un trabajo utilizando la consola, consulte Crear un
trabajo de Operaciones por lotes de S3 en la Guía del usuario de la consola de Amazon Simple
Storage Service.

Usar un manifiesto CSV almacenado en la cuenta de origen para


copiar objetos entre cuentas de AWS
Puede utilizar un archivo CSV almacenado en otra cuenta de AWS como manifiesto para un trabajo
de las Operaciones por lotes de S3. Para utilizar un informe de inventario de S3, consulte the section
called “Usar un informe de inventario entregado a la cuenta de destino para copiar objetos en cuentas de
AWS” (p. 609).

En el siguiente procedimiento, se muestra cómo configurar los permisos cuando se utiliza un trabajo de las
Operaciones por lotes de 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
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. 551).

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.

Versión de API 2006-03-01


612
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de copias entre cuentas

{
"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:::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 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/*"

Versión de API 2006-03-01


613
Amazon Simple Storage Service Guía del desarrollador
Creación de reglas EventBridge para ver
eventos de trabajos Operaciones por lotes

}
]
}

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.
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 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 S3 en la cuenta de destino. Necesita el nombre de
recurso de Amazon (ARN) para el rol que ha creado en la cuenta de destino.

Para obtener información general sobre cómo crear un trabajo, consulte Crear un trabajo de
Operaciones por lotes de S3 (p. 548).

Para obtener información sobre la creación de un trabajo utilizando la consola, consulte Crear un
trabajo de Operaciones por lotes de S3 en la Guía del usuario de la consola de Amazon Simple
Storage Service.

Ejemplo: Seguimiento de un trabajo Operaciones por


lotes de S3 en Amazon EventBridge a través de AWS
CloudTrail
La actividad de trabajos de Operaciones por lotes de Amazon S3 se registra como eventos en AWS
CloudTrail. Puede crear una regla personalizada en Amazon EventBridge y enviar estos eventos al recurso
de notificación de destino de su elección, como Amazon Simple Notification Service (Amazon SNS).

Versión de API 2006-03-01


614
Amazon Simple Storage Service Guía del desarrollador
Creación de reglas EventBridge para ver
eventos de trabajos Operaciones por lotes

Note

Amazon EventBridge es la forma preferida de administrar los eventos. Amazon CloudWatch


Events y EventBridge son el mismo servicio y API subyacentes, pero EventBridge proporciona
más características. Los cambios que realice en CloudWatch o EventBridge aparecerán en cada
consola. Para obtener más información, consulte la Guía del usuario de Amazon EventBridge.

Temas
• Eventos de Operaciones por lotes de S3 emitidos a CloudTrail (p. 615)
• Uso de una regla EventBridge para realizar un seguimiento de eventos de trabajos Operaciones por
lotes de S3 (p. 616)

Eventos de Operaciones por lotes de S3 emitidos a CloudTrail


Cuando se crea un trabajo Operaciones por lotes, se registra como un evento JobCreated en CloudTrail.
A medida que se ejecuta el trabajo, cambia de estado durante el procesamiento y se registran otros
eventos de JobStatusChanged en CloudTrail. Puede ver estos eventos en la consola de CloudTrail. Para
obtener más información sobre CloudTrail, consulte la AWS CloudTrail User Guide.
Note

Solo los eventos status-change de trabajos Operaciones por lotes de S3 se registran en


CloudTrail.

Example — Evento de finalización de trabajo Operaciones por lotes de S3 registrado por


CloudTrail

{
"eventVersion": "1.05",
"userIdentity": {
"accountId": "123456789012",
"invokedBy": "s3.amazonaws.com"
},
"eventTime": "2020-02-05T18:25:30Z",
"eventSource": "s3.amazonaws.com",
"eventName": "JobStatusChanged",
"awsRegion": "us-west-2",
"sourceIPAddress": "s3.amazonaws.com",
"userAgent": "s3.amazonaws.com",
"requestParameters": null,
"responseElements": null,
"eventID": "f907577b-bf3d-4c53-b9ed-8a83a118a554",
"readOnly": false,
"eventType": "AwsServiceEvent",
"recipientAccountId": "123412341234",
"serviceEventDetails": {
"jobId": "d6e58ec4-897a-4b6d-975f-10d7f0fb63ce",
"jobArn": "arn:aws:s3:us-west-2:181572960644:job/
d6e58ec4-897a-4b6d-975f-10d7f0fb63ce",
"status": "Complete",
"jobEventId": "b268784cf0a66749f1a05bce259804f5",
"failureCodes": [],
"statusChangeReason": []
}
}

Versión de API 2006-03-01


615
Amazon Simple Storage Service Guía del desarrollador
Creación de reglas EventBridge para ver
eventos de trabajos Operaciones por lotes

Uso de una regla EventBridge para realizar un seguimiento de


eventos de trabajos Operaciones por lotes de S3
En el ejemplo siguiente se muestra cómo crear una regla en Amazon EventBridge para capturar eventos
Operaciones por lotes de S3 registrados por AWS CloudTrail en un destino de su elección.

Para ello, cree una regla siguiendo todos los pasos de Crear una regla EventBridge que desencadena
en una llamada de la API de AWS usando CloudTrail. Puede pegar la siguiente política de patrones de
eventos personalizados Operaciones por lotes de S3 cuando corresponda y elegir el servicio de destino
que desee.

Política de patrones de eventos personalizados de Operaciones por lotes de S3

{
"source": [
"aws.s3"
],
"detail-type": [
"AWS Service Event via CloudTrail"
],
"detail": {
"eventSource": [
"s3.amazonaws.com"
],
"eventName": [
"JobCreated",
"JobStatusChanged"
]
}
}

Los siguientes ejemplos son dos eventos de Operaciones por lotes que se enviaron a Amazon Simple
Queue Service (Amazon SQS) desde una regla de evento EventBridge. Un trabajo Operaciones por lotes
pasa por muchos estados diferentes durante el procesamiento (New, Preparing, Active, etc.), por lo
que puede esperar recibir varios mensajes para cada trabajo.

Example — Ejemplo de evento JobCreated

{
"version": "0",
"id": "51dc8145-541c-5518-2349-56d7dffdf2d8",
"detail-type": "AWS Service Event via CloudTrail",
"source": "aws.s3",
"account": "123456789012",
"time": "2020-02-27T15:25:49Z",
"region": "us-east-1",
"resources": [],
"detail": {
"eventVersion": "1.05",
"userIdentity": {
"accountId": "11112223334444",
"invokedBy": "s3.amazonaws.com"
},
"eventTime": "2020-02-27T15:25:49Z",
"eventSource": "s3.amazonaws.com",
"eventName": "JobCreated",
"awsRegion": "us-east-1",
"sourceIPAddress": "s3.amazonaws.com",
"userAgent": "s3.amazonaws.com",
"eventID": "7c38220f-f80b-4239-8b78-2ed867b7d3fa",
"readOnly": false,

Versión de API 2006-03-01


616
Amazon Simple Storage Service Guía del desarrollador
Creación de reglas EventBridge para ver
eventos de trabajos Operaciones por lotes

"eventType": "AwsServiceEvent",
"serviceEventDetails": {
"jobId": "e849b567-5232-44be-9a0c-40988f14e80c",
"jobArn": "arn:aws:s3:us-east-1:181572960644:job/
e849b567-5232-44be-9a0c-40988f14e80c",
"status": "New",
"jobEventId": "f177ff24f1f097b69768e327038f30ac",
"failureCodes": [],
"statusChangeReason": []
}
}
}

Example — Ejemplo de evento JobStatusChanged para cuando se ha completado un trabajo

{
"version": "0",
"id": "c8791abf-2af8-c754-0435-fd869ce25233",
"detail-type": "AWS Service Event via CloudTrail",
"source": "aws.s3",
"account": "123456789012",
"time": "2020-02-27T15:26:42Z",
"region": "us-east-1",
"resources": [],
"detail": {
"eventVersion": "1.05",
"userIdentity": {
"accountId": "1111222233334444",
"invokedBy": "s3.amazonaws.com"
},
"eventTime": "2020-02-27T15:26:42Z",
"eventSource": "s3.amazonaws.com",
"eventName": "JobStatusChanged",
"awsRegion": "us-east-1",
"sourceIPAddress": "s3.amazonaws.com",
"userAgent": "s3.amazonaws.com",
"eventID": "0238c1f7-c2b0-440b-8dbd-1ed5e5833afb",
"readOnly": false,
"eventType": "AwsServiceEvent",
"serviceEventDetails": {
"jobId": "e849b567-5232-44be-9a0c-40988f14e80c",
"jobArn": "arn:aws:s3:us-east-1:181572960644:job/
e849b567-5232-44be-9a0c-40988f14e80c",
"status": "Complete",
"jobEventId": "51f5ac17dba408301d56cd1b2c8d1e9e",
"failureCodes": [],
"statusChangeReason": []
}
}
}

Versión de API 2006-03-01


617
Amazon Simple Storage Service Guía del desarrollador
Puntos de enlace de sitio web

Alojar un sitio web estático en


Amazon S3
Puede utilizar Amazon S3 para alojar un sitio web estático. 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, pero AWS tiene otros recursos de alojamiento de sitios web dinámicos. Para
obtener más información sobre el alojamiento de sitios web en AWS, consulte Alojamiento web.

Puede usar la Consola de administración de AWS sin introducir ningún código para configurar el bucket de
alojamiento del sitio web estático. También puede crear, actualizar y eliminar la configuración de sitio web
mediante programación 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.

<title></title>
Para alojar un sitio web estático en Amazon S3; debe configurar un bucket de Amazon S3 para el
alojamiento de sitio web y cargar el contenido del sitio web en el bucket. Cuando configura un bucket como
sitio web estático, debe habilitar el alojamiento de sitios web (p. 621), establecer permisos (p. 624)
y crear y añadir un documento de índice (p. 622). En función de los requisitos del sitio web, también
puede configurar redirecciones (p. 630), registro del tráfico web (p. 627) y un documento de error
personalizado (p. 628).

Después de configurar el bucket como un sitio web estático, puede acceder al bucket a través de los
puntos de enlace del sitio web de Amazon S3 específicos de la región de AWS para su bucket. 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, consulte Puntos de enlace de sitio web (p. 618).

Para obtener más información, que incluye instrucciones y explicaciones paso a paso, vea los siguientes
temas:

Temas
• Puntos de enlace de sitio web (p. 618)
• Configurar un bucket como un sitio web estático mediante la Consola de administración de
AWS (p. 621)
• Configurar mediante programación un bucket como un sitio web estático (p. 636)
• Tutoriales de ejemplo: alojamiento de sitios web en Amazon S3 (p. 641)

Puntos de enlace de sitio web


Cuando configura el bucket como un sitio web estático, el sitio web está disponible en el punto de enlace
del sitio web de la región específica de AWS del bucket. 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 de un sitio web y un punto de
enlace de la API de REST (p. 620).

En función de la región, los puntos de enlace del sitio web de Amazon S3 siguen uno de estos dos
formatos.

Versión de API 2006-03-01


618
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de puntos de enlace de sitio web

• s3-website guion (-) región: http://bucket-name.s3-website-Region.amazonaws.com


• s3-web punto (.) Región: http://bucket-name.s3-website.Region.amazonaws.com

Estas URL devuelven el documento de índice predeterminado que configuró para el sitio web. Para
obtener una lista completa de los puntos de enlace de sitio web de Amazon S3, consulte Puntos de enlace
de sitio web de Amazon S3.

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 editar la configuración de acceso
público del bloque de S3 del bucket. Para obtener más información, consulte Usar Block Public Access
de Amazon S3 (p. 488). A continuación, use una política de bucket o una lista de control de acceso (ACL)
en un objeto para conceder los permisos necesarios. Para obtener más información, consulte Configurar
permisos para el acceso a sitios web (p. 624).
Important

Los puntos de enlace de sitio web de Amazon S3 no admiten HTTPS. Para obtener información
acerca del uso de HTTPS con un bucket de Amazon S3, consulte lo siguiente:

• ¿Cómo utilizo CloudFront para atender solicitudes HTTPS para mi bucket de Amazon S3?
• Exigir HTTPS para la comunicación entre CloudFront y su origen de Amazon S3

Los buckets de pago por solicitante no permiten el acceso mediante puntos de enlace de sitio
web. Cualquier solicitud a un bucket de este tipo recibe una respuesta 403 Acceso denegado .
Para obtener más información, consulte Buckets de pago por solicitante (p. 80).

Temas
• Ejemplos de puntos de enlace de sitio web (p. 619)
• Agregar un CNAME DNS (p. 620)
• Usar un dominio personalizado con Route 53 (p. 620)
• Diferencias clave entre el punto de enlace de un sitio web y un punto de enlace de la API de
REST (p. 620)

Ejemplos de puntos de enlace de sitio web


Los siguientes ejemplos muestran cómo acceder a un bucket de Amazon S3 que está configurado como
sitio web estático.

Example — Solicitar un objeto en el nivel raíz

Para solicitar un objeto específico que esté almacenado en el nivel raíz del bucket, utilice la siguiente
estructura de URL.

http://bucket-name.s3-website.Region.amazonaws.com/object-name

Por ejemplo, la siguiente dirección URL solicita el objeto photo.jpg que está almacenado en el nivel raíz
del bucket.

http://example-bucket.s3-website.us-west-2.amazonaws.com/photo.jpg

Example — Solicitar un objeto en un prefijo

Para solicitar un objeto almacenado en una carpeta del bucket, utilice esta estructura de URL.

Versión de API 2006-03-01


619
Amazon Simple Storage Service Guía del desarrollador
Agregar un CNAME DNS

http://bucket-name.s3-website.Region.amazonaws.com/folder-name/object-name

La siguiente dirección URL solicita el objeto docs/doc1.html en el bucket.

http://example-bucket.s3-website.us-west-2.amazonaws.com/docs/doc1.html

Agregar un CNAME DNS


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 Personalización de URL de Amazon S3 con CNAME (p. 49).

Usar un dominio personalizado con Route 53


En lugar de acceder al sitio web mediante un sitio web de punto de enlace de Amazon S3, puede utilizar
su propio dominio registrado en Amazon Route 53 para servir su contenido, por ejemplo, example.com.
Puede usar Amazon S3 con Route 53 para alojar un sitio web en el dominio raíz. Por ejemplo, si tiene
el dominio raíz example.com y aloja su sitio web en Amazon S3, los visitantes de su sitio web pueden
acceder al sitio desde su navegador entrando en http://www.example.com o http://example.com.

Para ver un tutorial de ejemplo, consulte Configurar un sitio web estático mediante un dominio
personalizado registrado con Route 53 (p. 647).

Diferencias clave entre el punto de enlace de un sitio


web y un punto de enlace de la API de REST
Un punto de enlace de sitio web de Amazon S3 está optimizado para obtener acceso desde un navegador
web. En la siguiente tabla se resumen las diferencias clave entre un punto de enlace de API de REST y un
punto de enlace de sitio web.

Diferencia de la Punto de enlace de la API de REST Punto de enlace de sitio web


clave

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

Versión de API 2006-03-01


620
Amazon Simple Storage Service Guía del desarrollador
Configurar un bucket mediante la consola

Diferencia de la Punto de enlace de la API de REST Punto de enlace de sitio web


clave

Compatibilidad Admite conexiones SSL No admite conexiones SSL


con la Secure
Sockets Layer
(SSL, Capa de
conexión segura)

Para obtener una lista completa de puntos de enlace de Amazon S3, vea Cuotas y puntos de enlace de
Amazon S3 en AWS General Reference.

Configurar un bucket como un sitio web estático


mediante la Consola de administración de AWS
Con la Consola de administración de AWS, puede configurar su bucket de Amazon S3 como un sitio
web estático sin escribir ningún código. Dependiendo de los requisitos del sitio web, también puede usar
algunas configuraciones opcionales, como redirecciones, registro de tráfico web y documentos de error
personalizados.

Opciones de configuración necesarias:

• Habilitar el alojamiento de sitios web (p. 621)


• Configurar un documento de índice (p. 622)
• Configurar permisos para el acceso a sitios web (p. 624)

Opciones de configuración opcionales:

• (Opcional) Configurar un documento de error personalizado (p. 628)


• (Opcional) Configurar el redireccionamiento de páginas web (p. 630)
• (Opcional) Registro del tráfico web (p. 627)

Habilitar el alojamiento de sitios web


Cuando configura un bucket como sitio web estático, debe habilitar el alojamiento de sitios web estáticos,
establecer permisos y configurar un documento de índice.

Siga estos pasos para activar el alojamiento de sitios web para el bucket de Amazon S3 usando la consola
de Amazon S3. Para obtener más información acerca de los pasos siguientes, consulte Configurar
un documento de índice (p. 622) y Configurar permisos para el acceso a sitios web (p. 624). Para
configurar el sitio web con un dominio personalizado, consulte Tutoriales de ejemplo: alojamiento de sitios
web en Amazon S3 (p. 641).

Para habilitar el alojamiento estático de sitios 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), elija el bucket que desea utilizar para su sitio web
estático.

Versión de API 2006-03-01


621
Amazon Simple Storage Service Guía del desarrollador
Configurar un documento de índice

3. Seleccione Properties (Propiedades).


4. Seleccione Static website hosting (Alojamiento de sitio web estático).
5. Elija Use this bucket to host a website (Usar este bucket para alojar un sitio web).
6. Escriba el nombre de su documento de índice.

El nombre del documento de índice típicamente es index.html. El nombre del documento de índice
distingue entre mayúsculas y minúsculas y debe coincidir exactamente con el nombre del archivo
del documento de índice HTML que tiene previsto cargar en el bucket de S3. Para obtener más
información, consulte Configurar un documento de índice (p. 622).
7. (Opcional) Si desea agregar un documento de error personalizado, en el cuadro Error document
(Documento de error), escriba el nombre de la clave del documento de error (por ejemplo,
error.html).

El nombre del documento de error distingue entre mayúsculas y minúsculas y debe coincidir
exactamente con el nombre del archivo del documento de error HTML que tiene previsto cargar en el
bucket de S3. Para obtener más información, consulte (Opcional) Configurar un documento de error
personalizado (p. 628).
8. (Opcional) Si desea especificar reglas de redireccionamiento avanzadas, en Edit redirection rules
(Editar reglas de redireccionamiento) use XML para describir las reglas.

Para obtener más información, consulte Configurar redireccionamientos condicionales


avanzados (p. 633).
9. En Static website hosting (Alojamiento de sitios web estáticos), anote el valor de Endpoint (Punto de
enlace).

Endpoint (Punto de enlace) es el punto de enlace final del sitio web de Amazon S3 para su bucket.
Cuando termine de configurar el bucket como un sitio web estático, puede utilizar este punto de enlace
para probar el sitio web.
10. Elija Save (Guardar).

A continuación, debe configurar el documento de índice y establecer permisos. Para obtener más
información, consulte Configurar un documento de índice (p. 622) y Configurar permisos para el acceso
a sitios web (p. 624). También puede configurar opcionalmente un documento de error (p. 628),
unregistro de tráfico web (p. 627) o una redirección (p. 630).

Configurar un documento de índice


Cuando habilita el alojamiento de sitios web, también debe configurar y cargar un documento 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 habilite el alojamiento de sitio web estático para su bucket, escriba el nombre del documento de
índice (por ejemplo, index.html). Después de habilitar el alojamiento de sitio web estático para el bucket,
cargue un archivo HTML con el nombre del documento de índice en el bucket.

La barra diagonal en el URL raíz es opcional. Por ejemplo, si configura el sitio web con index.html como
documento de índice, las siguientes URL devuelven index.html.

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 Puntos
de enlace de sitio web (p. 618).

Versión de API 2006-03-01


622
Amazon Simple Storage Service Guía del desarrollador
Configurar un documento de índice

Documento de índice y carpetas


En Amazon S3, un bucket es un contenedor plano de objetos. No proporciona ninguna organización
jerárquica como hace el sistema de archivos en su equipo. Sin embargo, 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. 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 photos/2006/Jan/sample2.jpg se encuentra en la subcarpeta photos/2006/Jan.
• El objeto photos/2006/Feb/sample3.jpg se encuentra en la subcarpeta photos/2006/Feb.

En la consola de Amazon S3, también puede crear una carpeta en un bucket. Por ejemplo, puede crear
una carpeta denominada 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.

Si crea esa estructura de carpeta en el bucket, debe tener un documento de índice en cada nivel. En cada
carpeta, el documento de índice debe tener el mismo nombre, por ejemplo, index.html. 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://bucket-name.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.

Configurar un documento de índice


Cuando habilite el alojamiento de sitio web estático para su bucket, escriba el nombre del documento de
índice (por ejemplo, index.html). Después de habilitar el alojamiento de sitio web estático para el bucket,
cargue un archivo HTML con el nombre de este documento de índice en el bucket.

Para configurar el documento de índice

1. Cree un archivo index.html.

Si no tiene un archivo index.html, puede usar el siguiente HTML para crear uno:

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

2. Guarde el archivo de índice localmente con el nombre exacto del documento de índice que especificó
cuando habilitó el alojamiento de sitio web estático para el bucket (por ejemplo, index.html).

Versión de API 2006-03-01


623
Amazon Simple Storage Service Guía del desarrollador
Configurar permisos para el acceso a sitios web

El nombre del archivo de documento de índice debe coincidir exactamente con el nombre del
documento de índice que especifique en el cuadro de diálogo Static website hosting (Alojamiento
de sitio web estático). El nombre del documento de índice distingue entre mayúsculas y minúsculas.
Por ejemplo, si escribe index.html en el nombre del Index document (Documento de índice) en el
cuadro de diálogo Static website hosting (Alojamiento de sitio web estático), el nombre del archivo de
documento de índice también debe ser index.html y no Index.html.
3. 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/.
4. En la lista Buckets, elija el nombre del bucket que desea utilizar para alojar un sitio web estático.
5. Habilite el alojamiento de sitios web estáticos para su bucket e introduzca el nombre exacto del
documento de índice (por ejemplo, index.html). Para obtener más información, consulte Habilitar el
alojamiento de sitios web (p. 621).

Después de habilitar el alojamiento estático del sitio web, continúe con el paso 6.
6. Para cargar el documento de índice en el bucket, realice una de las siguientes acciones:

• Arrastre y suelte el archivo de índice en la lista de buckets de la consola.


• Elija Upload (Cargar) y siga las instrucciones para elegir y cargar el archivo de índice.

Para obtener instrucciones paso a paso, consulte ¿Cómo puedo cargar archivos y carpetas en un
bucket de Amazon S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.
7. (Opcional) Cargue otros contenidos del sitio web en su bucket.

A continuación, debe establecer permisos para el acceso al sitio web. Para obtener más información,
consulte Configurar permisos para el acceso a sitios web (p. 624). También puede configurar
opcionalmente un documento de error (p. 628), unregistro de tráfico web (p. 627) o una
redirección (p. 630).

Configurar permisos para el acceso a sitios web


Cuando configura un bucket como un sitio web estático, si desea que el sitio web sea público, puede
conceder acceso público de lectura. Para hacer que el bucket sea legible públicamente, debe deshabilitar
la configuración de bloqueo de acceso público del bucket y escribir una política de bucket que conceda
acceso público de lectura. Si el bucket contiene objetos que no son propiedad del propietario del bucket, es
posible que necesite además añadir una lista de control de acceso (ACL) de objeto que conceda acceso
de lectura a todo el mundo.
Note

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.

Paso 1: Editar la configuración de bloqueo de acceso público


Si desea configurar un bucket existente como sitio web estático que tenga acceso público, debe editar la
configuración de bloqueo de acceso público para dicho bucket. Es posible que tenga también que editar su
configuración de bloqueo de acceso público en el nivel de cuenta. Amazon S3 aplica la combinación más
restrictiva de la configuración de bloqueo de acceso público del nivel de bucket y nivel de cuenta.

Versión de API 2006-03-01


624
Amazon Simple Storage Service Guía del desarrollador
Configurar permisos para el acceso a sitios web

Por ejemplo, si permite el acceso público a un bucket, pero bloquea todo el acceso público en el nivel de
cuenta, Amazon S3 seguirá bloqueando el acceso público al bucket. En esta situación, tendría que editar
su configuración de bloqueo de acceso público del nivel de bucket y nivel de cuenta. Para obtener más
información, consulte Usar Block Public Access de Amazon S3 (p. 488).

De forma predeterminada, Amazon S3 bloquea el acceso público a su cuenta y buckets. Si desea utilizar
un bucket para alojar un sitio web estático, puede utilizar estos pasos para editar la configuración de
bloqueo de acceso público.
Warning

Antes de completar este paso, revise Uso del bloqueo del acceso público de Amazon S3 para
asegurarse de que comprende y acepta los riesgos que implica permitir el acceso público. Cuando
desactiva la configuración de acceso público de bloqueo para que el bucket sea público, cualquier
usuario de Internet puede acceder al bucket. Le recomendamos que bloquee todo el acceso
público a sus buckets.

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. Elija el nombre del bucket que ha configurado como sitio web estático.
3. Elija Permissions.
4. Elija Edit (Editar).
5. Desactive Block all public access (Bloquear todo el acceso público) y elija Save (Guardar).
Warning

Antes de completar este paso, revise Uso del bloqueo del acceso público de Amazon S3
para asegurarse de que comprende y acepta los riesgos que implica permitir el acceso
público. Cuando desactiva la configuración de acceso público de bloqueo para que el bucket
sea público, cualquier usuario de Internet puede acceder al bucket. Le recomendamos que
bloquee todo el acceso público a sus buckets.

6. En el cuadro de confirmación, introduzca confirm y, a continuación, elija Confirm (Confirmar).

Versión de API 2006-03-01


625
Amazon Simple Storage Service Guía del desarrollador
Configurar permisos para el acceso a sitios web

En S3 buckets (Buckets de S3), el Access (Acceso) a su bucket se actualiza a Objects can be public
(Los objetos pueden ser públicos). Ahora puede agregar una política de bucket para hacer que los
objetos del bucket sean legibles públicamente. Si Access (Access) se sigue mostrando como Bucket
and objects not public (El bucket y los objetos no son públicos), es posible que tenga que editar la
configuración de bloqueo de acceso público de su cuenta antes de agregar una política de bucket.

Paso 2: Agregar una política de bucket


Para hacer que los objetos del bucket sean legibles públicamente, debe escribir una política de bucket que
conceda permiso s3:GetObject a todo el mundo.

Después de editar la configuración de acceso público de bloques de S3, debe agregar una política de
bucket para garantizar el acceso de lectura público a su bucket. Cuando concede permiso de lectura
público, cualquier persona de Internet puede acceder a su bucket.
Important

La política que se muestra a continuación es solo un ejemplo y permite acceso completo al


contenido del bucket. Antes de continuar con este paso, revise ¿Cómo puedo proteger los
archivos en mi bucket de Amazon S3? para asegurarse de que comprende las prácticas
recomendadas para proteger los archivos en el bucket de S3 y los riesgos que implica la
concesión de acceso público.

1. En Buckets, elija el nombre del bucket.


2. Elija Permissions.
3. Elija Bucket Policy.
4. Para conceder acceso público de lectura a su sitio web, copie la siguiente política de bucket y péguela
en el Bucket policy editor (Editor de políticas de bucket).

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [

Versión de API 2006-03-01


626
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Registro del tráfico web

"arn:aws:s3:::example.com/*"
]
}
]
}

5. Actualice el Resource para incluir el nombre de su bucket.

En la política de bucket de ejemplo anterior, example.com es el nombre del bucket. Para utilizar esta
política de bucket con su propio bucket, debe actualizar este nombre para que coincida con su nombre
de bucket.
6. Elija Save (Guardar).

Aparece una advertencia que indica que el bucket tiene acceso público. En Bucket Policy (Política del
bucket), aparece una etiqueta Public (Pública).

Si ve un error que indica Policy has invalid resource, confirme que el nombre del bucket en
la política del bucket coincide con el nombre de su bucket. Para obtener información acerca de cómo
agregar una política de bucket, vea ¿Cómo añado una política de bucket de S3?

Si recibe una advertencia de Error - Access denied (Acceso denegado) y el Editor de políticas del
bucket no le permite guardar la política de bucket , compruebe la configuración de acceso público a
nivel de cuenta y bloque de nivel de bucket para confirmar que permite el acceso público al bucket.

Listas de control de acceso de objetos


Puede utilizar una política de bucket para conceder permiso de lectura público a los objetos. No obstante,
la política de bucket se aplica solo a objetos que pertenecen al propietario del bucket. Si el bucket contiene
objetos que no pertenecen al propietario del bucket, este debería utilizar la lista de control de acceso (ACL)
del objeto para conceder permiso de LECTURA público en dichos objetos.

Para que un objeto sea legible públicamente mediante una ACL, conceda permiso de LECTURA al
grupo AllUsers, tal 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. 474).

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

(Opcional) Registro del tráfico web


También puede habilitar el registro de acceso al servidor de Amazon S3 para un bucket configurado como
un sitio web estático. El registro de acceso al servidor proporciona registros detallados para las solicitudes
realizadas a su bucket. Para obtener más información, consulte Registro de acceso al servidor de Amazon
S3 (p. 794). Si piensa usar Amazon CloudFront para acelerar su sitio web (p. 657), también puede usar
el registro de CloudFront. Para obtener más información, consulte Configurar y usar registros de acceso en
la Guía para desarrolladores de Amazon CloudFront.

Para habilitar el registro de acceso al servidor para su bucket de sitio web estático

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. En la misma región en la que creó el bucket configurado como sitio web estático, cree un bucket para
el registro, por ejemplo logs.example.com.

Versión de API 2006-03-01


627
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configurar un documento de error personalizado

3. Cree una carpeta para los archivos de registro de acceso al servidor (por ejemplo, logs).
4. (Opcional) Si desea utilizar CloudFront para mejorar el rendimiento del sitio web, cree una carpeta
para los archivos de registro de CloudFront (por ejemplo, cdn).
5. En la lista Bucket, elija su bucket.
6. Seleccione Properties (Propiedades).
7. Elija Server access logging (Registro de acceso al servidor).
8. Elija Enable logging (Habilitar el registro).
9. En Target bucket (Bucket de destino), elija el bucket que creó para los archivos de registro, por
ejemplo logs.example.com.
10. En Target prefix (Prefijo de destino), escriba el nombre de la carpeta que creó para los archivos de
registro seguido del delimitador (/), por ejemplo logs/.

Cuando establece Target prefix (Prefijo de destino), agrupa los archivos de datos de registro en una
carpeta para que sean fáciles de localizar.
11. Elija Save (Guardar).

En su bucket de registros, ahora puede acceder a sus registros. Amazon S3 escribe registros de
acceso al sitio web en su bucket de registros cada dos horas.
12. Para consultar los registros, elija Overview (Información general) y elija la carpeta.

(Opcional) Configurar un documento de error


personalizado
Después de configurar el bucket como un sitio web estático, cuando se produce un error, Amazon S3
devuelve un documento de error HTML. Opcionalmente, puede configurar el bucket con un documento de
error personalizado para que Amazon S3 devuelva dicho documento cuando se produzca un error.
Note

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 deAmazon S3 y mostrar su propio
error.

Temas
• Códigos de respuesta HTTP de Amazon S3 (p. 628)
• Configurar un documento de error personalizado (p. 630)

Códigos de respuesta HTTP de Amazon S3


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 al punto de enlace de sitio
Permanently 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/.

Versión de API 2006-03-01


628
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configurar un documento de error personalizado

Código de error Descripción


HTTP

302 Found Cuando Amazon S3 recibe una solicitud para una clave x, http://bucket-
(Encontrado) name.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 S3 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 Configurar un
documento de índice (p. 622).

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

Versión de API 2006-03-01


629
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configurar el redireccionamiento

Configurar un documento de error personalizado


Al configurar el bucket como un sitio web estático, si lo desea puede proporcionar un documento de error
personalizado que contenga un mensaje de error sencillo y ayuda adicional. Amazon S3 devuelve el
documento de error personalizado solo para la clase HTTP 4XX de códigos de error.

Para configurar un documento de error personalizado

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 de Buckets, elija el nombre del bucket.
3. Seleccione Properties (Propiedades).
4. Seleccione Static website hosting (Alojamiento de sitio web estático).

Si el bucket ya está configurado como un sitio web estático, puede seguir el siguiente paso para
actualizar o agregar información del documento de error. Si no ha configurado el bucket como un
sitio web estático, primero debe realizar la configuración necesaria. Para obtener más información,
consulte Habilitar el alojamiento de sitios web (p. 621).
5. En el cuadro Error document (Documento de error) escriba el nombre del documento de error.
6. Elija Save (Guardar).

Para obtener más información acerca del uso de la API REST para configurar el bucket como un sitio web
estático con un documento de error personalizado, vea PutBucketWebsite en la Amazon Simple Storage
Service API Reference.

(Opcional) Configurar el redireccionamiento de


páginas web
Si su bucket de Amazon S3 está configurado para el alojamiento de sitios web, puede configurar una
redirección de páginas web. Tiene las siguientes opciones para configurar un redireccionamiento.

Temas
• Configurar el redireccionamiento de una página en la consola de Amazon S3 (p. 631)
• Configurar el redireccionamiento de una página desde la API de REST (p. 631)
• Redireccionar solicitudes de un punto de enlace de sitio web de un bucket a otro host (p. 632)
• Configurar redireccionamientos condicionales avanzados (p. 633)

Versión de API 2006-03-01


630
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configurar el redireccionamiento

Configurar el redireccionamiento de una página en la consola de


Amazon S3
Puede redirigir las solicitudes de un objeto a otro objeto o URL estableciendo la ubicación de redirección
del sitio web en los metadatos del objeto. Para configurar el redireccionamiento, debe añadir la propiedad
x-amz-website-redirect-location a los metadatos del objeto. En la consola Amazon S3, puede
establecer la ubicación del redireccionamiento de un sitio web en los metadatos del objeto. Si utiliza la
API de Amazon S3 (p. 631), configure x-amz-website-redirect-location. Luego, el sitio web
interpreta el objeto como un redireccionamiento 301.

Para 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. 117).

Cuando establece un redireccionamiento de página, puede conservar o eliminar el contenido del objeto
de destino. Por ejemplo, si tiene un objeto page1.html en el bucket, puede redirigir cualquier solicitud de
esta página a otro objeto, page2.html. Dispone de dos opciones para hacerlo:

• Mantenga el contenido del objeto page1.html y redirija las solicitudes de página.


• Elimine el contenido de page1.html y cargue un objeto de cero bytes denominado page1.html para
reemplazar el objeto existente y redirigir las solicitudes de página.

Para redirigir solicitudes de un objeto

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. Elija el nombre del bucket que ha configurado como sitio web estático (por ejemplo, example.com).
3. En la ficha Descripción general del bucket, elija el objeto para el que desee crear una redirección.
4. Seleccione Properties (Propiedades).
5. Elija Metadatos.
6. Seleccione + Añadir metadatos.
7. En Clave, elija Ubicación de redirección del sitio web.
8. En Valor, introduzca el nombre de clave del objeto que desee redirigir, por ejemplo, /page2.html.

Para otro objeto del mismo bucket, se requiere el prefijo / del valor. También puede establecer el valor
para un URL externo, por ejemplo, http://www.example.com.
9. Elija Save (Guardar).

Configurar el redireccionamiento de una 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

Versión de API 2006-03-01


631
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configurar el redireccionamiento

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 de un sitio web y un punto de enlace de la API de REST (p. 620).

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:
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.

Redireccionar solicitudes de un punto de enlace de sitio web de


un bucket a otro host
Puede redirigir todas las solicitudes de un punto de enlace de sitio web de un bucket a otro host. Si redirige
todas las solicitudes, las solicitudes realizadas al punto de enlace del sitio web se redirigirán al nombre del
host especificado.

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 del bucket example.com y configure
el otro bucket www.example.com para redirigir todas las solicitudes al bucket example.com. Para
obtener más información, consulte Configuración de un sitio web estático mediante un nombre de dominio
personalizado.

Para redirigir solicitudes para un punto de enlace de sitio web del bucket

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. Elija el nombre del bucket que ha configurado como sitio web estático (por ejemplo, example.com).
3. Seleccione Properties (Propiedades).
4. Seleccione Static website hosting (Alojamiento de sitio web estático).
5. Seleccione Redirect requests (Redirigir solicitudes).
6. En el cuadro Target bucket or domain (Bucket o dominio de destino), escriba el bucket o dominio al
que desea redirigir las solicitudes.

Versión de API 2006-03-01


632
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configurar el redireccionamiento

Por ejemplo, si redirigiera las solicitudes a una dirección de dominio raíz, escribiría example.com.
7. En el cuadro Protocol (Protocolo), escriba el protocolo para las solicitudes redirigidas (http o https).

Si no especifica un protocolo, se utiliza el protocolo de la solicitud original.


8. Seleccione Save.

Configurar 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. Amazon S3 tiene una limitación de 50 reglas de enrutamiento por configuración
de sitio web. Si necesita más de 50 reglas de enrutamiento, puede utilizar la redirección de objetos. Para
obtener más información, consulte (Opcional) Configurar el redireccionamiento de páginas web (p. 630).

Para configurar reglas de redirección para un sitio web estático


Para añadir reglas de redirección para un bucket que ya tiene habilitado el alojamiento de sitios web
estático, siga estos pasos.

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. En la lista Buckets, elija el nombre del bucket que ha configurado como sitio web estático.
3. Seleccione Properties (Propiedades).
4. Seleccione Static website hosting (Alojamiento de sitio web estático).
5. En Reglas de redirección, introduzca las reglas de redirección.

Debe describir las reglas con XML. Para obtener información sobre sintaxis general y ejemplos para
especificar reglas de redirección, consulte Sintaxis para especificar reglas de enrutamiento (p. 633).
Amazon S3 tiene una limitación de 50 reglas de enrutamiento por configuración de sitio web. Si
necesita más de 50 reglas de enrutamiento, puede utilizar la redirección de objetos. Para obtener
más información, consulte Configurar el redireccionamiento de una página en la consola de Amazon
S3 (p. 631).
6. Seleccione Save.

Sintaxis 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> ]

Versión de API 2006-03-01


633
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configurar el redireccionamiento

<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> ]
[ <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

Versión de API 2006-03-01


634
Amazon Simple Storage Service Guía del desarrollador
(Opcional) Configurar el redireccionamiento

Nombre Descripción
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 El 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 Location que se


devuelve en la respuesta.

No se requiere HostName, si se provee uno de sus elementos del


mismo nivel.

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 que utilizar en el encabezado Location que se


devuelve en la respuesta.

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


Location que se devuelve en la respuesta.

No se requiere HttpRedirectCode, si se provee uno de sus


elementos del mismo nivel.

Ejemplos
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>

Versión de API 2006-03-01


635
Amazon Simple Storage Service Guía del desarrollador
Configurar mediante programación un bucket

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

Configurar mediante programación un bucket como


un sitio web estático
Para alojar un sitio web estático en Amazon S3; debe configurar un bucket de Amazon S3 para el
alojamiento de sitio web y cargar el contenido del sitio web en el bucket. También puede utilizar los SDK

Versión de API 2006-03-01


636
Amazon Simple Storage Service Guía del desarrollador
Mediante AWS SDK for Java

de AWS para crear, actualizar y eliminar la configuración del sitio web mediante programación. 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.

Para obtener más información acerca de cómo configurar el bucket para el alojamiento estático de sitios
web mediante la Consola de administración de AWS, consulte Configurar un bucket como un sitio web
estático mediante la Consola de administración de AWS (p. 621).

Para obtener más información acerca de cómo usar la AWS CLI para configurar un bucket de S3 como un
sitio web estático, vea sitio web en la AWS CLI Command Reference. Para obtener más información sobre
cómo configurar un bucket de S3 como un sitio web estático mediante programación, vea los siguientes
temas.

Temas
• Administrar sitios web con AWS SDK for Java (p. 637)
• Administrar sitios web con AWS SDK para .NET (p. 638)
• Administrar sitios web con AWS SDK para PHP (p. 640)
• Administrar sitios web con la API de REST (p. 641)

Administrar 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 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 Alojar un sitio web estático en
Amazon S3 (p. 618).

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. 827).

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)

Versión de API 2006-03-01


637
Amazon Simple Storage Service Guía del desarrollador
Mediante AWS SDK para .NET

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

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

Administrar 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 Alojar un sitio web estático en
Amazon S3 (p. 618).

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. 829).

Versión de API 2006-03-01


638
Amazon Simple Storage Service Guía del desarrollador
Mediante AWS SDK para .NET

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

Versión de API 2006-03-01


639
Amazon Simple Storage Service Guía del desarrollador
Mediante SDK para PHP

}
}

Administrar 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. 829) 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 Alojar un sitio web estático en Amazon S3 (p. 618).

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 Alojar un sitio web estático en
Amazon S3 (p. 618).

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. 829).

require 'vendor/autoload.php';

use Aws\S3\S3Client;

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

$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

Versión de API 2006-03-01


640
Amazon Simple Storage Service Guía del desarrollador
Mediante la API de REST

Administrar 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

Tutoriales de ejemplo: alojamiento de sitios web en


Amazon S3
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
Amazon 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.

Temas
• Configurar un sitio web estático (p. 641)
• Configurar un sitio web estático mediante un dominio personalizado registrado con Route 53 (p. 647)

Configurar un 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.
Note

Amazon S3 no admite el acceso HTTPS al sitio web. Si desea usar HTTPS, puede usar Amazon
CloudFront para dar servicio a un sitio web estático alojado en Amazon S3.
Para obtener más información, consulte Cómo usar CloudFront para dar servicio a un sitio web
estático alojado en Amazon S3 y Requerir HTTPS para la comunicación entre CloudFront y un
origen de Amazon S3.

Temas
• Paso 1: Crear un bucket (p. 642)
• Paso 2: Habilitar el alojamiento de un sitio web estático (p. 642)
• Paso 3: Editar la configuración de bloqueo de acceso público (p. 643)
• Paso 4: Agregar una política de bucket para que el contenido del bucket sea público (p. 645)
• Paso 5: Configurar un documento de índice (p. 646)
• Paso 6: Probar el punto de enlace del sitio web (p. 646)
• Paso 7: Limpieza (p. 647)

Versión de API 2006-03-01


641
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático

Paso 1: Crear un bucket


Las siguientes instrucciones proporcionan información general sobre cómo crear los buckets para el
alojamiento de sitios web. Para obtener instrucciones detalladas y paso a paso sobre la creación de un
bucket, consulte ¿Cómo creo un bucket de S3? en la Guía del usuario de la consola de Amazon Simple
Storage Service.

Para crear un 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/.
2. Elija Create bucket (Crear bucket).
3. Introduzca el Bucket name (Nombre del bucket) (por ejemplo, example.com).
4. Elija la región en la que desea crear el bucket.

Puede seleccionar una región cercana para minimizar la latencia y los costos, o para satisfacer
requisitos reglamentarios. La región que elija determina el punto de enlace de sitio web de Amazon
S3. Para obtener más información, consulte Puntos de enlace de sitio web (p. 618).
5. Para aceptar la configuración predeterminada y crear el bucket, elija Create (Crear).

Paso 2: Habilitar el alojamiento de un sitio web estático


Después de crear un bucket, puede habilitar el alojamiento de sitios web estático para su bucket. Puede
crear un nuevo bucket o utilizar un bucket existente.

Para habilitar el alojamiento estático de sitios 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), elija el bucket que desea utilizar para su sitio web
estático.
3. Seleccione Properties (Propiedades).
4. Seleccione Static website hosting (Alojamiento de sitio web estático).
5. Elija Use this bucket to host a website (Usar este bucket para alojar un sitio web).
6. Escriba el nombre de su documento de índice.

El nombre del documento de índice típicamente es index.html. El nombre del documento de índice
distingue entre mayúsculas y minúsculas y debe coincidir exactamente con el nombre del archivo
del documento de índice HTML que tiene previsto cargar en el bucket de S3. Para obtener más
información, consulte Configurar un documento de índice (p. 622).
7. (Opcional) Si desea agregar un documento de error personalizado, en el cuadro Error document
(Documento de error), escriba el nombre de la clave del documento de error (por ejemplo,
error.html).

El nombre del documento de error distingue entre mayúsculas y minúsculas y debe coincidir
exactamente con el nombre del archivo del documento de error HTML que tiene previsto cargar en el
bucket de S3. Para obtener más información, consulte (Opcional) Configurar un documento de error
personalizado (p. 628).
8. (Opcional) Si desea especificar reglas de redireccionamiento avanzadas, en Edit redirection rules
(Editar reglas de redireccionamiento) use XML para describir las reglas.

Para obtener más información, consulte Configurar redireccionamientos condicionales


avanzados (p. 633).

Versión de API 2006-03-01


642
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático

9. En Static website hosting (Alojamiento de sitios web estáticos), anote el valor de Endpoint (Punto de
enlace).

Endpoint (Punto de enlace) es el punto de enlace final del sitio web de Amazon S3 para su bucket.
Cuando termine de configurar el bucket como un sitio web estático, puede utilizar este punto de enlace
para probar el sitio web.
10. Elija Save (Guardar).

Paso 3: Editar la configuración de bloqueo de acceso público


De forma predeterminada, Amazon S3 bloquea el acceso público a su cuenta y buckets. Si desea utilizar
un bucket para alojar un sitio web estático, puede utilizar estos pasos para editar la configuración de
bloqueo de acceso público.
Warning

Antes de completar este paso, revise Uso del bloqueo del acceso público de Amazon S3 para
asegurarse de que comprende y acepta los riesgos que implica permitir el acceso público. Cuando
desactiva la configuración de acceso público de bloqueo para que el bucket sea público, cualquier
usuario de Internet puede acceder al bucket. Le recomendamos que bloquee todo el acceso
público a sus buckets.

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. Elija el nombre del bucket que ha configurado como sitio web estático.
3. Elija Permissions.
4. Elija Edit (Editar).
5. Desactive Block all public access (Bloquear todo el acceso público) y elija Save (Guardar).
Warning

Antes de completar este paso, revise Uso del bloqueo del acceso público de Amazon S3
para asegurarse de que comprende y acepta los riesgos que implica permitir el acceso
público. Cuando desactiva la configuración de acceso público de bloqueo para que el bucket
sea público, cualquier usuario de Internet puede acceder al bucket. Le recomendamos que
bloquee todo el acceso público a sus buckets.

Versión de API 2006-03-01


643
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático

6. En el cuadro de confirmación, introduzca confirm y, a continuación, elija Confirm (Confirmar).

En S3 buckets (Buckets de S3), el Access (Acceso) a su bucket se actualiza a Objects can be public
(Los objetos pueden ser públicos). Ahora puede agregar una política de bucket para hacer que los
objetos del bucket sean legibles públicamente. Si Access (Access) se sigue mostrando como Bucket
and objects not public (El bucket y los objetos no son públicos), es posible que tenga que editar la
configuración de bloqueo de acceso público de su cuenta antes de agregar una política de bucket.

Versión de API 2006-03-01


644
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático

Paso 4: Agregar una política de bucket para que el contenido del


bucket sea público
Después de editar la configuración de acceso público de bloques de S3, debe agregar una política de
bucket para garantizar el acceso de lectura público a su bucket. Cuando concede permiso de lectura
público, cualquier persona de Internet puede acceder a su bucket.
Important

La política que se muestra a continuación es solo un ejemplo y permite acceso completo al


contenido del bucket. Antes de continuar con este paso, revise ¿Cómo puedo proteger los
archivos en mi bucket de Amazon S3? para asegurarse de que comprende las prácticas
recomendadas para proteger los archivos en el bucket de S3 y los riesgos que implica la
concesión de acceso público.

1. En Buckets, elija el nombre del bucket.


2. Elija Permissions.
3. Elija Bucket Policy.
4. Para conceder acceso público de lectura a su sitio web, copie la siguiente política de bucket y péguela
en el Bucket policy editor (Editor de políticas de bucket).

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::example.com/*"
]
}
]
}

5. Actualice el Resource para incluir el nombre de su bucket.

En la política de bucket de ejemplo anterior, example.com es el nombre del bucket. Para utilizar esta
política de bucket con su propio bucket, debe actualizar este nombre para que coincida con su nombre
de bucket.
6. Elija Save (Guardar).

Aparece una advertencia que indica que el bucket tiene acceso público. En Bucket Policy (Política del
bucket), aparece una etiqueta Public (Pública).

Si ve un error que indica Policy has invalid resource, confirme que el nombre del bucket en
la política del bucket coincide con el nombre de su bucket. Para obtener información acerca de cómo
agregar una política de bucket, vea ¿Cómo añado una política de bucket de S3?

Si recibe una advertencia de Error - Access denied (Acceso denegado) y el Editor de políticas del
bucket no le permite guardar la política de bucket , compruebe la configuración de acceso público a
nivel de cuenta y bloque de nivel de bucket para confirmar que permite el acceso público al bucket.

Versión de API 2006-03-01


645
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático

Paso 5: Configurar un documento de índice


Cuando habilite el alojamiento de sitio web estático para su bucket, escriba el nombre del documento de
índice (por ejemplo, index.html). Después de habilitar el alojamiento de sitio web estático para el bucket,
cargue un archivo HTML con el nombre de este documento de índice en el bucket.

Para configurar el documento de índice

1. Cree un archivo index.html.

Si no tiene un archivo index.html, puede usar el siguiente HTML para crear uno:

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

2. Guarde el archivo de índice localmente con el nombre exacto del documento de índice que especificó
cuando habilitó el alojamiento de sitio web estático para el bucket (por ejemplo, index.html).

El nombre del archivo de documento de índice debe coincidir exactamente con el nombre del
documento de índice que especifique en el cuadro de diálogo Static website hosting (Alojamiento
de sitio web estático). El nombre del documento de índice distingue entre mayúsculas y minúsculas.
Por ejemplo, si escribe index.html en el nombre del Index document (Documento de índice) en el
cuadro de diálogo Static website hosting (Alojamiento de sitio web estático), el nombre del archivo de
documento de índice también debe ser index.html y no Index.html.
3. 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/.
4. En la lista Buckets, elija el nombre del bucket que desea utilizar para alojar un sitio web estático.
5. Habilite el alojamiento de sitios web estáticos para su bucket e introduzca el nombre exacto del
documento de índice (por ejemplo, index.html). Para obtener más información, consulte Habilitar el
alojamiento de sitios web (p. 621).

Después de habilitar el alojamiento estático del sitio web, continúe con el paso 6.
6. Para cargar el documento de índice en el bucket, realice una de las siguientes acciones:

• Arrastre y suelte el archivo de índice en la lista de buckets de la consola.


• Elija Upload (Cargar) y siga las instrucciones para elegir y cargar el archivo de índice.

Para obtener instrucciones paso a paso, consulte ¿Cómo puedo cargar archivos y carpetas en un
bucket de Amazon S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.
7. (Opcional) Cargue otros contenidos del sitio web en su bucket.

Paso 6: Probar el punto de enlace del sitio web


Después de configurar el alojamiento de sitios web estáticos para el bucket, puede probar el punto de
enlace del sitio web.

Versión de API 2006-03-01


646
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Note

Amazon S3 no admite el acceso HTTPS al sitio web. Si desea usar HTTPS, puede usar Amazon
CloudFront para dar servicio a un sitio web estático alojado en Amazon S3.
Para obtener más información, consulte Cómo usar CloudFront para dar servicio a un sitio web
estático alojado en Amazon S3 y Requerir HTTPS para la comunicación entre CloudFront y un
origen de Amazon S3.

Para probar el punto de enlace del sitio web

Si anotó el punto de enlace del sitio web cuando habilitó el alojamiento estático del sitio web, para probar
el sitio web, escriba el punto de enlace del sitio web en su navegador. El sitio web estará implementado
correctamente, si el navegador muestra la página index.html. Para obtener más información, consulte
Puntos de enlace del sitio web de Amazon S3.

Si necesita obtener el punto de enlace del sitio web antes de realizar la prueba, realice estos pasos:

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, elija el nombre del bucket que desea utilizar para alojar un sitio web estático.
3. Seleccione Properties (Propiedades).
4. Seleccione Static website hosting (Alojamiento de sitio web estático).
5. Para probar el punto de enlace del sitio web, junto a Endpoint (Punto de enlace), elija el punto de
enlace del sitio web.

El sitio web estará implementado correctamente, si el navegador muestra la página index.html.

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 Configurar un sitio web estático mediante un dominio personalizado registrado con
Route 53 (p. 647).

Paso 7: Limpieza
Si creó un sitio web estático solo como parte de un ejercicio de aprendizaje, 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. 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.

Configurar un sitio web estático mediante un dominio


personalizado registrado con Route 53
Suponga que desea alojar su sitio web estático en Amazon S3. Ha registrado un dominio en Amazon
Route 53 (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. Puede utilizar este tutorial
para aprender a alojar un sitio web estático y crear redirecciones en Amazon S3 para un sitio web con un
nombre de dominio personalizado registrado en Route 53. Puede trabajar con un sitio web existente que
desee alojar en Amazon S3, o bien usar este tutorial para comenzar desde cero.

Una vez completado este tutorial, puede utilizar opcionalmente Amazon CloudFront para mejorar el
rendimiento de su sitio web. Para obtener más información, consulte Acelerar su sitio web con Amazon
CloudFront (p. 657).

Versión de API 2006-03-01


647
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Note

Amazon S3 no admite el acceso HTTPS al sitio web. Si desea usar HTTPS, puede usar Amazon
CloudFront para dar servicio a un sitio web estático alojado en Amazon S3.
Para obtener más información, consulte Cómo usar CloudFront para dar servicio a un sitio web
estático alojado en Amazon S3 y Requerir HTTPS para la comunicación entre CloudFront y un
origen de Amazon S3.

Temas
• Antes de empezar (p. 648)
• Paso 1: Registrar un dominio personalizado con Route 53 (p. 648)
• Paso 2: Crear dos buckets (p. 648)
• Paso 3: Configurar el bucket de dominio raíz para el alojamiento de sitios web (p. 649)
• Paso 4: Configurar el bucket de subdominio para el redireccionamiento del sitio web (p. 650)
• Paso 5: Configurar registros para el tráfico del sitio web (p. 650)
• Paso 6: Cargar índice y contenido del sitio web (p. 651)
• Paso 7: Editar la configuración de bloqueo de acceso público (p. 652)
• Paso 8: Asociar una política de bucket (p. 653)
• Paso 9: Probar el punto de enlace del dominio (p. 654)
• Paso 10: Agregar registros de alias para su dominio y subdominio (p. 655)
• Paso 11: Probar el sitio web (p. 657)
• Acelerar su sitio web con Amazon CloudFront (p. 657)
• Limpiar los recursos de ejemplo (p. 660)

Antes de empezar
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. El ejemplo muestra cómo crear 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: Registrar un dominio personalizado con Route 53


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. Después de registrar su nombre de dominio, puede crear y configurar sus buckets de
Amazon S3 para el alojamiento de sitios web.

Paso 2: Crear dos buckets


Para admitir solicitudes desde el dominio raíz y del subdominio, debe crear dos buckets:

• Bucket de dominio ‐ example.com


• Bucket de subdominio ‐ www.example.com

Versión de API 2006-03-01


648
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Estos nombres de bucket deben coincidir exactamente con su nombre de dominio. En este
ejemplo, el nombre de dominio es example.com. Alojará su contenido fuera del bucket del dominio
raíz (example.com). Creará una solicitud de redireccionamiento para el bucket de subdominio
(www.example.com). Si alguien escribe www.example.com en su navegador, se redirigen a
example.com y ven el contenido que está alojado en el bucket de Amazon S3 con ese nombre.

Para crear los buckets para el alojamiento de sitios web

Las siguientes instrucciones proporcionan información general sobre cómo crear los buckets para el
alojamiento de sitios web. Para obtener instrucciones detalladas y paso a paso sobre la creación de un
bucket, consulte ¿Cómo creo un bucket de S3? en la Guía del usuario de la consola de Amazon Simple
Storage Service.

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 el bucket del dominio raíz:

a. Elija Create bucket (Crear bucket).


b. Introduzca el Bucket name (Nombre del bucket) (por ejemplo, example.com).
c. Elija la región en la que desea crear el bucket.

Puede seleccionar una región cercana para minimizar la latencia y los costos, o para satisfacer
requisitos reglamentarios. La región que elija determina el punto de enlace de sitio web de
Amazon S3. Para obtener más información, consulte Puntos de enlace de sitio web (p. 618).
d. Para aceptar la configuración predeterminada y crear el bucket, elija Create (Crear).
3. Cree el bucket del subdominio:

a. Elija Create bucket (Crear bucket).


b. Introduzca el Bucket name (Nombre del bucket) (por ejemplo, www.example.com).
c. Elija la región en la que desea crear el bucket.

Puede seleccionar una región cercana para minimizar la latencia y los costos, o para satisfacer
requisitos reglamentarios. La región que elija determina el punto de enlace de sitio web de
Amazon S3. Para obtener más información, consulte Puntos de enlace de sitio web (p. 618).
d. Para aceptar la configuración predeterminada y crear el bucket, elija Create (Crear).

En el paso siguiente, configure example.com para el alojamiento de sitio web.

Paso 3: Configurar el bucket de dominio raíz para el alojamiento


de sitios web
En este paso, configurará el bucket de dominio raíz (example.com) como un sitio web. Este bucket
incluirá el contenido de su sitio web. Al configurar un bucket para el alojamiento de sitios web, puede
acceder al sitio web a través del Puntos de enlace de sitio web (p. 618).

Para habilitar el alojamiento estático de sitios 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), elija el bucket que desea utilizar para su sitio web
estático.
3. Seleccione Properties (Propiedades).
4. Seleccione Static website hosting (Alojamiento de sitio web estático).
5. Elija Use this bucket to host a website (Usar este bucket para alojar un sitio web).

Versión de API 2006-03-01


649
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

6. Escriba el nombre de su documento de índice.

El nombre del documento de índice típicamente es index.html. El nombre del documento de índice
distingue entre mayúsculas y minúsculas y debe coincidir exactamente con el nombre del archivo
del documento de índice HTML que tiene previsto cargar en el bucket de S3. Para obtener más
información, consulte Configurar un documento de índice (p. 622).
7. (Opcional) Si desea agregar un documento de error personalizado, en el cuadro Error document
(Documento de error), escriba el nombre de la clave del documento de error (por ejemplo,
error.html).

El nombre del documento de error distingue entre mayúsculas y minúsculas y debe coincidir
exactamente con el nombre del archivo del documento de error HTML que tiene previsto cargar en el
bucket de S3. Para obtener más información, consulte (Opcional) Configurar un documento de error
personalizado (p. 628).
8. (Opcional) Si desea especificar reglas de redireccionamiento avanzadas, en Edit redirection rules
(Editar reglas de redireccionamiento) use XML para describir las reglas.

Para obtener más información, consulte Configurar redireccionamientos condicionales


avanzados (p. 633).
9. En Static website hosting (Alojamiento de sitios web estáticos), anote el valor de Endpoint (Punto de
enlace).

Endpoint (Punto de enlace) es el punto de enlace final del sitio web de Amazon S3 para su bucket.
Cuando termine de configurar el bucket como un sitio web estático, puede utilizar este punto de enlace
para probar el sitio web.
10. Elija Save (Guardar).

En el paso siguiente, configure su subdominio (www.example.com) para redirigir las solicitudes a su


dominio (example.com).

Paso 4: Configurar el bucket de subdominio para el


redireccionamiento del sitio web
Una vez que ha configurado su bucket de dominio raíz para el alojamiento de sitio web, puede configurar
el bucket de subdominio para redireccionar todas las solicitudes al dominio. En este ejemplo, todas las
solicitudes para www.example.com se redirigen a example.com.

Para configurar una solicitud de redirección, realice el siguiente procedimiento:

1. En la consola de Amazon S3, en la lista Buckets, seleccione su bucket de subdominio


(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).
5. En el cuadro Target bucket or domain (Bucket o dominio de destino), escriba su dominio (por ejemplo,
example.com).
6. En el cuadro Protocol (Protocolo), escriba http.
7. Seleccione Save.

Paso 5: Configurar registros para el tráfico del sitio web


Si desea hacer un seguimiento de la cantidad de visitas que acceden a su sitio web, puede habilitar el
registro en el bucket del dominio raíz. Para obtener más información, consulte Registro de acceso al

Versión de API 2006-03-01


650
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

servidor de Amazon S3. Si planea usar Amazon CloudFront para acelerar su sitio web, también puede usar
el registro de CloudFront.

Para habilitar el registro de acceso al servidor para el bucket del dominio raíz

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. En la misma región en la que creó el bucket configurado como sitio web estático, cree un bucket para
el registro, por ejemplo logs.example.com.
3. Cree una carpeta para los archivos de registro de acceso al servidor (por ejemplo, logs).
4. (Opcional) Si desea utilizar CloudFront para mejorar el rendimiento del sitio web, cree una carpeta
para los archivos de registro de CloudFront (por ejemplo, cdn).
5. En la lista Bucket elija el bucket de dominio raíz.
6. Seleccione Properties (Propiedades).
7. Elija Server access logging (Registro de acceso al servidor).
8. Elija Enable logging (Habilitar el registro).
9. En Target bucket (Bucket de destino), elija el bucket que creó para los archivos de registro, por
ejemplo logs.example.com.
10. En Target prefix (Prefijo de destino), escriba el nombre de la carpeta que creó para los archivos de
registro seguido del delimitador (/), por ejemplo logs/.

Cuando establece Target prefix (Prefijo de destino), agrupa los archivos de datos de registro en una
carpeta para que sean fáciles de localizar.
11. Elija Save (Guardar).

En su bucket de registros, ahora puede acceder a sus registros. Amazon S3 escribe registros de
acceso al sitio web en su bucket de registros cada dos horas.
12. Para consultar los registros, elija Overview (Información general) y elija la carpeta.

Paso 6: Cargar índice y contenido del sitio web


En este paso, cargue el documento de índice y el contenido del sitio web opcional en el bucket de dominio
raíz.

Cuando habilite el alojamiento de sitio web estático para su bucket, escriba el nombre del documento de
índice (por ejemplo, index.html). Después de habilitar el alojamiento de sitio web estático para el bucket,
cargue un archivo HTML con el nombre de este documento de índice en el bucket.

Para configurar el documento de índice

1. Cree un archivo index.html.

Si no tiene un archivo index.html, puede usar el siguiente HTML para crear uno:

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

2. Guarde el archivo de índice localmente con el nombre exacto del documento de índice que especificó
cuando habilitó el alojamiento de sitio web estático para el bucket (por ejemplo, index.html).

Versión de API 2006-03-01


651
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

El nombre del archivo de documento de índice debe coincidir exactamente con el nombre del
documento de índice que especifique en el cuadro de diálogo Static website hosting (Alojamiento
de sitio web estático). El nombre del documento de índice distingue entre mayúsculas y minúsculas.
Por ejemplo, si escribe index.html en el nombre del Index document (Documento de índice) en el
cuadro de diálogo Static website hosting (Alojamiento de sitio web estático), el nombre del archivo de
documento de índice también debe ser index.html y no Index.html.
3. 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/.
4. En la lista Buckets, elija el nombre del bucket que desea utilizar para alojar un sitio web estático.
5. Habilite el alojamiento de sitios web estáticos para su bucket e introduzca el nombre exacto del
documento de índice (por ejemplo, index.html). Para obtener más información, consulte Habilitar el
alojamiento de sitios web (p. 621).

Después de habilitar el alojamiento estático del sitio web, continúe con el paso 6.
6. Para cargar el documento de índice en el bucket, realice una de las siguientes acciones:

• Arrastre y suelte el archivo de índice en la lista de buckets de la consola.


• Elija Upload (Cargar) y siga las instrucciones para elegir y cargar el archivo de índice.

Para obtener instrucciones paso a paso, consulte ¿Cómo puedo cargar archivos y carpetas en un
bucket de Amazon S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.
7. (Opcional) Cargue otros contenidos del sitio web en su bucket.

Paso 7: Editar la configuración de bloqueo de acceso público


En este ejemplo, se edita la configuración de acceso público del bloque en el bucket del dominio
(example.com) para permitir el acceso público.

De forma predeterminada, Amazon S3 bloquea el acceso público a su cuenta y buckets. Si desea utilizar
un bucket para alojar un sitio web estático, puede utilizar estos pasos para editar la configuración de
bloqueo de acceso público.
Warning

Antes de completar este paso, revise Uso del bloqueo del acceso público de Amazon S3 para
asegurarse de que comprende y acepta los riesgos que implica permitir el acceso público. Cuando
desactiva la configuración de acceso público de bloqueo para que el bucket sea público, cualquier
usuario de Internet puede acceder al bucket. Le recomendamos que bloquee todo el acceso
público a sus buckets.

1. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.


2. Elija el nombre del bucket que ha configurado como sitio web estático.
3. Elija Permissions.
4. Elija Edit (Editar).
5. Desactive Block all public access (Bloquear todo el acceso público) y elija Save (Guardar).
Warning

Antes de completar este paso, revise Uso del bloqueo del acceso público de Amazon S3
para asegurarse de que comprende y acepta los riesgos que implica permitir el acceso
público. Cuando desactiva la configuración de acceso público de bloqueo para que el bucket
sea público, cualquier usuario de Internet puede acceder al bucket. Le recomendamos que
bloquee todo el acceso público a sus buckets.

Versión de API 2006-03-01


652
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

6. En el cuadro de confirmación, introduzca confirm y, a continuación, elija Confirm (Confirmar).

En S3 buckets (Buckets de S3), el Access (Acceso) a su bucket se actualiza a Objects can be public
(Los objetos pueden ser públicos). Ahora puede agregar una política de bucket para hacer que los
objetos del bucket sean legibles públicamente. Si Access (Access) se sigue mostrando como Bucket
and objects not public (El bucket y los objetos no son públicos), es posible que tenga que editar la
configuración de bloqueo de acceso público de su cuenta antes de agregar una política de bucket.

Paso 8: Asociar una política de bucket


Después de editar la configuración de acceso público de bloques de S3, debe agregar una política de
bucket para garantizar el acceso de lectura público a su bucket. Cuando concede permiso de lectura
público, cualquier persona de Internet puede acceder a su bucket.

Versión de API 2006-03-01


653
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Important

La política que se muestra a continuación es solo un ejemplo y permite acceso completo al


contenido del bucket. Antes de continuar con este paso, revise ¿Cómo puedo proteger los
archivos en mi bucket de Amazon S3? para asegurarse de que comprende las prácticas
recomendadas para proteger los archivos en el bucket de S3 y los riesgos que implica la
concesión de acceso público.

1. En Buckets, elija el nombre del bucket.


2. Elija Permissions.
3. Elija Bucket Policy.
4. Para conceder acceso público de lectura a su sitio web, copie la siguiente política de bucket y péguela
en el Bucket policy editor (Editor de políticas de bucket).

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::example.com/*"
]
}
]
}

5. Actualice el Resource para incluir el nombre de su bucket.

En la política de bucket de ejemplo anterior, example.com es el nombre del bucket. Para utilizar esta
política de bucket con su propio bucket, debe actualizar este nombre para que coincida con su nombre
de bucket.
6. Elija Save (Guardar).

Aparece una advertencia que indica que el bucket tiene acceso público. En Bucket Policy (Política del
bucket), aparece una etiqueta Public (Pública).

Si ve un error que indica Policy has invalid resource, confirme que el nombre del bucket en
la política del bucket coincide con el nombre de su bucket. Para obtener información acerca de cómo
agregar una política de bucket, vea ¿Cómo añado una política de bucket de S3?

Si recibe una advertencia de Error - Access denied (Acceso denegado) y el Editor de políticas del
bucket no le permite guardar la política de bucket , compruebe la configuración de acceso público a
nivel de cuenta y bloque de nivel de bucket para confirmar que permite el acceso público al bucket.

En el paso siguiente, puede determinar los puntos de enlace de su sitio web y probar el punto de enlace de
su dominio.

Paso 9: Probar el punto de enlace del dominio


Después de configurar el bucket de dominio para alojar un sitio web público, puede probar el punto de
enlace de su dominio. Para obtener más información, consulte Puntos de enlace de sitio web (p. 618).
Solo podrá probar el punto de enlace para su bucket de dominio, ya que este está configurado para el
redireccionamiento de sitios web y no para el alojamiento de sitios web estáticos.

Versión de API 2006-03-01


654
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Note

Amazon S3 no admite el acceso HTTPS al sitio web. Si desea usar HTTPS, puede usar Amazon
CloudFront para dar servicio a un sitio web estático alojado en Amazon S3.
Para obtener más información, consulte Cómo usar CloudFront para dar servicio a un sitio web
estático alojado en Amazon S3 y Requerir HTTPS para la comunicación entre CloudFront y un
origen de Amazon S3.

Para probar el punto de enlace del sitio web

Si anotó el punto de enlace del sitio web cuando habilitó el alojamiento estático del sitio web, para probar
el sitio web, escriba el punto de enlace del sitio web en su navegador. El sitio web estará implementado
correctamente, si el navegador muestra la página index.html. Para obtener más información, consulte
Puntos de enlace del sitio web de Amazon S3.

Si necesita obtener el punto de enlace del sitio web antes de realizar la prueba, realice estos pasos:

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, elija el nombre del bucket que desea utilizar para alojar un sitio web estático.
3. Seleccione Properties (Propiedades).
4. Seleccione Static website hosting (Alojamiento de sitio web estático).
5. Para probar el punto de enlace del sitio web, junto a Endpoint (Punto de enlace), elija el punto de
enlace del sitio web.

El sitio web estará implementado correctamente, si el navegador muestra la página index.html.

En el siguiente paso, utiliza Amazon Route 53 para permitir a los clientes utilizar sus URL personalizadas
para navegar a su sitio.

Paso 10: Agregar registros de alias para su dominio y subdominio


En este paso, se crean los registros de alias que añade a la zona alojada para sus mapeos de dominio
example.com y www.example.com. 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. Se crean dos registros de alias, uno
para el dominio raíz y otro para el subdominio.

Para agregar un registro de alias para su dominio raíz (example.com).

1. Abra la consola de Route 53 en https://console.aws.amazon.com/route53/.


Note

Si no utiliza Route 53, consulte Paso 1: Registro de un dominio en la Guía para


desarrolladores de Amazon Route 53. Después de completar la configuración, puede
reanudar las instrucciones.
2. Elija Hosted Zones (Zonas alojadas).
3. En la lista de zonas alojadas, elija el nombre de la zona alojada que coincide con su nombre de
dominio.
4. Elija Create Record Set (Crear conjunto de registros).
5. Especifique los valores siguientes:

Nombre

Acepte el valor predeterminado, que es el nombre de la zona alojada y el dominio.

Versión de API 2006-03-01


655
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Para el dominio raíz, no tiene que introducir ninguna información adicional en el campo Name
(Nombre).
Tipo

Elija A – IPv4 address (A - Dirección IPv4).


Alias

Seleccione Yes.
Alias Target

En la sección de extremos del sitio web de S3 de la lista, elija el nombre del bucket.

El nombre del bucket debe coincidir con el nombre que aparece en el cuadro Name (Nombre).
En la lista Alias Target (Destino de alias) el nombre del bucket va seguido por el punto de enlace
del sitio web Amazon S3 de la región donde se creó el bucket, por ejemplo example.com (s3-
website-us-west-2). Alias Target (Destino de alias) muestra un bucket si:
• Configuró el bucket como un sitio web estático.
• El nombre del bucket es el mismo que el del registro que está creando.
• La cuenta de AWS actual creó el bucket.

Si el bucket no aparece en el listado Alias target (Destino de alias) introduzca el punto de enlace
del sitio web Amazon S3 de la región en la que se creó el bucket, por ejemplo, s3-website-us-
west-2. Para obtener una lista completa de los puntos de enlace de sitio web de Amazon S3,
consulte Puntos de enlace de sitio web de Amazon S3. Para obtener más información sobre el
destino de alias, vea Alias Target en la Guía para desarrolladores de Amazon Route 53.
Routing Policy

Acepte el valor predeterminado de Simple.


Evaluate Target Health

Acepte el valor predeterminado de No.


6. Seleccione Create.

Para agregar un registro de alias para su subdominio (www.example.com)

1. En la zona alojada para su dominio raíz (example.com), elija Create Record Set (Crear conjunto de
registros).
2. Especifique los valores siguientes:

Nombre

Para el subdominio, introduzca www en el recuadro.


Tipo

Elija A – IPv4 address (A - Dirección IPv4).


Alias

Seleccione Yes.
Alias Target

En la sección S3 website endpoints (Puntos de enlace de sitio web de S3) de la lista,


elija el mismo nombre de bucket que aparece en el campo Name (Nombre), por ejemplo
www.example.com (s3-website-us-west-2).
Versión de API 2006-03-01
656
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Routing Policy

Acepte el valor predeterminado de Simple.


Evaluate Target Health

Acepte el valor predeterminado de No.


3. Elija Create (Crear).

Note
Por lo general, los cambios se propagan a todos los servidores de Route 53 en un plazo de 60
segundos. Una vez finalizada la propagación, puede dirigir el tráfico a su bucket de Amazon S3
mediante los nombres de los registros de alias que ha creado en este procedimiento.

Paso 11: Probar el sitio web


Compruebe que el sitio web y el redireccionamiento funcionan correctamente. En el navegador, escriba
sus URL. En este ejemplo, puede probar las siguientes URL:

• Dominio (http://example.com) – muestra el documento de índice en el bucket example.com.


• Subdominio (http://www.example.com) – redirige la solicitud a http://example.com. Verá el
documento de índice en el bucket example.com.

En algunos casos, posiblemente deba eliminar el caché de su navegador web para ver el comportamiento
esperado.

Puede configurar una distribución de Amazon CloudFront para mejorar el rendimiento de su sitio web y
proporcionar registros que puede utilizar para revisar el tráfico del sitio web. Para obtener más información,
consulte Acelerar su sitio web con Amazon CloudFront (p. 657).

Acelerar su 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.

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.

Temas
• Paso 1: Crear una distribución de CloudFront (p. 657)
• Paso 2: Actualizar los conjuntos de registros para su dominio y subdominio (p. 659)
• (Opcional) Paso 3: Comprobar los archivos de registro (p. 659)

Paso 1: Crear 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.

Versión de API 2006-03-01


657
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Para crear una distribución con un origen de Amazon S3

1. Abra la consola de CloudFront en https://console.aws.amazon.com/cloudfront/.


2. Seleccione Create Distribution (Crear distribución).
3. En la página Seleccionar un método de entrega de su contenido, en Web, haga clic en Comenzar.
4. En la página Crear distribución, sección Configuración del origen, en Nombre de dominio de
origen, escriba el punto de enlace del sitio web de Amazon S3 para su bucket, por ejemplo,
example.com.s3-website.us-west-1.amazonaws.com.

CloudFront completa el campo Origin ID (ID de origen) por usted.


5. En 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. Mantenga Nombres de dominio alternativos (CNAME) en blanco.
c. En Objeto raíz predeterminado, introduzca el nombre del documento de índice, por ejemplo,
index.html.

Si la dirección URL utilizada para acceder a la distribución no contiene un nombre de archivo,


la distribución de CloudFront devuelve el documento de índice. El objeto raíz predeterminado
debe coincidir exactamente con el nombre del documento de índice de su sitio web estático. Para
obtener más información, consulte Configurar un documento de índice (p. 622).
d. En Logging (Registro), seleccione la opción On (Activado).
e. En Bucket for Logs (Bucket para registros), seleccione el bucket de registro que creó.

Para obtener más información acerca de la configuración de un bucket de registro, consulte


(Opcional) Registro del tráfico web (p. 627).
f. Si desea almacenar los registros generados por el tráfico en la distribución en una carpeta de
CloudFront, en Prefijo de registro, escriba el nombre de la carpeta.
g. No cambie ningún otro valor predeterminado.
7. Seleccione Create Distribution (Crear distribución).
8. 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.
9. Registre el valor de Nombre de dominio que se muestra en la consola CloudFront, por ejemplo,
dj4p1rv6mvubz.cloudfront.net.
10. Para verificar que la distribución de CloudFront funcione correctamente, escriba el nombre del dominio
de la distribución en el navegador web.

Si su sitio web es visible, la distribución de CloudFront funciona. Si su sitio web tiene un dominio
personalizado registrado con Amazon Route 53, necesitará el nombre de dominio de CloudFront para
actualizar el registro establecido en el siguiente paso.

Versión de API 2006-03-01


658
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Paso 2: Actualizar los conjuntos de registros para su dominio y subdominio


Como ya ha creado con éxito una distribución de CloudFront, actualice el registro de alias en Route 53
para que se asocien a la nueva distribución de CloudFront.

Para actualizar el registro de alias para que apunte 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 Zonas alojadas, seleccione la zona alojada que creó para su subdominio.
3. Seleccione Go to Record Sets (Ir a conjuntos de registros).
4. Elija el registro A que creó para el subdominio, por ejemplo, www.example.com.
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.


8. Para ver si los nuevos registros A han entrado en vigor, en un navegador web, introduzca la URL de
su subdominio, por ejemplo, http://www.example.com.

Si el navegador ya no lo redirige al dominio raíz (por ejemplo, http://example.com), los nuevos


registros A están en su lugar. 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. Todos los visitantes
que hagan referencia al sitio mediante http://example.com o http://www.example.com se
redirigirán a la ubicación de borde de CloudFront más cercana. De esta manera, los tiempos de
descarga serán más rápidos.
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.

(Opcional) Paso 3: Comprobar 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.

Los registros de CloudFront se almacenan en un bucket y una carpeta que elija al crear una distribución de
CloudFront y habilitar el registro. CloudFront escribe registros en su bucket de registros en un plazo de 24
horas desde que se realizan 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. Elija la carpeta de registros de CloudFront.
4. Descargue los archivos .gzip escritos por CloudFront antes de abrirlos.

Si creó un sitio web solo como parte de un ejercicio de aprendizaje, puede eliminar los recursos que
asignó para dejar de acumular cargos. Para ello, consulte Limpiar los recursos de ejemplo (p. 660).
Después de que haya eliminado los recursos de AWS, el sitio web ya no estará disponible.
Versión de API 2006-03-01
659
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Limpiar los recursos de ejemplo


Si creó un sitio web estático como parte de un ejercicio de aprendizaje, debe eliminar 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
• Paso 1: Eliminar la distribución de Amazon CloudFront (p. 660)
• Paso 2: Eliminar la zona alojada en Route 53 (p. 660)
• Paso 3: Deshabilitar el registro y eliminar el bucket de S3 (p. 661)

Paso 1: 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/cloudfront/.


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.

Paso 2: Eliminar 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.

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 una zona alojada de 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).

Versión de API 2006-03-01


660
Amazon Simple Storage Service Guía del desarrollador
Configurar un sitio web estático
con un dominio personalizado

Paso 3: Deshabilitar el registro y eliminar el 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 logs en el 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. En Buckets, elija el nombre del bucket y, a continuación, 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


661
Amazon Simple Storage Service Guía del desarrollador
Información general

Configurar 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. Debe guardar esta configuración en el subrecurso de
notificación asociado con un bucket. (Para obtener más información, consulte Opciones de configuración
de buckets (p. 59).) Amazon S3 proporciona una API para que pueda administrar este subrecurso.
Important

Las notificaciones de eventos de Amazon S3 están diseñadas para ser entregadas al menos una
vez. Normalmente las notificaciones de eventos se entregan en cuestión de segundos, pero a
veces pueden tardar un minuto o más.
Si se realizan dos escrituras en un único objeto sin control de versiones a la vez, es posible que
solo se envíe una notificación de evento. Si desea garantizar que se envía una notificación de
evento por cada escritura exitosa, puede permitir el control de versiones en su bucket. Con el
control de versiones, cada escritura exitosa creará una nueva versión de su objeto y también
enviará una notificación de evento.

Temas
• Información general de las notificaciones (p. 662)
• Cómo habilitar las notificaciones de eventos (p. 664)
• Tipos y destinos de las notificaciones de eventos (p. 665)
• Configurar notificaciones con filtrado de nombre de clave de objeto (p. 667)
• Conceder permisos para publicar mensajes de notificación de eventos en un destino (p. 672)
• Tutorial: Configurar un bucket para notificaciones (tema de SNS y cola de SQS) (p. 674)
• Estructura de mensaje de evento (p. 680)

Información general de las notificaciones


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 (por ejemplo,
s3:ObjectCreated:Put) o puede utilizar un comodín (por ejemplo, s3:ObjectCreated:*) para
solicitar una notificación cuando se crea un objeto independientemente de la API utilizada.
• Eventos 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. 125) y Usar el control de versiones (p. 509).

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
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 Eliminar versiones de
objetos (p. 522).

Versión de API 2006-03-01


662
Amazon Simple Storage Service Guía del desarrollador
Información general

• Eventos de restauración de objeto — Amazon S3 admite la restauración de objetos archivados en


las clases de almacenamiento S3 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.
• Eventos 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.
• Eventos de replicación — Amazon S3 envía notificaciones de eventos para configuraciones de
replicación en las que se ha habilitado S3 Replication Time Control (S3 RTC). Envía estas notificaciones
cuando se produce un error al replicar un objeto, cuando un objeto supera el umbral de 15 minutos,
cuando un objeto se replica después del umbral de 15 minutos y cuando las métricas de replicación
dejan de realizar el seguimiento de un objeto. Publica un segundo evento cuando ese objeto se replica
en la región de destino.

Para ver una lista de los tipos de eventos admitidos, consulte Tipos de eventos admitidos (p. 665).

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. 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 de
Amazon SQS, consulte la página de detalles del producto de 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, rendimiento 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.

Warning

Si la notificación termina escribiendo en el bucket que desencadena la notificación, esto podría


provocar un bucle de ejecución. Por ejemplo, si el bucket activa una función Lambda cada

Versión de API 2006-03-01


663
Amazon Simple Storage Service Guía del desarrollador
Cómo habilitar las notificaciones de eventos

vez que se carga un objeto y la función carga un objeto en el bucket, la función se activa
indirectamente a sí misma. Para evitarlo, utilice dos buckets o configure el desencadenador para
que solo se aplique a un prefijo que se utiliza para los objetos entrantes.
Para obtener más información y un ejemplo del uso de notificaciones de Amazon S3 con AWS
Lambda, consulte Usar AWS Lambda con Amazon S3 en la AWS Lambda Developer Guide.

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 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.
• Mediante programación con los AWS SDK
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 obtener información sobre la configuración
de notificaciones mediante ejemplos de SDK de AWS, consulte Tutorial: Configurar un bucket para
notificaciones (tema de SNS y cola de SQS) (p. 674).

Independientemente del método que utilice, Amazon S3 guarda la configuración de notificación como
XML en el subrecurso de notificación asociado a un bucket. Para obtener información acerca de los
subrecursos de bucket, consulte Opciones de configuración de buckets (p. 59).

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:
• Publique 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>
<Queue>sqs-queue-arn</Queue>
<Event>event-type</Event>
<Event>event-type</Event>
...
</QueueConfiguration>
Versión de API 2006-03-01
664
Amazon Simple Storage Service Guía del desarrollador
Tipos y destinos de las notificaciones de eventos

...
</NotificationConfiguration>

• Publique 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 de AWS Lambda y proporcionar un mensaje de evento como argumento— Para
configurar una función de 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. 680).

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
específica o puede utilizar el tipo de evento s3:ObjectCreated:*
s3:ObjectCreated:Post para solicitar una notificación independientemente de la API que
se utilizó para crear un objeto.
s3:ObjectCreated:Copy

Versión de API 2006-03-01


665
Amazon Simple Storage Service Guía del desarrollador
Tipos de eventos admitidos

Tipos de eventos Descripción


s3:ObjectCreated:CompleteMultipartUpload
No se reciben 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 Eliminar versiones
de objetos (p. 522). También puede utilizar un comodín
s3:ObjectRemoved:* para solicitar una notificación cada vez
que se elimina un objeto.

No se reciben 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 la
s3:ObjectRestore:Completed restauración de un objeto de la clase de almacenamiento S3
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.

s3:Replication:OperationFailedReplicationRecibirá este evento de notificación cuando no se pueda


replicar un objeto que cumplía los requisitos para la replicación
mediante el control de tiempo de replicación de Amazon S3.

s3:Replication:OperationMissedThresholdRecibirá este evento de notificación cuando un objeto que


cumplía los requisitos para la replicación mediante el control
de tiempo de replicación de Amazon S3 supere el umbral de
15 minutos para la replicación.

s3:Replication:OperationReplicatedAfterThreshold
Recibirá este evento de notificación cuando un objeto que
cumplía los requisitos para la replicación mediante la función
de control de tiempo de replicación de Amazon S3 se replique
después del umbral de 15 minutos.

s3:Replication:OperationNotTracked Recibirá este evento de notificación cuando un objeto que


cumplía los requisitos para la replicación mediante el control
de tiempo de replicación de Amazon S3 deje de someterse al
seguimiento de las métricas de replicación.

Versión de API 2006-03-01


666
Amazon Simple Storage Service Guía del desarrollador
Destinos admitidos

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 maestra del cliente (CMK) de AWS Key Management Service (AWS KMS) asociada para
habilitar el cifrado de mensajes.
• 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 Conceder permisos
para publicar mensajes de notificación de eventos en un destino (p. 672).

Configurar 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 de nombre de archivo “.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 de 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 AWS SDK 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. 664). 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. En las siguientes secciones
se presentan ejemplos de configuraciones de notificación válidas con filtrado de nombres de clave de
objeto. También contienen ejemplos de configuraciones de notificación que no son válidas debido a la
superposición de prefijo/sufijo.

Versión de API 2006-03-01


667
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuraciones de notificaciones
válidas con filtrado de nombre de clave de objeto

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>
</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/ van a la cola A, mientas que las
notificaciones para solicitudes PUT en la carpeta logs/ van 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>

Versión de API 2006-03-01


668
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuraciones de notificaciones
válidas con filtrado de nombre de clave de objeto

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 se procesan mediante la función de nube A de
Lambda y todas las imágenes .png recientemente añadidas se procesan mediante la función de nube B.
Los sufijos .png y .jpg no se superponen aunque su última letra sea la misma. 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>
<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>

Versión de API 2006-03-01


669
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuraciones de notificación
con superposición de prefijo/sufijo no válida

<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
En su mayoría, las configuraciones de notificación que utilizan Filter no pueden definir reglas de filtrado
con prefijos superpuestos, sufijos superpuestos ni combinaciones de prefijos y sufijos superpuestos para
los mismos tipos de eventos. (Puede incluir prefijos superpuestos siempre y cuando los sufijos no se
superpongan. Para ver un ejemplo, consulte Configurar notificaciones con filtrado de nombre de clave de
objeto (p. 667)).

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:*.

Se recibe un mensaje de error si se intenta guardar una configuración de notificación que tiene filtros de
nombre superpuestos no válidos para los mismos tipos de eventos, o cuando se utiliza la consola o 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 porque tiene prefijos superpuestos, donde el prefijo raíz se
superpone con cualquier otro prefijo. (Lo mismo sucedería si se usara 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 porque incluye sufijos superpuestos. Dos sufijos
se consideran superpuestos si una determinada cadena puede finalizar con ambos sufijos. Una cadena

Versión de API 2006-03-01


670
Amazon Simple Storage Service Guía del desarrollador
Ejemplos de configuraciones de notificación
con superposición de prefijo/sufijo no válida

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>
<Name>suffix</Name>
<Value>pg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration

La siguiente configuración de notificación no es válida porque 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>

Versión de API 2006-03-01


671
Amazon Simple Storage Service Guía del desarrollador
Conceder permisos para publicar mensajes
de notificación de eventos en un destino

Conceder permisos para publicar mensajes de


notificación de eventos en 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.

Conceder 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 de Lambda, la consola configura los permisos necesarios en la función de
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.

Conceder permisos para publicar mensajes en un


tema de SNS o una cola de SQS
Debe asociar una política de AWS Identity and Access Management (IAM) al tema de SNS o la cola de
SQS de destino para otorgar a Amazon S3 permisos para publicar mensajes en el tema de SNS o la cola
de SQS.

Para ver un ejemplo de cómo asociar una política a un tema de SNS o una cola de SQS, consulte Tutorial:
Configurar un bucket para notificaciones (tema de SNS y cola de SQS) (p. 674). 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

Política de IAM para un tema de SNS de destino


A continuación se muestra un ejemplo de una política de IAM que se asocia al tema de SNS de destino.

{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"

Versión de API 2006-03-01


672
Amazon Simple Storage Service Guía del desarrollador
Conceder permisos para publicar mensajes
en un tema de SNS o una cola de SQS

},
"Action": [
"SNS:Publish"
],
"Resource": "arn:aws:sns:Region:account-id:topic-name",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:::bucket-name" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}

Política de IAM para una cola de SQS de destino


A continuación se muestra un ejemplo de una política de IAM que se asocia a la cola de SQS de destino.

{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "arn:aws:sqs:Region:account-id:queue-name",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}

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" }
}

Política de claves de AWS KMS


Si la cola de SQS o los temas de SNS están cifrados con una clave maestra de cliente (CMK) de AWS
Key Management Service (AWS KMS) administrada por el cliente, debe conceder a la entidad principal del
servicio Amazon S3 permiso para trabajar con los temas cifrados y/o la cola. Para conceder permiso a la
entidad principal de servicio de Amazon S3, añada la siguiente instrucción a la política de claves para la
CMK administrada por el cliente:

{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",

Versión de API 2006-03-01


673
Amazon Simple Storage Service Guía del desarrollador
Tutorial de ejemplo: agregar notificaciones
de bucket utilizando SNS y SQS

"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}

Para obtener más información acerca de las políticas de claves de AWS KMS, consulte Uso de políticas
de claves en AWS KMS en la AWS Key Management Service Developer Guide. Para obtener más
información sobre el uso del cifrado del lado del servidor con AWS KMS para Amazon SQS y Amazon
SNS, consulte lo siguiente.

• Configuración de los permisos de AWS KMS para Amazon SNS en la Guía para desarrolladores de
Amazon Simple Notification Service.
• Configuración de los permisos de AWS KMS para Amazon SQS en la Guía para desarrolladores de
Amazon Simple Queue Service.
• El artículo sobre cifrado de mensajes publicados en Amazon SNS con AWS KMS en el blog de
informática de AWS.

Tutorial: Configurar un bucket para notificaciones


(tema de SNS y cola de SQS)
Temas
• Resumen del tutorial (p. 674)
• Paso 1: Crear un tema de Amazon SNS (p. 675)
• Paso 2: Crear una cola de Amazon SQS (p. 676)
• Paso 3: Agregar una configuración de notificación a su bucket (p. 677)
• Paso 4: Probar la configuración (p. 680)

Resumen del tutorial


En este ejemplo, se añade una configuración de notificación en un bucket que solicita a Amazon S3 que
haga lo siguiente:

• que publique eventos de tipo s3:ObjectCreated:* en una cola de Amazon SQS.


• 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 Configurar notificaciones de


eventos de Amazon S3 (p. 662).

Puede realizar todos estos pasos con la consola sin escribir ningún código. Además, se brindan
ejemplos de código, mediante el uso de los SDK de AWS para Java y .NET, con el fin de ayudar a añadir
configuraciones de notificación mediante programación.

En este tutorial, hará lo siguiente:

Versión de API 2006-03-01


674
Amazon Simple Storage Service Guía del desarrollador
Paso 1: Crear un tema de Amazon SNS

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 envía un mensaje de 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. Sin embargo, para este tutorial, va a 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: Crear 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 actualizar la política
proporcionando el nombre de recurso de Amazon (ARN) del tema de SNS, el nombre del bucket y el
ID de cuenta del propietario del bucket.

{
"Version": "2012-10-17",
"Id": "example-ID",
"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" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}

4. Apunte el ARN del tema.

Versión de API 2006-03-01


675
Amazon Simple Storage Service Guía del desarrollador
Paso 2: Crear una cola de Amazon SQS

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: Crear 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. Sustituya la política de acceso asociada a la cola por la siguiente política. (En la consola de Amazon
SQS, seleccione la cola y, en la pestaña Permissions (Permisos), elija 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" },
"StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
}
}
]
}

3. (Opcional) Si la cola de Amazon SQS o el tema de Amazon SNS tiene habilitado el cifrado del lado
del servidor con AWS Key Management Service (AWS KMS), añada la siguiente política a la CMK de
AWS KMS administrada del cliente simétrica asociada.

Debe añadir la política a una CMK administrada por el cliente, ya que la CMK administrada por AWS
para Amazon SQS o Amazon SNS no se puede modificar.

{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"

Versión de API 2006-03-01


676
Amazon Simple Storage Service Guía del desarrollador
Paso 3: Agregar una configuración
de notificación a su bucket

],
"Resource": "*"
}
]
}

Para obtener más información acerca del uso de SSE para Amazon SQS y Amazon SNS con AWS
KMS, consulte lo siguiente:

• Configuración de los permisos de AWS KMS para Amazon SNS en la Guía para desarrolladores de
Amazon Simple Notification Service.
• Configuración de los permisos de AWS KMS para Amazon SQS en la Guía para desarrolladores de
Amazon Simple Queue Service.
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: Agregar 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): Habilitar 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 publica un mensaje de prueba que usted
recibe 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.

Paso 3 (opción b): Habilitar las notificaciones en un bucket con


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. Debe 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. 829).

Versión de API 2006-03-01


677
Amazon Simple Storage Service Guía del desarrollador
Paso 3: Agregar una configuración
de notificación a su bucket

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)
{
Console.WriteLine("Error encountered on server. Message:'{0}' ",
e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown error encountered on server. Message:'{0}' ",
e.Message);
}
}
}

Versión de API 2006-03-01


678
Amazon Simple Storage Service Guía del desarrollador
Paso 3: Agregar una configuración
de notificación a su bucket

Paso 3 (opción c): Habilitar 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. 827).

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

Versión de API 2006-03-01


679
Amazon Simple Storage Service Guía del desarrollador
Paso 4: Probar la configuración

e.printStackTrace();
}
}
}

Paso 4: Probar 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.

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

Versión de API 2006-03-01


680
Amazon Simple Storage Service Guía del desarrollador
Estructura de mensaje de evento

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.
• La clave replicationEventData solo es visible para los eventos de replicación.

En el siguiente ejemplo se muestra la versión 2.2 de la estructura JSON del mensaje de eventos, que es la
versión que actualmente usa Amazon S3.

{
"Records":[
{
"eventVersion":"2.2",
"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":{
"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",

Versión de API 2006-03-01


681
Amazon Simple Storage Service Guía del desarrollador
Estructura de mensaje de evento

"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":{
"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 se 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",

Versión de API 2006-03-01


682
Amazon Simple Storage Service Guía del desarrollador
Estructura de mensaje de evento

"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":{
"principalId":"A3NL1KOZZKExample"
},
"arn":"arn:aws:s3:::mybucket"
},
"object":{
"key":"HappyFace.jpg",
"size":1024,
"eTag":"d41d8cd98f00b204e9800998ecf8427e",
"versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
"sequencer":"0055AED6DCD90281E5"
}
}
}
]
}

Para encontrar una definición de cada prefijo de identificación de IAM (AIDA, AROA, AGPA, etc.), consulte
Descripción de los prefijos de ID único.

Versión de API 2006-03-01


683
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 de Amazon S3. Los
buckets que están configurados para replicación de objetos pueden pertenecer a la misma cuenta de
AWS o a cuentas diferentes. Puede copiar objetos entre diferentes regiones de AWS o dentro de la misma
región.

Para habilitar la replicación de objetos, añada una configuración de replicación a su 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. 702).

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.

Motivos para usar la replicación


La replicación puede ayudarle a hacer lo siguiente:

• Replicar objetos conservando los metadatos — Puede utilizar la replicación para realizar copias de los
objetos en las que se conserven todos los metadatos, como la hora de creación del objeto original y los
ID de versión. Esta capacidad es importante si necesita asegurarse de que su réplica sea idéntica al
objeto de origen.

 
• Replicar objetos en diferentes clases de almacenamiento — Puede utilizar la replicación para colocar
objetos directamente en S3 Glacier, S3 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.

Versión de API 2006-03-01


684
Amazon Simple Storage Service Guía del desarrollador
Cuándo se debe usar la CRR

 
• Replicar objetos en 15 minutos — Puede utilizar S3 Replication Time Control (S3 RTC) para replicar los
datos en la misma región de AWS o en distintas regiones en un periodo de tiempo predecible. S3 RTC
replica el 99,99 % de los objetos nuevos almacenados en Amazon S3 dentro de un plazo de 15 minutos
(con el respaldo de un acuerdo de nivel de servicio). Para obtener más información, consulte the section
called “S3 Replication Time Control (S3 RTC)” (p. 702).

Cuándo se debe usar la CRR


La replicación entre regiones puede ayudarle a hacer lo siguiente:

• Cumplir los requisitos de conformidad — 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 la 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 optar por 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 en una sola ubicación.

 
• Configurar la replicación en directo entre las cuentas de producción y de pruebas: si usted o sus clientes
tienen cuentas de pruebas o de producción que utilizan los mismos datos, puede replicar objetos entre
esas diversas cuentas al mismo tiempo que mantiene metadatos de objetos implementando las reglas
de SRR.

 
• Cumplir las leyes de soberanía de datos — Es posible que tenga que almacenar varias copias de sus
datos en cuentas de AWS separadas dentro de una misma región. La replicación en la misma región
puede ayudarle a replicar automáticamente los datos críticos cuando las normativas de conformidad no
permiten que los datos salgan de su país.

Requisitos de replicación
La replicación requiere lo siguiente:

Versión de API 2006-03-01


685
Amazon Simple Storage Service Guía del desarrollador
¿Qué replica Amazon S3?

• 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 Puntos
de enlace de los servicios 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. 474).
• Si el bucket de origen tiene S3 Bloqueo de objetos habilitado, el bucket de destino también debe tener
S3 Bloqueo de objetos habilitado. Para obtener más información, consulte Bloquear objetos mediante S3
Bloqueo de objetos (p. 532).

Para habilitar la replicación en un bucket que tiene habilitado 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. 689).

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. 701).

¿Qué replica Amazon S3?


Amazon S3 replica solo elementos específicos en buckets que están configurados para la replicación.

¿Qué se replica?
De forma predeterminada, Amazon S3 replica lo siguiente:

• Objetos creados después de añadir una configuración de replicación.

 
• Objetos sin cifrar.

 
• Los objetos cifrados en reposo bajo claves administradas de Amazon S3 (SSE-S3) o claves maestras
del cliente (CMK) almacenadas en AWS Key Management Service (SSE-KMS). Para replicar objetos
cifrados con CMK almacenadas en AWS KMS, debe habilitar la opción de forma explícita. 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
Proteger los datos con el cifrado del lado del servidor (p. 287).

 
• Metadatos de objetos.
Versión de API 2006-03-01
686
Amazon Simple Storage Service Guía del desarrollador
Elementos que no se replican

 
• 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. 327).

 
• 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 Cambiar el propietario de la réplica (p. 705).

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.

 
• Etiquetas de objeto, si las hay.

 
• Información de retención de S3 Bloqueo de objetos, 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
Bloquear objetos mediante S3 Bloqueo de objetos (p. 532).

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. 698).
• 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


De forma predeterminada, 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.

Versión de API 2006-03-01


687
Amazon Simple Storage Service Guía del desarrollador
Elementos que no se replican

• 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 CMK almacenadas en AWS
KMS. De forma predeterminada, Amazon S3 no replica los objetos cifrados con CMK 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 Proteger los datos con el
cifrado del lado del servidor (p. 287).

 
• Objetos que se almacenan en la clase de almacenamiento S3 Glacier o S3 Glacier Deep Archive. Para
obtener más información acerca del servicio Amazon S3 Glacier, consulte la Guía para desarrolladores
de Amazon S3 Glacier.

 
• 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. 448).

 
• 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 Administrar el ciclo
de vida de los objetos (p. 136).
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. 698).
• 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
Versión de API 2006-03-01
688
Amazon Simple Storage Service Guía del desarrollador
Replicación de objetos existentes

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.

Replicación de objetos existentes


Para habilitar la replicación de objetos existentes en su cuenta, debe ponerse en contacto con AWS
Support. Para evitar que su solicitud se retrase, titule su caso de AWS Support "Replication for Existing
Objects" (Replicación de objetos existentes) y asegúrese de incluir la siguiente información:

• Bucket de origen
• Bucket de destino
• Volumen de almacenamiento estimado que se va a replicar (en terabytes)
• Recuento estimado de objetos de almacenamiento que se van a replicar

Temas relacionados
• Replicación (p. 684)
• Información general de configuración de la replicación (p. 689)
• Información del estado de replicación (p. 735)

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. Para identificar un subconjunto, proporcione 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.

Versión de API 2006-03-01


689
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

• 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. 702).

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

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, la 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. 713).

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. 690).

Temas
• Información general de la configuración de replicación (p. 690)
• Configuración de permisos para la replicación (p. 699)

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. 699).

Usted agrega una regla en la configuración de replicación en los siguientes escenarios:

• Desea replicar todos los objetos.

Versión de API 2006-03-01


690
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

• 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. 691)
• Opcional: especificación de un filtro (p. 692)
• Configuraciones de destino adicionales (p. 693)
• Ejemplo de configuraciones de replicación (p. 694)
• Compatibilidad con versiones anteriores (p. 698)

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. Cuanto mayor
sea el número, mayor será la prioridad.
• 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.

Versión de API 2006-03-01


691
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

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>
...

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 el
código siguiente. 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>

Versión de API 2006-03-01


692
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

...
</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>
...

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 las mismas cuentas, 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 Cambiar el
propietario de la réplica (p. 705).
• Puede habilitar S3 Replication Time Control (S3 RTC) en la configuración de replicación. S3 RTC replica
la mayoría de los objetos en unos segundos y el 99,99 % de ellos en 15 minutos (con el respaldo de un
acuerdo de nivel de servicio).
Note

Solo se acepta un valor válido de <Minutes>15</Minutes> para EventThreshold y Time.

...

Versión de API 2006-03-01


693
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<Metrics>
<Status>Enabled</Status>
<EventThreshold>
<Minutes>15</Minutes>
</EventThreshold>
</Metrics>
<ReplicationTime>
<Status>Enabled</Status>
<Time>
<Minutes>15</Minutes>
</Time>
<ReplicationTime>
</Destination>
...

Para obtener más información, consulte Replicación de objetos mediante S3 Replication Time Control
(S3 RTC) (p. 702). Para obtener ejemplos de API, consulte PutBucketReplication en la Amazon Simple
Storage Service API Reference.
• 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. Primero, acepte explícitamente
esta característica añadiendo el elemento SourceSelectionCriteria. A continuación, proporcione la
CMK de AWS KMS (para la región de AWS del bucket de destino) que se utilizará para cifrar las 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 Replicar objetos creados con el cifrado en el lado del servidor
(SSE) mediante claves de cifrado almacenadas en AWS KMS (p. 708).

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.
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 un rol a un servicio de AWS en la
Guía del usuario de IAM.

Versión de API 2006-03-01


694
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

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>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>

<Filter>
<And>
<Prefix>Tax/</Prefix>
<Tag>

Versión de API 2006-03-01


695
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

<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.
• 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>

Versión de API 2006-03-01


696
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>
<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. Cuanto mayor sea el
número, mayor será la prioridad.

<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>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
</Destination>
</Rule>
<Rule>
<Status>Enabled</Status>
<Priority>2</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>

Versión de API 2006-03-01


697
Amazon Simple Storage Service Guía del desarrollador
Información general de la configuración de replicación

<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. 713).

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</Status>
<Priority>integer</Priority>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Destination>
<Bucket>arn:aws:s3:::bucket-name</Bucket>
</Destination>
</Rule>
...

Versión de API 2006-03-01


698
Amazon Simple Storage Service Guía del desarrollador
Configuración de permisos para la replicación

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. 699)
• Concesión de permisos cuando los buckets de origen y destino son propiedad de diferentes cuentas
de AWS (p. 701)

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. 713).

• 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.
• 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":[

Versión de API 2006-03-01


699
Amazon Simple Storage Service Guía del desarrollador
Configuración de permisos para la replicación

"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. 687).
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 permiten que Amazon S3 lea las etiquetas de objetos para la replicación (consulte Etiquetado
de objetos (p. 127)). 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 Acciones de Amazon S3 (p. 374).
Important

La cuenta de AWS propietaria del rol de IAM debe tener los permisos para las acciones que
concede al rol de IAM. Versión de API 2006-03-01
700
Amazon Simple Storage Service Guía del desarrollador
Configuración de permisos para la replicación

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. 475).
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. 702).

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*",
"s3:GetBucketVersioning",
"s3:PutBucketVersioning"
],
"Resource":"arn:aws:s3:::destinationbucket"
}
]
}

Para ver un ejemplo, consulte Ejemplo 2: Configurar la replicación cuando los buckets de origen y destino
son propiedad de cuentas diferentes (p. 723).

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. 699).

Versión de API 2006-03-01


701
Amazon Simple Storage Service Guía del desarrollador
Configuraciones de replicación adicionales

• 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 Cambiar el propietario de la réplica (p. 705).

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. 689).

Temas
• Replicación de objetos mediante S3 Replication Time Control (S3 RTC) (p. 702)
• Cambiar el propietario de la réplica (p. 705)
• Replicar objetos creados con el cifrado en el lado del servidor (SSE) mediante claves de cifrado
almacenadas en AWS KMS (p. 708)

Replicación de objetos mediante S3 Replication Time


Control (S3 RTC)
S3 Replication Time Control (S3 RTC) ayuda a cumplir los requisitos empresariales o de cumplimiento de
normas para la replicación de datos y proporciona visibilidad de los tiempos de replicación de Amazon S3.
S3 RTC replica la mayoría de los objetos que se cargan en Amazon S3 en unos segundos y el 99,99 % de
esos objetos en un plazo de 15 minutos.

Con las métricas de replicación, puede supervisar el número total de operaciones de la API de S3 que
están pendientes de replicación, el tamaño total de los objetos pendientes de replicación y el tiempo
máximo de replicación en la región de destino. Las métricas de replicación están disponibles a través de
la consola de Amazon S3 y en Amazon CloudWatch. Para obtener más información, consulte the section
called “Métricas de replicación de CloudWatch en Amazon S3” (p. 759).

Con S3 RTC, los eventos de Amazon S3 le notifican los escasos casos en que los objetos no se replican
en 15 minutos, así como el momento en que esos objetos se replican correctamente en su región de

Versión de API 2006-03-01


702
Amazon Simple Storage Service Guía del desarrollador
S3 Replication Time Control (S3 RTC)

destino. Los eventos de Amazon S3 están disponibles a través de Amazon SQS, Amazon SNS o AWS
Lambda. Para obtener más información, consulte Notificaciones (p. 662).

Temas
• Habilitación del control del tiempo de replicación de S3 (p. 703)
• Uso de métricas de replicación para monitorizar configuraciones de replicación de Amazon
S3 (p. 703)
• Uso de eventos de Amazon S3 para realizar un seguimiento de los objetos de control de tiempo de
replicación de S3 (p. 703)
• Prácticas recomendadas y directrices para utilizar el control de tiempo de replicación de S3 (p. 704)

Habilitación del control del tiempo de replicación de S3


Puede comenzar a utilizar S3 Replication Time Control (S3 RTC) con una regla de replicación nueva
o existente. Puede optar por aplicar la regla de replicación a un bucket de S3 completo o a objetos de
Amazon S3 con un prefijo o etiqueta específicos. Cuando habilita S3 RTC, las métricas de replicación
también se habilitan en la regla de replicación.
Note

Estas métricas de replicación se facturan con la misma tarifa que las métricas personalizadas
de Amazon CloudWatch. Para obtener más información, consulte los precios de Amazon
CloudWatch.

Puede configurar el control de tiempo de replicación (RTC) mediante la consola de Amazon S3, la API de
Amazon S3, los AWS SDK y la interfaz de línea de comandos de AWS (AWS CLI).

Para obtener más información, consulte Información general de la configuración de replicación (p. 690).

Uso de métricas de replicación para monitorizar configuraciones


de replicación de Amazon S3
Cada regla de replicación para la que se ha habilitado S3 Replication Time Control (S3 RTC) publica
métricas de replicación. Con las métricas de replicación, puede supervisar el número total de operaciones
de la API de S3 que están pendientes de replicación, el tamaño total de los objetos pendientes de
replicación y el tiempo máximo de replicación en la región de destino. A continuación, puede monitorizar
cada conjunto de datos que se replica por separado.

Las métricas de replicación están disponibles dentro de los 15 minutos siguientes a la habilitación
de S3 RTC. Las métricas de replicación están disponibles a través de la consola de Amazon S3, la
API de Amazon S3, los AWS SDK, la interfaz de línea de comandos de AWS (AWS CLI) y Amazon
CloudWatch. Para obtener más información, consulte the section called “Monitoreo de métricas con
CloudWatch” (p. 754).

Uso de eventos de Amazon S3 para realizar un seguimiento de


los objetos de control de tiempo de replicación de S3
Puede realizar un seguimiento del tiempo de replicación de los objetos que no se replicaron en 15 minutos
monitorizando las notificaciones de eventos específicas que S3 Replication Time Control (S3 RTC) publica.
Estos eventos se publican cuando un objeto que cumplía los requisitos para la replicación mediante S3
RTC no se ha replicado en el plazo de 15 minutos, así como en el momento en que ese objeto se replica
en la región de destino.

Los eventos de replicación están disponibles dentro de los 15 minutos siguientes a la habilitación de
S3 RTC. Los eventos de Amazon S3 están disponibles a través de Amazon SQS, Amazon SNS o AWS

Versión de API 2006-03-01


703
Amazon Simple Storage Service Guía del desarrollador
S3 Replication Time Control (S3 RTC)

Lambda. Para obtener más información, consulte the section called “Tipos y destinos de las notificaciones
de eventos” (p. 665).

Prácticas recomendadas y directrices para utilizar el control de


tiempo de replicación de S3
Al replicar datos en Amazon S3 mediante S3 Replication Time Control (S3 RTC), siga estas prácticas
recomendadas para optimizar el rendimiento de replicación de sus cargas de trabajo.

Temas
• Directrices para optimizar la tasa de solicitudes y el rendimiento de replicación de Amazon
S3 (p. 704)
• Cálculo de las tasas de solicitudes de replicación (p. 704)
• Adopción de medidas si se van a sobrepasar los límites de velocidad de transferencia de datos de S3
RTC (p. 705)
• Tasas de solicitudes de replicación de objetos cifrados con AWS KMS (p. 705)
• Adopción de medidas si se van a sobrepasar los límites de la tasa de solicitudes de AWS
KMS (p. 705)

Directrices para optimizar la tasa de solicitudes y el rendimiento de replicación de


Amazon S3
Al cargar y recuperar almacenamiento de Amazon S3, sus aplicaciones pueden lograr fácilmente miles
de transacciones por segundo en el rendimiento de la solicitud. Por ejemplo, una aplicación puede lograr
al menos 3500 solicitudes PUT/COPY/POST/DELETE o 5500 GET/HEAD por segundo y prefijo en un
bucket de S3, incluidas las solicitudes que realiza la replicación S3 en su nombre. 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 S3 para ejecutar en paralelo las operaciones de lectura, podría escalar el rendimiento de lectura a
55.000 solicitudes de lectura por segundo.

Amazon S3 se escala automáticamente en respuesta a las tasas de solicitudes sostenidas por encima de
estas directrices, o de tasas de solicitudes sostenidas simultáneas con solicitudes LIST. Aunque Amazon
S3 se está optimizando internamente para una nueva velocidad de solicitudes, podría recibir respuestas
a las solicitudes HTTP 503 de forma temporal hasta que se complete la optimización. Esto puede ocurrir
cuando se producen aumentos en las tasas de solicitudes por segundo o cuando se habilita S3 RTC por
primera vez. Durante estos periodos, la latencia de replicación puede aumentar. El acuerdo de nivel de
servicio (SLA) de S3 RTC no se aplica a los periodos de tiempo en los que se exceden las directrices de
rendimiento de Amazon S3 sobre solicitudes por segundo.

El SLA de S3 RTC tampoco se aplica durante los periodos de tiempo en los que la velocidad de
transferencia de datos de replicación supera el límite predeterminado de 1 Gbps. Si prevé que su velocidad
de transferencia de replicación supere 1 Gbps, puede ponerse en contacto con el AWS Support Center o
usar cuotas de servicio para solicitar un aumento de su límite.

Cálculo de las tasas de solicitudes de replicación


Su tasa total de solicitudes, incluidas las solicitudes que realiza la replicación de Amazon S3 en su nombre,
debe estar comprendida en las directrices de tasa de solicitudes de Amazon S3 para los buckets de origen
y destino de la replicación. Para cada objeto replicado, la replicación de Amazon S3 crea hasta cinco
solicitudes GET/HEAD y una solicitud PUT al bucket de origen, así como una solicitud PUT al bucket de
destino.

Por ejemplo, si prevé replicar 100 objetos por segundo, la replicación de Amazon S3 podría realizar
100 solicitudes PUT adicionales en su nombre para un total de 200 solicitudes PUT por segundo al bucket

Versión de API 2006-03-01


704
Amazon Simple Storage Service Guía del desarrollador
Cambiar el propietario de la réplica

S3 de origen. Además, la replicación de Amazon S3 puede realizar hasta 500 solicitudes GET/HEAD (5
solicitudes GET/HEAD por cada objeto replicado).
Note
Usted incurre en costos solamente por una solicitud PUT por cada objeto replicado. Para obtener
más información, consulte la información de precios en las preguntas frecuentes sobre replicación
de Amazon S3.

Adopción de medidas si se van a sobrepasar los límites de velocidad de


transferencia de datos de S3 RTC
Si prevé que la velocidad de transferencia de datos de control de tiempo de replicación de S3 supere el
límite predeterminado de 1 Gbps, póngase en contacto con AWS Support Center o use cuotas de servicio
para solicitar un aumento del límite.

Tasas de solicitudes de replicación de objetos cifrados con AWS KMS


Al replicar objetos cifrados con cifrado del lado del servidor (SSE-KMS) mediante la replicación de Amazon
S3, se aplican los límites de solicitudes por segundo de AWS Key Management Service (AWS KMS).
AWS KMS podría rechazar una solicitud por lo demás válida porque su tasa de solicitudes exceda el límite
del número de solicitudes por segundo. Cuando se limita de forma controlada una solicitud, AWS KMS
devuelve un error ThrottlingException. El límite de la tasa de solicitudes de AWS KMS se aplica a
las solicitudes que usted realiza directamente y a aquellas que la replicación de Amazon S3 efectúa en su
nombre.

Por ejemplo, si prevé replicar 1.000 objetos por segundo, puede restar 2.000 solicitudes al límite de tasa de
solicitudes de AWS KMS. La tasa de solicitudes por segundo resultante será la que estará disponible para
las cargas de trabajo de AWS KMS, excluida la replicación. Puede utilizar las métricas de solicitudes de
AWS KMS en Amazon CloudWatch para monitorizar la tasa total de solicitudes de AWS KMS en su cuenta
de AWS.

Adopción de medidas si se van a sobrepasar los límites de la tasa de solicitudes


de AWS KMS
Si cree que la tasa de solicitudes de AWS KMS, incluidas las de replicación realizadas por la replicación
de Amazon S3 en su nombre, va a superar los límites de la tasa de solicitudes de AWS KMS de su cuenta,
puede solicitar un aumento de límite mediante las cuotas de servicio. Si las Cuotas de servicio para AWS
KMS no están disponibles en la región de AWS, póngase en contacto con el AWS Support Center.

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. 684).

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.

Versión de API 2006-03-01


705
Amazon Simple Storage Service Guía del desarrollador
Cambiar el propietario de la réplica

Las siguientes secciones describen cómo realizar estas tareas. Para ver un ejemplo práctico con
instrucciones paso a paso, consulte Ejemplo 3: Cambiar el propietario de la réplica cuando los buckets de
origen y de destino son propiedad de cuentas diferentes (p. 724).

Agregar la opción de invalidación del propietario a la


configuración de la 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>

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>

Versión de API 2006-03-01


706
Amazon Simple Storage Service Guía del desarrollador
Cambiar el propietario de la réplica

</Destination>
</Rule>
</ReplicationConfiguration>

Conceder permiso a Amazon S3 para cambiar al propietario 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/*"
}
...

Agregar permiso a 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",
"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.

Versión de API 2006-03-01


707
Amazon Simple Storage Service Guía del desarrollador
Replicar objetos cifrados

 
• 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.

Replicar objetos creados con el cifrado en el lado


del 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 maestras del cliente (CMK) almacenadas en AWS KMS. Esta sección explica la
configuración adicional que agrega para indicar a Amazon S3 que replique estos objetos.
Important

La replicación de datos cifrados es un proceso del servidor que se produce enteramente en


Amazon S3. La replicación no admite el cifrado en el lado del cliente.

Para ver un ejemplo con instrucciones paso a paso, consulte Ejemplo 4: Replicar objetos
cifrados (p. 728). Para obtener información acerca de la configuración de replicación, consulte
Replicación (p. 684).

Temas
• Especificar información adicional en la configuración de replicación (p. 708)
• Conceder permisos adicionales para el rol de IAM (p. 710)
• Conceder permisos adicionales para escenarios que afectan a varias cuentas (p. 712)
• Consideraciones de límite de transacciones de AWS KMS (p. 713)

Especificar información adicional en la configuración de


replicación
En la configuración de replicación, haga lo siguiente:

Versión de API 2006-03-01


708
Amazon Simple Storage Service Guía del desarrollador
Replicar objetos cifrados

• En la configuración Destination, añada la CMK de AWS KMS administrada por el cliente simétrica
que desea que Amazon S3 utilice para cifrar réplicas de objetos.
• Opte explícitamente por habilitar la replicación de objetos cifrados usando las CMK 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 CMK de AWS KMS debe haberse creado en la misma región de AWS que el bucket de
destino.
El CMK de AWS KMS debe ser válido. La API de replicación de bucket PUT no comprueba la
validez de las CMK de AWS KMS. Si usa una CMK no válida, recibirá 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>
<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>

Versión de API 2006-03-01


709
Amazon Simple Storage Service Guía del desarrollador
Replicar objetos cifrados

</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.

Conceder permisos adicionales para el rol de IAM


Para replicar objetos cifrados en reposo en AWS Key Management Service (AWS KMS), conceda los
siguientes permisos adicionales al rol de IAM que especifica en la configuración de replicación. Estos
permisos los otorga actualizando la política de permisos asociada con el rol de IAM. Los objetos creados
con cifrado de lado servidor mediante claves de cifrado proporcionadas por los clientes (SSE-C) no se
replican.

• 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 en el servidor mediante claves de cifrado administradas por Amazon S3 (SSE-S3) o CMK
almacenadas en 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 CMK almacenada en AWS KMS.
• Permisos para las siguientes acciones de AWS KMS:
• Permisos kms:Decrypt para la CMK de AWS KMS que se utilizó para cifrar el objeto de origen
• Permisos kms:Encrypt para la CMK 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*",
]
}
},
"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*",
]
}
},

Versión de API 2006-03-01


710
Amazon Simple Storage Service Guía del desarrollador
Replicar objetos cifrados

"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 estas acciones de AWS KMS
(kms:Encrypt y kms:Decrypt) para las CMK de AWS KMS que se indican en la política. Si las
CMK de AWS KMS pertenecen a otra cuenta de AWS, el propietario de las CMK 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 CMK, 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, objetos creados con el cifrado en el servidor mediante claves de cifrado
administradas por Amazon S3 y CMK almacenadas en 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*"
]
},
{
"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":[

Versión de API 2006-03-01


711
Amazon Simple Storage Service Guía del desarrollador
Replicar objetos cifrados

"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"
]
}
]
}

Conceder 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, puede utilizar una CMK administrada por el cliente para cifrar réplicas de
objetos. El propietario de la CMK debe conceder al propietario del bucket de origen permiso para usar la
CMK.

Para conceder permiso al propietario del bucket de origen para usar la CMK de AWS KMS
(consola de IAM)

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Key Management
Service (AWS KMS) en https://console.aws.amazon.com/kms.
2. Para cambiar la región AWS, utilice el selector de regiones en la esquina superior derecha de la
página.
3. Si desea ver las claves de su cuenta que usted crea y administra, en el panel de navegación, elija
Customer managed keys (Claves administradas por el cliente).
4. Elija la CMK.
5. En General configuration (Configuración general), elija la pestaña Key policy (Política de claves).
6. Elija Other AWS Accounts (Otras cuentas de AWS).
7. Elija Add another AWS Account (Añadir otra cuenta de AWS).
8. En arn:aws:iam::, introduzca el ID de la cuenta del bucket de origen.
9. Elija Guardar cambios.

Versión de API 2006-03-01


712
Amazon Simple Storage Service Guía del desarrollador
Tutoriales de replicación

Para conceder permiso al propietario del bucket de origen para usar la CMK de AWS KMS (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
entre regiones (CRR), 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 límite, consulte Cuotas de servicio. Para obtener más información, consulte
Límites deAmazon Web Services. Si Cuotas de servicio no se admite en su región, abra un caso de 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: Configurar la replicación cuando los buckets de origen y destino son propiedad de la misma
cuenta (p. 714)
• Ejemplo 2: Configurar la replicación cuando los buckets de origen y destino son propiedad de cuentas
diferentes (p. 723)
• Ejemplo 3: Cambiar el propietario de la réplica cuando los buckets de origen y de destino son
propiedad de cuentas diferentes (p. 724)
• Ejemplo 4: Replicar objetos cifrados (p. 728)
• Ejemplo 5: Configuración de S3 Replication Time Control (S3 RTC) (p. 733)

Versión de API 2006-03-01


713
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de la misma cuenta

Ejemplo 1: Configurar 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


714
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de 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


715
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de 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


716
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de 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. 735).

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: Cambiar el propietario de la réplica cuando los
buckets de origen y de destino son propiedad de cuentas diferentes (p. 724).

Versión de API 2006-03-01


717
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de 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. 827).

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


718
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de 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


719
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de 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


720
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de 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. 829).

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


721
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 1: Configurar buckets de 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


722
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 2: Configurar buckets en cuentas diferentes

}
}

Ejemplo 2: Configurar 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: Configurar buckets de la misma cuenta (p. 714)
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":"1",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::source-bucket-acct-ID:source-acct-IAM-role"
},
"Action":["s3:ReplicateObject", "s3:ReplicateDelete"],
"Resource":"arn:aws:s3:::destination/*"
},
{
"Sid":"2",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::source-bucket-acct-ID:source-acct-IAM-role"
},
"Action":["s3:GetBucketVersioning", "s3:PutBucketVersioning"],
"Resource":"arn:aws:s3:::destination"
}
]

Versión de API 2006-03-01


723
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 3: Cambiar el propietario de la réplica

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.

Ejemplo 3: Cambiar el 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
Cambiar el propietario de la réplica (p. 705).

Cambiar el propietario de la réplica cuando los buckets 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.
Versión de API 2006-03-01
724
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 3: Cambiar el propietario de la réplica

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 \
--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": "source-bucket-owner-account-id"
},
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::destination/*"
]
}
]
}

b. Coloque la política anterior en el bucket de destino:

aws s3api put-bucket-policy --region $ {destination_region} --


bucket $ {destination} --policy file://destination_bucket_policy.json

Versión de API 2006-03-01


725
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 3: Cambiar el propietario de la réplica

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.

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"

Versión de API 2006-03-01


726
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 3: Cambiar el propietario de la réplica

]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"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 \

Versión de API 2006-03-01


727
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicar objetos cifrados

--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/.
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 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. 718).
Tiene que modificar la configuración de replicación en concordancia. Para obtener información conceptual,
consulte Cambiar el propietario de la réplica (p. 705).

Ejemplo 4: Replicar objetos cifrados


De forma predeterminada, Amazon S3 no replica los objetos almacenados en reposo con el cifrado en
el servidor mediante claves maestras del cliente (CMK) de AWS Key Management Service (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 Replicar objetos creados con el cifrado
en el lado del servidor (SSE) mediante claves de cifrado almacenadas en AWS KMS (p. 708).

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 del servidor (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 \

Versión de API 2006-03-01


728
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicar objetos cifrados

--profile acctA

aws s3api put-bucket-versioning \


--bucket source \
--versioning-configuration Status=Enabled \
--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 \


Versión de API 2006-03-01
729
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicar objetos cifrados

--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.

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
CMK de AWS KMS para los buckets source y destination. Las CMK de AWS
KMS no se comparten nunca 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",

Versión de API 2006-03-01


730
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicar objetos cifrados

"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::source/*"
]
}
},
"Resource":[
"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>

Versión de API 2006-03-01


731
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicar objetos cifrados

</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>
</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.

Versión de API 2006-03-01


732
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 5: S3 Replication Time Control (S3 RTC)

c. Añada objetos de ejemplo a la carpeta. Asegúrese de elegir la opción de cifrado y especifique su


CMK de AWS KMS para cifrar los objetos.
d. Verifique que el bucket de destino contiene las réplicas de objeto y que se cifran con la CMK de
AWS KMS que especificó en la configuración.

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. 718).
Tiene que modificar la configuración de replicación en concordancia.

Para obtener información conceptual, consulte Replicar objetos creados con el cifrado en el lado del
servidor (SSE) mediante claves de cifrado almacenadas en AWS KMS (p. 708).

Ejemplo 5: Configuración de S3 Replication Time


Control (S3 RTC)
S3 Replication Time Control (S3 RTC) ayuda a cumplir los requisitos empresariales o de cumplimiento de
normas para la replicación de datos y proporciona visibilidad de los tiempos de replicación de Amazon S3.
S3 RTC replica la mayoría de los objetos que se cargan en Amazon S3 en unos segundos y el 99,99 % de
esos objetos en un plazo de 15 minutos.

Con S3 RTC, puede monitorizar el número total y el tamaño de los objetos que están pendientes de
replicación, así como el tiempo máximo de replicación en la región de destino. Las métricas de replicación
están disponibles a través de la Consola de administración de AWS y de Guía del usuario de Amazon
CloudWatch. Para obtener más información, consulte the section called “Métricas de replicación de
CloudWatch en Amazon S3” (p. 759)

Habilitar S3 RTC en la consola de Amazon S3


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 habilitar S3 RTC en la configuración de replicación cuando los buckets son
propiedad de la misma cuenta de AWS y de cuentas diferentes.

Replicar objetos con la función de control de tiempo de replicación de Amazon S3


(CLI de AWS)
Para replicar objetos que tienen S3 RTC habilitado con la AWS CLI, es necesario crear buckets, habilitar
el control de versiones en ellos, 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. Es necesario que se haya habilitado S3
Replication Time Control (S3 RTC) para la configuración de replicación.

Para replicar con S3 RTC habilitado (CLI de AWS)

• En este ejemplo, establecemos ReplicationTime y Metric y añadimos la configuración de


replicación al bucket de origen.

{
"Rules": [
{
"Status": "Enabled",
"Filter": {
"Prefix": "Tax"

Versión de API 2006-03-01


733
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 5: S3 Replication Time Control (S3 RTC)

},
"DeleteMarkerReplication": {
"Status": "Disabled"
},
"Destination": {
"Bucket": "arn:aws:s3:::destination",
"Metrics": {
"Status": "Enabled",
"EventThreshold": {
"Minutes": 15
}
},
"ReplicationTime": {
"Status": "Enabled",
"Time": {
"Minutes": 15
}
}
},
"Priority": 1
}
],
"Role": "IAM-Role-ARN"
}

Important

Metrics:EventThreshold:Minutes y ReplicationTime:Time:Minutes solo


aceptan 15 como valor válido.

Replicar objetos con la función de control de tiempo de replicación de Amazon S3


(SDK de AWS)
A continuación se muestra un ejemplo de Java para añadir la configuración de replicación con S3
Replication Time Control (S3 RTC):

import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.model.DeleteMarkerReplication;
import software.amazon.awssdk.services.s3.model.Destination;
import software.amazon.awssdk.services.s3.model.Metrics;
import software.amazon.awssdk.services.s3.model.MetricsStatus;
import software.amazon.awssdk.services.s3.model.PutBucketReplicationRequest;
import software.amazon.awssdk.services.s3.model.ReplicationConfiguration;
import software.amazon.awssdk.services.s3.model.ReplicationRule;
import software.amazon.awssdk.services.s3.model.ReplicationRuleFilter;
import software.amazon.awssdk.services.s3.model.ReplicationTime;
import software.amazon.awssdk.services.s3.model.ReplicationTimeStatus;
import software.amazon.awssdk.services.s3.model.ReplicationTimeValue;

public class Main {

public static void main(String[] args) {


S3Client s3 = S3Client.builder()
.region(Region.US_EAST_1)
.credentialsProvider(() -> AwsBasicCredentials.create(
"AWS_ACCESS_KEY_ID",
"AWS_SECRET_ACCESS_KEY")
)
.build();

ReplicationConfiguration replicationConfig = ReplicationConfiguration

Versión de API 2006-03-01


734
Amazon Simple Storage Service Guía del desarrollador
Información del estado de replicación

.builder()
.rules(
ReplicationRule
.builder()
.status("Enabled")
.priority(1)
.deleteMarkerReplication(
DeleteMarkerReplication
.builder()
.status("Disabled")
.build()
)
.destination(
Destination
.builder()
.bucket("destination_bucket_arn")
.replicationTime(
ReplicationTime.builder().time(
ReplicationTimeValue.builder().minutes(15).build()
).status(
ReplicationTimeStatus.ENABLED
).build()
)
.metrics(
Metrics.builder().eventThreshold(
ReplicationTimeValue.builder().minutes(15).build()
).status(
MetricsStatus.ENABLED
).build()
)
.build()
)
.filter(
ReplicationRuleFilter
.builder()
.prefix("testtest")
.build()
)
.build())
.role("role_arn")
.build();

// Put replication configuration


PutBucketReplicationRequest putBucketReplicationRequest = PutBucketReplicationRequest
.builder()
.bucket("source_bucket")
.replicationConfiguration(replicationConfig)
.build();

s3.putBucketReplication(putBucketReplicationRequest);
}
}

Para obtener más información, consulte Replicación de objetos mediante S3 Replication Time Control (S3
RTC) (p. 702).

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

Versión de API 2006-03-01


735
Amazon Simple Storage Service Guía del desarrollador
Información del estado de replicación

de inventario. Para obtener más información acerca del inventario de Amazon S3, consulte Inventario de
Amazon S3 (p. 499).

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. Los objetos pasan a un estado
FAILED en problemas como falta de permisos de rol de replicación de S3, permisos de KMS de
AWS o permisos de bucket. En el caso de los errores temporales, como si un bucket o región
no están disponibles, el estado de replicación no pasará a FAILED, sino que permanecerá
PENDING. Después de que el recurso vuelva a estar en línea, la replicación de S3 reanudará la
replicación de esos objetos.
• 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",
"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.
Versión de API 2006-03-01
736
Amazon Simple Storage Service Guía del desarrollador
Temas relacionados

• 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. 684)

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.

• La mayoría de los objetos se replican en 15 minutos, pero a veces pueden tardar un par de horas. En
raras ocasiones, la replicación puede tardar más. El tiempo que tarda Amazon S3 en replicar un objeto
depende de diferentes factores, como el par de regiones de origen y destino y el tamaño del objeto.
La replicación puede tardar varias horas para los objetos grandes. Si el objeto que se está replicando
es grande, espere un tiempo antes de comprobar 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 del objeto es
pending, sabrá que Amazon S3 no ha completado la replicación. Si el estado de replicación del objeto
es failed, compruebe la configuración de replicación definida en el bucket de origen.
• 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.

Versión de API 2006-03-01


737
Amazon Simple Storage Service Guía del desarrollador
Temas relacionados

• 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: Configurar la replicación cuando los buckets de origen
y destino son propiedad de cuentas diferentes (p. 723).
• 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. 448).
• 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. 684)

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 Usar el control de versiones (p. 509).
• Alojamiento en sitio web — para obtener más información, consulte Alojar un sitio web estático en
Amazon S3 (p. 618).
• 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. 370) y Administración de
acceso con ACL (p. 474).
• Almacenamiento de registros — para obtener más información, Registro de acceso al servidor de
Amazon S3 (p. 794).
• Gestión del ciclo de vida de objetos en un bucket — para obtener más información, consulte Administrar
el ciclo de vida de los objetos (p. 136)

En este tema se explica cómo la configuración de replicación de un bucket afecta a comportamiento de


estas configuraciones de bucket.

Temas
• Configuración de ciclo de vida y réplicas de objetos (p. 739)
• Configuración del control de versión y la replicación (p. 739)
• Configuración de registro y replicación (p. 739)
• CRR y la región de destino (p. 739)

Versión de API 2006-03-01


738
Amazon Simple Storage Service Guía del desarrollador
Configuración de ciclo de vida y réplicas de objetos

• Interrupción temporal de replicación (p. 740)


• Temas relacionados (p. 740)

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.

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. 794)) o registros
de AWS CloudTrail (Registro de llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 766))
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.

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

Versión de API 2006-03-01


739
Amazon Simple Storage Service Guía del desarrollador
Interrupción temporal de replicación

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. 684)

Versión de API 2006-03-01


740
Amazon Simple Storage Service Guía del desarrollador
Solicitar redireccionamiento y la API de REST

Enrutamiento de solicitudes
Temas
• Solicitar redireccionamiento y la API de REST (p. 741)
• Consideraciones sobre DNS (p. 745)

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.

Solicitar redireccionamiento y la API de 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
• Enrutamiento de DNS (p. 741)
• Redireccionamiento temporal de solicitud (p. 742)
• Redireccionamiento permanente de solicitud (p. 744)
• Ejemplos de redireccionamiento de solicitud (p. 744)

Enrutamiento 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


741
Amazon Simple Storage Service Guía del desarrollador
Redireccionamiento temporal de solicitud

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 temporal de solicitud


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


742
Amazon Simple Storage Service Guía del desarrollador
Redireccionamiento temporal de solicitud

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


743
Amazon Simple Storage Service Guía del desarrollador
Redireccionamiento permanente de solicitud

Redireccionamiento permanente de solicitud


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 de REST

HTTP/1.1 307 Temporary Redirect


Location: http://awsexamplebucket1.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>awsexamplebucket1.s3-gztb4pa9sq.amazonaws.com</Endpoint>
</Error>

Respuesta de redireccionamiento temporal de la API de SOAP


Note

La compatibilidad con SOAP por HTTP está obsoleta, 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


744
Amazon Simple Storage Service Guía del desarrollador
Consideraciones sobre DNS

Consideraciones sobre 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


745
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 o 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 100–200 milisegundos aproximadamente.

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. 73). 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. 747) y Patrones de diseño de rendimiento para Amazon S3 (p. 749) 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. 747)
• Patrones de diseño de rendimiento para Amazon S3 (p. 749)

Versión de API 2006-03-01


746
Amazon Simple Storage Service Guía del desarrollador
Directrices de rendimiento

Directrices de rendimiento de Amazon S3


Al crear aplicaciones que cargan y recuperan objetos de Amazon S3, siga nuestras directrices de
prácticas recomendadas para optimizar el rendimiento. También ofrecemos Patrones de diseño de
rendimiento (p. 749) 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. 747)
• Escalado horizontal de las conexiones de almacenamiento (p. 747)
• Uso de recuperaciones de rango de byte (p. 747)
• Reintento de solicitudes de aplicaciones sensibles a la latencia (p. 748)
• Combinación de Amazon S3 (almacenamiento) y Amazon EC2 (informática) en la misma región de
AWS (p. 748)
• Uso de Amazon S3 Transfer Acceleration para minimizar la latencia generada por la
distancia (p. 748)
• Uso de la versión más reciente de los SDK de AWS (p. 748)

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. 181).

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


747
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. 73) 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 de 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


748
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 objetos 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. 747) 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. 749)
• Tiempos de espera y reintentos de aplicaciones sensibles a la latencia (p. 750)
• Escalado horizontal y uso en paralelo de solicitudes para lograr un alto rendimiento (p. 750)
• Uso de Amazon S3 para acelerar las transferencias de datos dispares en sentido geográfico (p. 751)

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


749
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


750
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–16 MB.
Realice una solicitud simultánea de cada valor comprendido en un intervalo de 85–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 sobre DNS (p. 745).

Uso de Amazon S3 para acelerar las transferencias de


datos dispares en sentido geográfico
Aceleración de transferencia de Amazon S3 (p. 73) 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

Versión de API 2006-03-01


751
Amazon Simple Storage Service Guía del desarrollador
Aceleración de las transferencias de
datos dispares en sentido geográfico

a Internet rápida, usan objetos grandes o tienen mucho contenido que cargar. 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. 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 de 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. 75).

Versión de API 2006-03-01


752
Amazon Simple Storage Service Guía del desarrollador
Herramientas de monitoreo

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 monitoreo (p. 753)
• Monitoreo de métricas con Amazon CloudWatch (p. 754)
• Configuraciones de métricas para buckets (p. 762)
• Registro con Amazon S3 (p. 764)
• Registro de llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 766)
• Usar AWS CloudTrail para identificar solicitudes de Amazon S3 (p. 774)

Herramientas de monitoreo
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 monitoreo 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 Monitoreo de métricas con Amazon
CloudWatch (p. 754).
• AWS CloudTrail Log Monitoring (Monitorización de registros de AWS CloudTrail) – 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. 766).

Versión de API 2006-03-01


753
Amazon Simple Storage Service Guía del desarrollador
Herramientas manuales

Herramientas de monitoreo manuales


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. 794) 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.

Monitoreo 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 varias formas 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 ‐ Permiten 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 precios de CloudWatch, consulte los precios de Amazon CloudWatch.
Para saber cómo activar la obtención de estas métricas, consulte Configuraciones de métricas para
buckets (p. 762).

Versión de API 2006-03-01


754
Amazon Simple Storage Service Guía del desarrollador
Métricas y dimensiones

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.
• Métricas de replicación: supervise el número total de operaciones de la API de S3 que están pendientes
de replicación, el tamaño total de los objetos pendientes de replicación y el tiempo máximo de
replicación en la región de destino. Solo las reglas de replicación para las que se ha habilitado S3
Replication Time Control (S3 RTC) publicarán métricas de replicación.

A diferencia de las métricas de almacenamiento y solicitudes de CloudWatch, las métricas de replicación


no se pueden filtrar por prefijos y etiquetas. Sin embargo, sí se puede configurar una regla de replicación
basada en prefijos y etiquetas. En este caso, las métricas de replicación monitorizarán la replicación
para los prefijos y las etiquetas especificados. Para obtener más información, consulte the section called
“S3 Replication Time Control (S3 RTC)” (p. 702).

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.

Métricas y dimensiones
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 (S3 Glacier 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

Versión de API 2006-03-01


755
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: 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.

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.

Versión de API 2006-03-01


756
Amazon Simple Storage Service Guía del desarrollador
Métricas de solicitudes de Amazon S3 para CloudWatch

Métrica Descripción
Unidades: recuento

Estadísticas válidas: Sum

HeadRequests Número de solicitudes HTTP HEAD realizadas a un bucket de Amazon S3.

Unidades: recuento

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

Versión de API 2006-03-01


757
Amazon Simple Storage Service Guía del desarrollador
Métricas de solicitudes de Amazon S3 para CloudWatch

Métrica Descripción

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.

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.

Versión de API 2006-03-01


758
Amazon Simple Storage Service Guía del desarrollador
Métricas de replicación de CloudWatch en Amazon S3

Métricas de replicación de CloudWatch en Amazon S3


Supervise el número total de operaciones de API de S3 que están pendientes de replicación, el tamaño
total de los objetos pendientes de replicación y el tiempo máximo de replicación en la región de destino.
Solo las reglas de replicación para las que se ha habilitado S3 Replication Time Control (S3 RTC)
publicarán métricas de replicación.

A diferencia de las métricas de almacenamiento y solicitudes de CloudWatch, las métricas de replicación


no se pueden filtrar por prefijos o etiquetas. Sin embargo, sí se puede configurar una regla de replicación
basada en prefijos y etiquetas. En este caso, las métricas de replicación monitorizarán la replicación para
los prefijos y las etiquetas especificados. Para obtener más información, consulte the section called “S3
Replication Time Control (S3 RTC)” (p. 702).
Note

Puede habilitar alarmas para las métricas de replicación en Amazon CloudWatch. Al configurar
alarmas para las métricas de replicación, establezca el campo Missing data treatment
(Tratamiento si faltan datos) en Treat missing data as ignore (maintain the alarm state) (Omitir los
datos que faltan (mantener el estado de alarma)).

Métrica Descripción

ReplicationLatency Número máximo de segundos de retraso de la región de destino de la


replicación respecto a la región de origen para una regla de replicación
determinada.

Unidades: segundos

Estadísticas válidas: Max

Número total de bytes de objetos pendientes de replicación para una regla de


BytesPendingReplication
replicación determinada.

Unidades: bytes

Estadísticas válidas: Max

Número de operaciones pendientes de replicación para una regla de


OperationsPendingReplication
replicación determinada.

Unidades: recuentos.

Estadísticas válidas: Max

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.

StorageType Esta dimensión filtra los datos que ha almacenado en un bucket


mediante los siguientes tipos de almacenamiento:

Versión de API 2006-03-01


759
Amazon Simple Storage Service Guía del desarrollador
Dimensiones de Amazon S3 CloudWatch

Dimensión Descripción
• 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 S3 Glacier Deep
Archive.
• DeepArchiveObjectOverhead: Por cada objeto archivado,
S3 Glacier 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 S3 Glacier
Deep Archive.
• DeepArchiveS3ObjectOverhead: Por cada objeto que se
archiva en S3 Glacier Deep Archive, 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.

Versión de API 2006-03-01


760
Amazon Simple Storage Service Guía del desarrollador
Acceder a las métricas de CloudWatch

Dimensión Descripción
• DeepArchiveStagingStorage: el número de bytes
utilizados para partes de objetos Multipart antes de completar
la solicitud CompleteMultipartUpload en objetos de la clase de
almacenamiento S3 Glacier 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).

Acceder 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 cuadro 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 cuadro de búsqueda.

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.

Versión de API 2006-03-01


761
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

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. 762).

Configuraciones de métricas para buckets


Las métricas de solicitudes de Amazon 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 Monitoreo de métricas con Amazon
CloudWatch (p. 754).

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. 756). 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.
• Las métricas de solicitudes admiten el filtrado por prefijos, pero las métricas de almacenamiento, no.

Versión de API 2006-03-01


762
Amazon Simple Storage Service Guía del desarrollador
Entrega de métricas de CloudWatch de mejor esfuerzo

Entrega de métricas de CloudWatch de mejor esfuerzo


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.

Filtrar 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.
3. Ejecute el siguiente comando para agregar una configuración de métricas.

Versión de API 2006-03-01


763
Amazon Simple Storage Service Guía del desarrollador
Registro con Amazon S3

aws s3api put-bucket-metrics-configuration --endpoint https://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 https://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 Server access logging
(Registro de acceso del servidor) (p. 794), 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


764
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, Amazon S3 Sí  


selecciona las propiedades de los registros

Campos para Object Size, Total Time, Turn-Around   Sí


Time y HTTP Referer 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


765
Amazon Simple Storage Service Guía del desarrollador
Registrar 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. 770).

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


766
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).

El registro de CloudTrail ha realizado un seguimiento de las


acciones en el nivel de bucket de Amazon S3
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.

El registro de CloudTrail ha realizado un seguimiento de las acciones en el nivel de bucket de


Amazon S3

Nombre de la API de 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


767
Amazon Simple Storage Service Guía del desarrollador
Información de Amazon S3 en CloudTrail

Nombre de la API de 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 request payment GetBucketRequestPayment

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 request payment PutBucketRequestPayment

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


768
Amazon Simple Storage Service Guía del desarrollador
Información de Amazon S3 en CloudTrail

El registro de CloudTrail ha realizado un seguimiento de las


acciones en el nivel de objeto de Amazon S3
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 el artículo sobre registro de eventos de datos para seguimiento 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 de 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:

Versión de API 2006-03-01


769
Amazon Simple Storage Service Guía del desarrollador
Información de Amazon S3 en CloudTrail

• GET Bucket (List Objects) Versión 2 – seleccione un prefijo especificado en el seguimiento.


• 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 usadas al establecer
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. 475).

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

Versión de API 2006-03-01


770
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

que se comunica al propietario del bucket en el registro es que la cuenta B realizó una llamada a la API de
ACL.

Realizar 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: Usar la API de SOAP (p. 833).
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.

El registro de CloudTrail ha realizado un seguimiento de las acciones SOAP de Amazon S3

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. 764).

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. 794).

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

Versión de API 2006-03-01


771
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: entradas de archivos de registro de Amazon S3

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 Monitoreo de métricas con Amazon CloudWatch (p. 754).

Ejemplo: entradas de archivos de registro 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",

Versión de API 2006-03-01


772
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: entradas de archivos de registro de Amazon S3

"eventSource": "s3.amazonaws.com",
"eventName": "PutBucketAcl",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"bucketName": "",
"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": "AWSDOC-EXAMPLE-BUCKET1",
"versioning": [
""
]

Versión de API 2006-03-01


773
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"AuthenticationMethod": "AuthHeader",
},
"requestID": "07D681279BD94AED",
"eventID": "f2b287f3-0df1-4961-a2f4-c4bdfed47657",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
}
]
}

Recursos relacionados
• AWS CloudTrail User Guide
• Referencia de eventos de CloudTrail
• Usar AWS CloudTrail para identificar solicitudes de Amazon S3 (p. 774)

Usar 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. 811).

Temas
• Cómo CloudTrail captura las solicitudes realizadas a Amazon S3 (p. 774)
• Habilitar el registro de eventos de CloudTrail para los buckets y los objetos de S3 (p. 775)
• Identificar solicitudes realizadas a Amazon S3 en un registro de CloudTrail (p. 775)
• Usar AWS CloudTrail para identificar solicitudes de Signature Version 2 de Amazon S3 (p. 777)
• Usar AWS CloudTrail para identificar el acceso a objetos de Amazon S3 (p. 780)
• Recursos relacionados (p. 774)

Cómo CloudTrail captura 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. 766).

Versión de API 2006-03-01


774
Amazon Simple Storage Service Guía del desarrollador
Habilitar el registro de eventos de CloudTrail
para los buckets y los objetos de S3

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
¿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.

Identificar 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.

Usar 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. Estos tienen el formato siguiente:

Versión de API 2006-03-01


775
Amazon Simple Storage Service Guía del desarrollador
Identificar solicitudes realizadas a
Amazon S3 en un registro de CloudTrail

s3://<myawsexamplebucket1>/AWSLogs/<111122223333>/CloudTrail/<Region>/<yyyy>/
<mm>/<dd>

Example — Usar Athena para consultar registros de eventos de CloudTrail de solicitudes


específicas

Encuentre sus registros de eventos de CloudTrail:

s3://myawsexamplebucket1/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_myawsexamplebucket1> 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_myawsexamplebucket1_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,

Versión de API 2006-03-01


776
Amazon Simple Storage Service Guía del desarrollador
Usar AWS CloudTrail para identificar solicitudes
de Signature Version 2 de Amazon S3

accountId:STRING,
type:STRING>>,
eventtype STRING,
apiversion STRING,
readonly STRING,
recipientaccountid STRING,
serviceeventdetails STRING,
sharedeventid STRING,
vpcendpointid 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://<myawsexamplebucket1>/AWSLogs/<111122223333>/';

5. Haga pruebas en Athena para asegurarse de que la consulta funciona.

SELECT * FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket1_table


WHERE eventsource='s3.amazonaws.com'
LIMIT 2;

Usar AWS CloudTrail para identificar solicitudes de


Signature Version 2 de 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 encarecidamente 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 Usar los registros de acceso de Amazon S3 para
identificar solicitudes de Signature Version 2 (p. 816)

Versión de API 2006-03-01


777
Amazon Simple Storage Service Guía del desarrollador
Usar AWS CloudTrail para identificar solicitudes
de Signature Version 2 de Amazon S3

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, sustituya


<s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket1_table> por los detalles 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
FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket1_table
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
LIMIT 10;

Example — Seleccionar todos los solicitantes que envían tráfico de Signature Version 2

SELECT useridentity.arn, Count(requestid) as RequestCount


FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket1_table
WHERE eventsource='s3.amazonaws.com'
and json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
Group by useridentity.arn

Particiones 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_myawsexamplebucket1_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>
>

Versión de API 2006-03-01


778
Amazon Simple Storage Service Guía del desarrollador
Usar AWS CloudTrail para identificar solicitudes
de Signature Version 2 de Amazon S3

>,
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
)
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://myawsexamplebucket1/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_myawsexamplebucket1_table_partitioned ADD


PARTITION (region= 'us-east-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/us-east-1/2019/02/19/'
PARTITION (region= 'us-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/us-west-1/2019/02/19/'
PARTITION (region= 'us-west-2', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/us-west-2/2019/02/19/'
PARTITION (region= 'ap-southeast-1', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/ap-southeast-1/2019/02/19/'
PARTITION (region= 'ap-southeast-2', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/ap-southeast-2/2019/02/19/'
PARTITION (region= 'ap-northeast-1', year= '2019', month= '02', day= '19') LOCATION
's3://myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/ap-northeast-1/2019/02/19/'
PARTITION (region= 'eu-west-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket1/AWSLogs/111122223333/CloudTrail/eu-west-1/2019/02/19/'
PARTITION (region= 'sa-east-1', year= '2019', month= '02', day= '19') LOCATION 's3://
myawsexamplebucket1/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_myawsexamplebucket1_table_partitioned
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
AND region='us-east-1'

Versión de API 2006-03-01


779
Amazon Simple Storage Service Guía del desarrollador
Usar CloudTrail para identificar el
acceso a objetos de Amazon S3

AND year='2019'
AND month='02'
AND day='19'
Group by useridentity.arn

Usar 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.

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_myawsexamplebucket1_table> por los detalles 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_myawsexamplebucket1_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_myawsexamplebucket1_table
WHERE

Versión de API 2006-03-01


780
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

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 a 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,
userIdentity.arn as userArn,
userIdentity.principalId
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket1_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 Usar registros de acceso de Amazon
S3 para identificar solicitudes de acceso a objetos (p. 816).

Recursos relacionados
• AWS CloudTrail User Guide
• Referencia de eventos de CloudTrail

Versión de API 2006-03-01


781
Amazon Simple Storage Service Guía del desarrollador
Cómo se le cobran las entregas por BitTorrent

Uso de BitTorrent con Amazon S3


Temas
• Cómo se le cobran las entregas por BitTorrent (p. 782)
• Usar BitTorrent para recuperar objetos almacenados en Amazon S3 (p. 783)
• Publicar contenido con Amazon S3 y BitTorrent (p. 784)

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.
• Solo puede obtener un archivo torrent para objetos que tengan menos de 5 GB de tamaño.

Cómo se le cobran las entregas 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


782
Amazon Simple Storage Service Guía del desarrollador
Usar BitTorrent para recuperar
objetos almacenados en Amazon S3

Note

La compatibilidad con SOAP por HTTP está obsoleta, 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.

Usar 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 por HTTP está obsoleta, 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


783
Amazon Simple Storage Service Guía del desarrollador
Publicar 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>

Publicar 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. 325).

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, como describe GetObjectTorrent
en la Amazon Simple Storage Service API Reference. 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


784
Amazon Simple Storage Service Guía del desarrollador
La respuesta de error de REST

Gestionar errores de REST y SOAP


Temas
• La respuesta de error de REST (p. 785)
• La respuesta de error de SOAP (p. 787)
• Prácticas recomendadas para errores de Amazon S3 (p. 787)

En esta sección se describen los errores de REST y SOAP, y cómo controlarlos.


Note

La compatibilidad con SOAP por HTTP está obsoleta, 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. 785)
• Respuesta de error (p. 786)

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


785
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. 786)
• Mensaje de error (p. 786)
• Más detalles (p. 786)

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 por HTTP está obsoleta, 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 por HTTP está obsoleta, 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


786
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 por HTTP está obsoleta, 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 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.

Ajustar 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


787
Amazon Simple Storage Service Guía del desarrollador
Aislar 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/.

Aislar los errores


Note

La compatibilidad con SOAP por HTTP está obsoleta, 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


788
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. 789)
• Obtención de ID de solicitudes de Amazon S3 para AWS Support (p. 790)
• Temas relacionados (p. 792)

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. 789)
• Comportamiento inesperado al acceder a los buckets configurados con CORS (p. 790)

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. 499).

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.

Para evitar este problema, considere las siguientes prácticas recomendadas:

Versión de API 2006-03-01


789
Amazon Simple Storage Service Guía del desarrollador
Comportamiento inesperado al acceder
a los buckets configurados con CORS

• Habilite una política de vencimiento "NonCurrentVersion" de administración del ciclo de vida y una
política "ExpiredObjectDeleteMarker" para hacer vender las versiones anteriores de los objetos y
marcadores de eliminación sin objetos de datos asociados en el bucket.
• Mantenga su estructura de directorios lo más plana posible y asegúrese de que cada nombre de
directorio sea único.

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 de CORS (p. 180).

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. 790)
• Utilización de un navegador web para obtener ID de solicitudes (p. 791)
• Utilización de los SDK de AWS para obtener ID de solicitudes (p. 791)
• Uso de AWS CLI para obtener ID de solicitudes (p. 792)

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.

Versión de API 2006-03-01


790
Amazon Simple Storage Service Guía del desarrollador
Utilización de un navegador web
para obtener ID de solicitudes

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.

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

Versión de API 2006-03-01


791
Amazon Simple Storage Service Guía del desarrollador
Uso de AWS CLI para obtener ID de solicitudes

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.

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 de CORS (p. 180)


• Gestionar errores de REST y SOAP (p. 785)
• Documentación de AWS Support

Versión de API 2006-03-01


792
Amazon Simple Storage Service Guía del desarrollador
Temas relacionados

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


793
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. 794)
• Formato de clave de objeto de registro (p. 796)
• ¿Cómo se envían los registros? (p. 796)
• Envío de archivos de registro de servidor según el mejor esfuerzo (p. 797)
• Los cambios del estado de los registros del bucket surten efecto con el tiempo (p. 797)
• Habilitar el registro con la consola (p. 797)
• Habilitar registros mediante programación (p. 798)
• Formato de registro de acceso al servidor de Amazon S3 (p. 801)
• Eliminar archivos de registro de Amazon S3 (p. 810)
• Usar registros de acceso de Amazon S3 para identificar solicitudes (p. 811)

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 hay ningún cargo adicional para habilitar el registro del acceso al servidor en un bucket de
Amazon S3 y no se realiza ningún cargo cuando los registros se INTRODUCEN en el bucket.
Sin embargo, los archivos de registro que el sistema entregue a su bucket conllevarán los cargos
habituales de almacenamiento. Puede eliminar los archivos de registros en cualquier momento.
Las lecturas posteriores y otras solicitudes a estos archivos de registro se cobran normalmente,
como para cualquier otro objeto, incluidos los cargos por transferencia de datos.

Versión de API 2006-03-01


794
Amazon Simple Storage Service Guía del desarrollador
Cómo habilitar el registro de acceso al servidor

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.
• 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.
• S3 Bloqueo de objetos 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.

Los prefijos de clave también son útiles para distinguir entre los buckets de origen cuando varios buckets
registran en el mismo bucket de destino.
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 también 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 Eliminar archivos de registro de Amazon
S3 (p. 810).

Versión de API 2006-03-01


795
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales sobre el registro

• (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 Habilitar
el registro con la consola (p. 797) y Habilitar registros mediante programación (p. 798).

Consideraciones adicionales sobre el registro


Note

• Tanto los buckets de S3 de origen como los de destino deben ser propiedad de la misma
cuenta de AWS y los buckets de S3 deben estar en la misma región.
• 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.

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.

La barra final / es necesaria para indicar el final del prefijo.

¿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

Versión de API 2006-03-01


796
Amazon Simple Storage Service Guía del desarrollador
Envío de archivos de registro de
servidor según el mejor esfuerzo

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.

Los cambios del estado de los registros del bucket


surten efecto 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.

Habilitar el registro con la consola


Para obtener información acerca de la habilitación de Registro de acceso al servidor de Amazon
S3 (p. 794) 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 Habilitar
registros mediante programación (p. 798).

Versión de API 2006-03-01


797
Amazon Simple Storage Service Guía del desarrollador
Habilitar registros mediante programación

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. 801).

Habilitar 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 de registros (p. 798)
• Conceder permisos de WRITE y READ_ACP al grupo entrega de registros (p. 798)
• Ejemplo: AWS SDK para .NET (p. 799)
• Recursos relacionados (p. 800)

Habilitación de registros
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>
</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.

Conceder permisos de WRITE y READ_ACP al grupo


entrega de registros
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

Versión de API 2006-03-01


798
Amazon Simple Storage Service Guía del desarrollador
Ejemplo: AWS SDK para .NET

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. 474).

<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. 482) y Administración de ACL con AWS
SDK para .NET (p. 484).

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 Habilitar registros mediante
programación (p. 798). 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. 829).

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

Versión de API 2006-03-01


799
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

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,
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. 794)

Versión de API 2006-03-01


800
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

• 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. 806)
• Información de registro de acceso personalizada (p. 810)
• Consideraciones sobre programación para el formato de registro de acceso al servidor
extensible (p. 810)

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
awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE
REST.GET.VERSIONING - "GET /awsexamplebucket1?versioning HTTP/1.1" 200 - 113 - 7 -
"-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/
XV/VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-
west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE
REST.GET.LOGGING_STATUS - "GET /awsexamplebucket1?logging HTTP/1.1" 200 - 242
- 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf
+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader
awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be A1206F460EXAMPLE
REST.GET.BUCKETPOLICY - "GET /awsexamplebucket1?policy HTTP/1.1" 404
NoSuchBucketPolicy 297 - 38 - "-" "S3Console/0.4" - BNaBsXZQQDbssi6xMBdBU2sLt
+Yf5kZDmeBUP35sFoKa3sLLeMC78iwEIWxs99CRUrbS4n11234= SigV2 ECDHE-RSA-AES128-GCM-SHA256
AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:01:00 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 7B4A0FABBEXAMPLE
REST.GET.VERSIONING - "GET /awsexamplebucket1?versioning HTTP/1.1" 200 - 113 - 33 - "-"
"S3Console/0.4" - Ke1bUcazaN1jWuUlPJaxF64cQVpUEhoZKEG/hmy/gijN/I1DeWqDfFvnpybfEseEME/
u7ME1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-
west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket1 [06/Feb/2019:00:01:57 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
DD6CC733AEXAMPLE REST.PUT.OBJECT s3-dg.pdf "PUT /awsexamplebucket1/
s3-dg.pdf HTTP/1.1" 200 - - 4406583 41754 28 "-" "S3Console/0.4" -
10S62Zv81kBW7BB6SX4XJ48o6kpcl6LPwEoizZQQxJd5qDSCTLX0TgS37kYUBKQW3+bPdrg1234= SigV4 ECDHE-
RSA-AES128-SHA AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1

Versión de API 2006-03-01


801
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

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

awsexamplebucket1

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

[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

Versión de API 2006-03-01


802
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

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 muestra aquí se declara como SOAP.operation,


REST.HTTP_method.resource_type, WEBSITE.HTTP_method.resource_type,
BATCH.DELETE.OBJECT, o S3.action.resource_type para las acciones de ciclo de vida.

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

"GET /awsexamplebucket1/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. 786) de Amazon S3 o “-” si no se produce ningún error.

Ejemplo de entrada

NoSuchBucket

Versión de API 2006-03-01


803
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

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

Referer

El valor del encabezado Referer 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"

Versión de API 2006-03-01


804
Amazon Simple Storage Service Guía del desarrollador
Formato de registro

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.

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

Algunas regiones antiguas admiten puntos de enlace heredados. Puede que estos puntos de enlace
aparezcan en los registros de acceso al servidor o en los registros de CloudTrail. Para obtener más
información, consulte Puntos de enlace heredados (p. 51). Para ver una lista completa de las regiones

Versión de API 2006-03-01


805
Amazon Simple Storage Service Guía del desarrollador
Registros adicionales para operaciones de copia

y los puntos de enlace de Amazon S3, consulte Regiones y puntos de enlace de Amazon S3 en la
Referencia general de AWS.
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

awsexamplebucket1

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

[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

Versión de API 2006-03-01


806
Amazon Simple Storage Service Guía del desarrollador
Registros adicionales para operaciones de copia

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

"GET /awsexamplebucket1/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

Versión de API 2006-03-01


807
Amazon Simple Storage Service Guía del desarrollador
Registros adicionales para operaciones de copia

200

Código de error

El Código de error (p. 786) 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

10

Referer

El valor del encabezado Referer 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.

Versión de API 2006-03-01


808
Amazon Simple Storage Service Guía del desarrollador
Registros adicionales para operaciones de copia

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

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

Versión de API 2006-03-01


809
Amazon Simple Storage Service Guía del desarrollador
Información de registro de acceso personalizada

Encabezado de host

El punto de enlace usado para conectarse a Amazon S3.

Ejemplo de entrada

s3.us-west-2.amazonaws.com

Algunas regiones antiguas admiten puntos de enlace heredados. Puede que estos puntos de enlace
aparezcan en los registros de acceso al servidor o en los registros de CloudTrail. Para obtener más
información, consulte Puntos de enlace heredados (p. 51). Para ver una lista completa de las regiones
y los puntos de enlace de Amazon S3, consulte Regiones y puntos de enlace de Amazon S3 en la
Referencia general de AWS.
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/awsexamplebucket1/
photos/2019/08/puppy.jpg?x-user=johndoe" funciona de la misma manera que la misma solicitud
para "s3.amazonaws.com/awsexamplebucket1/photos/2019/08/puppy.jpg", salvo que la cadena "x-
user=johndoe" se incluye en el campo Request-URI para el registro de entrada asociado. 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.

Eliminar 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.

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

Versión de API 2006-03-01


810
Amazon Simple Storage Service Guía del desarrollador
Recursos relacionados

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
Administrar el ciclo de vida de los objetos (p. 136).

Recursos relacionados
Registro de acceso al servidor de Amazon S3 (p. 794)

Usar 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 Usar AWS CloudTrail para
identificar solicitudes de Amazon S3 (p. 774).
• 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
• Habilitar registros de acceso de Amazon S3 para solicitudes (p. 811)
• Consultar registros de acceso de Amazon S3 para solicitudes (p. 813)
• Usar los registros de acceso de Amazon S3 para identificar solicitudes de Signature Version 2
(p. 816)
• Usar registros de acceso de Amazon S3 para identificar solicitudes de acceso a objetos (p. 816)
• Recursos relacionados (p. 817)

Habilitar 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 registros de acceso con cinco buckets en dos regiones

Para este ejemplo, suponga que tiene los cinco buckets siguientes:

• 1-awsexamplebucket1-us-east-1
• 2-awsexamplebucket1-us-east-1
• 3-awsexamplebucket1-us-east-1

Versión de API 2006-03-01


811
Amazon Simple Storage Service Guía del desarrollador
Habilitar registros de acceso de Amazon S3 para solicitudes

• 1-awsexamplebucket1-us-west-2
• 2-awsexamplebucket1-us-west-2

1. Cree dos buckets de registro en las siguientes regiones:

• awsexamplebucket1-logs-us-east-1
• awsexamplebucket1-logs-us-west-2
2. A continuación, habilite los registros de acceso de Amazon S3 como se indica a continuación:

• 1-awsexamplebucket1-us-east-1 registra en el bucket de S3 awsexamplebucket1-logs-


us-east-1 con el prefijo 1-awsexamplebucket1-us-east-1
• 2-awsexamplebucket1-us-east-1 registra en el bucket de S3 awsexamplebucket1-logs-
us-east-1 con el prefijo 2-awsexamplebucket1-us-east-1
• 1-awsexamplebucket1-us-east-1 registra en el bucket de S3 awsexamplebucket1-logs-
us-east-1 con el prefijo 3-awsexamplebucket1-us-east-1
• 1-awsexamplebucket1-us-west-2 registra en el bucket de S3 awsexamplebucket1-logs-
us-west-2 con el prefijo 1-awsexamplebucket1-us-west-2
• 2-awsexamplebucket1-us-west-2 registra en el bucket de S3 awsexamplebucket1-logs-
us-west-2 con el prefijo 2-awsexamplebucket1-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


• Habilitar registros mediante programación (p. 798) o
• Uso del comando put-bucket-logging de la CLI de AWS para habilitar mediante programación los
registros de acceso de un bucket a través de los siguientes comandos:

1. En primer lugar, conceda permiso a Amazon S3 usando put-bucket-acl:

aws s3api put-bucket-acl --bucket awsexamplebucket1-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 awsexamplebucket1 --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": "awsexamplebucket1-logs",
"TargetPrefix": "awsexamplebucket1/",
"TargetGrants": [
{
"Grantee": {
"Type": "AmazonCustomerByEmail",
"EmailAddress": "user@example.com"
},
Versión de API 2006-03-01
812
Amazon Simple Storage Service Guía del desarrollador
Consultar 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='awsexamplebucket1-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 $buckets
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.

Consultar 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


813
Amazon Simple Storage Service Guía del desarrollador
Consultar 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, como se indica a continuación: s3://
awsexamplebucket1-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,
EndPoint STRING,
TLSVersion STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1', 'input.regex' = '([^ ]*) ([^ ]*)
\\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \\\"([^ ]*) ([^ ]*)
(- |[^ ]*)
\\\" (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^
\"]*\") ([^ ]*)
(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$' )

Versión de API 2006-03-01


814
Amazon Simple Storage Service Guía del desarrollador
Consultar registros de acceso
de Amazon S3 para solicitudes

LOCATION 's3://awsexamplebucket1-logs/prefix'

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


815
Amazon Simple Storage Service Guía del desarrollador
Usar 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.

Usar 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 Usar AWS CloudTrail para
identificar solicitudes de Signature Version 2 de Amazon S3 (p. 777).

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;

Usar 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


816
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 realizan 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 Usar AWS CloudTrail para
identificar el acceso a objetos de Amazon S3 (p. 780).

Recursos relacionados
• Formato de registro de acceso al servidor de Amazon S3 (p. 801)
• Consulta de los logs de servicio de AWS

Versión de API 2006-03-01


817
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. 819)
• Configuración de la CLI de AWS (p. 825)
• Uso del AWS SDK for Java. (p. 826)
• Uso del AWS SDK para .NET (p. 827)
• Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 829)
• Uso de la versión 3 de AWS SDK parar Ruby (p. 830)
• Uso del AWS SDK for Python (Boto) (p. 831)
• Uso de los AWS Mobile SDK para iOS y Android (p. 831)
• Uso de la biblioteca de JavaScript de AWS Amplify (p. 832)

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


818
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. 821).

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


819
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


820
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 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. 822).

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


821
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 de 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 AWS Signature Version 4 va a sustituir a AWS Signature Version 2 en
la firma de solicitudes de la 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. 821), 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. 819).

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.201+ autenticación de solicitudes (p. 819)
o 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


822
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 Actualice Sí AWS SDK para .NET v3


para .NET v3 a 3.3.0.0 o
versiones
posteriores.

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


823
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


824
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.0.0, debe actualizar a 3.3.0.0.

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.0.0, 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


825
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. 195).

Temas
• La organización de API de Java (p. 827)
• Prueba de ejemplos de código Java de Amazon S3 (p. 827)

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


826
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. 195)).

Temas
• La organización de la API de .NET (p. 828)
• Ejecución de ejemplos de código .NET de Amazon S3 (p. 829)

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


827
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. 195)), 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 Usar la
API de REST para carga multiparte (p. 224)).
• 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


828
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. 829)
• Ejecución de ejemplos de PHP (p. 830)
• Recursos relacionados (p. 830)

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. 195).

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


829
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. 224)). 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


830
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 SDK
de AWS 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. 66)


• Cargar un objeto con AWS SDK parar Ruby (p. 195)

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 usar los SDK para el móvil de AWS para Android e iOS 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 SDK de AWS Mobile, consulte Introducción a los SDK de AWS Mobile.

Versión de API 2006-03-01


831
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. 832)

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. 831)

Versión de API 2006-03-01


832
Amazon Simple Storage Service Guía del desarrollador
Apéndice A: Usar la API de 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: Usar la API de SOAP (p. 833)
• Apéndice B: Autenticar solicitudes (AWS Signature Version 2) (p. 836)

Apéndice A: Usar la API de SOAP


Note

La compatibilidad con SOAP por HTTP está obsoleta, 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 API de SOAP


Note

La compatibilidad con SOAP por HTTP está obsoleta, 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: https://
doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl. El esquema de Amazon S3 está disponible en
https://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".

Elementos comunes
Puede incluir los siguientes elementos relacionados a autorización con cualquier solicitud de SOAP:

Versión de API 2006-03-01


833
Amazon Simple Storage Service Guía del desarrollador
Autenticar solicitudes 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

Autenticar solicitudes SOAP


Note

La compatibilidad con SOAP por HTTP está obsoleta, 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
Realizar 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="https://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.
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

Versión de API 2006-03-01


834
Amazon Simple Storage Service Guía del desarrollador
Configurar políticas de acceso con SOAP

marcas temporales específicas. Esto se puede lograr creando objetos DateTime manualmente
con solo una precisión de milisegundos.

Configurar políticas de acceso con SOAP


Note

La compatibilidad con SOAP por HTTP está obsoleta, 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. 325). 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="https://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>
<Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</PutObjectInline>

Sample Response

Versión de API 2006-03-01


835
Amazon Simple Storage Service Guía del desarrollador
Apéndice B: Autenticar solicitudes
(AWS Signature Version 2)

<PutObjectInlineResponse xmlns="https://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: Autenticar solicitudes (AWS Signature


Version 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. 821)
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 Usar AWS
CloudTrail para identificar solicitudes de Signature Version 2 de Amazon S3 (p. 777) para saber
cómo buscar e identificar dichas solicitudes.
• Si utiliza los registros de acceso del servidor de Amazon S3, consulte Usar los registros de
acceso de Amazon S3 para identificar solicitudes de Signature Version 2 (p. 816).

Temas
• Autenticar solicitudes con la API de REST (p. 836)
• Firmar y autenticar las solicitudes REST (p. 838)
• Cargas basadas en el navegador con POST (AWS Signature Version 2) (p. 849)

Autenticar 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:

Elementos de la solicitud

• ID de clave de acceso de AWS: cada solicitud debe contener el ID de clave de acceso de la identidad
que utiliza para enviar la solicitud.

Versión de API 2006-03-01


836
Amazon Simple Storage Service Guía del desarrollador
Autenticar solicitudes con la API de REST

• 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.

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.

Versión de API 2006-03-01


837
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

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 Firmar y autenticar las
solicitudes REST (p. 838).

Firmar y autenticar las solicitudes REST


Temas
• Uso de credenciales de seguridad temporales (p. 839)
• El encabezado de autenticación (p. 840)
• Solicitar canonicalización para firmas (p. 840)
• Crear elemento CanonicalizedResource (p. 841)
• Crear el elemento CanonicalizedAmzHeaders (p. 842)

Versión de API 2006-03-01


838
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

• Elementos StringToString de los encabezados HTTP: posicionales frente a denominados (p. 842)
• Requisitos de marca temporal (p. 842)
• Ejemplos de autenticación (p. 843)
• Problemas de firma con solicitudes REST (p. 847)
• Alternativa de autenticación por cadena de consulta de solicitudes (p. 847)

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. 849).

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: awsexamplebucket1.us-west-1.s3.amazonaws.com
Date: Tue, 27 Mar 2007 19:36:42 +0000

Authorization: AWS AKIAIOSFODNN7EXAMPLE:


qgk2+6Sv9/oM7G3qLEjTH1a1l1g=

Uso de credenciales de seguridad temporales


Si firma su solicitud con credenciales de seguridad temporales (consulte Realizar solicitudes (p. 10)),
deberá incluid el token de seguridad correspondiente en la solicitud agregando el encabezado x-amz-
security-token.

Versión de API 2006-03-01


839
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

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( UTF-8-Encoding-Of(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.
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.

Solicitar canonicalización 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

Versión de API 2006-03-01


840
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

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.

Crear 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. 47).

Para una solicitud de tipo alojamiento virtual "https://awsexamplebucket1.s3.us-


west-1.amazonaws.com/photos/puppy.jpg", el CanonicalizedResource es "/
awsexamplebucket1".

Para la solicitud de tipo ruta, "https://s3.us-west-1.amazonaws.com/awsexamplebucket1/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 una solicitud de tipo alojamiento virtual "https://awsexamplebucket1.s3.us-


west-1.amazonaws.com/photos/puppy.jpg", el CanonicalizedResource es "/
awsexamplebucket1/photos/puppy.jpg".

Para una solicitud de tipo ruta, "https://s3.us-west-1.amazonaws.com/awsexamplebucket1/photos/


puppy.jpg", el CanonicalizedResource es "/awsexamplebucket1/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,
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.

Versión de API 2006-03-01


841
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

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. 47).

Crear el 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 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 frente a 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.

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

Versión de API 2006-03-01


842
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

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 de solicitudes (p. 847).

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 awsexamplebucket1.

Solicitud StringToSign

GET /photos/puppy.jpg HTTP/1.1 GET\n


Host: awsexamplebucket1.us- \n
west-1.s3.amazonaws.com \n
Date: Tue, 27 Mar 2007 19:36:42 +0000 Tue, 27 Mar 2007 19:36:42 +0000\n
/awsexamplebucket1/photos/puppy.jpg
Authorization: AWS
AKIAIOSFODNN7EXAMPLE:
qgk2+6Sv9/oM7G3qLEjTH1a1l1g=

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

Versión de API 2006-03-01


843
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

Note

La siguiente secuencia de comandos de Python calcula la firma anterior, utilizando los parámetros
proporcionados. Puede utilizar este script para construir sus propias firmas, reemplazando las
claves y StringToSign según corresponda.

import base64
import hmac
from hashlib import sha1

access_key = 'AKIAIOSFODNN7EXAMPLE'.encode("UTF-8")
secret_key = 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'.encode("UTF-8")

string_to_sign = 'GET\n\n\nTue, 27 Mar 2007 19:36:42 +0000\n/awsexamplebucket1/


photos/puppy.jpg'.encode("UTF-8")
signature = base64.encodestring(
hmac.new(
secret_key, string_to_sign, sha1
).digest()
).strip()

print(f"AWS {access_key.decode()}:{signature.decode()}")

Object PUT
En este ejemplo se coloca un objeto en el bucket awsexamplebucket1.

Solicitud StringToSign

PUT /photos/puppy.jpg HTTP/1.1 PUT\n


Content-Type: image/jpeg \n
Content-Length: 94328 image/jpeg\n
Host: awsexamplebucket1.s3.us- Tue, 27 Mar 2007 21:15:45 +0000\n
west-1.amazonaws.com /awsexamplebucket1/photos/puppy.jpg
Date: Tue, 27 Mar 2007 21:15:45 +0000

Authorization: AWS AKIAIOSFODNN7EXAMPLE:


iqRzw+ileNPu1fhspnRs8nOjjIA=

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 muestra el contenido del bucket awsexamplebucket1.

Solicitud StringToSign

GET /?prefix=photos&max-keys=50&marker=puppy HTTP/1.1 GET\n


User-Agent: Mozilla/5.0 \n
Host: awsexamplebucket1.s3.us-west-1.amazonaws.com \n
Date: Tue, 27 Mar 2007 19:42:41 +0000 Tue, 27 Mar 2007 19:42:41
+0000\n
Authorization: AWS AKIAIOSFODNN7EXAMPLE: /awsexamplebucket1/
m0WP8eCtspQl5Ahe6L1SozdX9YA=

Versión de API 2006-03-01


844
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

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
"awsexamplebucket1".

Solicitud StringToSign

GET /?acl HTTP/1.1 GET\n


Host: awsexamplebucket1.s3.us-west-1.amazonaws.com \n
Date: Tue, 27 Mar 2007 19:44:46 +0000 \n
Tue, 27 Mar 2007 19:44:46
Authorization: AWS AKIAIOSFODNN7EXAMPLE: +0000\n
82ZHiFIjc+WbcwFKGUVEQspPn+0= /awsexamplebucket1/?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 "awsexamplebucket1" de tipo ruta y la alternativa Date.

Solicitud StringToSign

DELETE /awsexamplebucket1/photos/puppy.jpg DELETE\n


HTTP/1.1 \n
User-Agent: dotnet \n
Host: s3.us-west-1.amazonaws.com Tue, 27 Mar 2007 21:20:26 +0000\n
Date: Tue, 27 Mar 2007 21:20:27 +0000 /awsexamplebucket1/photos/puppy.jpg

x-amz-date: Tue, 27 Mar 2007 21:20:26 +0000


Authorization: AWS
AKIAIOSFODNN7EXAMPLE:XbyTlbQdu9Xw5o8P4iMwPktxQd8=

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.awsexamplebucket1.net:8080 application/x-download\n
Date: Tue, 27 Mar 2007 21:06:08 +0000 Tue, 27 Mar 2007 21:06:08 +0000\n

Versión de API 2006-03-01


845
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

Solicitud StringToSign
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: x-amz-meta-reviewedby:
joe@awsexamplebucket1.net joe@awsexamplebucket1.net,jane@awsexamplebucket1.net
X-Amz-Meta-ReviewedBy: \n
jane@awsexamplebucket1.net /static.awsexamplebucket1.net/db-
X-Amz-Meta-FileChecksum: 0x02661779 backup.dat.gz
X-Amz-Meta-ChecksumAlgorithm: crc32
Content-Disposition: attachment;
filename=database.dat
Content-Encoding: gzip
Content-Length: 5913339

Authorization: AWS AKIAIOSFODNN7EXAMPLE:


dKZcB+bz2EPXgSdXZp9ozGeOM4I=

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

Mostrar todos mis buckets

Solicitud StringToSign

GET / HTTP/1.1 GET\n


Host: s3.us-west-1.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= /

Claves de Unicode

Solicitud StringToSign

GET /dictionary/fran%C3%A7ais/pr%c3%a9f GET\n


%c3%a8re HTTP/1.1 \n
Host: s3.us-west-1.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.

Versión de API 2006-03-01


846
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

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
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 de


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. 187).

Crear 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: awsexamplebucket1.s3.us-west-1.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

Versión de API 2006-03-01


847
Amazon Simple Storage Service Guía del desarrollador
Firmar y autenticar las solicitudes REST

Nombre del Ejemplo de valor Descripción


parámetro de
la cadena de
consulta
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.

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 de solicitudes

Solicitud StringToSign

GET /photos/puppy.jpg? GET\n


AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE& \n
Signature=NpgCjnDzrM \n
%2BWFzoENXmpNDUsSn8%3D& 1175139620\n
Expires=1175139620 HTTP/1.1
/awsexamplebucket1/photos/puppy.jpg
Host: awsexamplebucket1.s3.us-
west-1.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.

Versión de API 2006-03-01


848
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Usar 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. 843) de
Amazon S3.

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.

Versión de API 2006-03-01


849
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Cargar 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.

Note

POST no admite la autenticación por query string.

Formularios HTML (AWS Signature Version 2)


Temas
• Codificar formulario HTML (p. 850)
• Declaración de formulario HTML (p. 851)
• Campos de formulario HTML (p. 851)
• Construcción de la política (p. 854)
• Crear una firma (p. 857)
• Redireccionamiento (p. 857)

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 por HTTP está obsoleta, 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.

Codificar 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.

Versión de API 2006-03-01


850
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

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:

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 del bucket es awsexamplebucket1 y la región es EE.UU. Oeste (Norte de
California), la dirección URL es https://awsexamplebucket1.s3.us-west-1.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 "awsexamplebucket1".

<form action="https://awsexamplebucket1.s3.us-west-1.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.

Versión de API 2006-03-01


851
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

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

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. 114).

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.

Versión de API 2006-03-01


852
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Nombre del campo Descripción Obligatorio


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. 857).
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.

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.

Versión de API 2006-03-01


853
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Nombre del campo Descripción Obligatorio

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.

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. 855)
• Condiciones (p. 855)
• Coincidencia de condiciones (p. 856)
• Secuencia de escape de caracteres (p. 857)

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" },

Versión de API 2006-03-01


854
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

{"bucket": "awsexamplebucket1" },

["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,
“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. 856).

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.

Versión de API 2006-03-01


855
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Nombre del elemento Descripción

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=" }.

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:

Versión de API 2006-03-01


856
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

Condición Descripción

["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.

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

Crear 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.

Versión de API 2006-03-01


857
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

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.
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
• Cargar archivo (p. 858)
• Cargar área de texto (p. 861)

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.

Cargar 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.

Crear política y formulario

La siguiente política admite cargas en Amazon S3 para el bucket awsexamplebucket1.

{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "awsexamplebucket1"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "https://awsexamplebucket1.s3.us-west-1.amazonaws.com/
successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]

Versión de API 2006-03-01


858
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

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 en el bucket awsexamplebucket1.
• La clave debe empezar con “user/eric/”.
• La ACL se establece en public-read.
• El campo success_action_redirect se establece en https://awsexamplebucket1.s3.us-
west-1.amazonaws.com/successful_upload.html.
• El objeto es un archivo de imagen.
• 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.

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 awsexamplebucket1.net que utiliza esta
política.

<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...
<form action="https://awsexamplebucket1.s3.us-west-1.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="https://
awsexamplebucket1.s3.us-west-1.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>

Solicitar ejemplo

Esta solicitud asume que la imagen cargada tiene una tamaño de 117 108 bytes; los datos de la imagen no
se incluyen.

Versión de API 2006-03-01


859
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

POST / HTTP/1.1
Host: awsexamplebucket1.s3.us-west-1.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"

user/eric/MyPicture.jpg
--9431149156168
Content-Disposition: form-data; name="acl"

public-read
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"

https://awsexamplebucket1.s3.us-west-1.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

Versión de API 2006-03-01


860
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

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: https://awsexamplebucket1.s3.us-west-1.amazonaws.com/
successful_upload.html?bucket=awsexamplebucket1&key=user/eric/
MyPicture.jpg&etag=&quot;39d459dfbc0faabbb5e179358dfb94c3&quot;
Server: AmazonS3

Cargar área de texto


Temas
• Crear política y formulario (p. 861)
• Solicitar ejemplo (p. 862)
• Respuesta de ejemplo (p. 863)

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.

Crear política y formulario


La siguiente política admite cargas de área de texto en Amazon S3 para el bucket awsexamplebucket1.

{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "awsexamplebucket1"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "https://awsexamplebucket1.s3.us-west-1.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 en el bucket awsexamplebucket1.
• La clave debe empezar con “user/eric/”.
• La ACL se establece en public-read.
• El campo success_action_redirect se establece en https://awsexamplebucket1.s3.us-
west-1.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

Versión de API 2006-03-01


861
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

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 awsexamplebucket1.net que utiliza esta
política.

<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...
<form action="https://awsexamplebucket1.s3.us-west-1.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="https://
awsexamplebucket1.s3.us-west-1.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>

Solicitar ejemplo
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: awsexamplebucket1.s3.us-west-1.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

Versión de API 2006-03-01


862
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

--178521717625888
Content-Disposition: form-data; name="acl"

public-read
--178521717625888
Content-Disposition: form-data; name="success_action_redirect"

https://awsexamplebucket1.s3.us-west-1.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"

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: https://awsexamplebucket1.s3.us-west-1.amazonaws.com/new_post.html?
bucket=awsexamplebucket1&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.

Versión de API 2006-03-01


863
Amazon Simple Storage Service Guía del desarrollador
Cargas basadas en el navegador con POST

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.
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. 851).

Versión de API 2006-03-01


864
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


865
Amazon Simple Storage Service Guía del desarrollador
Comando SELECT

Referencia de SQL para Select de


Amazon S3 y Select de S3 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 S3 Glacier.

Temas
• Comando SELECT (p. 866)
• Tipos de datos (p. 872)
• Operadores (p. 873)
• Palabras clave reservadas (p. 874)
• Funciones SQL (p. 878)

Comando SELECT
Select de Amazon S3 y Select de S3 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 S3 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 S3 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


866
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 S3 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": [ {"id": "1"}, {"expr": "y > x"}, {"id": "2", "expr": "z = DEBUG"} ]}
{ "created": "June 27", "modified": "July 6" }

Versión de API 2006-03-01


867
Amazon Simple Storage Service Guía del desarrollador
Cláusula WHERE

SELECT id FROM S3Object[*].Rules[*].id

{"id":"1"}
{}
{"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":"1"}
{"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" }
{ "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[*]

{"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

Versión de API 2006-03-01


868
Amazon Simple Storage Service Guía del desarrollador
Cláusula LIMIT (solo para Amazon S3 Select)

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 S3 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
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

Versión de API 2006-03-01


869
Amazon Simple Storage Service Guía del desarrollador
Distinción entre mayúsculas y minúsculas
en los nombres de atributos o encabezados

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 S3 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 S3 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

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

Versión de API 2006-03-01


870
Amazon Simple Storage Service Guía del desarrollador
Uso de palabras clave reservadas
como términos definidos por el usuario

Uso de palabras clave reservadas como términos


definidos por el usuario
Select de Amazon S3 y Select de S3 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. 874).

El ejemplo siguiente es: 1) un objeto de Amazon S3 o S3 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.
• 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

Versión de API 2006-03-01


871
Amazon Simple Storage Service Guía del desarrollador
Tipos de datos

• expresión LIKE expresión [ ESCAPE expresión ]

Tipos de datos
Select de Amazon S3 y Select de S3 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. 882).

Tipos de datos admitidos


Select de Amazon S3 y Select de S3 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).
Note

Seleccionar Amazon S3 ignora la escala y la precisión


cuando se proporcionan ambos al mismo tiempo.

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)

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.

Versión de API 2006-03-01


872
Amazon Simple Storage Service Guía del desarrollador
Operadores

Operadores
Select de Amazon S3 y Select de S3 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
• _ (coincide con cualquier carácter)
• % (coincide con cualquier secuencia de caracteres)

Operadores unitarios
• IS NULL
• IS NOT NULL

Operadores matemáticos
Se admiten los operadores de suma, resta, multiplicación, división y módulo.

• +
• -
• *
• %

Jerarquía de los operadores


En la siguiente tabla se muestra la prioridad de los operadores en orden descendente.

Versión de API 2006-03-01


873
Amazon Simple Storage Service Guía del desarrollador
Palabras clave reservadas

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 S3
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
begin
between
bit
bit_length
blob

Versión de API 2006-03-01


874
Amazon Simple Storage Service Guía del desarrollador
Palabras clave reservadas

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
exception
exec
execute
exists
external

Versión de API 2006-03-01


875
Amazon Simple Storage Service Guía del desarrollador
Palabras clave reservadas

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
nullif
numeric
octet_length
of
on

Versión de API 2006-03-01


876
Amazon Simple Storage Service Guía del desarrollador
Palabras clave reservadas

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
transaction
translate
translation
trim
true

Versión de API 2006-03-01


877
Amazon Simple Storage Service Guía del desarrollador
Funciones SQL

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 S3 Glacier admiten varias funciones SQL.

Temas
• Funciones de agregación (solo Amazon S3 Select) (p. 878)
• Funciones condicionales (p. 879)
• Funciones de conversión (p. 881)
• Funciones Date (p. 882)
• Funciones de cadena (p. 888)

Funciones de agregación (solo Amazon S3 Select)


Amazon S3 Select admite las siguientes funciones de agregación.
Note

S3 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
de casos, el
mismo que el
tipo de datos del
argumento.

Versión de API 2006-03-01


878
Amazon Simple Storage Service Guía del desarrollador
Funciones condicionales

Función Tipo de argumento Tipo de retorno

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 S3 Glacier admiten las siguientes funciones condicionales.

Temas
• CASE (p. 879)
• COALESCE (p. 880)
• NULLIF (p. 881)

CASE
La expresión CASE es una expresión condicional similar a las instrucciones if/then/else que se encuentran
en otros lenguajes. CASE se utiliza para especificar un resultado cuando hay condiciones múltiples.
Existen dos tipos de expresiones CASE: simple y buscada.

En expresiones CASE simples, una expresión se compara con un valor. Cuando hay una coincidencia, se
aplica la acción especificada en la cláusula THEN. Si no se encuentra coincidencia, se aplica la acción en
la cláusula ELSE.

En las expresiones CASE buscadas, cada CASE se evalúa según una expresión booleana, y la instrucción
CASE devuelve el primer CASE que coincida. Si no se encuentra un CASE que coincida entre las
cláusulas WHEN, se devuelve la acción en la cláusula ELSE.

Sintaxis
Instrucción CASE simple utilizada para hacer coincidir condiciones:

CASE expression
WHEN value THEN result
[WHEN...]
[ELSE result]
END

Versión de API 2006-03-01


879
Amazon Simple Storage Service Guía del desarrollador
Funciones condicionales

Instrucción CASE buscada utilizada para evaluar cada condición:

CASE
WHEN boolean condition THEN result
[WHEN ...]
[ELSE result]
END

Ejemplos
Utilice una expresión CASE simple, se utiliza para reemplazar Nueva York con Big Apple en una consulta.
Reemplace todos los demás nombres de ciudad por otros.

select venuecity,
case venuecity
when 'New York City'
then 'Big Apple' else 'other'
end from venue
order by venueid desc;

venuecity | case
-----------------+-----------
Los Angeles | other
New York City | Big Apple
San Francisco | other
Baltimore | other
...
(202 rows)

Utilice una expresión CASE buscada para asignar números de grupo según el valor PRICEPAID para
ventas de tickets individuales:

select pricepaid,
case when pricepaid <10000 then 'group 1'
when pricepaid >10000 then 'group 2'
else 'group 3'
end from sales
order by 1 desc;

pricepaid | case
-----------+---------
12624.00 | group 2
10000.00 | group 3
10000.00 | group 3
9996.00 | group 1
9988.00 | group 1
...
(172456 rows)

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.

Versión de API 2006-03-01


880
Amazon Simple Storage Service Guía del desarrollador
Funciones de conversión

Sintaxis

COALESCE ( expression, expression, ... )

Parámetros
expresión

La expresión de destino sobre la que opera la función.

Ejemplos

COALESCE(1) -- 1
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 S3 Glacier admiten las siguientes funciones de conversión.

Temas

Versión de API 2006-03-01


881
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

• CAST (p. 882)

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 )

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. 872).

Ejemplos
CAST('2007-04-05T14:30Z' AS TIMESTAMP)
CAST(0.456 AS FLOAT)

Funciones Date
Select de Amazon S3 y Select de S3 Glacier admiten las siguientes funciones de fecha.

Temas
• DATE_ADD (p. 882)
• DATE_DIFF (p. 883)
• EXTRACT (p. 884)
• TO_STRING (p. 884)
• TO_TIMESTAMP (p. 887)
• UTCNOW (p. 888)

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:

Versión de API 2006-03-01


882
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

• año
• mes
• día
• hora
• minuto
• segundos
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. 882).
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

Versión de API 2006-03-01


883
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

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:00`, `2010-01-02T01:00`) -- 0 (need to be at least 24h apart
to be 1 day apart)

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 )

Versión de API 2006-03-01


884
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

Parámetros
timestamp

La marca temporal de destino sobre la que opera la función.


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)

Versión de API 2006-03-01


885
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

Formato Ejemplo Descripción

HH 03 Hora del día


rellenada con
ceros (00-23)

m 4 Minuto (0-59)

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

Versión de API 2006-03-01


886
Amazon Simple Storage Service Guía del desarrollador
Funciones Date

Formato Ejemplo Descripción

XXX or XXXXX +07:00 or Z Desplazamiento


en horas
y minutos
o "Z" si el
desplazamiento
es 0

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`

Versión de API 2006-03-01


887
Amazon Simple Storage Service Guía del desarrollador
Funciones de cadena

UTCNOW
Devuelve: la fecha y hora actual en UTC como una marca temporal.

Sintaxis

UTCNOW()

Parámetros
ninguno

Ejemplos

UTCNOW() -- 2017-10-13T16:02:11.123Z

Funciones de cadena
Select de Amazon S3 y Select de S3 Glacier admiten las siguientes funciones de cadena.

Temas
• CHAR_LENGTH, CHARACTER_LENGTH (p. 888)
• LOWER (p. 889)
• SUBSTRING (p. 889)
• TRIM (p. 890)
• UPPER (p. 890)

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

Versión de API 2006-03-01


888
Amazon Simple Storage Service Guía del desarrollador
Funciones de cadena

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 )

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"

Versión de API 2006-03-01


889
Amazon Simple Storage Service Guía del desarrollador
Funciones de cadena

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 )

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


890
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

Soporte de Operaciones por lotes Ahora puede usar Operaciones May 4, 2020
de S3 para bloqueo de objetos por lotes con S3 Bloqueo de
de retención legal (p. 891) objetos para agregar retención
legal a muchos objetos de
Amazon S3 a la vez. Para
obtener más información,
consulte Utilizar Operaciones por
lotes de S3 para establecer la
retención legal de S3 Bloqueo de
objetos.

Compatibilidad de Operaciones Ahora puede utilizar Operaciones May 4, 2020


por lotes de S3 con retención de por lotes con S3 Bloqueo
bloqueo de objetos (p. 891) de objetos para aplicar la
configuración de retención a
muchos objetos de Amazon
S3 a la vez. Para obtener
más información, consulte
Establecimiento de fechas de
retención de S3 Bloqueo de
objetos con Operaciones por
lotes de S3.

Etiquetas de trabajo para Puede añadir etiquetas a sus March 16, 2020
Operaciones por lotes de trabajos de Operaciones por
S3 (p. 891) lotes de S3 para controlarlos y
etiquetarlos. Para obtener más
información, consulte Etiquetas
para trabajos de Operaciones por
lotes de S3.

Puntos de acceso de Amazon Los puntos de acceso de December 2, 2019


S3 (p. 891) Amazon S3 simplifican la
administración del acceso a los
datos a escala para los conjuntos
de datos compartidos en S3. Los
puntos de acceso son puntos
de enlace de red con nombre
que están asociados a los
buckets que se pueden utilizar
para realizar operaciones con
objetos de S3. Para obtener más
información, consulte Administrar

Versión de API 2006-03-01


891
Amazon Simple Storage Service Guía del desarrollador

el acceso a datos con puntos de


acceso de Amazon S3.

Access Analyzer para Amazon Access Analyzer para Amazon December 2, 2019
S3 (p. 891) S3 le avisa de los buckets de
S3 que están configurados para
permitir el acceso a cualquier
usuario de Internet u otras
cuentas de AWS, incluidas las
cuentas de AWS ajenas a su
organización. Para obtener
más información, consulte Usar
Access Analyzer para Amazon
S3.

S3 Replication Time Control (S3 S3 Replication Time Control November 20, 2019
RTC) (p. 891) (S3 RTC) replica la mayoría de
los objetos que se cargan en
Amazon S3 en unos segundos
y el 99,99 % de esos objetos
en un plazo de 15 minutos.
Para obtener más información,
consulte Replicar objetos
mediante S3 Replication Time
Control (S3 RTC).

Replicación en la misma La replicación en la misma región September 18, 2019


región (p. 891) (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.

Compatibilidad de replicación La replicación entre regiones May 28, 2019


entre regiones para S3 Bloqueo ahora admite Bloqueo de objetos.
de objetos (p. 891) Para obtener más información,
consulte Replicación entre
regiones y ¿Qué replica Amazon
S3?.

Operaciones por lotes de S3 Uso de Operaciones por lotes de April 30, 2019
(p. 891) S3 para realizar Operaciones por
lotes a gran escala en objetos
de Amazon S3. Operaciones por
lotes de S3 puede 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 Ejecutar Operaciones
por lotes de S3.

Versión de API 2006-03-01


892
Amazon Simple Storage Service Guía del desarrollador

Región Asia Pacífico (Hong Amazon S3 ya está disponible April 24, 2019
Kong) (p. 891) 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.

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

Versión de API 2006-03-01


893
Amazon Simple Storage Service Guía del desarrollador

Uso de PUT directamente en La operación PUT de Amazon S3 November 26, 2018


la clase de almacenamiento S3 ahora admite la especificación
Glacier (p. 891) de S3 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 S3
Glacier desde otra clase de
almacenamiento de Amazon S3.
Además, al usar la replicación
entre regiones (CRR) de
S3, ahora puede especificar
S3 Glacier como clase de
almacenamiento para los
objetos replicados. Para obtener
más información acerca de la
clase de almacenamiento S3
Glacier, consulte las clases
de almacenamiento. 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
S3 Glacier, consulte Historial
de revisión: Operación PUT
directamente en S3 Glacier.

S3 Bloqueo de objetos (p. 891) Amazon S3 ofrece ahora la November 26, 2018
funcionalidad Bloqueo de objetos
que proporciona protecciones
de tipo "escritura única y lectura
múltiple" para objetos de
Amazon S3. Para obtener más
información, consulte Bloqueo de
objetos.

Restaurar notificaciones de Las notificaciones de eventos November 26, 2018


eventos (p. 891) de Amazon S3 admiten ahora
eventos de inicio y finalización
al restaurar objetos de la clase
de almacenamiento S3 Glacier.
Para obtener más información,
consulte Notificaciones de
eventos.

Versión de API 2006-03-01


894
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. 891) de restauración de Amazon S3,
puede cambiar a una velocidad
de restauración más rápida de
la clase de almacenamiento
S3 Glacier mientras se está
realizando la restauración.
Para obtener más información,
consulte Restaurar objetos
archivados.

Nueva clase de Amazon S3 ofrece ahora una November 26, 2018


almacenamiento (p. 891) 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.

Amazon S3 Block Public Amazon S3 incluye ahora la November 15, 2018


Access (p. 891) 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 en varias regiones de CRR, puede especificar un
(CRR) (p. 891) 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. 891) 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).

Versión de API 2006-03-01


895
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Actualizaciones ahora Ahora puede suscribirse June 19, 2018


disponibles sobre RSS (p. 891) 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.

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 S3 para las clases de almacenamiento pertinentes (ONEZONE_IA,
Glacier y ONEZONE_IA STANDARD_IA y S3 Glacier):
a las métricas de
almacenamiento de • Para los objetos de clase de almacenamiento ONEZONE_IA
Amazon CloudWatch y STANDARD_IA, Amazon S3 notifica los objetos de menos
Logs. de 128 KB como si fueran de 128 KB. Para obtener más
información, consulte Clases de almacenamiento de Amazon
S3 (p. 119).
• Para los objetos de clase de almacenamiento S3 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 S3 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. 138).

Versión de API 2006-03-01


896
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha


Para obtener más información acerca de las métricas de
almacenamiento, consulte Monitoreo de métricas con Amazon
CloudWatch (p. 754).

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. 119).

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
más información, consulte Seleccionar contenido de los
objetos (p. 266).

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 Europa Amazon S3 ya está disponible en la región Europa (París). 18 de


(París) 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.

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 S3 Glacier con SQL. Para obtener más información, consulte noviembre
Consultar objetos archivados (p. 275). 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. 499).

Versión de API 2006-03-01


897
Amazon Simple Storage Service Guía del desarrollador
Actualizaciones anteriores

Cambio Descripción Fecha

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. 70).

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. 499).

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 Cambiar el
propietario de la réplica (p. 705).
• 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 Replicar objetos creados con el cifrado en el lado
del servidor (SSE) mediante claves de cifrado almacenadas
en AWS KMS (p. 708).

Región de Europa Amazon S3 ya está disponible en la región Europa (Londres). 13 de


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

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


898
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. 127).

El ciclo de vida de Amazon S3 ahora admite el filtrado basado en etiquetas en la 29 de


Amazon S3 ahora configuración del ciclo de vida. Ahora puede especificar reglas noviembre
admite filtros basados en del ciclo de vida en la que puede establecer un prefijo de clave, de 2016
etiquetas 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 Administrar el ciclo de vida de los objetos (p. 136).

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 Monitoreo de métricas con
Amazon CloudWatch (p. 754).

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. 499).

Versión de API 2006-03-01


899
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. 279) 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 S3 Glacier. de 2016
objetos archivados Para obtener más información, consulte Restaurar objetos
desde S3 Glacier archivados (p. 270).

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. 766).

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. 74).

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
Realizar 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


900
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. 73).

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. 148).

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. 198)
• Elementos para describir las acciones del ciclo de
vida (p. 148)

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


901
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 Claves de condición de Amazon de 2015
S3 (p. 376).

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. 201).

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. 119).

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 Administrar el ciclo de vida de los
objetos (p. 136).

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. 684).

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. 766).

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. 61).

Versión de API 2006-03-01


902
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 Configurar notificaciones de eventos de Amazon
S3 (p. 662).

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 Monitoreo de métricas con Amazon
CloudWatch (p. 754).

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 Eliminar o vaciar un bucket (p. 66).

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. 449).

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 Configurar notificaciones de eventos de Amazon
S3 (p. 662).

Versión de API 2006-03-01


903
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. 684).

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 Configurar
notificaciones de eventos de Amazon S3 (p. 662).

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 KMS. 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 Europa Amazon S3 ya está disponible en la región Europa (Fráncfort). 23 de


(Fráncfort) 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 de 2014
de versiones. 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 Administrar el ciclo de vida de los objetos (p. 136).

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. 325).

Versión de API 2006-03-01


904
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. 794). 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. 451).

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. 80).

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 Alojar un sitio web estático
en Amazon S3 (p. 618).

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


905
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 S3 le permite usar el servicio de almacenamiento a bajo costo de noviembre
Glacier S3 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 S3 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 Administrar el ciclo de


vida de los objetos (p. 136).

Soporte de Para los buckets configurados como sitios web, Amazon 4 de


redireccionamiento de S3 permite ahora redirigir una solicitud desde un objeto a octubre de
páginas web otro objeto del mismo bucket o a una URL externa. Para 2012
obtener más información, consulte (Opcional) Configurar el
redireccionamiento de páginas web (p. 630).

Para obtener más información acerca del alojamiento de


sitios web, consulte Alojar un sitio web estático en Amazon
S3 (p. 618).

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 Compartir recursos entre orígenes
(CORS) (p. 171).

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. 97).

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. 446).

Versión de API 2006-03-01


906
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. 246).

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 Especificar el cifrado del lado
del servidor con AWS SDK para PHP (p. 299)) y AWS SDK
parar Ruby (consulte Especificación del cifrado del lado del
servidor con AWS SDK parar Ruby (p. 301)).
• 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. 830)).

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


907
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 Realizar
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. 187) y Cargar
objetos con URL prefirmadas (p. 225).
• 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. 818).

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 Realizar


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. 229).

Para obtener información conceptual sobre la API de carga


multiparte, consulte Carga de objetos con la API de carga
multiparte (p. 195).

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


908
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 Entidades
principales (p. 373).

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 Alojar un sitio web estático en Amazon
S3 (p. 618).

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. 181).

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. 195).

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. 195).

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 Políticas y permisos en septiembre
de bucket Amazon S3 (p. 370) de 2010

Versión de API 2006-03-01


909
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. 662).

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. 370).

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. 47).

Nuevo punto de Ahora, Amazon S3 proporciona un punto de conexión 9 de junio


conexión para la Europa para la región Europa (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. 509).

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


910
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. 818).

Versión de API 2006-03-01


911
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


912

También podría gustarte