s3 DG PDF
s3 DG PDF
s3 DG PDF
Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,
in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits
Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not
be affiliated with, connected to, or sponsored by Amazon.
Amazon Simple Storage Service Guía del desarrollador
Table of Contents
¿Qué es Amazon S3? ......................................................................................................................... 1
¿Cómo...? ................................................................................................................................. 1
Introducción ....................................................................................................................................... 2
Información general de Amazon S3 y esta guía .............................................................................. 2
Ventajas del uso de Amazon S3 ................................................................................................... 2
Conceptos de Amazon S3 ........................................................................................................... 3
Buckets ............................................................................................................................. 3
Objetos ............................................................................................................................. 3
Claves .............................................................................................................................. 3
Regiones ........................................................................................................................... 4
Modelo de consistencia de datos de Amazon S3 ..................................................................... 4
Características de Amazon S3 ..................................................................................................... 6
Clases de almacenamiento .................................................................................................. 6
Políticas de buckets ............................................................................................................ 6
AWS Identity and Access Management (IAM) ......................................................................... 7
Listas de control de acceso ................................................................................................. 7
Control de versiones ........................................................................................................... 8
Operaciones ...................................................................................................................... 8
Application Programming Interface (API, Interfaz de programación de aplicaciones) de Amazon S3 .......... 8
La interfaz de REST ........................................................................................................... 8
La interfaz de SOAP ........................................................................................................... 9
Pago de Amazon S3 ................................................................................................................... 9
Servicios relacionados ................................................................................................................. 9
Realización de solicitudes .................................................................................................................. 10
Acerca de las claves de acceso .................................................................................................. 10
Claves de acceso a la cuenta de AWS ................................................................................ 10
Claves de acceso de usuario de IAM ................................................................................... 10
Credenciales de seguridad temporales ................................................................................. 11
Puntos de enlace de solicitud ..................................................................................................... 12
Realización de solicitudes mediante IPv6 ..................................................................................... 12
Introducción a IPv6 ........................................................................................................... 12
Uso de direcciones IPv6 en políticas de IAM ........................................................................ 13
Prueba de compatibilidad de dirección IP ............................................................................. 14
Uso de los puntos de enlace de doble pila ........................................................................... 15
Realización de solicitudes con los SDK de AWS ........................................................................... 19
Usar un cuenta de AWS o credenciales de usuario de IAM ..................................................... 19
Uso de credenciales temporales de usuario de IAM ............................................................... 26
Uso de credenciales temporales de usuario federado ............................................................. 34
Realización de solicitudes con la API de REST ............................................................................. 45
Puntos de enlace de doble pila (API de REST) ..................................................................... 46
Alojamiento virtual de buckets ............................................................................................ 46
Solicitud de redireccionamiento y la API de REST ................................................................. 51
Buckets ........................................................................................................................................... 54
Creación de un bucket .............................................................................................................. 55
Acerca de los permisos ..................................................................................................... 56
Administración del acceso público a los buckets ............................................................................ 56
Acceso a un bucket .................................................................................................................. 57
Opciones de configuración de buckets ......................................................................................... 58
Restricciones y limitaciones ........................................................................................................ 60
Reglas para la nomenclatura .............................................................................................. 60
Ejemplos de creación de buckets ................................................................................................ 61
Uso de la consola de Amazon S3 ....................................................................................... 62
Uso del AWS SDK for Java. ............................................................................................... 62
Uso del AWS SDK para .NET ............................................................................................. 63
Cross-Origin Resource Sharing (CORS, Uso compartido de recursos entre orígenes) ......................... 163
Uso compartido de recursos entre orígenes: casos de uso .................................................... 163
¿Cómo configuro el CORS en mi bucket? ........................................................................... 163
¿Cómo Amazon S3 evalúa la configuración CORS en un bucket? .......................................... 166
Habilitar CORS ............................................................................................................... 166
Solución de problemas de CORS ...................................................................................... 172
Operaciones en objetos ........................................................................................................... 172
Obtención de objetos ....................................................................................................... 173
Carga de objetos ............................................................................................................ 181
Copia de objetos ............................................................................................................. 219
Listas de claves de objetos .............................................................................................. 230
Eliminación de objetos ..................................................................................................... 236
Selección de contenido de los objetos ................................................................................ 254
Restaurar objetos archivados ............................................................................................ 258
Consultar objetos archivados ............................................................................................ 263
Análisis de clases de almacenamiento ............................................................................................... 267
Cómo configurar el análisis de clases de almacenamiento ............................................................. 267
Análisis de clases de almacenamiento ....................................................................................... 268
¿Cómo puedo exportar los datos del análisis de clases de almacenamiento? .................................... 271
Diseño del archivo de exportación del análisis de clases de almacenamiento ............................ 272
API REST de análisis de Amazon S3 ......................................................................................... 272
Seguridad ...................................................................................................................................... 273
Protección de los datos ............................................................................................................ 273
Privacidad entre redes ..................................................................................................... 274
Cifrado de datos ............................................................................................................. 274
Identity and Access Management .............................................................................................. 312
Introducción .................................................................................................................... 312
Uso de políticas de bucket y usuario .................................................................................. 353
Administración de acceso con ACL .................................................................................... 418
Bloqueo de acceso público ............................................................................................... 430
Registro y monitorización ......................................................................................................... 438
Validación de la conformidad .................................................................................................... 439
Inventario ....................................................................................................................... 439
Resiliencia .............................................................................................................................. 448
Cifrado de copia de seguridad .......................................................................................... 449
Control de versiones ........................................................................................................ 449
Bloqueo de objetos ......................................................................................................... 472
Seguridad de la infraestructura .................................................................................................. 479
Configuración y análisis de vulnerabilidades ................................................................................ 480
Prácticas recomendadas de seguridad ....................................................................................... 480
Prácticas recomendadas preventivas de seguridad de Amazon S3 .......................................... 480
Monitorización y auditoría de prácticas recomendadas de Amazon S3 ..................................... 483
Operaciones por lotes ...................................................................................................................... 486
Terminología .......................................................................................................................... 486
Conceptos básicos: trabajos ..................................................................................................... 487
Cómo funciona un trabajo ................................................................................................ 487
Especificación de un manifiesto ......................................................................................... 487
Creación de un trabajo ............................................................................................................ 488
Creación de una solicitud de trabajo .................................................................................. 489
Creación de una respuesta de trabajo ................................................................................ 490
Concesión de permisos para operaciones por lotes .............................................................. 490
Recursos relacionados ..................................................................................................... 493
Operaciones ........................................................................................................................... 494
PUT Object Copy ............................................................................................................ 494
Initiate Restore Object ..................................................................................................... 494
Llamar a una función Lambda. .......................................................................................... 496
Put Object ACL ............................................................................................................... 503
Amazon S3 tiene una interfaz de servicios web simple que puede utilizar para almacenar y recuperar
cualquier cantidad de datos, en cualquier momento, desde cualquier parte de la web. Ofrece a cualquier
desarrollador acceso a la misma infraestructura de almacenamiento de datos económica, altamente
escalable, fiable, segura y rápida que utiliza Amazon para mantener su propia red global de sitios web.
Este servicio tiene como fin maximizar los beneficios del escalado y trasladarlos a los desarrolladores.
En esta guía se explican los conceptos principales de Amazon S3, como los de bucket y objeto, y cómo
trabajar con estos recursos con la interfaz de programación de aplicaciones (API) de Amazon S3.
¿Cómo...?
Información Secciones pertinentes
Descubra esta rápida introducción Guía de introducción a Amazon Simple Storage Service
práctica a Amazon S3
¿Cómo se trabaja con objetos? Trabajo con objetos de Amazon S3 (p. 104)
Introducción a Amazon S3
Esta introducción a Amazon Simple Storage Service (Amazon S3) ofrece un resumen detallado de este
servicio web. Después de leer esta sección, tendrá una idea más clara sobre lo que ofrece y cómo
adaptarlo a su compañía.
Temas
• Información general de Amazon S3 y esta guía (p. 2)
• Ventajas del uso de Amazon S3 (p. 2)
• Conceptos de Amazon S3 (p. 3)
• Características de Amazon S3 (p. 6)
• Application Programming Interface (API, Interfaz de programación de aplicaciones) de Amazon
S3 (p. 8)
• Pago de Amazon S3 (p. 9)
• Servicios relacionados (p. 9)
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).
• Creación de buckets: cree y nombre un bucket que almacena datos. Los buckets son los contenedores
fundamentales en Amazon S3 para el almacenamiento de datos.
• Almacenamiento de datos en buckets: almacene una cantidad ilimitada de datos en un bucket. Cargue la
cantidad de objetos que desee en un bucket de Amazon S3. Cada objeto puede contener hasta 5 TB de
datos. Cada objeto se almacena y recupera con una clave única asignada por el desarrollador.
• Descarga de datos: descargue sus datos o permita que otros lo hagan. Descargue los datos en cualquier
momento o permita que otros hagan lo mismo.
• Permisos: conceda o deniegue acceso a otras personas que desean cargar o descargar datos en
su bucket de Amazon S3. Conceda permisos para cargar y descargar a tres tipos de usuarios. Los
mecanismos de autenticación pueden ayudar a proteger los datos del acceso no autorizado.
• Interfaces estándar: utilice las interfaces REST y SOAP basadas en estándares diseñadas para trabajar
con cualquier conjunto de herramientas de desarrollo de Internet.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Conceptos de Amazon S3
En esta sección se describen conceptos y terminología clave que debe comprender para utilizar Amazon
S3 de manera eficiente. Estos se presentan en el orden en que probablemente los encuentre.
Temas
• Buckets (p. 3)
• Objetos (p. 3)
• Claves (p. 3)
• Regiones (p. 4)
• Modelo de consistencia de datos de Amazon S3 (p. 4)
Buckets
Un bucket es un contenedor para objetos almacenados en Amazon S3. Cada objeto está almacenado
en un bucket. Por ejemplo, si el objeto denominado photos/puppy.jpg se almacena en el bucket
johnsmith, es direccionable mediante el URL http://johnsmith.s3.amazonaws.com/photos/
puppy.jpg.
Puede configurar los buckets para que se creen en una región de AWS específica. Para obtener más
información, consulte Acceso bucket (p. 57). También puede configurar un bucket de manera que cada
vez que se le agrega un objeto, Amazon S3 genere un ID de versión único y se lo asigne al objeto. Para
obtener más información, consulte Uso del control de versiones (p. 449).
Para obtener más información acerca de los buckets, consulte Uso de buckets de Amazon S3 (p. 54).
Objetos
Los objetos son las entidades fundamentales almacenadas en Amazon S3. Los objetos se componen de
datos de objetos y metadatos. La parte de datos resulta opaca a Amazon S3. Los metadatos son conjuntos
de pares nombre-valor que describen el objeto. Incluyen algunos metadatos predeterminados, como la
fecha de la última modificación y los metadatos HTTP estándar, como Content-Type. También puede
especificar metadatos personalizados en el momento en que se almacena el objeto.
Un objeto se identifica de forma exclusiva dentro de un bucket con una clave (nombre) y un ID de versión.
Para obtener más información, consulte Claves (p. 3) y Uso del control de versiones (p. 449).
Claves
Una clave es el identificador único de un objeto dentro de un bucket. Cada objeto de un bucket tiene
exactamente una clave. La combinación de un bucket, clave e ID de versión identifican de forma única
cada objeto. Por tanto, puede pensar en Amazon S3 como asignación de datos básica entre «bucket +
clave + versión» y el objeto en sí. A cada objeto de Amazon S3 se puede acceder de forma exclusiva
a través de la combinación de punto de enlace de servicio web, nombre del bucket, clave, y en forma
Para obtener más información acerca de las claves de objeto, consulte Claves de objeto.
Regiones
Puede elegir la región geográfica de AWS donde Amazon S3 almacenará los buckets que usted crea.
Puede elegir una región para optimizar la latencia, minimizar los costos o cumplir con requisitos legales.
Los objetos almacenados en una región nunca la abandonan, a menos que se transfieran expresamente a
otra región. Por ejemplo, los objetos almacenados en la región UE (Irlanda) permanecen siempre en ella.
Note
Solo puede tener acceso a Amazon S3 y sus características en las regiones de AWS que están
habilitadas para su cuenta.
Para ver una lista de las regiones y los puntos de enlace de Amazon S3, consulte Regiones y puntos de
enlace en la Referencia general de AWS.
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
En la siguiente tabla se describen las características de la lectura consistente final y la lectura consistente.
Aplicaciones simultáneas
En esta sección se brindan ejemplos de solicitudes de lectura consistente final y lectura consistente
cuando varios clientes escriben a los mismos elementos.
En este ejemplo, tanto W1 (escritura 1) como W2 (escritura 2) se completan antes del inicio de R1 (lectura
1) y R2 (lectura 2). Para una lectura consistente, R1 y R2 devuelven color = ruby. En una lectura
consistente final, R1 y R2 podrían devolver color = red o color = ruby, en función del tiempo
transcurrido.
En el siguiente ejemplo, W2 no se completa antes del inicio de R1. Por lo tanto, R1 puede devolver color
= ruby o color = garnet para una lectura consistente o una lectura consistente final. Además,
según la cantidad de tiempo transcurrido, es posible que una lectura consistente final no devuelva ningún
resultado.
Para una lectura consistente, R2 devuelve color = garnet. En una lectura consistente final, R2 podría
devolver color = ruby o color = garnet, en función del tiempo transcurrido.
En el último ejemplo, el Cliente 2 realiza una W2 antes de que Amazon S3 devuelva un resultado exitoso
para la W1; por lo tanto, se desconoce el resultado del valor final (color = garnet o color = brick).
Todas las lecturas posteriores (lectura consistente o lectura consistente final) pueden devolver cualquiera
de los dos valores. Además, según la cantidad de tiempo transcurrido, es posible que una lectura
consistente final no devuelva ningún resultado.
Características de Amazon S3
En esta sección se describen las características principales de Amazon S3.
Temas
• Clases de almacenamiento (p. 6)
• Políticas de buckets (p. 6)
• AWS Identity and Access Management (IAM) (p. 7)
• Listas de control de acceso (p. 7)
• Control de versiones (p. 8)
• Operaciones (p. 8)
Clases de almacenamiento
Amazon S3 ofrece una gama de clases de almacenamiento diseñada para diferentes casos de uso.
Incluyen Amazon S3 STANDARD para almacenamiento general de los datos a los que se accede
frecuentemente, Amazon S3 STANDARD_IA para datos de duración prolongada a los que se obtiene
acceso con menos frecuencia y GLACIER para un archivado a largo plazo.
Para obtener más información, consulte Clases de almacenamiento de Amazon S3 (p. 110).
Políticas de buckets
Las políticas de buckets brindan control de acceso centralizado a los buckets y a los objetos en función
de una variedad de condiciones, como las operaciones de Amazon S3, los solicitantes, los recursos y los
aspectos de la solicitud (p. ej., la dirección IP). Las políticas se expresan en nuestro lenguaje de la política
de acceso y permiten la administración centralizada de los permisos. Los permisos asociados a un bucket
se aplican a todos los objetos de ese bucket.
Tanto las personas como las compañías pueden utilizar las políticas de buckets. Cuando las compañías
se registran en Amazon S3, estas crean una cuenta. A partir de entonces, la compañía se convierte en
sinónimo de cuenta. Las cuentas (y los empleados) son financieramente responsables de los recursos de
Amazon que crean. Las cuentas tienen la facultad de conceder permisos de política de buckets y asignar
permisos a empleados en función de diversas condiciones. Por ejemplo, una cuenta puede crear una
política que le brinde al usuario acceso de escritura:
• a un bucket de S3 en particular;
• desde una red corporativa de la cuenta;
• durante el horario comercial;
Una cuenta puede conceder acceso de lectura y escritura limitado a un usuario, pero también le permite
a otra crear y eliminar buckets. Una cuenta podría permitir que varias oficinas de campo almacenen sus
informes diarios en un único bucket. Podría permitir a cada oficina escribir solo en un determinado conjunto
de nombres (por ejemplo, "Nevada/*" o "Utah/*") y solo desde el rango de direcciones IP de la oficina.
A diferencia de las listas de control de acceso (descritas más adelante), que pueden añadir (conceder)
permisos solo a objetos individuales, las políticas pueden añadir o denegar permisos a todos los objetos
(o un subconjunto de ellos) de un bucket. Con una solicitud, una cuenta puede configurar permisos para
cualquier cantidad de objetos en un bucket. Una cuenta puede utilizar comodines (similar a operadores de
expresión normales) en nombres de recursos de Amazon (ARN) y otros valores. A continuación, la cuenta
podría controlar el acceso a grupos de objetos que empiezan por un prefijo común o terminan por una
expresión dada, como, por ejemplo, .html.
Solo el propietario del bucket puede asociar una política a un bucket. Las políticas (escritas en el lenguaje
de la política de acceso) permiten o deniegan solicitudes en función de lo siguiente:
• Operaciones de buckets de Amazon S3 (como PUT ?acl) y operaciones de objetos (como PUT
Object o GET Object)
• Solicitante
• Condiciones especificadas en la política
Una cuenta puede controlar el acceso en función de operaciones específicas de Amazon S3, como
GetObject, GetObjectVersion, DeleteObject o DeleteBucket.
Las condiciones pueden incluir direcciones IP, rangos de direcciones IP en notación CIDR, fechas, agentes
de usuario, origen de referencia y transportes de HTTP (HTTP y HTTPS).
Para obtener más información, consulte Uso de políticas de bucket y usuario (p. 353).
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.
Control de versiones
Puede usar el control de versiones para conservar diversas variantes de un objeto en el mismo bucket.
Para obtener más información, consulte Control de versiones de objetos (p. 115).
Operaciones
A continuación se describen las operaciones más comunes que ejecutará a través de la API.
Operaciones comunes
• Crear un bucket: cree y nombre su propio bucket para almacenar sus objetos.
• Escribir un objeto: cree o sobrescriba un objeto para almacenar datos. Cuando escribe un objeto, debe
especificar una clave única en el espacio de nombres de su bucket. Aquí también es cuando debe
especificar cualquier control de acceso que desea aplicar en el objeto.
• Leer un objeto: relea los datos. Puede descargar los datos a través de HTTP o BitTorrent.
• Eliminar un objeto: elimine algunos de sus datos.
• Enumerar claves: indique las claves incluidas en uno de sus buckets. Puede filtrar la lista de claves en
función de un prefijo.
Más adelante en esta guía se describen en detalles estas operaciones y todas las demás funcionalidades.
Amazon S3 brinda una interfaz de REST y una interfaz de SOAP. Estas son similares, pero hay algunas
diferencias. Por ejemplo en la interfaz de REST, los metadatos se devuelven en encabezados HTTP. Dado
que solo admitimos solicitudes HTTP de hasta 4 KB (sin incluir el cuerpo), la cantidad de metadatos que
puede aplicar es limitada.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
La interfaz de REST
La API de REST es un interfaz HTTP para Amazon S3. Con REST, usted puede utilizar solicitudes HTTP
estándar para crear, recuperar y eliminar buckets y objetos.
Puede utilizar cualquier conjunto de herramientas que admita HTTP para utilizar la API de REST. Incluso
puede utilizar un navegador para recuperar objetos, siempre y cuando se puedan leer de forma anónima.
La API de REST utiliza códigos de estado y encabezados HTTP estándar, para que los conjuntos de
herramientas y los navegadores estándar funcionen según lo previsto. En algunas áreas, hemos añadido
una funcionalidad al HTTP (por ejemplo, añadimos encabezados para admitir el control de acceso). En
estos casos, hicimos todo lo posible para añadir la nueva funcionalidad de manera que coincida con el
estilo del uso de HTTP estándar.
La interfaz de SOAP
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
La API de SOAP brinda una interfaz de SOAP 1.1 con codificación literal de documentos. La manera
más común de utilizar SOAP es descargar Web Services Description Language (WSDL, lenguaje de
descripción de servicios web) (consulte http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl), utilizar
un conjunto de herramientas de SOAP, como Apache Axis o Microsoft .NET, para crear enlaces y luego
escribir el código que utiliza los enlaces para llamar a Amazon S3.
Pago de Amazon S3
Los precios para Amazon S3 están diseñados de manera que no tiene que planificar los requisitos de
almacenamiento de su aplicación. La mayoría de los proveedores de almacenamiento lo obligan a comprar
una capacidad predeterminada de almacenamiento y transferencia de red: si excede esa capacidad, su
servicio se cancela o usted debe pagar cargos excesivos. Si no excede esa capacidad, paga como si la
hubiera utilizado toda.
Amazon S3 le cobra solo lo que realmente utiliza, sin costos ocultos ni cargos excesivos. Esto ofrece a los
desarrolladores un servicio de costo variable que puede crecer junto con la compañía mientras disfrutan
las ventajas económicas de la infraestructura de AWS.
Antes de almacenar algo en Amazon S3, debe registrarse en el servicio y proporcionar un método de pago
que se facturará al final de cada mes. No existe ningún costo de instalación para comenzar a utilizar este
servicio. Al final del mes, se le cobra automáticamente con el método de pago de acuerdo con el uso de
ese mes.
Para obtener información acerca del pago por el almacenamiento de Amazon S3, consulte Precios de
Amazon S3.
Servicios relacionados
Una vez que carga sus datos en Amazon S3, puede utilizarlos con otros servicios de AWS. Los siguientes
servicios son los que puede utilizar con más frecuencia:
• Amazon Elastic Compute Cloud: este servicio web proporciona recursos de computación virtual en la
nube. Para obtener más información, consulte la página de detalles del producto de Amazon EC2.
• Amazon EMR: este servicio permite a empresas, investigadores, analistas de datos y desarrolladores
procesar de forma fácil y rentable grandes volúmenes de datos. Utiliza un marco Hadoop hospedado
que se ejecuta en la infraestructura basada en la web de Amazon EC2 y Amazon S3. Para obtener más
información, consulte la página de detalles del producto de Amazon EMR.
• AWS Snowball: este servicio acelera la transferencia de grandes cantidades de datos desde y hacia
AWS mediante el uso de dispositivos de almacenamiento físicos, sin tener que pasar por Internet. Cada
tipo de dispositivo AWS Snowball puede transportar datos a velocidades superiores a las de Internet.
Para transportar los datos, estos se envían en los dispositivos a través de un transportista regional. Para
obtener más información, consulte la página de detalles del producto de AWS Snowball.
Realización de solicitudes
Temas
• Acerca de las claves de acceso (p. 10)
• Puntos de enlace de solicitud (p. 12)
• Realización de solicitudes a Amazon S3 mediante IPv6 (p. 12)
• Realización de solicitudes con los SDK de AWS (p. 19)
• Realización de solicitudes con la API de REST (p. 45)
Amazon S3 es un servicio de REST. Puede enviar solicitudes a Amazon S3 con la API REST o las
bibliotecas de encapsulamiento de los SDK de AWS (consulte Código de muestra y bibliotecas) que
incluyen la API de REST de Amazon S3 subyacente, lo que simplifica sus tareas de programación.
Toda interacción con Amazon S3 es autenticada o anónima. La autenticación es un proceso que permite
verificar la identidad del solicitante que intenta acceder a un producto de Amazon Web Services (AWS).
Las solicitudes autenticadas deben incluir un valor de firma que autentique al remitente de la solicitud. El
valor de firma, en parte, se genera a partir de las claves de acceso de AWS del solicitante (ID de clave
de acceso y clave de acceso secreta). Para obtener más información acerca de cómo obtener claves de
acceso, consulte ¿Cómo obtengo credenciales de seguridad? en la AWS General Reference
Si utiliza el SDK de AWS, las bibliotecas computan la firma a partir de las claves que usted proporciona.
Sin embargo, si realiza llamadas directas a la API de REST en su aplicación, debe escribir el código para
computar la firma y añadirla a la solicitud.
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.
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.
IAM proporciona la API de AWS Security Token Service para que pueda solicitar credenciales de
seguridad temporales. Para solicitar estas credenciales, puede utilizar la API de AWS STS o el SDK
de AWS. La API devuelve credenciales de seguridad temporales (ID de clave de acceso y clave de
acceso secreta) y un token de seguridad. Estas credenciales son válidas solo durante el tiempo que usted
especifica cuando las solicita. Usted utiliza el ID de clave de acceso y la clave secreta de la misma manera
que los utiliza cuando envía solicitudes con sus claves de acceso de usuario de IAM o cuenta de AWS.
Además, debe incluir el token en cada solicitud que envía a Amazon S3.
Un usuario de IAM puede solicitar estas credenciales de seguridad temporales para uso propio o puede
entregarlas a usuarios federados o aplicaciones. Cuando solicita credenciales de seguridad temporales
para usuarios federados, debe proporcionar un nombre de usuario y una política de IAM que defina los
permisos que desea asociar a estas credenciales de seguridad temporales. El usuario federado no puede
tener más permisos que el usuario de la cuenta principal de IAM que solicitó las credenciales temporales.
Puede utilizar estas credenciales de seguridad temporales para realizar solicitudes a Amazon S3. Las
bibliotecas de la API computan el valor de firma necesario con esas credenciales para autenticar su
solicitud. Si envía las solicitudes con las credenciales vencidas, Amazon S3 deniega la solicitud.
Para obtener información acerca de cómo firmar solicitudes con credenciales de seguridad temporales
en sus solicitudes de API de REST, consulte Firma y autenticación de solicitudes REST (p. 717).
Para obtener información acerca del envío de solicitudes con los SDK de AWS, consulte Realización de
solicitudes con los SDK de AWS (p. 19).
Para obtener más información acerca de asistencia de IAM sobre las credenciales de seguridad
temporales, consulte Credenciales de seguridad temporales en la Guía del usuario de IAM.
Para más seguridad, puede solicitar la Multifactor Authentication (MFA, Autenticación multifactor) cuando
accede a sus recursos de Amazon S3 mediante la configuración de una política de bucket. Para obtener
información, consulte Incorporación de una política de bucket para requerir MFA (p. 391). Después
de solicitar la MFA para acceder a sus recursos de Amazon S3, la única manera de acceder a estos
recursos es proporcionando credenciales temporales que se crean con una clave de MFA. Para obtener
más información, consulte la página de detalles de Autenticación multifactor de AWS y Configuración del
acceso a una API protegido por MFA en la Guía del usuario de IAM.
Temas
• Introducción a la realización de solicitudes en IPv6 (p. 12)
• Uso de direcciones IPv6 en políticas de IAM (p. 13)
• Prueba de compatibilidad de dirección IP (p. 14)
• Uso de los puntos de enlace de doble pila en Amazon S3 (p. 15)
A continuación se describen algunos puntos que debe tener en cuenta antes de intentar acceder a un
bucket mediante IPv6:
• El cliente y la red que acceden al bucket deben estar autorizados para utilizar IPv6.
• Se admiten tanto solicitudes de estilo alojamiento virtual como de tipo ruta para el acceso a IPv6. Para
obtener más información, consulte Puntos de enlace de doble pila en Amazon S3 (p. 15).
• Si utiliza el filtrado de dirección IP de origen en sus políticas de bucket o de usuario de AWS Identity and
Access Management (IAM), debe actualizar las políticas para incluir los rangos de direcciones IPv6. Para
obtener más información, consulte Uso de direcciones IPv6 en políticas de IAM (p. 13).
• Cuando utiliza IPv6, los archivos de registro de acceso al servidor producen direcciones IP en un formato
de IPv6. Debe actualizar el software, las herramientas y los scripts existentes que utiliza para analizar
archivos de registro de Amazon S3 para que puedan analizar las direcciones Remote IP con formato
de IPv6. Para obtener más información, consulte Formato de registro de acceso al servidor de Amazon
S3 (p. 680) y Registro de acceso al servidor de Amazon S3 (p. 674).
Note
Cuando utiliza la API de REST, accede directamente al punto de enlace de doble stack. Para obtener más
información, consulte Puntos de enlace de doble pila (p. 15).
Al usar la AWS Command Line Interface (AWS CLI) y los SDK de AWS, puede utilizar un parámetro o una
marca para cambiar a un punto de conexión de doble pila. También puede especificar el punto de conexión
de doble pila directamente como una anulación del punto de conexión de Amazon S3 en el archivo de
configuración.
Puede utilizar el punto de enlace de doble stack para acceder a un bucket mediante IPv6 desde cualquiera
de las siguientes opciones:
• La AWS CLI, consulte Uso de los puntos de enlace de doble pila desde la AWS CLI (p. 16).
• Los Software Development Kit (SDK, kits de desarrollo de software) de AWS, consulte Uso de los puntos
de enlace de doble pila desde los SDK de AWS (p. 16).
• La Application Programming Interface (API, Interfaz de programación de aplicaciones) de AWS, consulte
Realización de solicitudes a los puntos de enlace de doble pila con la API de REST (p. 46).
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/*",
"Condition": {
"IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
}
}
]
}
Puede modificar el elemento Condition de la política de buckets para permitir los rangos de direcciones
IPv4 (54.240.143.0/24) y IPv6 (2001:DB8:1234:5678::/64) como se muestra en el siguiente
ejemplo. Puede utilizar el mismo tipo de bloque Condition que se muestra en el ejemplo para actualizar
las políticas de bucket y de usuario de IAM.
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"54.240.143.0/24",
"2001:DB8:1234:5678::/64"
]
}
}
Antes de utilizar IPv6, debe actualizar todas las políticas de bucket y de usuario de IAM relevantes que
utilizan filtrado de direcciones IP para permitir los rangos de direcciones IPv6. Le recomendamos que
actualice sus políticas de IAM con los rangos de direcciones IPv6 de su organización además de los
rangos de direcciones IPv4 existentes. Para ver un ejemplo de una política de bucket que permite el
acceso a través de IPv6 y IPv4, consulte Restricción del acceso a direcciones IP específicas (p. 388).
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.
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
Temas
• Puntos de enlace de doble pila en Amazon S3 (p. 15)
• Uso de los puntos de enlace de doble pila desde la AWS CLI (p. 16)
• Uso de los puntos de enlace de doble pila desde los SDK de AWS (p. 16)
• Uso de los puntos de enlace de doble pila desde la API REST (p. 18)
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
bucketname.s3.dualstack.aws-region.amazonaws.com
• punto de conexión de doble pila de estilo de ruta:
s3.dualstack.aws-region.amazonaws.com/bucketname
Para obtener más información acerca de los estilos de denominación de los puntos de enlace, consulte
Acceso a un bucket (p. 57). Para ver una lista de los puntos de enlace de Amazon S3, consulte
Regiones y puntos de enlace en la AWS General Reference.
Important
Puede usar transfer acceleration con los puntos de enlace de doble pila. Para obtener más
información, consulte Introducción a Aceleración de transferencia de Amazon S3 (p. 77).
Al usar la AWS Command Line Interface (AWS CLI) y los SDK de AWS, puede utilizar un parámetro o una
marca para cambiar a un punto de conexión de doble pila. También puede especificar el punto de conexión
de doble pila directamente como una anulación del punto de conexión de Amazon S3 en el archivo de
configuración. En las secciones siguientes se describe cómo utilizar los puntos de enlace de doble pila
desde la AWS CLI y desde los AWS SDK.
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.
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.
• Puede configurar perfiles separados en su archivo de AWS Config. Por ejemplo, puede crear
un perfil que configure use_dualstack_endpoint como true y un perfil que no configure
use_dualstack_endpoint. Al ejecutar un comando, especifique qué perfil quiere usar, en función de
si quiere usar el punto de conexión de doble pila o no.
Note
Por el momento, al usar la AWS CLI no podrá utilizar la transfer acceleration con puntos de enlace
de doble pila. Sin embargo, pronto ofreceremos compatibilidad con la CLI de AWS. Para obtener
más información, consulte Uso de Transfer Acceleration desde la AWS Command Line Interface
(AWS CLI) (p. 80).
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. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
try {
// Create an Amazon S3 client with dual-stack endpoints enabled.
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.withDualstackEnabled(true)
.build();
s3Client.listObjects(bucketName);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Si está utilizando AWS SDK for Java en Windows, puede que tenga que configurar adecuadamente la
siguiente propiedad de la máquina virtual Java (JVM):
java.net.preferIPv6Addresses=true
Ejemplo de punto de enlace de doble pila con el AWS SDK para .NET
Al usar el AWS SDK para .NET, puede usar la clase de AmazonS3Config para habilitar el uso de un
punto de conexión de doble pila, como se muestra en el siguiente ejemplo.
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class DualStackEndpointTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
Para ver una muestra completa en .NET para enumerar objetos, consulte Lista de claves con AWS SDK
para .NET (p. 234).
Para obtener información acerca de cómo crear y probar una muestra funcional en .NET, consulte
Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).
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.
Temas
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS: AWS SDK
for Java (p. 20)
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS: AWS SDK
para .NET (p. 21)
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS: AWS SDK
para PHP (p. 23)
• Realización de solicitudes con las credenciales de usuario de IAM o de una cuenta de AWS: AWS SDK
parar Ruby (p. 24)
Cada uno de estos SDK de AWS utiliza una cadena de proveedores de credenciales específica del SDK
para encontrar y utilizar las credenciales, y realizar acciones en nombre del propietario de las credenciales.
Todas estas cadenas de proveedores de credenciales tienen en común que todas buscan el archivo de
credenciales local de AWS.
La forma más sencilla de configurar credenciales para los SDK de AWS es utilizar un archivo de
credenciales de AWS. Si utiliza la AWS Command Line Interface (AWS CLI), es posible que ya tenga
configurado un archivo local de credenciales de AWS. De lo contrario, utilice el siguiente procedimiento
para configurar un archivo de credenciales:
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
%HOMEPATH%\.aws
[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key
El archivo de credenciales compartidas ahora está configurado en el equipo local y está listo para su uso
con los SDK de AWS.
En el siguiente ejemplo se realizan las tareas anteriores. Para obtener información acerca de cómo crear y
probar una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).
Example
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.io.IOException;
import java.util.List;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
En el siguiente ejemplo de código C# se muestra cómo realizar las tareas anteriores. Para obtener
información acerca de cómo ejecutar los ejemplos de .NET que aparecen en esta guía y para ver
cómo almacenar sus credenciales en un archivo de configuración, consulte Ejecución de ejemplos de
código .NET de Amazon S3 (p. 708).
Example
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class MakeS3RequestTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
Note
Puede crear el cliente AmazonS3Client sin facilitar sus credenciales de seguridad. Las
solicitudes enviadas con este cliente son solicitudes anónimas y no tienen firma. Amazon
S3 devuelve un error si envía solicitudes anónimas para un recurso que no esté disponible
públicamente.
Para ver ejemplos funcionales, consulte Trabajo con objetos de Amazon S3 (p. 104) y Uso de buckets de
Amazon S3 (p. 54). Puede probar estos ejemplos con su cuenta de AWS o con credenciales de usuario
de IAM.
Por ejemplo, para enumerar todas las claves de objetos de su bucket, consulte Lista de claves con AWS
SDK para .NET (p. 234).
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
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;
try {
// Retrieve a paginator for listing objects.
$objects = $s3->getPaginator('ListObjects', [
'Bucket' => $bucket
]);
Note
Puede crear el cliente S3Client sin facilitar sus credenciales de seguridad. Las solicitudes
enviadas con este cliente son solicitudes anónimas y no tienen firma. Amazon S3 devuelve un
error si envía solicitudes anónimas para un recurso que no esté disponible públicamente.
Para ver ejemplos funcionales, consulte Operaciones en objetos (p. 172). Puede probar estos ejemplos
con su cuenta de AWS o con credenciales de usuario de IAM.
Para ver un ejemplo de enumeración de claves de objetos en un bucket, consulte Lista de claves con AWS
SDK para PHP (p. 235).
Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Documentación de AWS SDK para PHP
Example
# Use the Amazon S3 modularized gem for version 3 of the AWS Ruby SDK.
require 'aws-sdk-s3'
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.
# Use the Amazon S3 modularized gem for version 3 of the AWS Ruby SDK.
require 'aws-sdk-s3'
if ARGV.length > 1
bucket_name = ARGV[1]
else
exit 1
end
case operation
when 'list'
if bucket.exists?
# Enumerate the bucket contents and object etags.
puts "Contents of '%s':" % bucket_name
bucket.objects.limit(50).each do |obj|
puts " #{obj.key} => #{obj.etag}"
end
else
puts "The bucket '%s' does not exist!" % bucket_name
end
else
puts "Unknown operation: '%s'! Only list is supported." % operation
end
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.
Note
En el siguiente ejemplo se muestra un conjunto de claves de objeto del bucket especificado. En el ejemplo
se obtienen credenciales de seguridad temporales para una sesión de dos horas y se utilizan para enviar
una solicitud autenticada a Amazon S3.
Si desea probar el ejemplo con las credenciales del usuario de IAM, tendrá que crear un usuario de IAM
en su cuenta de AWS. Para obtener más información acerca de cómo crear un usuario de IAM, consulte
Creación del primer grupo de usuarios y administradores de IAM en la Guía del usuario de IAM.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.securitytoken.AWSSecurityTokenService;
import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder;
import com.amazonaws.services.securitytoken.model.Credentials;
import com.amazonaws.services.securitytoken.model.GetSessionTokenRequest;
import com.amazonaws.services.securitytoken.model.GetSessionTokenResult;
try {
// Creating the STS client is part of your trusted code. It has
// the security credentials you use to obtain temporary security credentials.
AWSSecurityTokenService stsClient =
AWSSecurityTokenServiceClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Start a session.
GetSessionTokenRequest getSessionTokenRequest = new
GetSessionTokenRequest().withDurationSeconds(7200);
// The duration can be set to more than 3600 seconds only if temporary
// credentials are requested by an IAM user rather than an account owner.
GetSessionTokenResult sessionTokenResult =
stsClient.getSessionToken(getSessionTokenRequest);
Credentials sessionCredentials = sessionTokenResult
.getCredentials()
.withSessionToken(sessionTokenResult.getCredentials().getSessionToken())
.withExpiration(sessionTokenResult.getCredentials().getExpiration());
// Verify that getting the session token worked and the permissions are set
correctly
// by getting a set of object keys from the bucket.
ObjectListing objects = s3Client.listObjects(bucketName);
System.out.println("No. of Objects: " + objects.getObjectSummaries().size());
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
Note
En el siguiente ejemplo de código C# se muestran las claves de objeto del bucket especificado. A modo
de ilustración, en el ejemplo se obtienen las credenciales de seguridad temporales para una sesión
predeterminada de una hora y se utilizan para enviar una solicitud autenticada a Amazon S3.
Si desea probar el ejemplo con las credenciales del usuario de IAM, tiene que crear un usuario de
IAM en su cuenta de AWS. Para obtener más información acerca de cómo crear un usuario de IAM,
consulte Creación del primer grupo de usuarios y administradores de IAM en la Guía del usuario de
IAM. Para obtener más información acerca de la realización de solicitudes, consulte Realización de
solicitudes (p. 10).
Para obtener instrucciones sobre la creación y comprobación de un ejemplo funcional, consulte Ejecución
de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class TempCredExplicitSessionStartTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
public static void Main()
{
ListObjectsAsync().Wait();
}
GetSessionTokenResponse sessionTokenResponse =
await stsClient.GetSessionTokenAsync(getSessionTokenRequest);
var sessionCredentials =
new SessionAWSCredentials(credentials.AccessKeyId,
credentials.SecretAccessKey,
credentials.SessionToken);
return sessionCredentials;
}
}
}
}
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
Tanto un usuario de IAM como una cuenta de AWS pueden solicitar credenciales de seguridad temporales
mediante la versión 3 de AWS SDK para PHP. A continuación, puede usar las credenciales temporales
para acceder a Amazon S3. Las credenciales caducan cuando finaliza la duración de la sesión. De forma
predeterminada, la sesión durará una hora. Si utiliza las credenciales de usuario de IAM, puede especificar
la duración (entre 1 y 36 horas), cuando solicita las credenciales de seguridad temporales. Para obtener
más información acerca de las credenciales de seguridad temporales, consulte Credenciales de seguridad
temporales en la Guía del usuario de IAM. Para obtener más información acerca de la realización de
solicitudes, consulte Realización de solicitudes (p. 10).
Note
Example
En el siguiente ejemplo de PHP se muestran las claves de objeto del bucket especificado con las
credenciales de seguridad temporales. En el ejemplo se obtienen credenciales de seguridad temporales
para una sesión predeterminada de una hora y se utilizan para enviar una solicitud autenticada a Amazon
S3. Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución
de ejemplos de PHP (p. 709).
Si desea probar el ejemplo con las credenciales del usuario de IAM, tiene que crear un usuario de IAM en
su cuenta de AWS. Para obtener información acerca de cómo crear un usuario de IAM, consulte Creación
del primer grupo de usuarios y administradores de IAM en la Guía del usuario de IAM. Para obtener un
ejemplo de configuración de la duración de la sesión utilizando las credenciales de usuario de IAM para
solicitar una sesión, consulte Realización de solicitudes con credenciales temporales de usuario federado -
AWS SDK para PHP (p. 40).
require 'vendor/autoload.php';
use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
$sessionToken = $sts->getSessionToken();
$result = $s3->listBuckets();
try {
// Retrieve a paginator for listing objects.
$objects = $s3->getPaginator('ListObjects', [
'Bucket' => $bucket
]);
// 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
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.
require 'aws-sdk-core'
require 'aws-sdk-s3'
require 'aws-sdk-iam'
USAGE = <<DOC
Assumes a role for USER to list items in BUCKET for one hour.
DOC
def print_debug(debug, s)
if debug
puts s
end
end
user
end
# main
region = 'us-west-2'
user_name = ''
bucket_name = ''
i = 0
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 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"
)
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
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.
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:
Example
En el siguiente ejemplo se enumeran las claves del bucket de S3 especificado. En el ejemplo obtiene las
credenciales de seguridad temporales para una sesión de dos horas para su usuario federado y utiliza
las credenciales para enviar solicitudes autenticadas a Amazon S3. Para ejecutar el ejemplo, debe crear
un usuario de IAM con una política asociada que permita al usuario solicitar credenciales de seguridad
temporales y generar una lista de sus recursos de AWS. La siguiente política lo cumple:
{
"Statement":[{
"Action":["s3:ListBucket",
"sts:GetFederationToken*"
],
"Effect":"Allow",
"Resource":"*"
}
]
}
Para obtener más información acerca de cómo crear un usuario de IAM, consulte Creación del primer
grupo de usuarios y administradores de IAM en la Guía del usuario de IAM.
Después de crear un usuario de IAM y asociarle la política anterior, puede ejecutar el ejemplo siguiente.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicSessionCredentials;
import com.amazonaws.auth.policy.Policy;
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;
try {
AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder
.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
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.
• Cree una instancia del cliente de AWS Security Token Service, clase
AmazonSecurityTokenServiceClient. Para obtener información acerca de cómo proporcionar las
credenciales, consulte Uso del AWS SDK para .NET (p. 706).
• Inicie sesión utilizando el método GetFederationToken del cliente STS. Tiene que proporcionar
información acerca de la sesión, como el nombre de usuario y una política de IAM que desee adjuntar a
las credenciales temporales. También tiene la posibilidad de proporcionar una duración de sesión. Este
método devuelve sus credenciales de seguridad temporales.
• Empaquete las credenciales de seguridad temporales en una instancia del objeto
SessionAWSCredentials. Utilice este objeto para proporcionar las credenciales de seguridad
temporales al cliente de Amazon S3.
• Cree una instancia de la clase AmazonS3Client proporcionando las credenciales de seguridad
temporales. Use este cliente para enviar solicitudes a Amazon S3. Si envía las solicitudes con las
credenciales vencidas, Amazon S3 devolverá un error.
Example
En el siguiente ejemplo de C# se enumeran las claves del bucket especificado. En el ejemplo se obtienen
las credenciales de seguridad temporales para una sesión de dos horas para el usuario federado (User1) y
se utilizan las credenciales para enviar solicitudes autenticadas a Amazon S3.
• Para este ejercicio cree un usuario de IAM con permisos mínimos. Con las credenciales de este usuario
de IAM solicite credenciales temporales para otros usuarios. Este ejemplo solo enumera los objetos de
un bucket específico. Cree un usuario de IAM con la siguiente política asociada:
{
"Statement":[{
"Action":["s3:ListBucket",
"sts:GetFederationToken*"
],
"Effect":"Allow",
"Resource":"*"
}
]
}
La política permite al usuario de IAM solicitar las credenciales de seguridad temporales y el permiso de
acceso para mostrar solo sus recursos de AWS. Para obtener más información acerca de cómo crear un
usuario de IAM, consulte Creación del primer grupo de usuarios y administradores de IAM en la Guía del
usuario de IAM.
• Use las credenciales de seguridad del usuario de IAM para probar el siguiente ejemplo. En el ejemplo
se envía una solicitud autenticada a Amazon S3 con las credenciales de seguridad temporales. En el
ejemplo se especifica la siguiente política cuando se solicitan las credenciales de seguridad temporales
para el usuario federado (User1), que restringe el acceso para mostrar los objetos de un bucket
específico (YourBucketName). Debe actualizar la política y proporcionar su propio nombre de bucket
existente.
{
"Statement":[
{
"Sid":"1",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":"arn:aws:s3:::YourBucketName"
}
]
}
• Example
Actualice la siguiente muestra y proporcione el nombre de bucket que especificó en la política de acceso
del usuario federado anterior. Para obtener instrucciones acerca de cómo crear y probar un ejemplo
funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using Amazon.SecurityToken;
using Amazon.SecurityToken.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class TempFederatedCredentialsTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
GetFederationTokenRequest federationTokenRequest =
new GetFederationTokenRequest();
federationTokenRequest.DurationSeconds = 7200;
federationTokenRequest.Name = "User1";
federationTokenRequest.Policy = @"{
""Statement"":
[
{
""Sid"":""Stmt1311212314284"",
""Action"":[""s3:ListBucket""],
""Effect"":""Allow"",
""Resource"":""arn:aws:s3:::" + bucketName + @"""
}
]
}
";
GetFederationTokenResponse federationTokenResponse =
await stsClient.GetFederationTokenAsync(federationTokenRequest);
Credentials credentials = federationTokenResponse.Credentials;
SessionAWSCredentials sessionCredentials =
new SessionAWSCredentials(credentials.AccessKeyId,
credentials.SecretAccessKey,
credentials.SessionToken);
return sessionCredentials;
}
}
}
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
Puede proporcionar credenciales de seguridad temporales a sus usuarios federados y aplicaciones para
que puedan enviar solicitudes autenticadas para obtener acceso a sus recursos de AWS. Al solicitar estas
credenciales temporales, debe proporcionar un nombre de usuario y una política de IAM que describa los
permisos de recursos que desea otorgar. Estas credenciales caducan cuando finaliza la duración de la
sesión. De forma predeterminada, la sesión durará una hora. Puede solicitar las credenciales de seguridad
temporales para usuarios federados y aplicaciones para establecer explícitamente otro valor para la
duración. Para obtener más información acerca de las credenciales de seguridad temporales, consulte
Credenciales de seguridad temporales en la Guía del usuario de IAM. Para obtener más información sobre
cómo proporcionar credenciales de seguridad temporales a sus usuarios federados y sus aplicaciones,
consulte Realización de solicitudes (p. 10).
Para mayor seguridad, cuando solicite las credenciales de seguridad temporales para usuarios federados
y aplicaciones, recomendamos que use un usuario de IAM específico que solo tenga los permisos de
acceso necesarios El usuario temporal creado nunca puede obtener más permisos que el usuario de IAM
que solicitó las credenciales de seguridad temporales. Para obtener información acerca de la identidad
federada, consulte Preguntas frecuentes sobre AWS IAM.
Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución de
ejemplos de PHP (p. 709).
Example
En el siguiente ejemplo de PHP se enumeran las claves del bucket especificado. En el ejemplo se obtienen
las credenciales de seguridad temporales para una sesión de una hora para el usuario federado (User1). A
continuación, use las credenciales de seguridad temporales para enviar solicitudes autenticadas a Amazon
S3.
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"
}
]
}
require 'vendor/autoload.php';
use Aws\Sts\StsClient;
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
// 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']
);
$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.
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
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
Creates a federated policy for USER to list items in BUCKET for one hour.
DOC
def print_debug(debug, s)
if debug
puts s
end
end
user
end
# main
region = 'us-west-2'
user_name = ''
bucket_name = ''
i = 0
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
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}\"}]}",
})
begin
s3.bucket(bucket_name).objects.limit(50).each do |obj|
puts " #{obj.key} => #{obj.etag}"
end
rescue StandardError => ex
puts 'Caught exception accessing bucket ' + bucket_name + ':'
puts ex.message
end
Temas
• Realización de solicitudes a los puntos de enlace de doble pila con la API de REST (p. 46)
• Alojamiento virtual de buckets (p. 46)
• Solicitud de redireccionamiento y la API de REST (p. 51)
Cuando realiza solicitudes con la API de REST, puede utilizar los URI de tipo alojamiento virtual o tipo
ruta para los puntos de enlace de Amazon S3. Para obtener más información, consulte Uso de buckets de
Amazon S3 (p. 54).
Actualmente Amazon S3 admite acceso de estilo alojado y de ruta en todas las regiones, pero esto irá
cambiando (consulte la siguiente nota Importante). La sintaxis estilo ruta requiere que use el punto de
enlace específico de la región cuando intenta el acceso al bucket. Por ejemplo, si tiene un bucket llamado
mybucket que reside en la región UE (Irlanda), le interesa utilizar la sintaxis estilo ruta y el objeto se llama
puppy.jpg, el URI correcto es http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg.
Recibirá un código de respuesta HTTP 307 error de redireccionamiento temporal y un mensaje en el que
se indica el URI correcto del recurso si intenta obtener acceso a un bucket fuera de la región EE. UU. Este
(N. Virginia) con la misma sintaxis estilo ruta que usa uno de lo siguiente:
• http://s3.amazonaws.com
• un punto de enlace para una región diferente de la región donde reside el bucket. Por ejemplo, si utiliza
http://s3-us-west-1.amazonaws.com para un bucket creado en la región EE.UU. Oeste (Norte de
California).
Important
Los buckets creados después del 30 de septiembre de 2020 solo admitirán solicitudes virtuales
de estilo alojado. Las solicitudes de estilo de ruta seguirán siendo compatibles para con los
buckets creados en esta fecha y antes de ella. Para más información, consulte Amazon S3 Path
Deprecation Plan – The Rest of the Story.
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.
O bien, puede utilizar un punto de enlace de tipo ruta en su solicitud como se muestra en el siguiente
ejemplo.
Para obtener más información acerca de los puntos de enlace de doble pila, consulte Uso de los puntos de
enlace de doble pila en Amazon S3 (p. 15).
En general, el alojamiento virtual es la práctica que consiste en distribuir múltiples sitios web desde un
solo servidor web. Una manera de diferenciar sitios es mediante el uso del nombre de host aparente de la
solicitud en lugar de solo la parte del nombre de la ruta del URI. Para especificar un bucket, una solicitud
REST de Amazon S3 normal utiliza el primer componente delimitado por una barra inclinada de la ruta
del URI de la solicitud. También puede utilizar el alojamiento virtual de Amazon S3 para hacer referencia
a un bucket en una llamada a la API de REST mediante el encabezado Host de HTTP. En la práctica,
Amazon S3 interpreta que Host significa que es posible acceder a la mayoría de los buckets de manera
automática (para tipos limitados de solicitudes) en http://bucketname.s3.amazonaws.com. Además,
al nombrar su bucket según su nombre de dominio registrado y al convertir ese nombre en un alias de DNS
para Amazon S3, puede personalizar completamente la URL de sus recursos de Amazon S3, por ejemplo,
http://my.bucketname.com/.
Además del atractivo de los URL personalizados, un segundo beneficio del alojamiento virtual es la
capacidad de publicar al “directorio raíz” del servidor virtual de su bucket. Esta capacidad puede ser
importante ya que varias aplicaciones existentes buscan archivos en esta ubicación estándar. Por ejemplo,
favicon.ico, robots.txt y crossdomain.xml se encuentran en la raíz.
Actualmente Amazon S3 admite acceso de estilo alojado y de ruta en todas las regiones, pero esto irá
cambiando (consulte la siguiente nota Importante). La sintaxis estilo ruta requiere que use el punto de
enlace específico de la región cuando intenta el acceso al bucket. Por ejemplo, si tiene un bucket llamado
mybucket que reside en la región UE (Irlanda), le interesa utilizar la sintaxis estilo ruta y el objeto se llama
puppy.jpg, el URI correcto es http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg.
Recibirá un código de respuesta HTTP 307 error de redireccionamiento temporal y un mensaje en el que
se indica el URI correcto del recurso si intenta obtener acceso a un bucket fuera de la región EE. UU. Este
(N. Virginia) con la misma sintaxis estilo ruta que usa uno de lo siguiente:
• http://s3.amazonaws.com
• un punto de enlace para una región diferente de la región donde reside el bucket. Por ejemplo, si utiliza
http://s3-us-west-1.amazonaws.com para un bucket creado en la región EE.UU. Oeste (Norte de
California).
Important
Los buckets creados después del 30 de septiembre de 2020 solo admitirán solicitudes virtuales
de estilo alojado. Las solicitudes de estilo de ruta seguirán siendo compatibles para con los
buckets creados en esta fecha y antes de ella. Para más información, consulte Amazon S3 Path
Deprecation Plan – The Rest of the Story.
Si utiliza el punto de enlace EE.UU. Este (Norte de Virginia) (s3.amazonaws.com), en lugar del punto de
enlace específico de la región (por ejemplo, s3-us-west-1.amazonaws.com), Amazon S3 direcciona
cualquier solicitud de tipo alojamiento virtual a la región EE.UU. Este (Norte de Virginia) de forma
predeterminada. Cuando se crea un bucket en cualquier región lanzada hasta el 20 de marzo de 2019,
Amazon S3 actualiza el DNS para redirigir la solicitud a la ubicación correcta, lo que puede llevar algo
de tiempo. Mientras tanto, se aplica la regla predeterminada y la solicitud de tipo alojamiento virtual
se dirige a la región de EE.UU. Este (Norte de Virginia). A continuación, Amazon S3 la redirige con el
redireccionamiento HTTP 307 a la región correcta.
Para los buckets de S3 de regiones lanzadas después del 20 de marzo de 2019, el DNS no enruta la
solicitud directamente a la región de AWS en la que reside el bucket. En su lugar, devuelve un error de
solicitud errónea HTTP 400.
Para obtener más información, consulte Solicitudes de redireccionamiento en la API REST (p. 623).
Al usar buckets de tipo alojamiento virtual con SSL, el certificado comodín de SSL solo coincide con
los buckets que no contienen puntos. Para solucionar esto, use HTTP o escriba su propia lógica de
verificación de certificado.
Ejemplos
En esta sección se proporcionan ejemplos de URL y solicitudes.
El URL es el siguiente:
http://s3.amazonaws.com/johnsmith.net/homepage.html
La solicitud es la siguiente:
La solicitud con HTTP 1.0 y la omisión del encabezado de host son los siguientes:
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).
El URL es el siguiente:
http://johnsmith.net.s3.amazonaws.com/homepage.html
La solicitud es la siguiente:
El método de tipo alojamiento virtual requiere que el nombre de bucket sea compatible con el DNS.
Example Método de tipo alojamiento virtual para un bucket en una región distinta de EE.UU. Este
(Norte de Virginia)
En este ejemplo, se utiliza johnsmith.eu como nombre del bucket en la región UE (Irlanda) y
homepage.html como nombre de la clave.
El URL es el siguiente:
http://johnsmith.eu.s3-eu-west-1.amazonaws.com/homepage.html
La solicitud es la siguiente:
En lugar de utilizar el punto de enlace específico de la región, también puede utilizar el punto de enlace
de la región EE. UU. Este (Norte de Virginia), independientemente de la región en la que se encuentre el
bucket.
http://johnsmith.eu.s3.amazonaws.com/homepage.html
La solicitud es la siguiente:
El URL es el siguiente:
http://www.johnsmith.net/homepage.html
El ejemplo es el siguiente:
El nombre del bucket debe ser el mismo que el CNAME. Por lo tanto,
http://images.johnsmith.net/filename sería lo mismo que http://
images.johnsmith.net.s3.amazonaws.com/filename si se creara un CNAME para asignar
images.johnsmith.net a images.johnsmith.net.s3.amazonaws.com.
Cualquier bucket con un nombre compatible con el DNS se puede denominar de la siguiente
manera: http://[BucketName].s3.amazonaws.com/[Filename], por ejemplo, http://
El registro CNAME de DNS debe usar el nombre de host de tipo alojamiento virtual
adecuado como alias de su nombre de dominio. Por ejemplo, si su nombre de bucket
y nombre de dominio son images.johnsmith.net, el registro de CNAME debe usar
images.johnsmith.net.s3.amazonaws.com como alias.
Amazon S3 utiliza el nombre de host para determinar el nombre del bucket. Por ejemplo, suponga que
configuró www.example.com como un CNAME para www.example.com.s3.amazonaws.com. Cuando
accede a http://www.example.com, Amazon S3 recibe una solicitud similar a la siguiente:
Example
GET / HTTP/1.1
Host: www.example.com
Date: date
Authorization: signatureValue
Amazon S3 solo ve el nombre de host original www.example.com y desconoce el mapeo de CNAME que
se utiliza para resolver la solicitud. Por tanto, el nombre del bucket debe ser el mismo que el CNAME.
Se puede utilizar cualquier punto de enlace de Amazon S3 en un CNAME. Por ejemplo, se puede utilizar
s3-ap-southeast-1.amazonaws.com en los CNAME. Para obtener más información acerca de los
puntos de enlace, consulte Puntos de enlace de solicitud (p. 12).
1. Seleccione un nombre de host que pertenezca a un domino que usted controla. En este ejemplo se
utiliza el subdominio images del dominio johnsmith.net.
2. Cree un bucket que coincida con el nombre de host. En este ejemplo, los nombres de host y de bucket
son images.johnsmith.net.
Note
Limitaciones
Las URL de host virtuales solo son compatibles con solicitudes no SSL (HTTP).
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
En esta sección se describe cómo administrar el redireccionamiento HTTP mediante la API REST de
Amazon S3. Para obtener información general sobre el redireccionamiento en Amazon S3, consulte
Solicitudes de redireccionamiento en la API REST (p. 623) en la Amazon Simple Storage Service API
Reference.
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.
Content-Length: 6
Expect: 100-continue
Server: AmazonS3
El cliente sigue la respuesta de redireccionamiento y envía una nueva solicitud al punto de conexión
temporal quotes.s3-4c25d83b.amazonaws.com.
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.
ha ha\n
HTTP/1.1 200 OK
Date: Mon, 15 Oct 2007 22:18:48 GMT
ETag: "a2c8d6b872054293afd41061e93bc289"
Content-Length: 0
Server: AmazonS3
En términos de implementación, los buckets y objetos son recursos y Amazon S3 proporciona Application
Program Interfaces (API, Interfaces de programación de aplicaciones) para que pueda administrarlos.
Por ejemplo, puede crear un bucket y cargar objetos con la API de Amazon S3. También puede usar la
consola de Amazon S3 para realizar estas operaciones. La consola utiliza las API de Amazon S3 para
enviar solicitudes a Amazon S3.
En esta sección se explica cómo trabajar con buckets. Para obtener información acerca del uso de objetos,
consulte Trabajo con objetos de Amazon S3 (p. 104).
Un nombre de bucket de Amazon S3 es globalmente único y todas las cuentas de AWS comparten el
espacio de nombres. Esto significa que, una vez que se crea un bucket, ninguna otra cuenta de AWS
de ninguna otra región de AWS puede usar el nombre de ese bucket hasta que el bucket se elimina. No
debe confiar en convenciones específicas de nomenclatura de buckets para propósitos de verificación
de la seguridad o disponibilidad. Para conocer las directrices de nomenclatura de buckets, consulte
Restricciones y limitaciones de los buckets (p. 60).
Amazon S3 crea buckets en la región que usted especifique. Elija cualquier región de AWS que esté
geográficamente cerca de usted para optimizar la latencia, minimizar los costos o satisfacer los requisitos
reglamentarios. Por ejemplo, si vive en Europa, puede que le convenga crear los buckets en las regiones
UE (Irlanda) o UE (Fráncfort). Para obtener una lista de las regiones de Amazon S3, consulte Regiones y
puntos de enlace en la Referencia general de AWS.
Note
Los objetos que pertenecen a un bucket que se crea en una región de AWS específica
permanecen siempre en ella, a menos que se transfieran de manera explícita a otra región. Por
ejemplo, los objetos que están almacenados en la región UE (Irlanda) permanecen siempre en
ella.
Temas
• Creación de un bucket (p. 55)
• Administración del acceso público a los buckets (p. 56)
• Acceso a un bucket (p. 57)
• Opciones de configuración de buckets (p. 58)
• Restricciones y limitaciones de los buckets (p. 60)
• Ejemplos de creación de buckets (p. 61)
• Eliminación o vaciado de un bucket (p. 64)
• Cifrado predeterminado de Amazon S3 para los buckets de S3 (p. 69)
• Administración de la configuración de sitio web de un bucket (p. 72)
• Aceleración de transferencia de Amazon S3 (p. 76)
• Buckets de pago por solicitante (p. 83)
• Buckets y control de acceso (p. 87)
Creación de un bucket
Amazon S3 proporciona las API para crear y administrar buckets. De forma predeterminada, puede crear
hasta 100 buckets en cada una de sus cuentas de AWS. Si necesita más buckets, puede presentar una
solicitud de aumento del límite del servicio para aumentar el límite de buckets de la cuenta hasta un
máximo de 1000 buckets. Para obtener información acerca de cómo solicitar un aumento del límite de
buckets, consulte Límites de los servicios de AWS en la Referencia general de AWS.
Cuando crea un bucket, proporciona un nombre y la región de AWS donde desea crear el bucket. Para
obtener información acerca de la nomenclatura de los buckets, consulte Reglas para la nomenclatura de
buckets (p. 60).
• Mediante la consola
• Mediante programación, con los SDK de AWS
Note
Si lo necesita, también puede realizar las llamadas a la API REST de Amazon S3 directamente
desde su código. Sin embargo, esto puede ser engorroso porque debe escribir el código para
autenticar las solicitudes. Para obtener más información, consulte la sección sobre PUT Bucket
en la Amazon Simple Storage Service API Reference.
Si usa los SDK de AWS, primero crea un cliente y luego usa el cliente para enviar una solicitud de crear
un bucket. Cuando cree el cliente, puede especificar una región de AWS. US East (N. Virginia) es la
región predeterminada. Tenga en cuenta lo siguiente:
• Si usted especifica la región US East (N. Virginia) para crear un cliente, el cliente usa el siguiente
punto de enlace para comunicarse con Amazon S3:
s3.amazonaws.com
Note
• Puede usar este cliente para crear un bucket en cualquier región de AWS lanzada hasta el
20 de marzo de 2019. Para crear un bucket en las regiones que se lanzaron después del
20 de marzo de 2019, debe crear un cliente específico para la región en la que desea crear
el bucket. Para obtener más información sobre cómo habilitar y deshabilitar una región de
AWS, consulte Regiones y puntos de enlace de AWS en la AWS General Reference.
• Los buckets creados después del 30 de septiembre de 2020 solo admitirán solicitudes
virtuales de estilo alojado. Las solicitudes de estilo de ruta seguirán siendo compatibles
para con los buckets creados en esta fecha y antes de ella. Para más información, consulte
Amazon S3 Path Deprecation Plan – The Rest of the Story.
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
En este caso, puede usar el cliente para crear un bucket solo en la región eu-west-1. Amazon S3
devolverá un error si especifica cualquier otra región en su solicitud para crear un bucket.
• Si crea un cliente para obtener acceso a un punto de enlace de doble stack, debe especificar una
región de AWS. Para obtener más información, consulte Puntos de enlace de doble pila (p. 15).
Para ver una lista de las regiones de AWS disponibles, consulte Regiones y puntos de enlace en la AWS
General Reference.
Para obtener más información, consulte Credenciales de cuenta raíz y credenciales de usuario de IAM en
la Referencia general de AWS y Prácticas recomendadas de IAM en la Guía del usuario de IAM.
La cuenta de AWS que crea un recurso se convierte en la propietaria de dicho recurso. Por ejemplo, si
usted crea un usuario de IAM en su cuenta de AWS y le concede al usuario permiso para crear un bucket,
el usuario puede crear un bucket. Sin embargo, el usuario no es el propietario del bucket; la cuenta de
AWS a la que pertenece el usuario es la propietaria del bucket. El usuario necesita un permiso adicional
del propietario del recurso para realizar otras operaciones en el bucket. Para obtener más información
acerca de la administración de permisos para los recursos de Amazon S3, consulte Administración de
identidad y acceso en Amazon S3 (p. 312).
Para ayudar a garantizar que todos los buckets y objetos de Amazon S3 tienen su acceso público
bloqueado, se recomienda activar los cuatro ajustes de bloqueo de acceso público de la cuenta. Estos
ajustes bloquean el acceso público a todos los buckets actuales y futuros.
Antes de aplicar estos ajustes, verifique que sus aplicaciones funcionen correctamente sin acceso público.
Si necesita algún nivel de acceso público a los buckets u objetos, como, por ejemplo, con el fin de alojar un
sitio web estático, tal y como se describe en Alojamiento de un sitio web estático en Amazon S3 (p. 523),
puede personalizar los ajustes individuales para que se adapten a sus casos de uso de almacenamiento.
Para obtener más información, consulte Uso de Amazon S3 Block Public Access (p. 430).
Acceso a un bucket
Para obtener acceso a su bucket puede usar la consola de Amazon S3. Con la User Interface (UI, Interfaz
de usuario) de la consola, puede realizar prácticamente todas las operaciones en el bucket sin tener que
escribir ningún código.
Si obtiene acceso a un bucket mediante programación, tenga en cuenta que Amazon S3 admite la
arquitectura RESTful en la que los buckets y objetos son recursos, cada uno con un Uniform Resource
Identifier (URI, Identificador uniforme de recursos) mediante el cual se identifica específicamente el
recurso.
Amazon S3 admite URL tanto de tipo alojamiento virtual como de tipo ruta para obtener acceso a un
bucket.
• En una URL de tipo alojamiento virtual, el nombre del bucket forma parte del nombre del dominio en la
URL. Por ejemplo:
• http://bucket.s3-aws-region.amazonaws.com
• http://bucket.s3.amazonaws.com
Note
En una URL de tipo alojamiento virtual, puede usar cualquiera de estos puntos de enlace. Si hace una
solicitud al punto de enlace http://bucket.s3.amazonaws.com, el Domain Name System (DNS,
Sistema de nombres de dominio) tiene información suficiente para direccionar su solicitud directamente a
la región donde reside su bucket.
Para obtener más información, consulte Alojamiento virtual de buckets (p. 46).
• En una URL de tipo ruta, el nombre del bucket no forma parte del dominio. Por ejemplo:
• Punto de enlace específico de la región, http://s3-aws-region.amazonaws.com/bucket
• Punto de enlace de la región EE. UU. Este (Norte de Virginia), http://
s3.amazonaws.com/bucket
En un URL de tipo ruta, el punto de enlace que usa debe coincidir con la región en la que reside el
bucket. Por ejemplo, si su bucket está en la región América del Sur (São Paulo), debe usar el punto de
enlace http://s3.sa-east-1.amazonaws.com/bucket. Si su bucket está en la región EE. UU.
Este (Norte de Virginia), debe usar el punto de enlace http://s3.amazonaws.com/bucket.
Important
Debido a que se puede obtener acceso a los buckets mediante los URL de tipo ruta y alojamiento
virtual, le recomendamos crear buckets con nombres de buckets compatibles con DNS. Para
obtener más información, consulte Restricciones y limitaciones de los buckets (p. 60).
Amazon S3 tiene un conjunto de puntos de enlace de doble pila que admite solicitudes a los buckets de
S3 mediante Internet Protocol version 6 (IPv6) y mediante IPv4. Para obtener más información, consulte
Realización de solicitudes mediante IPv6 (p. 12).
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.
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.
Subrecurso Descripción
bloqueo de objetos Para usar el bloqueo de objetos de Amazon S3, debe habilitarlo para un bucket.
De manera opcional, puede configurar un modo y un periodo de retención
predeterminados para los nuevos objetos colocados en el bucket.
Para obtener más información, consulte Configuración del bucket (p. 475).
política y ACL Todos sus recursos (como buckets y objetos) son de carácter privado de forma
(lista de control de predeterminada. Amazon S3 admite opciones de política y lista de control de
acceso) acceso (ACL) de buckets para que conceda y administre los permisos a nivel del
bucket. Amazon S3 almacena la información de los permisos en los subrecursos
política y acl.
requestPayment De forma predeterminada, la cuenta de AWS que crea el bucket (el propietario del
bucket) paga las descargas realizadas desde el bucket. Mediante este subrecurso,
el propietario del bucket puede especificar que se le cobre la descarga a la
persona que la solicita. Amazon S3 proporciona una API para que administre este
subrecurso.
Para obtener más información, consulte Buckets de pago por solicitante (p. 83).
Para obtener más información, consulte Informes de facturación y de uso para los
buckets de S3 (p. 88).
aceleración de Transfer Acceleration permite transferir archivos de manera rápida, fácil y segura
transferencia entre su cliente y un bucket de S3 a larga distancia. Transfer Acceleration
aprovecha las ubicaciones de borde distribuidas globalmente de Amazon
CloudFront.
control de versiones EL control de versiones lo ayuda a recuperar objetos que se han sobrescrito y
eliminado accidentalmente.
Para obtener más información, consulte Uso del control de versiones (p. 449).
sitio web Puede configurar su bucket para el alojamiento de sitios web estáticos. Amazon
S3 almacena esta configuración creando un subrecurso sitio web.
No se puede transferir la titularidad de un bucket; sin embargo, si un bucket está vacío, lo puede eliminar.
Después de eliminar un bucket, el nombre se puede volver a utilizar, pero es posible que usted no pueda
volver a utilizarlo por varias razones. Por ejemplo, alguna otra cuenta pudo crear un bucket con ese
nombre. También tenga en cuenta que es posible que deba pasar algo de tiempo para que pueda volver a
usar el nombre. Entonces, si desea usar el mismo nombre de bucket, no elimine el bucket.
No hay ningún límite en la cantidad de objetos que se pueden almacenar en un bucket ni hay diferencia
de desempeño según la cantidad de buckets. Puede almacenar todos los objetos en un solo bucket u
organizarlos en varios buckets.
Important
La ingeniería de alta disponibilidad de Amazon S3 se centra en las operaciones GET, PUT, LIST y
DELETE. Debido a que las operaciones de los buckets funcionan en un espacio de recursos centralizados
y globales, no es apropiado crear o eliminar buckets en la ruta de códigos de alta disponibilidad de su
aplicación. Es mejor crear o eliminar buckets en una rutina de inicialización o configuración distinta que
ejecuta con menos frecuencia.
Note
A continuación, se muestran las reglas para los nombres de los buckets de S3 de todas las regiones de
AWS:
• Los nombres deben ser únicos entre todos los buckets existentes en Amazon S3.
• Los nombres de los buckets deben cumplir las convenciones de nomenclatura de DNS.
Anteriormente, la región US East (N. Virginia) permitía estándares menos rigurosos para la nomenclatura
de los buckets, lo que podía dar lugar a que el nombre del bucket no cumpliera con las convenciones
de DNS. Por ejemplo, MyAWSbucket era un nombre de bucket válido a pesar de que contiene letras
mayúsculas. Si intenta obtener acceso a este bucket mediante una solicitud de tipo alojamiento virtual
(http://MyAWSbucket.s3.amazonaws.com/yourobject), la URL resuelve el bucket myawsbucket
y no el bucket MyAWSbucket. Como respuesta, Amazon S3 devuelve el siguiente error: “no se encontró el
bucket”. Para obtener más información acerca del acceso de tipo alojamiento virtual a los buckets, consulte
Alojamiento virtual de buckets (p. 46).
Las reglas heredadas sobre los nombres de buckets de la región US East (N. Virginia) permitían que los
nombres de los buckets tuvieran como máximo 255 caracteres y pudieran estar formados por cualquier
combinación de letras mayúsculas, letras minúsculas, números, puntos (.), guiones (-) y caracteres de
subrayado (_).
El nombre del bucket que use para Aceleración de transferencia de Amazon S3 debe cumplir con las
convenciones del DNS y no debe contener puntos (“.”). Para obtener más información acerca de Transfer
Acceleration, consulte Aceleración de transferencia de Amazon S3 (p. 76).
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.
• 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.
Este ejemplo muestra cómo crear un bucket de Amazon S3 con AWS SDK for Java. Para obtener
instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de ejemplos de
código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CreateBucketRequest;
import com.amazonaws.services.s3.model.GetBucketLocationRequest;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
if (!s3Client.doesBucketExistV2(bucketName)) {
// Verify that the bucket was created by retrieving it and checking its
location.
String bucketLocation = s3Client.getBucketLocation(new
GetBucketLocationRequest(bucketName));
System.out.println("Bucket location: " + bucketLocation);
}
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
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();
}
Example
require 'aws-sdk-s3'
s3 = Aws::S3::Client.new(region: 'us-west-2')
s3.create_bucket(bucket: 'bucket-name')
Temas
• Eliminar un bucket (p. 65)
• Vaciado de un bucket (p. 67)
Eliminar un bucket
Puede eliminar un bucket y sus contenidos mediante programación con los SDK de AWS. También puede
usar la configuración del ciclo de vida de un bucket para vaciar su contenido y, a continuación, eliminar el
bucket. También hay otras opciones, como usar la consola de Amazon S3 y la CLI de AWS, pero existen
ciertos límites sobre estos métodos, en función del número de objetos que contenga su bucket y el estado
del control de versiones del mismo.
Para obtener más información, consulte Uso de comandos S3 de alto nivel con la AWS Command Line
Interface en la AWS Command Line Interface Guía del usuario.
Para eliminar un bucket que no esté vacío y no tenga habilitado el control de versiones, tiene las siguientes
opciones:
Si en su bucket se ha habilitado el control de versiones, también puede configurar la regla para que
provoque el vencimiento de objetos no actuales.
Después de que Amazon S3 elimina todos los objetos de su bucket, podrá eliminar el bucket o conservarlo.
Important
Para obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127) y
Configuración del vencimiento de objetos (p. 135).
En buckets sin control de versiones habilitado, puede eliminar todos los objetos directamente y
después eliminar el bucket. En buckets con control de versiones habilitado, debe eliminar todas
las versiones de objetos antes de eliminar el bucket.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.util.Iterator;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
if (versionList.isTruncated()) {
versionList = s3Client.listNextBatchOfVersions(versionList);
} else {
break;
}
}
// After all objects and object versions are deleted, delete the bucket.
s3Client.deleteBucket(bucketName);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client couldn't
// parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Vaciado de un bucket
Puede vaciar el contenido de un bucket (es decir, eliminar su contenido pero conservar el bucket) mediante
programación con el AWS SDK. También puede especificar la configuración del ciclo de vida de un bucket
para que provoque el vencimiento de objetos de modo que Amazon S3 pueda eliminarlos. También hay
otras opciones, como usar la consola de Amazon S3 y la AWS CLI, pero existen ciertos límites sobre este
método, en función del número de objetos que contenga su bucket y el estado del control de versiones del
mismo.
Temas
El siguiente comando rm elimina objetos con el prefijo de nombre de clave doc, por ejemplo, doc/doc1 y
doc/doc2.
Use el siguiente comando para eliminar todos los objetos sin especificar ningún prefijo.
Para obtener más información, consulte Uso de comandos S3 de alto nivel con la AWS Command Line
Interface en la AWS Command Line Interface Guía del usuario.
Note
No puede eliminar objetos de un bucket que tenga habilitado el control de versiones. Amazon S3
agregará un marcador de eliminación al eliminar un objeto, que es lo que hará este comando.
Para obtener más información sobre el control de versiones, consulte Uso del control de
versiones (p. 449).
Para vaciar un bucket que tenga habilitado el control de versiones, tiene las siguientes opciones:
Si en su bucket se ha habilitado el control de versiones, también puede configurar la regla para que
provoque el vencimiento de objetos no actuales.
Warning
Tras el vencimiento de los objetos, Amazon S3 elimina los objetos que hayan vencido. Si quiere
solamente vaciar el bucket y no eliminarlo, asegúrese de borrar la regla de configuración del ciclo
de vida que agregó para vaciar el bucket, de modo que los nuevos objetos que cree en el bucket
permanezcan en él.
Para obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127) y
Configuración del vencimiento de objetos (p. 135).
Si desea ver un ejemplo de cómo vaciar un bucket utilizando AWS SDK for Java, consulte Eliminar un
bucket con AWS SDK for Java (p. 66). Con este código eliminará todos los objetos, independientemente
de si el bucket tiene habilitado el control de versiones o no, y después se eliminará el bucket. Si quiere
limitarse a vaciar el bucket, asegúrese de eliminar la instrucción que provoca la eliminación del bucket.
Para obtener más información sobre el uso de otros SDK de AWS, consulte Herramientas para Amazon
Web Services
Cuando usa el cifrado de lado servidor, Amazon S3 cifra un objeto antes de guardarlo en el disco de su
centro de datos y lo descifra al descargarlo. Para obtener más información sobre cómo proteger los datos
mediante el cifrado de lado del servidor y la administración de claves de cifrado, consulte Protección de
datos con el cifrado del lado del servidor (p. 275).
El cifrado predeterminado funciona con todos los buckets de S3 nuevos y existentes. Sin el cifrado
predeterminado, para cifrar todos los objetos almacenados en un bucket, debe incluir la información de
cifrado con la solicitud de almacenamiento de cada objeto. Asimismo, debe configurar una política de
bucket de S3 para rechazar las solicitudes de almacenamiento que no incluyan información de cifrado.
No se aplican cargos adicionales por usar el cifrado predeterminado de buckets de S3. Las solicitudes
para configurar la característica de cifrado predeterminado incluyen cargos de solicitud de Amazon S3
estándar. Para obtener más información acerca de los precios, consulte Precios de Amazon S3. Para
el almacenamiento de claves de cifrado de SSE-KMS, se aplican los cargos de AWS Key Management
Service que se muestran en Precios de AWS KMS.
Temas
• ¿Cómo puedo configurar el cifrado predeterminado de Amazon S3 para un bucket de S3? (p. 70)
• Cambiar del uso de políticas de bucket para aplicar el cifrado al cifrado predeterminado (p. 70)
• Uso del cifrado predeterminado con la replicación (p. 70)
Puede configurar el cifrado predeterminado en un bucket mediante alguna de las siguientes formas:
• Use la consola de Amazon S3. Para obtener más información, consulte ¿Cómo puedo habilitar el cifrado
predeterminado para un bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage
Service.
• Utilice las siguientes API REST:
• Utilice la operación de la API REST PUT Bucket encryption para habilitar el cifrado predeterminado y
establecer el tipo de cifrado de lado del servidor para usar SSE-S3 o SSE-KMS.
• Utilice la API REST DELETE Bucket encryption para deshabilitar el cifrado predeterminado de los
objetos. Después de deshabilitar el cifrado predeterminado, Amazon S3 cifra los objetos solo si las
solicitudes PUT incluyen la información de cifrado. Para obtener más información, consulte PUT Object
y PUT Object - Copy.
• Utilice la API REST GET Bucket encryption para comprobar la configuración de cifrado
predeterminado actual.
• Use la AWS CLI y los SDK de AWS. Para obtener más información, consulte Uso de los SDK, la CLI y
los exploradores de AWS (p. 697).
• No hay ninguna variación en el cifrado de los objetos que existían en el bucket antes de que se habilitara
el cifrado predeterminado.
• Cuando carga objetos después de habilitar el cifrado predeterminado:
• Si los encabezados de las solicitudes PUT no incluyen información de cifrado, Amazon S3 utiliza la
configuración de cifrado predeterminada del bucket para cifrar los objetos.
• Si los encabezados de las solicitudes PUT incluyen información de cifrado, Amazon S3 utiliza la
información de cifrado de la solicitud PUT para cifrar los objetos antes de guardarlos en Amazon S3. Si
la solicitud PUT se ejecuta correctamente, la respuesta es HTTP/1.1 200 OK con la información de
cifrado en los encabezados de la respuesta. Para obtener más información, consulte PUT Object.
• Si utiliza la opción de SSE-KMS para la configuración de cifrado predeterminado, se le aplicarán los
límites de RPS (solicitudes por segundo) de AWS KMS. Para obtener más información acerca de los
límites de AWS KMS y de cómo solicitar un aumento de los límites, consulte Límites de AWS KMS.
Para dejar de usar una política de bucket para rechazar las solicitudes PUT sin encabezados de
cifrado y empezar a utilizar el cifrado predeterminado
1. Si tiene previsto especificar que el cifrado predeterminado utilice SSE-KMS, asegúrese de que todas
las solicitudes de objetos PUT y GET se firman con Signature Version 4 y se envían a través de
una conexión SSL a Amazon S3. Para obtener información acerca del uso de AWS KMS, consulte
Protección de datos con el cifrado en el servidor mediante claves almacenadas en AWS KMS (SSE-
KMS) (p. 275).
Note
Después de habilitar el cifrado predeterminado para su bucket de S3, los objetos almacenados en Amazon
S3 a través de solicitudes PUT sin encabezados de cifrado se cifrarán mediante la configuración de cifrado
predeterminado de nivel de bucket.
• 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.
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 los encabezados de cifrado PUT, el registro incluye el
siguiente campo como el par de nombre-valor: "SSEApplied":"SSE_S3", "SSEApplied":"SSE_KMS
o "SSEApplied":"SSE_C". Para las cargas multiparte, esta información se incluye en las solicitudes
de la API InitiateMultipartUpload. Para obtener más información sobre el uso de CloudTrail y
CloudWatch, consulte Monitorización de Amazon S3 (p. 635).
Más información
• PUT Bucket encryption
• DELETE Bucket encryption
• GET Bucket encryption
Puede alojar sitios web estáticos en Amazon S3 configurando su bucket para el alojamiento del sitio web.
Para obtener más información, consulte Alojamiento de un sitio web estático en Amazon S3 (p. 523).
Existen varias formas de administrar la configuración de sitio web de su bucket. Puede usar la Consola
de administración de AWS para administrar la configuración sin escribir código. Puede crear, actualizar
y eliminar mediante programación la configuración de sitio web utilizando los SDK de AWS. Los SDK
proporcionan clases de encapsulamiento en toda la API REST de Amazon S3. Si su aplicación lo requiere,
puede enviar solicitudes de la API REST directamente desde su aplicación.
bucket y una configuración de sitio web. La configuración de sitio web debe incluir un documento de índice
y puede incluir un documento de error opcional. Estos documentos ya deben existir en el bucket. Para
obtener más información, consulte la sección sobre Sitio web PUT Bucket. Para obtener más información
acerca de la función de sitio web de Amazon S3, consulte Alojamiento de un sitio web estático en Amazon
S3 (p. 523).
Example
El siguiente ejemplo utiliza AWS SDK for Java para añadir una configuración de sitio web a un bucket,
recuperar e imprimir la configuración y eliminar la configuración y verificar la eliminación Para obtener
instrucciones acerca de cómo crear y probar una muestra funcional, consulte Prueba de ejemplos de
código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketWebsiteConfiguration;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
Example
El siguiente ejemplo de código C# agrega una configuración de sitio web al bucket específico. La
configuración especifica los nombres tanto del documento de índice como el de error. Para obtener
instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de ejemplos de
código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class WebsiteConfigTest
{
private const string bucketName = "*** bucket name ***";
private const string indexDocumentSuffix = "*** index object key ***"; // For
example, index.html.
private const string errorDocument = "*** error object key ***"; // For example,
error.html.
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
AddWebsiteConfigurationAsync(bucketName, indexDocumentSuffix,
errorDocument).Wait();
}
{
// 1. Put the website configuration.
PutBucketWebsiteRequest putRequest = new PutBucketWebsiteRequest()
{
BucketName = bucketName,
WebsiteConfiguration = new WebsiteConfiguration()
{
IndexDocumentSuffix = indexDocumentSuffix,
ErrorDocument = errorDocument
}
};
PutBucketWebsiteResponse response = await
client.PutBucketWebsiteAsync(putRequest);
El siguiente ejemplo de PHP agrega una configuración de sitio web al bucket específico. El método
create_website_config proporciona explícitamente los nombres de los documentos de error e índice.
El ejemplo recupera también la configuración del sitio web e imprime la respuesta. Para obtener más
información acerca de la función de sitio web de Amazon S3, consulte Alojamiento de un sitio web estático
en Amazon S3 (p. 523).
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Uso del
AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Documentación de AWS SDK para PHP
Por el uso de Transfer Acceleration se podrían aplicar cargos por transferencia de datos adicionales. Para
obtener más información sobre los precios, consulte los precios de Amazon S3.
Temas
• ¿Por qué usar Aceleración de transferencia de Amazon S3? (p. 77)
• 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.
Puede obtener acceso a la herramienta Comparación de velocidad utilizando cualquiera de los siguientes
métodos:
• Copie la siguiente URL en la ventana de su navegador, sustituyendo region por la región que utilice
(por ejemplo, us-west-2) y yourBucketName por el nombre del bucket que quiera evaluar:
http://s3-accelerate-speedtest.s3-accelerate.amazonaws.com/en/accelerate-
speed-comparsion.html?region=region&origBucketName=yourBucketName
Para obtener una lista de las regiones admitidas por Amazon S3, consulte Regiones y puntos de enlace
en la Referencia general de Amazon Web Services.
• Use la consola de Amazon S3. Para ver más detalles, consulte Habilitación de Transfer Acceleration en
la Guía del usuario de la consola de Amazon Simple Storage Service.
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 (".").
• Use la consola de Amazon S3. Para obtener más información, consulte Habilitación de Transfer
Acceleration en la Guía del usuario de la consola de Amazon Simple Storage Service.
• Usar la operación PUT Bucket accelerate de la API REST
• Usar la AWS CLI y los SDK de AWS. Para obtener más información, consulte Uso de los SDK, la CLI
y los exploradores de AWS (p. 697).
2. Transfiera datos a y desde el bucket con la aceleración habilitada mediante uno de los siguientes
nombres de dominio de punto de enlace de s3-accelerate:
• bucketname.s3-accelerate.amazonaws.com: para obtener acceso a un bucket con aceleración
habilitada.
• bucketname.s3-accelerate.dualstack.amazonaws.com: para obtener acceso a un bucket
con aceleración habilitada por IPv6. Amazon S3 tiene un conjunto de puntos de enlace de doble pila
que admite solicitudes sobre IPv6 y IPv4. El punto de conexión de doble pila de Transfer Acceleration
solo usa el tipo de nombre de punto de conexión de estilo de alojamiento virtual. Para obtener más
información, consulte Introducción a la realización de solicitudes en IPv6 (p. 12) y Uso de los puntos
de enlace de doble pila en Amazon S3 (p. 15).
Important
La compatibilidad para el punto de enlace acelerado de doble pila actualmente solo está
disponible desde el AWS SDK para Java. Pronto ofreceremos compatibilidad con la CLI de
AWS y otros SDK de AWS.
Note
Puede seguir usando el punto de conexión normal además de los puntos de conexión de
aceleración.
Puede apuntar sus solicitudes PUT object y GET object en Amazon S3 al nombre de dominio de punto
de enlace de Transfer Acceleration tras habilitarlo. Por ejemplo, pongamos que tiene actualmente
una aplicación API REST que usa PUT Object y el nombre de host mybucket.s3.amazonaws.com
en la solicitud PUT. Para acelerar el PUT, solo tiene que cambiar el nombre del host en su solicitud a
mybucket.s3-accelerate.amazonaws.com. Para volver a usar la velocidad de carga estándar, no tiene
más que volver a cambiar el nombre a mybucket.s3.amazonaws.com.
Después de habilitar Transfer Acceleration, puede tardar hasta 20 minutos en darse cuenta de los
beneficios de desempeño. Sin embargo, el punto de conexión acelerado estará disponible en cuando
habilite Transfer Acceleration.
Puede usar el punto de conexión acelerado en la CLI de AWS, los SDK de AWS y otras herramientas
que transfieren datos desde y hacia Amazon S3. Si utiliza los SDK de AWS, algunos de los lenguajes
admitidos usan un marcador de configuración de cliente de punto de enlace acelerado, de modo que no
tendrá que establecer explícitamente el punto de enlace de Transfer Acceleration para bucketname.s3-
accelerate.amazonaws.com. Para ver ejemplos de cómo usar un marcador de configuración de
cliente de punto de conexión acelerado, consulte Aceleración de transferencia de Amazon S3
Ejemplos (p. 79).
Puede usar todas las operaciones de Amazon S3 en los puntos de enlace de aceleración de transferencia,
excepto en las siguientes: GET Service (list buckets), PUT Bucket (create bucket) y DELETE Bucket.
Además, Aceleración de transferencia de Amazon S3 no es compatible con las copias entre regiones
usando PUT Object - Copy.
• Transfer Acceleration solo se admite en solicitudes de estilo virtual. Para obtener más información
acerca de las solicitudes de estilo virtual, consulte Realización de solicitudes con la API de REST (p. 45).
• El nombre del bucket que use para Transfer Acceleration debe cumplir con las convenciones del DNS y
no debe contener puntos (“.”).
• Transfer Acceleration debe estar habilitado en el bucket. Tras habilitar Transfer Acceleration en un
bucket, podría tardar hasta 20 minutos antes de que aumente la velocidad de transferencia de datos al
bucket.
• Para obtener acceso al bucket habilitado para Transfer Acceleration, debe usar el punto de
enlace bucketname.s3-accelerate.amazonaws.com o el punto de enlace de doble pila
bucketname.s3-accelerate.dualstack.amazonaws.com para conectar al bucket habilitado
sobre IPv6.
• Debe ser el propietario del bucket o establecer el estado de transfer acceleration. El propietario del
bucket puede asignar permisos a otros usuarios para permitirles establecer el estado de aceleración
en un bucket. El permiso s3:PutAccelerateConfiguration permite a los usuarios habilitar o
deshabilitar Transfer Acceleration en un bucket. El permiso s3:GetAccelerateConfiguration
permite a los usuarios devolver el estado Transfer Acceleration de un bucket, que puede ser Enabled
o Suspended.. Para obtener más información sobre estos permisos, consulte Permisos relacionados
con operaciones de subrecursos de bucket (p. 360) y Administración de identidad y acceso en Amazon
S3 (p. 312).
Más información
• GET Bucket accelerate
• PUT Bucket accelerate
Temas
• Uso de la consola de Amazon S3 (p. 79)
• Uso de Transfer Acceleration desde la AWS Command Line Interface (AWS CLI) (p. 80)
• Uso de Transfer Acceleration desde AWS SDK for Java (p. 81)
• Uso de Transfer Acceleration desde AWS SDK para .NET (p. 82)
• Uso de Transfer Acceleration desde AWS SDK para JavaScript (p. 83)
• Uso de Transfer Acceleration desde AWS SDK for Python (Boto) (p. 83)
• Mediante otros SDK de AWS (p. 83)
Example
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.
Example
Si quiere usar el punto de conexión acelerado para algunos comandos de la AWS CLI pero no otros, puede
usar uno de los dos siguientes métodos:
• Puede usar el punto de conexión acelerado por comando estableciendo el parámetro --endpoint-url
como https://s3-accelerate.amazonaws.com o http://s3-accelerate.amazonaws.com
para cualquier comando de s3 o s3api.
• Puede configurar perfiles separados en su archivo AWS Config. Por ejemplo, puede crear un
perfil que configure use_accelerate_endpoint como true y un perfil que no configure
use_accelerate_endpoint. Al ejecutar un comando, especifique qué perfil quiere usar, en función
de si quiere usar el punto de conexión acelerado.
Example
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
En el siguiente ejemplo se demuestra cómo usar un punto de conexión acelerado para cargar un objeto en
Amazon S3. En el ejemplo se realiza lo siguiente:
• Crea un AmazonS3Client que se configura para usar puntos de conexión de aceleración. Todos los
buckets a los que accede el cliente deben tener habilitada la aceleración de transferencia.
• Habilita la aceleración de transferencia en un bucket específico. Este paso solo es necesario si el bucket
que especifique aún no tiene habilitada la aceleración de transferencia.
• Verifica que la aceleración de transferencia está habilitada para el bucket especificado.
• Carga un nuevo objeto en el bucket especificado utilizando el punto de enlace de aceleración del bucket.
Para obtener más información acerca del uso de Transfer Acceleration, consulte Introducción a
Aceleración de transferencia de Amazon S3 (p. 77). Para obtener instrucciones sobre la creación
y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon
S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketAccelerateConfiguration;
import com.amazonaws.services.s3.model.BucketAccelerateStatus;
import com.amazonaws.services.s3.model.GetBucketAccelerateConfigurationRequest;
import com.amazonaws.services.s3.model.SetBucketAccelerateConfigurationRequest;
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();
Example
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class TransferAccelerationTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
public static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
EnableAccelerationAsync().Wait();
}
{
var putRequest = new PutBucketAccelerateConfigurationRequest
{
BucketName = bucketName,
AccelerateConfiguration = new AccelerateConfiguration
{
Status = BucketAccelerateStatus.Enabled
}
};
await s3Client.PutBucketAccelerateConfigurationAsync(putRequest);
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:
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.
• 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.
3. En el panel Properties (Propiedades), haga clic en Requester Pays (Pago por solicitante).
4. Seleccione la casilla Enabled (Habilitado).
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.
• Use una solicitud PUT para establecer el valor Payer en Requester en un bucket especificado.
<RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Payer>Requester</Payer>
</RequestPaymentConfiguration>
HTTP/1.1 200 OK
x-amz-id-2: [id]
x-amz-request-id: [request_id]
Date: Wed, 01 Mar 2009 12:00:00 GMT
Content-Length: 0
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.
• Use una solicitud GET para obtener el recurso requestPayment, como se muestra en la siguiente
solicitud.
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
• Use una solicitud GET para descargar un objeto de un bucket de pago por solicitante, como se muestra
en la siguiente solicitud.
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:
• Informes de facturación: son distintos informes que proporcionan una visión general de toda la actividad
de los servicios de AWS que se utilizan, incluido Amazon S3. AWS siempre factura al propietario del
bucket de S3 con las tarifas de Amazon S3, a menos que el bucket haya sido creado como un bucket
de pago por solicitante. Para obtener más información acerca del pago por solicitante, consulte Buckets
de pago por solicitante (p. 83). Para obtener más información acerca de los informes de facturación,
consulte Informes de facturación de AWS para Amazon S3 (p. 88).
• Informe de uso: es un resumen de la actividad de un servicio específico, agrupado por hora, día o mes.
Puede elegir el tipo de uso y la operación que desea incluir. También puede elegir la forma en que
se agregan los datos. Para obtener más información, consulte Informe de uso de AWS para Amazon
S3 (p. 90).
Los siguientes temas proporcionan información acerca de los informes de facturación y uso de Amazon S3.
Temas
• Informes de facturación de AWS para Amazon S3 (p. 88)
• Informe de uso de AWS para Amazon S3 (p. 90)
• Cómo interpretar los informes de facturación y de uso de AWS para Amazon S3 (p. 92)
• Uso de etiquetas de buckets de S3 de asignación de costos (p. 101)
También puede descargar un informe de uso que da más detalles sobre su uso del almacenamiento de
Amazon S3 que los informes de facturación. Para obtener más información, consulte Informe de uso de
AWS para Amazon S3 (p. 90).
En la siguiente tabla se muestran los cargos relacionados con el uso de Amazon S3.
Cargo Comentarios
Cargo Comentarios
ONEZONE_IA, GLACIER, DEEP_ARCHIVE o
Almacenamiento de redundancia reducida (RRS).
Para obtener más información acerca de las
clases de almacenamiento, consulte Clases de
almacenamiento de Amazon S3 (p. 110).
Para obtener información detallada acerca de las tarifas de uso de Amazon S3 relativas a almacenamiento,
transferencia de datos y servicios, consulte Precios de Amazon S3 y las Preguntas frecuentes sobre
Amazon S3.
Para obtener información acerca del significado de los códigos y las abreviaturas utilizados en los informes
de facturación y de uso de Amazon S3, consulte Cómo interpretar los informes de facturación y de uso de
AWS para Amazon S3 (p. 92).
Más información
• Informe de uso de AWS para Amazon S3 (p. 90)
• Uso de etiquetas de buckets de S3 de asignación de costos (p. 101)
• Administración de costos y facturación de AWS
• Precios de Amazon S3
• Preguntas frecuentes sobre Amazon S3
• Precios de Glacier
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).
Para obtener una explicación detallada de los tipos de uso de Amazon S3, consulte Cómo interpretar los
informes de facturación y de uso de AWS para Amazon S3 (p. 92).
• Resource (Recurso): el nombre del bucket asociado al uso indicado.
• StartTime (Hora de inicio): la hora de inicio del día en que se realizó el uso, en horario universal
coordinado (UTC).
• EndTime (Hora de finalización): la hora de finalización del día en que se realizó el uso, en horario
universal coordinado (UTC).
• UsageValue (Valor de uso): uno de los siguientes valores de volumen:
Tip
Para obtener información detallada acerca de cada solicitud que Amazon S3 recibe de sus
objetos, active el registro de acceso del servidor para sus buckets. Para obtener más información,
consulte Registro de acceso al servidor de Amazon S3 (p. 674).
Puede descargar un informe de uso como un archivo XML o como un archivo de valores separados por
comas (CSV). A continuación se muestra un ejemplo de informe de uso con formato CSV abierto en una
aplicación de hoja de cálculo.
Para obtener información acerca de cómo interpretar el informe de uso, consulte Cómo interpretar los
informes de facturación y de uso de AWS para Amazon S3 (p. 92).
• Usage Types (Tipos de uso): para obtener una explicación detallada de los tipos de uso de
Amazon S3, consulte Cómo interpretar los informes de facturación y de uso de AWS para Amazon
S3 (p. 92).
• Operation (Operación): para obtener una explicación detallada de las operaciones de Amazon S3,
consulte Seguimiento de las operaciones en los informes de uso (p. 100).
• Time Period (Periodo de tiempo): seleccione el periodo de tiempo que desea que abarque el
informe.
• Report Granularity (Grado de detalle de informe): indique si desea que el informe incluya subtotales
por hora, por día o por mes.
7. Para elegir el formato del informe, elija la opción Download (Descargar) para ese formato y, a
continuación, siga las indicaciones para ver o guardar el informe.
Más información
• Cómo interpretar los informes de facturación y de uso de AWS para Amazon S3 (p. 92)
• Informes de facturación de AWS para Amazon S3 (p. 88)
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
Notas:
1. Si termina una transferencia antes de su finalización, la cantidad de datos que se transfieren podrían
superar la cada de datos que recibe la aplicación. Esta discrepancia podría producirse porque no es
posible ejecutar instantáneamente una solicitud de terminación de transferencia y cierta cantidad de
datos podría estar en tránsito pendiente de ejecución de la solicitud de terminación. Estos datos en
transito se facturan como datos transferidos "fuera".
2. Para obtener más información acerca de la unidad bytes-horas, consulte Conversión de los bytes-horas
de uso en los GB-meses que se facturan (p. 101).
3. Cuando los objetos que se archivan en la clase de almacenamiento GLACIER o DEEP_ARCHIVE se
eliminan, se sobrescriben o se mueven a otra clase de almacenamiento antes de que se haya cumplido
el compromiso de almacenamiento mínimo, que es de 90 días en el caso de GLACIER o de 180 días en
DEEP_ARCHIVE, hay un cargo prorrateado por gigabyte para los días restantes.
4. Para los objetos que se guardan en el almacenamiento INTELLIGENT_TIERING, STANDARD_IA o
ONEZONE_IA, cuando se eliminan, sobrescriben o pasan a otra clase de almacenamiento antes de
30 días, hay un cargo prorrateado por gigabyte para los días restantes.
5. Para los objetos más pequeños (de menos de 128 KB) que se guardan en el almacenamiento
STANDARD_IA o ONEZONE_IA, cuando se eliminan, sobrescriben o pasan a otra clase de
almacenamiento antes de 30 días, hay un cargo prorrateado por gigabyte para los días restantes.
6. No hay un tamaño de objeto mínimo facturable para objetos en la clase de almacenamiento
INTELLIGENT_TIERING, pero los objetos inferiores a 128 KB no son aptos para la designación
automática de capas y siempre se cobrarán conforme al nivel de capa de acceso frecuente
INTELLIGENT_TIERING.
las operaciones) para que incluya todas las operaciones, o una operación específica, como por ejemplo,
GetObject.
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.
Más información
• Informe de uso de AWS para Amazon S3 (p. 90)
• Informes de facturación de AWS para Amazon S3 (p. 88)
• Precios de Amazon S3
• Preguntas frecuentes sobre Amazon S3
• Precios de Glacier
• Preguntas frecuentes sobre Glacier
El informe mensual de asignación de costos muestra el uso de AWS para su cuenta por categoría de
producto y usuario del AWS Identity and Access Management (IAM). El informe contiene las mismas
partidas que el informe detallado de facturación (consulte Cómo interpretar los informes de facturación y de
uso de AWS para Amazon S3 (p. 92)) y columnas adicionales para las claves de etiquetas.
AWS proporciona dos tipos de etiquetas de asignación de costos, una generada por AWS y las etiquetas
definidas por el usuario. AWS define, crea y aplica automáticamente la etiqueta createdBy generada
por AWS después de un evento CreateBucket de Amazon S3. Las etiquetas definidas por el usuario son
etiquetas que usted define, crea y aplica al bucket de S3.
Debe activar ambos tipos de etiquetas por separado en la consola Gestión de facturación y costos para
que puedan aparecer en los informes de facturación. Para obtener más información acerca de las etiquetas
generadas por AWS, consulte Etiquetas de asignación de costos generadas por AWS. Para obtener más
información acerca de la activación de etiquetas, consulte Uso de etiquetas de asignación de costos en la
Guía del usuario de AWS Billing and Cost Management.
Una etiqueta de asignación de costos definida por el usuario tiene los siguientes componentes:
• El valor de la etiqueta. El valor de la etiqueta es una cadena obligatoria. Por ejemplo, en la etiqueta
proyecto/Trinity, Trinity es el valor. El valor de la etiqueta es una cadena que distingue entre mayúsculas
y minúsculas y que puede contener de 0 a 256 caracteres Unicode.
Para obtener información detallada sobre los caracteres permitidos para las etiquetas definidas por el
usuario y otras restricciones, consulte Restricciones de las etiquetas definidas por el usuario en la Guía del
usuario de AWS Billing and Cost Management.
Cada bucket de S3 tiene un conjunto de etiquetas. Un conjunto de etiquetas contiene todas las etiquetas
que están asignadas a ese bucket. Un conjunto de etiquetas puede contener hasta 50 etiquetas, y también
puede estar vacío. Las claves deben ser únicas dentro de un conjunto de etiquetas, pero los valores de un
conjunto de etiquetas no tienen que ser únicos. Por ejemplo, puede tener el mismo valor en los conjuntos
de etiquetas denominados proyecto/Trinity and centro-de-costos/Trinity.
En un bucket, si añade una etiqueta con la misma clave que una etiqueta existente, el valor nuevo
sobrescribe el anterior.
AWS no aplica ningún significado semántico a las etiquetas. Las etiquetas se interpretan estrictamente
como cadenas de caracteres.
Para añadir, enumerar, editar o eliminar etiquetas, puede usar la consola de Amazon S3, la AWS
Command Line Interface (AWS CLI) o la API de Amazon S3.
Para obtener más información acerca de la creación de etiquetas, consulte el tema correspondiente:
• Para crear etiquetas en la consola, consulte ¿Cómo puedo ver las propiedades de un bucket de S3? en
la Guía del usuario de la consola de Amazon Simple Storage Service.
• Para crear etiquetas con la API de Amazon S3, consulte PUT Bucket tagging en la Amazon Simple
Storage Service API Reference.
• Para crear etiquetas con la CLI de AWS, consulte put-bucket-tagging en la AWS CLI Command
Reference.
Para obtener más información acerca de las etiquetas definidas por el usuario, consulte Etiquetas de
asignación de costos definidas por el usuario en la Guía del usuario de AWS Billing and Cost Management.
Más información
• Uso de etiquetas de asignación de costos en la Guía del usuario de AWS Billing and Cost Management.
• Cómo interpretar los informes de facturación y de uso de AWS para Amazon S3 (p. 92)
• Informes de facturación de AWS para Amazon S3 (p. 88)
• Clave: nombre que se le asigna a un objeto. La clave de objeto se usa para recuperar el objeto.
Para obtener más información, consulte Clave y metadatos de objetos (p. 105).
• ID de versión: en un bucket, una clave y un ID de versión identifican exclusivamente un objeto.
El ID de versión es una cadena que genera Amazon S3 cuando se agrega un objeto a un bucket. Para
obtener más información, consulte Control de versiones de objetos (p. 115).
• Valor: contenido que se está almacenando.
El valor de un objeto puede ser cualquier secuencia de bytes. El tamaño de los objetos puede variar
desde cero hasta 5 TB. Para obtener más información, consulte Carga de objetos (p. 181).
• Metadatos: conjunto de pares nombre-valor con el que puede almacenar información relativa al objeto.
Puede asignar metadatos, que se denominan metadatos definidos por el usuario, a sus objetos en
Amazon S3. Amazon S3 asigna también metadatos de sistema a estos objetos, que se usan para
administrar objetos. Para obtener más información, consulte Clave y metadatos de objetos (p. 105).
• Subrecursos: Amazon S3 usa el mecanismo de subrecursos para almacenar la información adicional
específica al objeto.
Dado que los subrecursos están subordinados a los objetos, siempre están asociados con otras
entidades, como objetos o buckets. Para obtener más información, consulte Subrecursos de
objeto (p. 115).
• Información de control de acceso: puede controlar el acceso a los objetos que almacena en Amazon S3.
Amazon S3 admite tanto el control de acceso basado en recursos, como con una lista de control de
acceso (ACL) o políticas de bucket, como el control de acceso basado en usuarios. Para obtener más
información, consulte Administración de identidad y acceso en Amazon S3 (p. 312).
Para obtener más información acerca del trabajo con objetos, consulte las siguientes secciones. Los
recursos de Amazon S3 (por ejemplo, buckets y objetos) son privados de manera predeterminada. Se
deben conceder permisos explícitos para que otras personas puedan obtener acceso a estos recursos. Por
ejemplo, puede que quiera compartir un vídeo o una fotografía almacenada en el bucket de Amazon S3
en su sitio web. Eso solo funciona si se hace que el objeto sea público o si se usa una URL prefirmada en
el sitio web. Para obtener más información acerca de compartir objetos, consulte Compartir un objeto con
otros (p. 179).
Temas
• Clave y metadatos de objetos (p. 105)
• Clases de almacenamiento de Amazon S3 (p. 110)
• Subrecursos de objeto (p. 115)
• Control de versiones de objetos (p. 115)
• Etiquetado de objetos (p. 118)
• Administración del ciclo de vida de los objetos (p. 127)
• Cross-Origin Resource Sharing (CORS, Uso compartido de recursos entre orígenes) (p. 163)
Temas
• Claves de objeto (p. 105)
• Metadatos de objetos (p. 108)
Claves de objeto
Al crear un objeto, especifica su nombre de clave, que identifica exclusivamente el objeto en el bucket. Por
ejemplo, en la consola de Amazon S3 (consulte Consola de administración de AWS), cuando destaca un
bucket, aparece una lista de los objetos en el bucket. Esos nombres son las claves de objeto. El nombre de
una clave es una secuencia de caracteres Unicode cuya codificación UTF-8 tiene una longitud máxima de
1024 bytes.
El modelo de datos de Amazon S3 es una estructura plana: usted crea un bucket y el bucket almacena
objetos. No existe una jerarquía entre los subbuckets o las subcarpetas. Sin embargo, puede inferir una
jerarquía lógica con prefijos de nombres de clave y delimitadores del mismo modo que lo hace la consola
de Amazon S3. La consola de Amazon S3 admite el concepto de carpetas. Supongamos que el bucket
(admin-created) tiene cuatro objetos con las siguientes claves de objeto:
Development/Projects.xls
Finance/statement1.pdf
Private/taxdocument.pdf
s3-dg.pdf
La clave s3-dg.pdf no tiene prefijo, por lo que su objeto aparece directamente en el nivel raíz del bucket.
Si abre la carpeta Development/, ve el objeto Projects.xlsx dentro.
Note
Amazon S3 admite buckets y objetos y no hay jerarquía en Amazon S3. Sin embargo, los prefijos
y delimitadores en un nombre de clave de objeto permiten que la consola de Amazon S3 y los
SDK de AWS infieran la jerarquía e introduzcan el concepto de carpetas.
Caracteres seguros
Los siguientes conjuntos de caracteres son habitualmente seguros para su uso en nombres de claves:
Caracteres especiales • !
• -
• _
• .
• *
• '
• (
• )
• 4my-organization
• my.great_photos-2014/jan/myvacation.jpg
• videos/2014/birthday/video1.wmv
Important
Si el nombre de la clave de un objeto consta de un solo punto (.) o de dos puntos (..), no puede
descargar el objeto desde la consola de Amazon S3. Para descargar un objeto con un nombre de
clave de “.” o “..”, debe utilizar la AWS CLI, los SDK de AWS o la API de REST.
• 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 ("?")
Metadatos de objetos
Hay dos clases de tipos de metadatos: metadatos del sistema y metadatos definidos por el usuario.
1. Los metadatos como la fecha de creación del objeto están controlados por el sistema, y solo Amazon S3
puede modificar el valor.
2. Otros metadatos de sistema, como la clase de almacenamiento configurada para el objeto o si el objeto
tiene habilitado el cifrado en el servidor, son ejemplos de metadatos del sistema cuyos valores controla.
Si el bucket está configurado como sitio web, a veces puede que quiera redirigir una solicitud de página
a otra página o URL externa. En este caso, una página web será un objeto en su bucket. Amazon S3
almacena el valor de redirección de la página como metadatos del sistema cuyo valor controla usted.
Al crear objetos, puede configurar valores de estos elementos de metadatos del sistema o actualizar
los valores cuando lo necesite. Para obtener más información acerca de las clases de almacenamiento,
consulte Clases de almacenamiento de Amazon S3 (p. 110). Para obtener más información acerca del
cifrado del lado del servidor, consulte Protección de datos mediante cifrado (p. 274).
En la siguiente tabla se facilita una lista de metadatos definidos por el sistema y si puede actualizarlos.
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Cuando se recuperan metadatos con la API REST, Amazon S3 combina encabezados que tengan el
mismo nombre (sin tener en cuenta mayúsculas y minúsculas) en una lista delimitada por comas. Si
algunos metadatos contienen caracteres no imprimibles, no se devuelven. En su lugar, se devuelve el
encabezado x-amz-missing-meta con el número de entradas de metadatos no imprimibles como valor.
Los metadatos definidos por el usuario son un conjunto de pares clave-valor. Amazon S3 almacena las
claves de metadatos definidos por el usuario en minúsculas. Cada par clave-valor debe ajustarse a US-
ASCII cuando se usa REST y a UTF-8 cuando se usa SOAP o subidas basadas en el navegador por
POST.
Note
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
Amazon S3 ofrece una gama de clases de almacenamiento para los objetos que almacene. Debe
seleccionar una clase de almacenamiento en función de su escenario de caso de uso y sus requisitos de
acceso y rendimiento. Todas estas clases de almacenamiento ofrecen una alta durabilidad.
Temas
• Clases de almacenamiento para objetos a los que se obtiene acceso con frecuencia (p. 110)
• Clase de almacenamiento que optimiza automáticamente los objetos a los que se obtiene acceso
frecuente e infrecuentemente (p. 111)
• Clases de almacenamiento para objetos a los que se obtiene acceso con poca frecuencia (p. 111)
• Clases de almacenamiento para el archivado de objetos (p. 112)
• Comparación de las clases de almacenamiento de Amazon S3 (p. 113)
• Establecimiento de la clase de almacenamiento de un objeto (p. 114)
• REDUCED_REDUNDANCY: la clase de almacenamiento de redundancia reducida (RRS) se ha
diseñado para los datos no críticos y reproducibles que se pueden almacenar con menor redundancia
que la clase de almacenamiento STANDARD.
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.
• Para datos más antiguos a los que se obtiene acceso con poca frecuencia, pero que todavía
necesitan acceso en milisegundos. Por ejemplo, cuando cargue datos, puede elegir la clase de
almacenamiento STANDARD y utilizar la configuración del ciclo de vida para indicar a Amazon S3
que realice la transición de los objetos a la clase STANDARD_IA u ONEZONE_IA. Para obtener más
información sobre la administración del ciclo de vida, consulte Administración del ciclo de vida de los
objetos (p. 127).
Note
Las clases de almacenamiento STANDARD_IA y ONEZONE_IA son adecuados para los objetos
de más de 128 KB que se desean almacenar durante al menos 30 días. Si un objeto tiene menos
de 128 KB, Amazon S3 cobra por 128 KB. Si se elimina un objeto antes de que termine el periodo
mínimo de almacenamiento de 30 días, se cobrará por 30 días. Para obtener información acerca
de los precios, consulte Precios de Amazon S3.
• STANDARD_IA: Amazon S3 almacena los datos de los objetos de forma redundante en varias
zonas de disponibilidad separadas geográficamente (de forma similar a la clase de almacenamiento
STANDARD). Los objetos STANDARD_IA resisten a la pérdida de una zona de disponibilidad. Esta
clase de almacenamiento ofrece mayor disponibilidad y resistencia que la clase ONEZONE_IA.
• ONEZONE_IA: Amazon S3 almacena los datos de los objetos en una sola zona de disponibilidad, lo
que resulta más económico que la clase STANDARD_IA. Sin embargo, los datos no son resistentes
a la pérdida física de la zona de disponibilidad como consecuencia de desastres, como terremotos
e inundaciones. La clase de almacenamiento ONEZONE_IA es tan duradera como la clase
STANDARD_IA, pero tiene menor disponibilidad y resistencia. Para ver una comparación de durabilidad
y disponibilidad entre las distintas clases de almacenamiento, consulte la tabla de durabilidad y
disponibilidad situada al final de esta sección. Para obtener información acerca de los precios, consulte
Precios de Amazon S3.
Le recomendamos lo siguiente:
• STANDARD_IA: utilice esta clase para su copia principal o única de los datos que no se puedan volver a
crear.
• ONEZONE_IA: utilice esta clase si puede volver a crear los datos si se produce un error en la zona de
disponibilidad, y para las réplicas de objetos al configurar la replicación entre regiones (CRR).
• GLACIER: se utiliza para archivos en los que puede ser necesario recuperar partes de los datos en
cuestión de minutos. Los datos almacenados en la clase GLACIER tienen un periodo mínimo de
almacenamiento de 90 días y se puede obtener acceso a ellos en un plazo comprendido entre 1 y
5 minutos mediante la recuperación rápida. Si ha eliminado, sobrescrito o movido a una clase de
almacenamiento diferente un objeto antes del periodo mínimo de 90 días, se le cobrarán los 90 días.
Para obtener información acerca de los precios, consulte Precios de Amazon S3.
• DEEP_ARCHIVE: se usa para archivar datos a los que en contadas ocasiones se necesita obtener
acceso. Los datos almacenados en la clase DEEP_ARCHIVE tienen un periodo mínimo de
almacenamiento de 180 días y un tiempo predeterminado de recuperación de 12 horas. Si ha eliminado,
sobrescrito o movido a una clase de almacenamiento diferente un objeto antes del periodo mínimo de
180 días, se le cobrarán los 180 días. Para obtener información acerca de los precios, consulte Precios
de Amazon S3.
Para obtener más información acerca del servicio Amazon S3 Glacier, consulte la Guía para
desarrolladores de Amazon S3 Glacier.
Todas las clases de almacenamiento, excepto ONEZONE_IA, están diseñadas para resistir
simultáneamente a la pérdida total de datos en una sola zona de disponibilidad y a una pérdida parcial en
otra zona de disponibilidad.
Además de los requisitos de desempeño del escenario de su aplicación, debe tener en cuenta el precio.
Para obtener información sobre el precio de las clases de almacenamiento, consulte Precios de Amazon
S3.
• Al crear un objeto, puede especificar su clase de almacenamiento. Por ejemplo, al crear objetos
utilizando las API PUT Object, POST Object e Initiate Multipart Upload, se debe añadir el encabezado de
solicitud x-amz-storage-class para especificar una clase de almacenamiento. Si no se añade este
encabezado, Amazon S3 utiliza STANDARD, la clase de almacenamiento predeterminada.
• También puede cambiar la clase de almacenamiento de un objeto que ya está almacenado en Amazon
S3 a cualquier otra clase de almacenamiento haciendo una copia del objeto mediante la API PUT Object
- Copy. Sin embargo, no puede usar PUT Object - Copy para copiar objetos que están almacenados en
las clases GLACIER o DEEP_ARCHIVE.
Debe copiar el objeto en el mismo bucket utilizando el mismo nombre de clave y especificando
encabezados de solicitud como se indica a continuación:
• Establezca el encabezado x-amz-metadata-directive en COPY.
• Establezca x-amz-storage-class en la clase de almacenamiento que desea utilizar.
• Puede indicar a Amazon S3 que modifique la clase de almacenamiento de los objetos añadiendo una
configuración del ciclo de vida a un bucket. Para obtener más información, consulte Administración del
ciclo de vida de los objetos (p. 127).
Para crear y actualizar clases de almacenamiento de objetos, puede utilizar la consola de Amazon S3, los
SDK de AWS o la AWS Command Line Interface (AWS CLI). Cada uno de estos métodos utiliza las API de
Amazon S3 para enviar solicitudes a Amazon S3.
Subrecursos de objeto
Amazon S3 define un conjunto de subrecursos asociados con buckets y objetos. Los subrecursos están
subordinados a objetos, es decir, los subrecursos no existen por sí mismos, siempre están asociados con
otras entidades, como objetos o buckets.
Subrecurso Descripción
acl Contiene una lista de concesiones en la que se identifican los beneficiarios y los permisos
concedidos. Al crear un objeto, la acl identifica al propietario del objeto que tiene control
total sobre el mismo. Puede recuperar la ACL de un objeto o sustituirla por una lista
actualizada de concesiones. Cualquier actualización en una ACL exige que sustituya la
ACL existente. Para obtener más información acerca de las ACL, consulte Administración
de acceso con ACL (p. 418).
torrent Amazon S3 admite el protocolo BitTorrent. Amazon S3 usa el subrecurso< torrent para
devolver el archivo torrent asociado con el objeto específico. Para recuperar un archivo
torrent, especifique el subrecurso torrent en su solicitud GET. Amazon S3 crea un
archivo torrent y lo devuelve. Solo puede recuperar el subrecurso torrent, no puede
crear, actualizar ni eliminar el subrecurso torrent. Para obtener más información,
consulte Uso de BitTorrent con Amazon S3 (p. 663).
Note
La API SOAP no admite control de versiones. La compatibilidad con SOAP por HTTP está
obsoleta, pero aún se encuentra disponible con HTTPS. Las características nuevas de Amazon
S3 no son compatibles con SOAP.
Para personalizar su enfoque de retención de datos y controlar los costos de almacenamiento, utilice el
control de versiones de los objetos con la Administración del ciclo de vida de los objetos (p. 127). Para
obtener información acerca de cómo crear políticas de ciclo de vida con la Consola de administración de
AWS, consulte ¿Cómo creo una política de ciclo de vida para un bucket de S3? en la Guía del usuario de
la consola de Amazon Simple Storage Service.
Si cuenta con una política de ciclo de vida para la caducidad de un objeto en el bucket sin versiones y
quiere mantener el mismo comportamiento de eliminación cuando habilite el control de versiones, debe
agregar una política de vencimiento no actual. La política de vencimiento no actual administrará las
eliminaciones de las versiones de objetos no actuales en el bucket habilitado para el control de versiones.
(Un bucket con habilitación de versiones mantiene la versión actual y cero o más versiones objeto no
actuales).
La habilitación y suspensión del control de versiones se realiza en el nivel del bucket. Al activar el control
de versiones en un bucket, todos los objetos agregados al mismo tendrán un ID de versión exclusivo. Los
ID de versión exclusivos son cadenas opacas Unicode, codificadas en UTF-8, preparadas para URL y
generadas de manera aleatoria con una longitud máxima de 1024 bytes. Un ejemplo de ID de versión es
3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo. Solo Amazon S3
genera ID de versión. No es posible editarlos.
Note
Para simplificar la información, usaremos ID mucho más cortos en todos nuestros ejemplos.
Cuando realiza una operación PUT para un objeto en un bucket con control de versiones habilitado, la
versión no actual no se sobrescribirá. En el siguiente gráfico se muestra que cuando una nueva versión
de photo.gif se somete a una operación PUT en un bucket que ya contiene un objeto con el mismo
nombre, el objeto original (ID = 111111) permanece en el bucket, Amazon S3 genera un nuevo ID de
versión (121212) y agrega la nueva versión al bucket.
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.
Sin embargo, puede realizar una operación GET en una versión no actual de un objeto especificando su
ID de versión. En la siguiente figura, realizamos una operación GET sobre la versión de objeto específica,
111111. Amazon S3 devuelve la versión del objeto aunque no sea la versión actual.
Puede eliminar permanentemente un objeto especificando la versión que quiera eliminar. Solo el
propietario de un bucket de Amazon S3 puede eliminar permanentemente una versión. En el siguiente
gráfico se muestra cómo DELETE versionId elimina permanentemente un objeto de un bucket y que
Amazon S3 no inserta un marcador de eliminación.
Puede agregar factores adicionales de seguridad configurando un bucket para habilitar la eliminación
con MFA (autenticación multifactor). Si lo hace, el propietario del bucket debe incluir dos formas de
autenticación en cualquier solicitud para eliminar una versión o cambiar el estado de control de versiones
del bucket. Para obtener más información, consulte Eliminación MFA (p. 451).
Important
Para obtener más información, consulte Uso del control de versiones (p. 449).
Etiquetado de objetos
Utilice el etiquetado de objetos para categorizar el almacenamiento. Cada etiqueta es un par clave-valor.
Considere los siguientes ejemplos de etiquetado:
• Suponga que un objeto contiene datos de información sanitaria protegida (PHI). Podría etiquetar el
objeto con el siguiente par clave-valor.
PHI=True
o bien
Classification=PHI
• Supongamos que almacena archivos de proyecto en su bucket de S3. Podría etiquetar estos objetos con
una clave llamada Project y un valor, como se muestra a continuación:
Project=Blue
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
Con el etiquetado, ahora tendrá otra dimensión. Si quiere que la foto 1 esté en la categoría project x, puede
etiquetar el objeto correspondientemente. Además de la clasificación de datos, el etiquetado ofrece los
siguientes beneficios:
• Las etiquetas de objetos permiten el control de acceso pormenorizado para otorgar permisos. Por
ejemplo, podría conceder a un usuario de IAM permisos para leer solo objetos con determinadas
etiquetas.
• Las etiquetas de objetos permiten una administración precisa del ciclo de vida de un objeto, en la que
podrá especificar filtros basados en etiquetas, además de prefijos de nombres de clave, en una regla de
ciclo de vida.
• Cuando utilice los análisis de Amazon S3, puede configurar filtros para agrupar los objetos de modo que
se analicen por etiquetas de objetos, por prefijos de nombre de clave o por prefijos y etiquetas.
• También puede personalizar métricas de Amazon CloudWatch para mostrar información especificando
filtros de etiquetas. En las siguientes secciones presentamos más detalles.
Important
Es aceptable usar etiquetas para etiquetar objetos que contengan información confidencial (como
información personalmente identificable o información sanitaria protegida). No obstante, las
etiquetas en sí no deberían contener información confidencial.
Para añadir conjuntos de etiquetas de objetos á más de un objeto de Amazon S3 con una sola solicitud,
puede utilizar operaciones por lotes de Amazon S3.
• 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.
• 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.
• 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.
Supongamos que almacena fotos (en formato bruto y terminado) en su bucket de Amazon S3. Puede
etiquetar estos objetos como se muestra a continuación.
phototype=raw
or
phototype=finished
Podría plantearse archivar las fotos brutas en Glacier tiempo después de que se creen. Puede configurar
una regla de ciclo de vida con un filtro que identifique el subconjunto de objetos con el prefijo de nombre de
clave (photos/) que tiene una etiqueta específica (phototype=raw).
Para obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127).
Las etiquetas de objetos permiten un control de acceso pormenorizado para administrar permisos. Puede
otorgar permisos condicionales en función de las etiquetas de objetos. Amazon S3 admite las siguientes
claves de condiciones que puede usar para conceder permisos condicionales basados en etiquetas de
objetos:
• s3:ExistingObjectTag/<tag-key>: use esta clave condicional para verificar que una etiqueta de
objeto existente tiene una clave y un valor específicos para la etiqueta.
Note
Al conceder permisos para las operaciones PUT Object y DELETE Object, esta clave
condicional no se admite. Es decir, no puede crear una política para conceder o denegar
permisos a un usuario para eliminar o sobrescribir un objeto en función de sus etiquetas
existentes.
• s3:RequestObjectTagKeys: use esta clave condicional para restringir las claves de etiqueta que
quiera permitir en objetos. Esto resulta útil al agregar etiquetas a objetos con PutObjectTagging y
PutObject y con las solicitudes POST para objetos.
• s3:RequestObjectTag/<tag-key>: use esta clave condicional para restringir las claves y
valores de etiqueta que quiera permitir en objetos. Esto resulta útil al agregar etiquetas a objetos con
PutObjectTagging y PutObject y con las solicitudes POST para buckets.
Para obtener una lista completa de las claves condicionales específicas de servicio de Amazon S3,
consulte Claves de condición disponibles (p. 364). Las siguientes políticas de permisos ilustran cómo el
etiquetado de objetos facilita una administración de permisos de acceso pormenorizada.
Example 1: Permitir a un usuario solo leer los objetos que tienen una etiqueta específica
La siguiente política de permisos concede a un usuario permiso para leer objetos, pero la condición limita
el permiso de lectura a objetos que tengan los siguientes valor y clave específicos de la etiqueta.
security : public
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/security": "public"
}
}
}
]
}
Example 2: Permitir a un usuario agregar etiquetas de objetos con restricciones sobre las claves
de etiqueta permitidas
La siguiente política de permisos concede permisos a un usuario para realizar la acción
s3:PutObjectTagging, lo que permite al usuario agregar etiquetas a un objeto existente. La
condición limita las claves de etiqueta que puede usar el usuario. La condición usa la clave condicional
s3:RequestObjectTagKeys para especificar el conjunto de claves de etiqueta.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"ForAllValues:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}
La política garantiza que el conjunto de etiquetas, si se especifica en la solicitud, tenga las claves
especificadas. Un usuario podría enviar un conjunto de etiquetas vacías en PutObjectTagging, lo
cual está permitido por esta política (un conjunto de etiquetas vacío en la solicitud elimina las etiquetas
existentes en el objeto). Si quiere evitar que un usuario elimine el conjunto de etiquetas, puede agregar
otra condición para garantizar que el usuario proporcione al menos un valor. El ForAnyValue de la
condición garantiza que al menos uno de los valores especificados estará presente en la solicitud.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"ForAllValues:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
},
"ForAnyValue:StringLike": {
"s3:RequestObjectTagKeys": [
"Owner",
"CreationDate"
]
}
}
}
]
}
Para obtener más información, consulte Creación de una condición que pruebe valores de varias claves
(operaciones de definición) en la Guía del usuario de IAM.
Example 3: Permitir a un usuario agregar etiquetas de objetos que incluyan una clave y un valor
de una etiqueta específica
La siguiente política de usuario concede permisos a un usuario para realizar la acción
s3:PutObjectTagging, lo que permite al usuario agregar etiquetas a un objeto existente. La condición
requiere que el usuario incluya una etiqueta específica (Project) con un valor X.
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObjectTagging"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:RequestObjectTag/Project": "X"
}
}
}
]
}
Temas relacionados
Temas
• Administración de etiquetas de objetos mediante la consola (p. 124)
• Administración de etiquetas con el AWS SDK for Java (p. 124)
• Administración de etiquetas con el AWS SDK para .NET (p. 125)
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;
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);
Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
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;
Tagging = newTagSet
};
PutObjectTaggingResponse response2 = await
client.PutObjectTaggingAsync(putObjTagsRequest);
}
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);
}
}
}
}
• Acciones de transición: definen el momento en que los objetos pasan a otra clase de almacenamiento.
Por ejemplo, podría decidir pasar objetos a la clase de almacenamiento STANDARD_IA 30 días después
de su creación o archivar objetos en la clase de almacenamiento GLACIER un año después de su
creación.
Hay costos asociados con las solicitudes de transición de ciclo de vida. Para obtener información acerca
de los precios, consulte Precios de Amazon S3.
• Acciones de vencimiento: definen el momento en que vencen los objetos. Amazon S3 elimina
automáticamente los objetos que han vencido.
Los costos de vencimiento del ciclo de vida dependen de si elige provocar el vencimiento de los objetos.
Para obtener más información, consulte Configuración del vencimiento de objetos (p. 135).
Para obtener más información sobre las reglas del ciclo de vida, consulte Elementos de configuración del
ciclo de vida (p. 136).
• Si carga logs periódicos en un bucket, es posible que la aplicación los necesite durante una semana o
un mes. Una vez transcurrido ese tiempo, es posible que desee eliminarlos.
• Se obtiene acceso a algunos documentos con frecuencia durante un periodo limitado. Posteriormente,
se obtendrá acceso a ellos con poca frecuencia. En algún momento, es posible que no necesite acceso
en tiempo real a estos objetos, pero la organización o las normativas pueden requerir su archivado
durante un periodo específico. Transcurrido dicho periodo, podrá eliminarlos.
• Es posible que desee cargar algunos tipos de datos a Amazon S3 para su archivado. Por ejemplo,
podría archivar medios digitales, registros financieros y sanitarios, datos de secuencias genómicas
sin procesar, backups de bases de datos a largo plazo y datos que deben conservarse por motivos de
conformidad normativa.
Con las reglas de configuración del ciclo de vida, puede indicarle a Amazon S3 que pase los objetos a
otras clases de almacenamiento más económicas, que los archive o que los elimine.
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:
También puede configurar el ciclo de vida utilizando la consola de Amazon S3 o mediante programación
con las bibliotecas de encapsulamiento del SDK de AWS. Si lo necesita, también puede realizar las
llamadas a la API REST directamente. Para obtener más información, consulte Configuración del ciclo de
vida de un bucket (p. 154).
Temas
• Transición de objetos con el ciclo de vida de Amazon S3 (p. 129)
• Configuración del vencimiento de objetos (p. 135)
• Configuraciones del ciclo de vida y otras configuraciones del bucket (p. 135)
• Si sabe que se obtiene acceso a determinados objetos con poca frecuencia, puede pasarlos a la clase
de almacenamiento STANDARD_IA.
• Se recomienda archivar los objetos a los que no necesita obtener acceso en tiempo real en la clase de
almacenamiento GLACIER.
En las siguientes secciones se describen las transiciones admitidas, las limitaciones relacionadas y la
transición a la clase de almacenamiento GLACIER.
Amazon S3 admite un modelo en cascada para las transiciones entre clases de almacenamiento, tal y
como se muestra en el siguiente diagrama.
Amazon S3 admite las siguientes transiciones de ciclo de vida entre clases de almacenamiento con una
configuración del ciclo de vida:
Las transiciones de clases de almacenamiento de ciclo de vida tienen las siguientes limitaciones:
• De las clases de almacenamiento STANDARD a STANDARD_IA o ONEZONE_IA. Se aplican las
siguientes limitaciones:
• En los objetos más grandes se pueden obtener ventajas económicas de la transición a la clase de
almacenamiento STANDARD_IA u ONEZONE_IA. Amazon S3 no pasa objetos que tengan un tamaño
menor que 128 KB a las clases de almacenamiento STANDARD_IA u ONEZONE_IA, ya que no
resulta rentable.
• Los objetos se deben almacenar 30 días como mínimo en la clase de almacenamiento actual
antes de que se puedan pasar a la clase de almacenamiento STANDARD_IA o ONEZONE_IA. Por
ejemplo, no puede crear una regla de ciclo de vida para pasar objetos a la clase de almacenamiento
STANDARD_IA un día después de su creación.
Amazon S3 no pasa objetos durante los primeros 30 días porque se suele obtener acceso a los
objetos más nuevos con mayor frecuencia o estos se eliminan antes de lo que corresponde para las
clases de almacenamiento STANDARD_IA o ONEZONE_IA.
• Si pasa objetos no actuales (en los buckets con control de versiones), solo podrá pasarlos a las clases
de almacenamiento STANDARD_IA o ONEZONE_IA si cumplen la condición de ser no actuales
durante, al menos, 30 días.
• De la clase de almacenamiento STANDARD IA a ONEZONE_IA. Se aplican las siguientes limitaciones:
• Los objetos se deben almacenar 30 días como mínimo en la clase de almacenamiento STANDARD_IA
antes de que se puedan pasar a la clase de almacenamiento ONEZONE_IA.
Puede combinar estas acciones de ciclo de vida para administrar el ciclo de vida completo de un objeto.
Por ejemplo, supongamos que los objetos que crea tienen un ciclo de vida bien definido. Al principio, se
obtiene acceso a los objetos con frecuencia durante un periodo de 30 días. Posteriormente, se obtiene
acceso a los objetos con poca frecuencia durante un periodo máximo de 90 días. Transcurrido ese tiempo,
los objetos ya no son necesarios, por lo que podría archivarlo o eliminarlos.
En esta situación, puede crear una regla de ciclo de vida en la que especifique la acción de transición
inicial a la clase de almacenamiento INTELLIGENT_TIERING, STANDARD_IA u ONEZONE_IA, otra
acción de transición al almacenamiento GLACIER para el archivado y una acción de vencimiento. A
medida que se mueven los objetos de una clase de almacenamiento a otra, se ahorra en costos de
almacenamiento. Para obtener más información acerca de las consideraciones sobre costos, consulte
Precios de Amazon S3.
Important
No se puede especificar una única regla de ciclo de vida para las transiciones a las clases de
almacenamiento INTELLIGENT_TIERING (o STANDARD_IA u ONEZONE_IA) y GLACIER o
DEEP_ARCHIVE cuando la transición al almacenamiento GLACIER o DEEP_ARCHIVE tiene
lugar antes de que transcurran 30 días desde la transición a las clases de almacenamiento
INTELLIGENT_TIERING, STANDARD_IA u ONEZONE_IA. Esto es debido a que hay un
cargo de almacenamiento mínimo de 30 días asociado a las clases de almacenamiento
INTELLIGENT_TIERING, STANDARD_IA y ONEZONE_IA.
Este mismo cargo mínimo de 30 días se aplica cuando se especifica una transición del
almacenamiento STANDARD_IA al almacenamiento ONEZONE_IA o INTELLIGENT_TIERING.
Puede especificar dos reglas para lograrlo, pero deberá pagar los cargos de almacenamiento
mínimos. Para obtener más información acerca de las consideraciones sobre costos, consulte
Precios de Amazon S3.
Antes de archivar objetos, lea las siguientes secciones, donde encontrará consideraciones pertinentes.
Consideraciones generales
A continuación, se proporcionan consideraciones generales para que tenga en cuenta antes de archivar
objetos:
• Los objetos cifrados siguen estando cifrados durante todo el proceso de transición de la clase de
almacenamiento.
• Los objetos que se almacenan en las clases GLACIER o DEEP_ARCHIVE no están disponibles en
tiempo real.
Los objetos archivados son objetos de Amazon S3, pero antes de poder obtener acceso a un objeto
archivado, debe primero restaurar una copia temporal de este. La copia del objeto restaurado solo está
disponible durante el tiempo que especifique en la solicitud de restauración. Después de ese periodo,
Amazon S3 elimina la copia temporal y el objeto permanece archivado en Amazon S3 Glacier.
Puede restaurar un objeto usando la consola de Amazon S3 o mediante programación con las
bibliotecas de encapsulamiento de los SDK de AWS o la API de REST de Amazon S3 en su código.
Para obtener más información, consulte Restaurar objetos archivados (p. 258).
• Los objetos almacenados en la clase GLACIER solo se pueden pasar a la clase de almacenamiento
DEEP_ARCHIVE.
Puede usar una regla de configuración del ciclo de vida para convertir la clase de almacenamiento de
un objeto de GLACIER a la clase de almacenamiento DEEP_ARCHIVE solamente. Si desea cambiar la
clase de almacenamiento de un objeto almacenado en GLACIER a otra clase de almacenamiento que
no sea DEEP_ARCHIVE, debe usar primero la operación de restauración para hacer una copia temporal
del objeto. A continuación, utilice la operación de copia para sobrescribir el objeto especificando
STANDARD, INTELLIGENT_TIERING, STANDARD_IA, ONEZONE_IA o REDUCED_REDUNDANCY.
• La transición de objetos a la clase de almacenamiento DEEP_ARCHIVE es unidireccional.
No puede usar una regla de configuración del ciclo de vida para convertir la clase de almacenamiento de
un objeto de DEEP_ARCHIVE a cualquier otra clase de almacenamiento. Si desea cambiar la clase de
almacenamiento de un objeto archivado a otra clase de almacenamiento, debe usar primero la operación
de restauración para hacer una copia temporal del objeto. A continuación, utilice la operación de copia
para sobrescribir el objeto especificando STANDARD, INTELLIGENT_TIERING, STANDARD_IA,
ONEZONE_IA, GLACIER o REDUCED_REDUNDANCY como clase de almacenamiento.
• Los objetos que se almacenan en las clases GLACIER y DEEP_ARCHIVE solo son visibles y están
disponibles mediante Amazon S3. No están disponibles a través del servicio Amazon S3 Glacier.
Son objetos de Amazon S3 y solo puede obtener acceso a ellos por medio de la consola de Amazon S3
o la API de Amazon S3. No puede obtener acceso a los objetos archivados a través de la consola de
Amazon S3 Glacier ni de la API de Amazon S3 Glacier.
Si tiene previsto archivar datos a los cuales se obtiene acceso con poca frecuencia durante un período
de meses o años, las clases de almacenamiento GLACIER y DEEP_ARCHIVE pueden reducir los costos
de almacenamiento. Sin embargo, para asegurarse de que la clase de almacenamiento GLACIER o
DEEP_ARCHIVE es apropiada para usted, debe considerar lo siguiente:
• Por cada objeto que se archiva en GLACIER o DEEP_ARCHIVE, Amazon S3 usa 8 KB de
almacenamiento para el nombre del objeto y otros metadatos. Amazon S3 almacena estos metadatos
para que pueda obtener una lista en tiempo real de los objetos archivados por medio de la API
de Amazon S3. Para obtener más información, consulte Get Bucket (List Objects). Por este
almacenamiento adicional se aplican las tarifas ESTÁNDAR de Amazon S3.
• Por cada objeto que se archiva en GLACIER o DEEP_ARCHIVE, Amazon S3 añade 32 KB de
almacenamiento para el índice y los metadatos relacionados. Estos datos adicionales son necesarios
para identificar y restaurar su objeto. Por este almacenamiento adicional se aplican las tarifas de
GLACIER o DEEP_ARCHIVE.
Si archiva objetos pequeños, tenga en cuenta estos cargos de almacenamiento. Asimismo, considere la
posibilidad de agregar muchos objetos pequeños a una cantidad más pequeña de objetos grandes para
reducir los costos generales.
Versión de API 2006-03-01
133
Amazon Simple Storage Service Guía del desarrollador
Consideraciones adicionales
• Cantidad de días prevista para tener los objetos archivados: GLACIER y DEEP_ARCHIVE son
soluciones de archivado a largo plazo. El periodo mínimo de almacenamiento es de 90 días para la
clase de almacenamiento GLACIER y de 180 para DEEP_ARCHIVE. La eliminación de datos que están
archivados en Amazon S3 Glacier es gratis si los objetos que elimina se archivan durante más tiempo
que el periodo mínimo de almacenamiento. Si elimina o sobrescribe un objeto archivado antes de que
transcurra el periodo mínimo, Amazon S3 aplica una tarifa de eliminación anticipada prorrateada.
• Cargos de solicitud de archivado en GLACIER y DEEP_ARCHIVE de Amazon S3: cada objeto que pasa
a la clase de almacenamiento GLACIER o DEEP_ARCHIVE constituye una solicitud de transición. Se
aplica un costo para cada solicitud. Si tiene previsto pasar una cantidad grande de objetos, tenga en
cuenta los costos de solicitud. Si archiva objetos pequeños, considere la posibilidad de agregar muchos
objetos pequeños a menos objetos grandes para reducir los costos de las solicitudes de transición.
• Cargos de restauración de datos de GLACIER y DEEP_ARCHIVE de Amazon S3: GLACIER y
DEEP_ARCHIVE están diseñadas para el archivado a largo plazo de datos a los que se obtiene acceso
con poca frecuencia. Para obtener más información acerca de los cargos de restauración de datos,
consulte ¿Cuánto cuesta recuperar datos de Amazon S3 Glacier? en las preguntas frecuentes de
Amazon S3. Para obtener información acerca de cómo restaurar datos de Amazon S3 Glacier, consulte
Restaurar objetos archivados (p. 258).
Cuando archiva objetos en Amazon S3 Glacier por medio de la administración del ciclo de vida de un
objeto, Amazon S3 realiza la transición de estos objetos de manera asincrónica. Es posible que haya un
retraso entre la fecha de transición de la regla de configuración del ciclo de vida y la fecha de la transición
física. Se le aplican los precios de Amazon S3 Glacier según la fecha de transición especificada en la
regla.
En la página de detalles del producto Amazon S3 se proporciona información sobre precios y ejemplos de
cálculos para el archivo de objetos de Amazon S3. Para obtener más información, consulte los siguientes
temas:
• ¿Cómo se calcula mi costo de almacenamiento para los objetos de Amazon S3 archivados en Amazon
S3 Glacier?
• ¿Cómo se me cobrará por eliminar objetos de Amazon S3 Glacier que tengan menos de tres meses?
• ¿Cuánto cuesta recuperar datos de Amazon S3 Glacier?
• Precios de Amazon S3 para conocer los costos de almacenamiento de las diferentes clases de
almacenamiento.
Puede restaurar una copia de objeto,mediante programación o utilizando la consola de Amazon S3.
Amazon S3 solo procesa una solicitud de restauración a la vez por objeto. Para obtener más información,
consulte Restaurar objetos archivados (p. 258).
Para conocer cuándo está previsto el vencimiento de un objeto, utilice las operaciones HEAD Object o
GET Object de la API. Estas operaciones de la API devuelven encabezados de respuesta que facilitan esta
información.
Si crea una regla de vencimiento del ciclo de vida para provocar el vencimiento de objetos que han estado
en la clase de almacenamiento INTELLIGENT_TIERING, STANDARD_IA u ONEZONE_IA durante menos
de 30 días, se le cobrarán 30 días. Si crea una regla de vencimiento del ciclo de vida para provocar el
vencimiento de objetos que han estado en el almacenamiento GLACIER durante menos de 90 días, se
le cobrarán 90 días. Si crea una regla de vencimiento del ciclo de vida para provocar el vencimiento de
los objetos que han estado en el almacenamiento DEEP_ARCHIVE durante menos de 180 días, se le
cobrarán 180 días. Para obtener más información, consulte Precios de Amazon S3.
Un bucket habilitado para el control de versiones mantiene una versión actual del objeto y cero o más
versiones no actuales del objeto. Puede definir diferentes reglas de ciclo de vida para las versiones
actuales y no actuales del objeto.
Para obtener más información, consulte Elementos de configuración del ciclo de vida (p. 136).
Para obtener más información acerca del control de versiones, consulte Control de versiones de
objetos (p. 115).
Si tiene el registro habilitado en su bucket, los registros de acceso del servidor de Amazon S3 notifican los
resultados de las siguientes operaciones:
Note
Más información
La configuración del ciclo de vida se especifica mediante un XML que consiste en una o varias reglas de
ciclo de vida.
<LifecycleConfiguration>
<Rule>
...
</Rule>
<Rule>
...
</Rule>
</LifecycleConfiguration>
• Metadatos de la regla, que incluyen un ID de regla y un estado que indica si esta está activada
o desactivada. Si una regla está desactivada, Amazon S3 no realiza ninguna de las acciones
especificadas en ella.
• Un filtro que identifica los objetos sobre los que se aplica la regla. Puede especificar un filtro utilizando
un prefijo de clave de objeto, una o varias etiquetas de objeto, o ambos métodos.
• Una o varias acciones de transición o vencimiento con una fecha o un periodo de tiempo en la vida del
objeto en el que quiera que Amazon S3 realice la acción especificada.
En las siguientes secciones se describen los elementos XML de una configuración de ciclo de vida.
Para ver configuraciones de ciclo de vida de ejemplo, consulte Ejemplos de configuración del ciclo de
vida (p. 143).
Elemento ID
Una configuración de ciclo de vida puede tener hasta 1000 reglas. El elemento <ID> identifica
unívocamente una regla. La longitud del ID está limitada a 255 caracteres.
Elemento Status
El valor del elemento <Status> puede ser Enabled o Disabled. Si una regla está desactivada, Amazon S3
no realiza ninguna de las acciones definidas en ella.
Elemento Filter
Una regla de ciclo de vida se puede aplicar a todos los objetos o a un subconjunto de los objetos de un
bucket, en función del elemento <Filter> que especifique en la regla de ciclo de vida.
Puede filtrar los objetos por prefijo de clave, etiquetas de objeto o una combinación de ambos factores (en
cuyo caso, Amazon S3 utilizará un operador lógico AND para combinar los filtros). Considere los siguientes
ejemplos:
• Especificación de un filtro mediante prefijos de clave: en este ejemplo se muestra una regla de ciclo de
vida que se aplica a un subconjunto de objetos en función del prefijo del nombre de la clave (logs/).
Por ejemplo, la regla del ciclo de vida se aplica a los objetos logs/mylog.txt, logs/temp1.txt y
logs/test.txt. La regla no se aplica al objeto example.jpg.
<LifecycleConfiguration>
<Rule>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>
...
</LifecycleConfiguration>
Si quiere aplicar una acción de ciclo de vida a un subconjunto de objetos en función de diferentes
prefijos de nombres de clave, especifique reglas por separado. En cada regla, especifique un filtro
basado en prefijos. Por ejemplo, para describir una acción de ciclo de vida para objetos con los prefijos
de clave projectA/ y projectB/, debe especificar dos reglas como se muestra a continuación:
<LifecycleConfiguration>
<Rule>
<Filter>
<Prefix>projectA/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>
<Rule>
<Filter>
<Prefix>projectB/</Prefix>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>
Para obtener más información sobre las claves de objetos, consulte Claves de objeto (p. 105).
• Especificación de un filtro mediante etiquetas de objetos: en el siguiente ejemplo, la regla del ciclo de
vida especifica un filtro basado en la etiqueta (clave) y el valor (valor). La regla se aplica solo a un
subconjunto de objetos que tengan la etiqueta específica.
<LifecycleConfiguration>
<Rule>
<Filter>
<Tag>
<Key>key</Key>
<Value>value</Value>
</Tag>
</Filter>
transition/expiration actions.
...
</Rule>
</LifecycleConfiguration>
Puede especificar un filtro sobre la base de varias etiquetas. Debe envolver las etiquetas con el
elemento <AND> mostrado en el siguiente ejemplo. La regla indica a Amazon S3 que debe realizar
acciones de ciclo de vida en objetos con dos etiquetas (con la clave y el valor específicos de la etiqueta).
<LifecycleConfiguration>
<Rule>
<Filter>
<And>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</And>
</Filter>
transition/expiration actions.
</Rule>
</Lifecycle>
La regla de ciclo de vida se aplica solo a objetos que tengan la etiqueta específica. Amazon S3 realiza
una operación lógica AND. Tenga en cuenta lo siguiente:
• Cada etiqueta debe coincidir exactamente tanto con la clave como con el valor.
• La regla se aplica al subconjunto formado por los objetos que tengan etiquetas especificadas en la
regla. No importa si un objeto tiene especificadas etiquetas adicionales.
Note
Al especificar varias etiquetas en un filtro, cada clave de etiqueta ha de ser exclusiva.
• Especificación de un filtro utilizando tanto prefijos como una o varias etiquetas de objetos: en una regla
de ciclo de vida, puede especificar un filtro basado tanto en el prefijo de clave como en una o varias
etiquetas. De nuevo, debe envolver todos estos elementos con el elemento <And> como se muestra en
el siguiente ejemplo:
<LifecycleConfiguration>
<Rule>
<Filter>
<And>
<Prefix>key-prefix</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</And>
</Filter>
<Status>Enabled</Status>
transition/expiration actions.
</Rule>
</LifecycleConfiguration>
Amazon S3 combina estos filtros con el operador lógico AND. Es decir, la regla se aplica a un
subconjunto de objetos con un prefijo de clave específico y etiquetas específicas. Un filtro solo puede
tener un prefijo y ninguna, una o varias etiquetas.
• Puede especificar un filtro vacío, en cuyo caso, la regla se aplicará a todos los objetos del bucket.
<LifecycleConfiguration>
<Rule>
<Filter>
</Filter>
<Status>Enabled</Status>
transition/expiration actions.
</Rule>
</LifecycleConfiguration>
• Elemento de acción Transition: puede especificar la acción Transition para pasar objetos de una
clase de almacenamiento a otra. Para obtener más información acerca de las transiciones de objetos,
consulte Transiciones admitidas y limitaciones relacionadas (p. 129). Cuando se llega a una fecha o
periodo de tiempo específico en la vida útil del objeto, Amazon S3 lleva a cabo la transición.
Para un bucket con control de versiones (un bucket con el control de versiones habilitado o suspendido),
la acción Transition se aplica a la versión del objeto actual. Para administrar las versiones no
actuales, Amazon S3 define la acción NoncurrentVersionTransition (que se describe a
continuación).
• Elemento de acción Expiration: la acción Expiration hace que caduquen objetos identificados por la
regla y se aplica a los objetos elegibles de cualquiera de las clases de almacenamiento de Amazon S3.
Para obtener más información sobre clases de almacenamiento, consulte Clases de almacenamiento
de Amazon S3 (p. 110). Amazon S3 hace que todos los objetos vencidos dejen de estar disponibles.
La eliminación permanente de los objetos dependerá del estado del bucket en relación con el control de
versiones.
Important
Las políticas de ciclo de vida de vencimiento de objetos no eliminan las cargas multiparte
incompletas. Para eliminar las cargas multiparte incompletas, deberá usar la acción de
configuración de ciclo de vida AbortIncompleteMultipartUpload que se describe más adelante en
esta sección.
• Bucket sin control de versiones: la acción Expiration da como resultado la eliminación permanente
del objeto por parte de Amazon S3.
• Bucket con control de versiones: para un bucket con control de versiones (un bucket con el control
de versiones habilitado o suspendido), hay varias consideraciones que se deben tener en cuenta en
relación con cómo administra Amazon S3 la acción expiration. Para obtener más información,
consulte Uso del control de versiones (p. 449). Independientemente del estado del control de
versiones, se ha de aplicar lo siguiente:
• La acción Expiration solo se aplica a la versión actual (no tiene ningún impacto sobre las
versiones del objeto no actuales).
• Amazon S3 no realiza ninguna acción si hay una o varias versiones del objeto y el marcador de
eliminación es la versión actual.
• Si la versión actual del objeto es la única versión del objeto y, además, es un marcador de
eliminación (también denominado marcador de eliminación de objeto vencido, en el que todas
las versiones del objeto se han eliminado y solo queda un marcador de eliminación), Amazon
S3 elimina el marcador de eliminación del objeto vencido. También puede usar la acción de
vencimiento para ordenar a Amazon S3 que elimine los marcadores de eliminación de objeto
vencidos. Para ver un ejemplo, consulte Ejemplo 7: eliminación de marcadores de eliminación de
objetos que vencieron (p. 151).
Además, Amazon S3 facilita las siguientes acciones que puede utilizar para administrar las versiones de
objetos no actuales en un bucket con control de versiones (en buckets con control de versiones activado o
suspendido).
• Elemento de acción NoncurrentVersionTransition: use esta acción para especificar durante cuánto
tiempo (a partir del momento en el que los objetos dejan de ser actuales) quiere que los objetos
permanezcan en la clase de almacenamiento actual antes de que Amazon S3 los envíe a la clase de
almacenamiento especificada. Para obtener más información acerca de las transiciones de objetos,
consulte Transiciones admitidas y limitaciones relacionadas (p. 129).
• Elemento de acción NoncurrentVersionExpiration: use esta acción para especificar durante cuánto
tiempo (a partir del momento en el que los objetos dejan de ser actuales) quiere conservar las versiones
de objetos no actuales antes de que Amazon S3 las elimine permanentemente. El objeto eliminado no se
puede recuperar.
Esta eliminación retrasada de objetos no actuales puede resultar útil si necesita corregir eliminaciones
o sobrescrituras accidentales. Por ejemplo, puede configurar una regla de vencimiento para eliminar las
versiones no actuales después de cinco días desde que dejan de ser actuales. Por ejemplo, suponga
que el 01/01/2014 a las 10:30 h UTC creó un objeto denominado photo.gif (ID de versión 111111). El
02/01/2014 a las 11:30 h UTC, eliminó por accidente photo.gif (ID de versión 111111), lo que crea un
marcador de eliminación con un nuevo ID de versión (por ejemplo, ID de versión 4857693). A partir de
este momento tendrá cinco días para recuperar la versión original de photo.gif (ID de versión 111111)
antes de que la eliminación sea permanente. El 08/01/2014 a las 00:00 h UTC, se ejecutará la regla del
ciclo de vida para el vencimiento y se eliminará permanentemente photo.gif (ID de versión 111111),
cinco días después de que la versión dejase de ser actual.
Important
Las políticas de ciclo de vida de vencimiento de objetos no eliminan las cargas multiparte
incompletas. Para eliminar las cargas multiparte incompletas, deberá usar la acción de
configuración de ciclo de vida AbortIncompleteMultipartUpload que se describe más adelante en
esta sección.
Además de las acciones de transición y vencimiento, puede usar la siguiente acción de configuración del
ciclo de vida para ordenar a Amazon S3 que aborte las cargas multiparte incompletas.
No puede especificar esta acción de ciclo de vida en una regla que establezca un filtro basado
en etiquetas de objetos.
• Elemento de acción ExpiredObjectDeleteMarker: en un bucket con control de versiones habilitado, un
marcador de eliminación sin versiones no actuales se denomina marcador de eliminación del objeto
vencido. Puede usar esta acción del ciclo de vida para ordenar a S3 que elimine los marcadores de
eliminación del objetos vencidos. Para ver un ejemplo, consulte Ejemplo 7: eliminación de marcadores
de eliminación de objetos que vencieron (p. 151).
Note
No puede especificar esta acción de ciclo de vida en una regla que establezca un filtro basado
en etiquetas de objetos.
1. Al copiar una versión no actual del objeto en el mismo bucket. El objeto copiado se convierte en
la versión actual del mismo, y se conservan todas las versiones del objeto.
2. Al eliminar permanentemente la versión actual del objeto. Al eliminar la versión actual del
objeto, en efecto, estará convirtiendo la versión no actual en la versión actual del mismo.
Al usar reglas de configuración del ciclo de vida en buckets con control de versiones, nuestra
recomendación es que use el primer método.
Dada la semántica de consistencia final de Amazon S3, una versión actual eliminada
permanentemente podría no desaparecer hasta que se propaguen los cambios (ya que
Amazon S3 podría no ser consciente de dicha eliminación). Mientras tanto, la regla del ciclo
de vida que haya configurado para hacer que venzan los objetos no actuales podría eliminar
permanentemente los objetos no actuales, incluido el que quiera restaurar. Por tanto, copiar la
versión antigua, como se recomienda en el primer método, es la alternativa más segura.
• 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.
• 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.
Si especifica una acción de ciclo de vida con una fecha en el pasado, todos los objetos cualificados serán
inmediatamente aptos para esa acción de ciclo de vida.
Important
La acción basada en la fecha no es una acción puntual. S3 seguirá aplicando la acción basada
en la fecha incluso después de que esta haya pasado, siempre que el estado de la regla sea
Enabled.
Por ejemplo, supongamos que especifica una acción de vencimiento basada en una fecha para
eliminar todos los objetos (y supongamos también que la regla no especifica filtro alguno). En
la fecha especificada, S3 hace que venzan todos los objetos del bucket. S3 también seguirá
haciendo que venzan los nuevos objetos creados en el bucket. Para detener la acción del ciclo de
vida, debe eliminar la acción de la configuración del ciclo de vida, deshabilitar la regla o eliminar la
regla de la configuración del ciclo de vida.
El valor de la fecha debe estar en formato ISO 8601. La hora siempre es medianoche UTC.
Note
No puede crear reglas de ciclo de vida basadas en una fecha con la consola de Amazon S3, pero
sí que puede usarla para ver, deshabilitar o eliminar dichas reglas.
Temas
• Ejemplo 1: especificación de un filtro (p. 144)
• Ejemplo 2: deshabilitación de una regla de ciclo de vida (p. 145)
• Ejemplo 3: Transición entre clases de almacenamiento durante la vida útil de un objeto (p. 146)
• Ejemplo 4: Especificación de varias reglas (p. 147)
• Ejemplo 5: superposición de filtros, conflictos entre acciones de ciclo de vida y lo que Amazon S3 hace
(p. 148)
• Ejemplo 6: especificación de una regla de ciclo de vida para un bucket habilitado para el control de
versiones (p. 151)
• Ejemplo 7: eliminación de marcadores de eliminación de objetos que vencieron (p. 151)
• Ejemplo 8: configuración de ciclo de vida para anular cargas multipartes (p. 153)
• 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.
<LifecycleConfiguration>
<Rule>
<ID>Transition and Expiration Rule</ID>
<Filter>
<Prefix>tax/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
En lugar de especificar la antigüedad del objeto en términos de días después de su creación, puede
especificar una fecha para cada acción. Sin embargo, no puede usar Date y Days en la misma regla.
• Si desea que la regla de ciclo de vida se aplique a todos los objetos en el bucket, especifique un prefijo
vacío. En la siguiente configuración, la regla especifica una acción Transition que indica a Amazon
S3 que pase objetos a la clase de almacenamiento GLACIER 0 días después de su creación; en este
caso, los objetos reúnen los requisitos para archivarse en Amazon S3 Glacier a la medianoche UTC
después de su creación.
<LifecycleConfiguration>
<Rule>
<ID>Archive all object same-day upon creation</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
• Puede especificar cero o un prefijo de nombre de clave y cero o más etiquetas de objetos en un filtro.
El siguiente ejemplo de código aplica la regla de ciclo de vida a un subconjunto de objetos con el prefijo
de clave tax/ y a objetos que tienen dos etiquetas con clave y valor específicos. Tenga en cuenta que
cuando especifica más de un filtro, debe incluir AND como se muestra (Amazon S3 aplica un AND lógico
para combinar las condiciones del filtro especificadas).
...
<Filter>
<And>
<Prefix>tax/</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
</And>
</Filter>
...
• Puede filtrar objetos solo según etiquetas. Por ejemplo, la siguiente regla de ciclo de vida se aplica a
objetos que tienen dos etiquetas especificadas (no especifica ningún prefijo):
...
<Filter>
<And>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
</And>
</Filter>
...
Important
Cuando tiene varias reglas en una configuración de ciclo de vida, un objeto puede reunir los
requisitos para varias acciones de ciclo de vida. Las reglas generales que Amazon S3 sigue en
tales casos son las siguientes:
Para ver ejemplos, consulte Ejemplo 5: superposición de filtros, conflictos entre acciones de ciclo
de vida y lo que Amazon S3 hace (p. 148)
• La regla 1 indica a Amazon S3 que pase los objetos con el prefijo logs/ a la clase de almacenamiento
GLACIER inmediatamente después de su creación.
• La regla 2 indica a Amazon S3 que pase los objetos con el prefijo documents/ a la clase de
almacenamiento GLACIER inmediatamente después de su creación.
En la política, la regla 1 está habilitada y la regla 2 está deshabilitada. Amazon S3 no realizará ninguna
acción con reglas deshabilitadas.
<LifecycleConfiguration>
<Rule>
<ID>Rule1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
<Rule>
<ID>Rule2</ID>
<Prefix>documents/</Prefix>
<Status>Disabled</Status>
<Transition>
<Days>0</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
La siguiente configuración de ciclo de vida especifica una regla que se aplica a objetos con el prefijo de
nombre de clave logs/. La regla especifica las siguientes acciones:
<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.
• La regla 1 se aplica a objetos con el prefijo de nombre de clave classA/. Le indica a Amazon S3
que pase los objetos a la clase de almacenamiento GLACIER un año después de su creación y que
provoque el vencimiento de estos objetos 10 años después de su creación.
• La regla 2 se aplica a objetos con el prefijo de nombre de clave classB/. Le indica a Amazon S3 que
pase los objetos a la clase de almacenamiento STANDARD_IA 90 días después de su creación y que los
elimine un año después de su creación.
<LifecycleConfiguration>
<Rule>
<ID>ClassADocRule</ID>
<Filter>
<Prefix>classA/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
<Rule>
<ID>ClassBDocRule</ID>
<Filter>
<Prefix>classB/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>90</Days>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
Por lo general, el ciclo de vida optimizará los costos. Por ejemplo, si dos políticas de vencimiento se
superponen, se respetará la política con una fecha de vencimiento anterior para que los datos no
permanezcan almacenados más tiempo de lo previsto.
Del mismo modo, si dos políticas de transición se superponen, el ciclo de vida pasará los objetos a
la clase de almacenamiento con costos inferiores. En ambos casos, el ciclo de vida intenta elegir la
opción que le resulte menos costosa. Una excepción a esta regla general es la clase de almacenamiento
INTELLIGENT_TIERING. El ciclo de vida preferirá INTELLIGENT_TIERING frente a cualquier otra clase de
almacenamiento, aparte de las clases de almacenamiento GLACIER y DEEP_ARCHIVE.
En los siguientes ejemplos se muestra cómo Amazon S3 elige resolver posibles conflictos.
El siguiente ejemplo de configuración tiene dos reglas que especifican prefijos superpuestos de la
siguiente manera:
• La primera regla especifica un filtro vacío que denota todos los objetos en el bucket.
• La segunda regla especifica un prefijo de nombre de clave logs/ que solo denota un subconjunto de
objetos.
La regla 1 le solicita a Amazon S3 que elimine todos los objetos un año después de su creación y la regla 2
le solicita a Amazon S3 que pase un subconjunto de objetos a la clase de almacenamiento STANDARD_IA
30 días después de su creación.
<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>30</Days>
</Transition>
</Rule>
</LifecycleConfiguration>
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 STANDARD_IA y la
otra regla desea que Amazon S3 provoque el vencimiento de los objetos al mismo tiempo.
<LifecycleConfiguration>
<Rule>
<ID>Rule 1</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Expiration>
<Days>365</Days>
</Expiration>
</Rule>
<Rule>
<ID>Rule 2</ID>
<Filter>
<Prefix>logs/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<StorageClass>STANDARD_IA<StorageClass>
<Days>365</Days>
</Transition>
</Rule>
</LifecycleConfiguration>
En este caso, como usted desea que los objetos venzan (se eliminen), no tiene sentido cambiar la clase de
almacenamiento, por lo que Amazon S3 simplemente opta por realizar la acción de vencimiento en estos
objetos.
Example 3: superposición de prefijos que causa conflictos entre acciones de ciclo de vida
En este ejemplo, la configuración tiene dos reglas que especifican prefijos superpuestos de la siguiente
manera:
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>
Example 4: filtros basados en etiquetas y conflictos entre acciones de ciclo de vida resultantes
Suponga que tiene la siguiente política de ciclo de vida que tiene dos reglas, cada una de las cuales
especifica un filtro de etiquetas:
• La regla 1 especifica un filtro basado en etiquetas (tag1/value1). Esta regla le indica a Amazon S3
que pase los objetos a la clase de almacenamiento GLACIER 365 días después de su creación.
• La regla 2 especifica un filtro basado en etiquetas (tag2/value2). Esta regla le indica a Amazon S3
que provoque el vencimiento de los objetos 14 días después de su creación.
<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.
Además, desea reducir los costos de almacenamiento mediante la transición de las versiones no actuales
a la clase de almacenamiento GLACIER 30 días después de que adquieren la condición de ser no actuales
(sobre la base de la suposición de que hay datos inactivos a los que no necesita obtener acceso en tiempo
real). Asimismo, también espera que disminuya la frecuencia de acceso de las versiones actuales a los
90 días después de su creación, por lo que puede elegir pasar estos objetos a la clase de almacenamiento
STANDARD_IA.
<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Filter>
<Prefix></Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>90</Days>
<StorageClass>STANDARD_IA</StorageClass>
</Transition>
<NoncurrentVersionTransition>
<NoncurrentDays>30</NoncurrentDays>
<StorageClass>GLACIER</StorageClass>
</NoncurrentVersionTransition>
<NoncurrentVersionExpiration>
<NoncurrentDays>365</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
En este ejemplo se muestra un caso en el que se pueden crear marcadores de eliminación de objetos que
vencieron en el bucket y cómo puede usar la configuración del ciclo de vida para indicarle a Amazon S3
que elimine los marcadores de eliminación de objetos que vencieron.
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>
En el caso de las versiones actuales de los objetos, tiene las siguientes opciones para administrar su vida
útil según si las versiones actuales de los objetos siguen o no un ciclo de vida bien definido:
• Las versiones actuales de los objetos siguen un ciclo de vida bien definido.
En este caso, puede usar una política de ciclo de vida con la acción de Expiration para indicarle a
Amazon S3 que elimine las versiones actuales como se muestra en el siguiente ejemplo:
<LifecycleConfiguration>
<Rule>
...
<Expiration>
<Days>60</Days>
</Expiration>
<NoncurrentVersionExpiration>
<NoncurrentDays>30</NoncurrentDays>
</NoncurrentVersionExpiration>
</Rule>
</LifecycleConfiguration>
Amazon S3 elimina las versiones actuales 60 días después de que se crearon añadiendo un marcador
de eliminación para cada versión actual del objeto. Esto convierte la versión actual en no actual y el
marcador de eliminación se convierte en la versión actual. Para obtener más información, consulte Uso
del control de versiones (p. 449).
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>
Por medio de la configuración de ciclo de vida, puede indicarle a Amazon S3 que anule las cargas
multipartes incompletas (identificadas por el prefijo de nombre de clave especificado en la regla) si no
se completan en una cantidad de días especificada después de iniciarse. Cuando Amazon S3 anula una
carga multiparte, elimina todas las partes asociadas con la carga multiparte. Esto garantiza que no tenga
cargas multipartes incompletas con partes que se almacenan en Amazon S3 y, por lo tanto, que no tenga
que pagar costos de almacenamiento por estas partes.
Note
El siguiente es un ejemplo de configuración de ciclo de vida que especifica una regla con la acción
AbortIncompleteMultipartUpload. Esta acción le solicita a Amazon S3 que anule las cargas
multipartes incompletas siete días después de iniciarse.
<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Filter>
<Prefix>SomeKeyPrefix/</Prefix>
</Filter>
<Status>rule-status</Status>
<AbortIncompleteMultipartUpload>
<DaysAfterInitiation>7</DaysAfterInitiation>
</AbortIncompleteMultipartUpload>
</Rule>
</LifecycleConfiguration>
En esta sección se explica cómo puede establecer configuraciones de ciclo de vida en un bucket mediante
programación con los SDK de AWS o con la consola de Amazon S3 o la AWS CLI. Tenga en cuenta lo
siguiente:
• Cuando añade una configuración de ciclo de vida a un bucket, por lo general se produce un cierto
desfase antes de que una configuración de ciclo de vida nueva o actualizada se propague totalmente a
todos los sistemas de Amazon S3. Habrá un retraso de algunos minutos antes de que la configuración
de ciclo de vida entre en vigor completamente. Este retraso también se puede producir cuando elimina
una configuración de ciclo de vida.
• Cuando deshabilita o elimina una regla de ciclo de vida, después de cierto retraso, Amazon S3 deja de
programar nuevos objetos para eliminación o transición. Cualquier objeto que ya haya sido programado
será desprogramado y no se eliminará ni trasladará.
• Cuando añade una configuración de ciclo de vida a un bucket, las reglas de configuración se aplican a
los objetos existentes y a los objetos que añade posteriormente. Por ejemplo, si hoy añade una regla
de configuración de ciclo de vida con una acción de vencimiento que causa que objetos con un prefijo
específico expiren 30 días después de la creación, Amazon S3 pondrá en cola de eliminación cualquier
objeto existente con más de 30 días de antigüedad.
• Es posible que haya un desfase entre la fecha en que se cumplen las reglas de configuración de ciclo
de vida y la fecha en que se realiza la acción para cumplir la regla. Sin embargo, los cambios en la
facturación se producen ni bien se cumple la regla de configuración de ciclo de vida, incluso aunque
la acción todavía no se haya realizado. Un ejemplo es cuando no se le cobra por el almacenamiento
después del tiempo de vencimiento del objeto, incluso aunque el objeto no se elimine inmediatamente.
Otro ejemplo es cuando se le cobran las tarifas de almacenamiento de Amazon S3 Glacier en cuanto
transcurre el tiempo de transición del objeto, incluso aunque el objeto no se traslade de inmediato a la
clase de almacenamiento GLACIER. Las transiciones del ciclo de vida a la clase de almacenamiento
INTELLIGENT_TIERING son la excepción y los cambios en la facturación no se producen hasta que el
objeto pasa a la clase de almacenamiento INTELLIGENT_TIERING.
Para obtener información acerca de la configuración del ciclo de vida, consulte Administración del ciclo de
vida de los objetos (p. 127).
Para obtener instrucciones acerca de cómo configurar reglas de ciclo de vida con la Consola de
administración de AWS, consulte ¿Cómo creo una política de ciclo de vida para un bucket de S3? en la
Guía del usuario de la consola de Amazon Simple Storage Service
• put-bucket-lifecycle-configuration
• get-bucket-lifecycle-configuration
• delete-bucket-lifecycle
Para obtener instrucciones para configurar la AWS CLI consulte Configuración de la CLI de
AWS (p. 704).
Tenga en cuenta que la configuración de ciclo de vida de Amazon S3 es un archivo XML. Pero cuando
utiliza la interfaz de línea de comandos (CLI), no puede especificar el XML, en lugar de eso, debe
especificar JSON. A continuación se describen ejemplos de configuraciones de ciclo de vida de XML y
JSON equivalentes que puede especificar en el comando de la CLI de AWS:
<LifecycleConfiguration>
<Rule>
<ID>ExampleRule</ID>
<Filter>
<Prefix>documents/</Prefix>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>365</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
<Expiration>
<Days>3650</Days>
</Expiration>
</Rule>
</LifecycleConfiguration>
{
"Rules": [
{
"Filter": {
"Prefix": "documents/"
},
"Status": "Enabled",
"Transitions": [
{
"Days": 365,
"StorageClass": "GLACIER"
}
],
"Expiration": {
"Days": 3650
},
"ID": "ExampleRule"
}
]
}
<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>
{
"Rules": [
{
"ID": "id-1",
"Filter": {
"And": {
"Prefix": "myprefix",
"Tags": [
{
"Value": "mytagvalue1",
"Key": "mytagkey1"
},
{
"Value": "mytagvalue2",
"Key": "mytagkey2"
}
]
}
},
"Status": "Enabled",
"Expiration": {
"Days": 1
}
}
]
}
--bucket bucketname \
--lifecycle-configuration file://lifecycle.json
3. Para verificar, recupere la configuración del ciclo de vida con el comando get-bucket-lifecycle-
configuration de AWS CLI de la siguiente manera:
Administración del ciclo de vida de los objetos con AWS SDK for
Java
Puede utilizar AWS SDK for Java para administrar la configuración del ciclo de vida de un bucket.
Para obtener más información acerca de cómo administrar la configuración del ciclo de vida, consulte
Administración del ciclo de vida de los objetos (p. 127).
Note
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:
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketLifecycleConfiguration;
import com.amazonaws.services.s3.model.BucketLifecycleConfiguration.Transition;
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// 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));
// Verify that the configuration has been deleted by attempting to retrieve it.
configuration = s3Client.getBucketLifecycleConfiguration(bucketName);
String s = (configuration == null) ? "No configuration found." : "Configuration
found.";
System.out.println(s);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
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:
Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class LifecycleTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
AddUpdateDeleteLifecycleConfigAsync().Wait();
}
}
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);
}
}
En esta sección, se proporciona información general acerca del CORS. En los subtemas, se describe
cómo se puede habilitar el CORS con la consola de Amazon S3 o, mediante programación, con los SDK
de AWS y la API de REST de Amazon S3.
Temas
• Uso compartido de recursos entre orígenes: casos de uso (p. 163)
• ¿Cómo configuro el CORS en mi bucket? (p. 163)
• ¿Cómo Amazon S3 evalúa la configuración CORS en un bucket? (p. 166)
• Habilitación del uso compartido de recursos entre orígenes (CORS) (p. 166)
• Solución de problemas del uso compartido de recursos entre orígenes (CORS) (p. 172)
• Escenario 1: Suponga que aloja un sitio web en un bucket de Amazon S3 denominado website como
se describe en Alojamiento de un sitio web estático en Amazon S3 (p. 523). Sus usuarios cargan el
punto de enlace de sitio web http://website.s3-website-us-east-1.amazonaws.com. Ahora
desea usar el código JavaScript en la páginas web que se almacenan en este bucket para poder realizar
solicitudes GET y PUT autenticadas con el mismo bucket mediante el punto de enlace de la API de
Amazon S3 para el bucket, website.s3.amazonaws.com. Un navegador, por lo general, bloquearía el
código JavaScript y no permitiría realizar esas solicitudes, pero con el CORS puede configurar el bucket
para que se habiliten de manera explícita las solicitudes entre orígenes de website.s3-website-us-
east-1.amazonaws.com.
• Escenario 2: Suponga que desea alojar una fuente web en un bucket de S3. Nuevamente, los
navegadores requieren una comprobación del CORS (también conocida como comprobación preliminar)
para la carga de fuentes web, por lo que configuraría el bucket que aloja la fuente web para que permita
que cualquier origen realice estas solicitudes
Puede añadir hasta 100 reglas a la configuración. Puede añadir el documento XML como subrecurso cors
al bucket mediante programación o mediante la consola de Amazon S3. Para obtener más información,
consulte Habilitación del uso compartido de recursos entre orígenes (CORS) (p. 166).
En lugar de obtener acceso a un sitio web con el punto de enlace del sitio web de Amazon S3, puede
usar su propio dominio, como example1.com, para alojar su contenido. Para obtener información
acerca de su propio dominio, consulte Ejemplo: configuración de un sitio web estático con un dominio
personalizado (p. 540). En el siguiente ejemplo, la configuración cors tiene tres reglas, que se
especifican como elementos CORSRule:
• La primera regla permite solicitudes PUT, POST y DELETE entre orígenes del origen http://
www.example1.com. La regla también permite todos los encabezados en una solicitud OPTIONS
de comprobación preliminar a través del encabezado Access-Control-Request-Headers. Como
respuesta a solicitudes OPTIONS de comprobación preliminar, Amazon S3 devuelve los encabezados
solicitados.
• La segunda regla permite las mismas solicitudes entre orígenes que la primera, pero se aplica a otro
origen, http://www.example2.com.
• La tercera regla permite solicitudes GET entre orígenes de todos los orígenes. El carácter comodín *
hace referencia a todos los orígenes.
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://www.example1.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>http://www.example2.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
<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>
• MaxAgeSeconds: especifica la cantidad de tiempo en segundos (en este ejemplo, 3000) que el
navegador almacena en caché una respuesta de Amazon S3 a una solicitud OPTIONS de comprobación
preliminar para el recurso especificado. Mediante el almacenamiento en caché de la respuesta, el
navegador no tiene que enviar solicitudes de comprobación preliminar a Amazon S3 si se repetirá la
solicitud original.
• ExposeHeader: identifica los encabezados de respuesta (en este ejemplo, x-amz-server-side-
encryption, x-amz-request-id y x-amz-id-2) a los que los clientes pueden obtener acceso
desde sus aplicaciones (por ejemplo, desde un objeto XMLHttpRequest con código JavaScript).
Elemento AllowedMethod
En la configuración CORS, puede especificar los siguientes valores para el elemento AllowedMethod:
• GET
• PUT
• POST
• ELIMINAR
• HEAD
Elemento AllowedOrigin
En el elemento AllowedOrigin, se especifican los orígenes desde los cuales desea permitir solicitudes
entre dominios, por ejemplo, http://www.example.com. La cadena de origen solo puede contener un
carácter comodín *, como http://*.example.com. Como alternativa, se puede especificar el carácter
* como el origen para habilitar el envío de solicitudes entre orígenes de todos los orígenes. Se puede
también especificar el método https para solo habilitar orígenes seguros.
Elemento AllowedHeader
El elemento AllowedHeader especifica qué encabezados se permiten en una solicitud de comprobación
preliminar a través del encabezado Access-Control-Request-Headers. Cada nombre de encabezado
en el encabezado Access-Control-Request-Headers debe coincidir con una entrada correspondiente
en la regla. Amazon S3 solo enviará los encabezados permitidos en una respuesta solicitados. Para ver
una lista de muestra de los encabezados que se pueden usar en las solicitudes que se envían a Amazon
S3, consulte la sección de encabezados de respuesta habituales en la guía Amazon Simple Storage
Service API Reference.
Cada cadena con el elemento AllowedHeader en la regla puede contener como máximo un carácter
comodín *. Por ejemplo, el elemento <AllowedHeader>x-amz-*</AllowedHeader> habilita los
encabezados exclusivos de Amazon.
Elemento ExposeHeader
Cada elemento ExposeHeader identifica un encabezado en la respuesta al que desea que los clientes
puedan obtener acceso desde sus aplicaciones (por ejemplo, desde un objeto XMLHttpRequest con
código JavaScript). Para ver una lista de encabezados de respuesta de Amazon S3 comunes, consulte
la sección de encabezados de respuesta habituales en la guía Amazon Simple Storage Service API
Reference.
Elemento MaxAgeSeconds
El elemento MaxAgeSeconds especifica el tiempo en segundos que el navegador puede almacenar en
caché la respuesta de una solicitud de comprobación preliminar según la identifica el recurso, el método
HTTP y el origen.
Note
Temas
• Habilitación del uso compartido de recursos entre orígenes (CORS) con la Consola de administración
de AWS (p. 166)
• Habilitación del uso compartido de recursos entre orígenes (CORS) con la AWS SDK for
Java (p. 166)
• Habilitación del uso compartido de recursos entre orígenes (CORS) con la AWS SDK
para .NET (p. 169)
• Habilitación del uso compartido de recursos entre orígenes (CORS) con la API de REST (p. 171)
Example
El siguiente ejemplo:
Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Prueba de
ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.BucketCrossOriginConfiguration;
import com.amazonaws.services.s3.model.CORSRule;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
rules = configuration.getRules();
rules.add(rule3);
configuration.setRules(rules);
s3Client.setBucketCrossOriginConfiguration(bucketName, configuration);
// Verify that the new rule was added by checking the number of rules in the
configuration.
configuration = s3Client.getBucketCrossOriginConfiguration(bucketName);
System.out.println("Expected # of rules = 3, found " +
configuration.getRules().size());
Example
El código de C# siguiente:
Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CORSTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
{
GetCORSConfigurationRequest request = new GetCORSConfigurationRequest
{
BucketName = bucketName
};
var response = await s3Client.GetCORSConfigurationAsync(request);
var configuration = response.Configuration;
PrintCORSRules(configuration);
return configuration;
}
if (configuration == null)
{
Console.WriteLine("\nConfiguration is null");
return;
}
Para obtener instrucciones, consulte Edición de permisos de bucket en la Guía del usuario de la consola
de Amazon Simple Storage Service. Si se ha establecido la configuración CORS, la consola muestra un
enlace Edit CORS Configuration (Editar configuración de CORS) en la sección Permissions (Permisos)
del bucket Properties (Propiedades).
2. Capture la solicitud y respuesta completas con la herramienta que elija. Para cada solicitud que Amazon
S3 reciba, debe haber una regla CORS que coincida con los datos de la solicitud, de la siguiente
manera:
a. Verifique que la solicitud tenga el encabezado Origin.
Si falta el encabezado, Amazon S3 no considera la solicitud como una solicitud entre orígenes y no
envía los encabezados de respuesta CORS en la respuesta.
b. Verifique que el encabezado Origin de la solicitud coincida con al menos uno de los elementos
AllowedOrigin en la regla CORSRule especificada.
Los valores de esquema, host y puerto del encabezado de la solicitud Origin deben coincidir con los
elementos AllowedOrigin en la regla CORSRule. Por ejemplo, si establece que la regla CORSRule
permita el origen http://www.example.com, los orígenes https://www.example.com
y http://www.example.com:80 de la solicitud no coinciden con el origen permitido en su
configuración.
c. Verifique que el método de la solicitud (o en la solicitud de comprobación preliminar especificado en
el Access-Control-Request-Method) sea uno de los elementos AllowedMethod en la misma
regla CORSRule.
d. En el caso de una solicitud de comprobación preliminar, si la solicitud incluye un encabezado
Access-Control-Request-Headers, verifique que la regla CORSRule incluya las entradas
AllowedHeader para cada valor en el encabezado Access-Control-Request-Headers.
Operaciones en objetos
Amazon S3 le permite almacenar, recuperar y eliminar objetos. Puede recuperar un objeto en su totalidad
o solo parte del mismo. Si ha habilitado el control de versiones en su bucket, puede recuperar una versión
específica del objeto. También puede recuperar un subrecurso asociado con su objeto y actualizarlo donde
sea conveniente. Puede realizar una copia de su objeto existente. En función del tamaño del objeto, se
deben tener en cuenta las siguientes consideraciones relacionadas con la carga y la copia:
• Subida de objetos: puede cargar objetos de hasta 5 GB de tamaño en una única operación. Para objetos
mayores de 5 GB, debe usar la API de carga multiparte.
Con la API de carga multiparte podrá cargar objetos de hasta 5 TB cada uno. Para obtener más
información, consulte Carga de objetos con la API de carga multiparte (p. 186).
• Copia de objetos: la operación de copia crea una copia de un objeto que ya esté almacenado en
Amazon S3.
Puede crear una copia de su objeto de hasta 5 GB de tamaño en una única operación atómica. Sin
embargo, para copiar un objeto mayor de 5 GB, debe usar la API de carga multiparte. Para obtener más
información, consulte Copia de objetos (p. 219).
Puede utilizar la API REST (consulte Realización de solicitudes con la API de REST (p. 45)) para trabajar
con objetos o usar una de las siguientes bibliotecas del SDK de AWS:
Estas bibliotecas proporcionan una abstracción de alto nivel que facilita el trabajo con objetos. Sin
embargo, si la aplicación lo requiere, puede utilizar directamente la API REST.
Obtención de objetos
Temas
• Recursos relacionados (p. 173)
• Obtención de un objeto con AWS SDK for Java (p. 174)
• Obtención de un objeto con AWS SDK para .NET (p. 176)
• Obtención de un objeto con AWS SDK para PHP (p. 177)
• Obtención de un objeto con la API REST (p. 179)
• Compartir un objeto con otros (p. 179)
Puede recuperar objetos directamente desde Amazon S3. Tiene las siguientes opciones al recuperar un
objeto:
• Recuperar un objeto completo: con una única operación GET puede recuperar la totalidad del objeto
almacenado en Amazon S3.
• Recuperar un objeto en partes: si usa el encabezado HTTP Range en una solicitud GET, puede
recuperar un rango específico de bytes en un objeto almacenado en Amazon S3.
Puede reanudar la obtención de otras partes del objeto cuando su aplicación esté lista. La función de
descarga reanudable resulta útil cuando solo necesite porciones de los datos de su objeto. También
resulta útil cuando la conectividad de red es deficiente y necesita reaccionar ante los errores.
Note
Al recuperar un objeto, sus metadatos se devuelven en los encabezados de respuesta. Podría haber veces
en las que quiera sobrescribir determinados valores de encabezados de respuesta que se devuelvan en
una respuesta GET. Por ejemplo, podría sobrescribir el valor del encabezado de respuesta Content-
Disposition en su solicitud GET. La API REST GET Object (consulte GET Object) le permite especificar
parámetros de la cadena de búsqueda en su solicitud GET para sobrescribir estos valores.
Los AWS SDK para Java, .NET y PHP también proporcionan los objetos necesarios para especificar
valores para estos encabezados de respuesta en su solicitud GET.
Al recuperar objetos almacenados con cifrado en el servidor, tendrá que proporcionar los encabezados
de solicitud apropiados. Para obtener más información, consulte Protección de datos mediante
cifrado (p. 274).
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
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.
• En lugar de leer el objeto completo, puede leer solo una parte de los datos del objeto especificando el
rango de bytes que desea en la solicitud.
• Puede sobrescribir opcionalmente los valores de encabezado de respuesta (consulte Obtención de
objetos (p. 173)) usando un objeto ResponseHeaderOverrides y estableciendo la propiedad de
solicitud correspondiente. Por ejemplo, puede usar esta característica para indicar que el objeto se debe
descargar en un archivo con un nombre de archivo distinto al nombre de clave del objeto.
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;
// 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();
}
}
}
• 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.
• 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
Example
request.ResponseHeaderOverrides = responseHeaders;
Example
Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.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;
sentado que está familiarizado con las instrucciones para Uso del AWS SDK para PHP y ejecución de
ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.
Example
$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname,
'ResponseContentType' => 'text/plain',
'ResponseContentLanguage' => 'en-US',
'ResponseContentDisposition' => 'attachment; filename=testing.txt',
'ResponseCacheControl' => 'No-cache',
'ResponseExpires' => gmdate(DATE_RFC2822, time() + 3600),
]);
El siguiente ejemplo de PHP recupera un objeto y muestra el contenido del objeto en el navegador. En
el ejemplo se muestra cómo utilizar el método getObject(). Para obtener información acerca de la
ejecución de ejemplos de PHP en esta guía, consulte Ejecución de ejemplos de PHP (p. 709).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
try {
// Get the object.
$result = $s3->getObject([
'Bucket' => $bucket,
'Key' => $keyname
]);
Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Documentación de AWS SDK para PHP
De forma predeterminada, todos los objetos son privados. Solo el propietario del objeto tiene permiso
para obtener acceso a los objetos. Sin embargo, el propietario del objeto puede compartir opcionalmente
objetos con otros creando una URL prefirmada y usando sus propias credenciales de seguridad para
otorgar permisos con restricción temporal para descargar los objetos.
Al crear una dirección URL prefirmada para su objeto, debe facilitar sus credenciales de seguridad,
especificar un nombre para el bucket, una clave de objeto, especificar un método HTTP (GET para
descargar el objeto) y una fecha y hora de vencimiento. Las URL prefirmadas son solo válidas para la
duración especificada.
Cualquiera que reciba la URL prefirmada puede obtener acceso al objeto. Por ejemplo, si tiene un vídeo en
su bucket y tanto el bucket como el objeto son privados, puede compartir el vídeo con otros generando una
URL prefirmada.
Note
Cualquiera que tenga credenciales de seguridad válidas puede crear una URL prefirmada. Sin
embargo, para poder obtener acceso a un objeto correctamente, la URL prefirmada debe haber
sido creada por alguien que tenga permiso para realizar la operación en la que se basa la URL
prefirmada.
Puede generar una URL prefirmada mediante programación utilizando AWS SDK for Java y .NET.
Generar una URL de objeto prefirmada con AWS Explorer para Visual Studio
Si utiliza Visual Studio, también puede generar una URL prefirmada para un objeto sin escribir código
usando AWS Explorer para Visual Studio. Cualquiera que tenga esta URL puede descargar el objeto. Para
obtener más información, consulte Uso de Amazon S3 desde AWS Explorer.
Para obtener instrucciones acerca de cómo instalar AWS Explorer, consulte Uso de los SDK, la CLI y los
exploradores de AWS (p. 697).
Generar una URL de objeto prefirmada con AWS SDK for Java
Example
El siguiente ejemplo genera una URL prefirmada que puede dar a terceros de modo que puedan recuperar
un objeto desde un bucket de S3. Para obtener más información, consulte Compartir un objeto con
otros (p. 179).
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
Generar una URL de objeto prefirmada con AWS SDK para .NET
Example
El siguiente ejemplo genera una URL prefirmada que puede dar a terceros de modo que puedan recuperar
un objeto. Para obtener más información, consulte Compartir un objeto con otros (p. 179).
Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
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;
Carga de objetos
En función del tamaño de los datos que suba, Amazon S3 ofrece las siguientes opciones:
• Cargar objetos en una única operación: puede cargar objetos de hasta 5 GB de tamaño en una única
operación PUT.
Para obtener más información, consulte Carga de objetos en una operación única (p. 182).
• Cargar objetos en partes: con la API de carga multiparte podrá cargar objetos grandes de hasta 5 TB.
La API de carga multiparte está diseñada para mejorar la experiencia de subida para objetos
más grandes. Puede cargar objetos en partes. Estas partes de objetos se pueden cargar
independientemente, en cualquier orden y en paralelo. Puede usar la carga multiparte para objetos que
ocupen de 5 MB a 5 TB. Para obtener más información, consulte Carga de objetos con la API de carga
multiparte (p. 186).
• Si carga objetos grandes en una red estable de banda ancha, use la carga multiparte para aumentar al
máximo el uso de su ancho de banda disponible cargando los objetos en partes y en paralelo para un
desempeño en varios subprocesos.
• Si está realizando la carga en una red irregular, use la carga multiparte para aumentar la resistencia ante
errores de red, evitando los reinicios de la carga. Al usar la carga multiparte, debe reintentar las carga
exclusivamente de las partes que se hayan interrumpido durante la carga. No necesita reiniciar la carga
de su objeto desde el principio.
Para obtener más información acerca de las cargas multipartes, consulte Información general de carga
multiparte (p. 187).
Temas
• Carga de objetos en una operación única (p. 182)
• Carga de objetos con la API de carga multiparte (p. 186)
• Carga de objetos con URL prefirmadas (p. 215)
Al cargar un objeto, puede solicitar que Amazon S3 lo cifre antes de guardarlo en disco y lo descifre al
descargarlo. Para obtener más información, consulte Protección de datos mediante cifrado (p. 274).
Temas relacionados
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.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.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;
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();
Example
• 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.
Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class UploadObjectTest
{
private const string bucketName = "*** bucket name ***";
// For simplicity the example creates two objects from the same file.
// You specify key names for these objects.
private const string keyName1 = "*** key name for first object created ***";
private const string keyName2 = "*** key name for second object created ***";
private const string filePath = @"*** file path ***";
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.EUWest1;
catch (Exception e)
{
Console.WriteLine(
"Unknown encountered on server. Message:'{0}' when writing an object"
, e.Message);
}
}
}
}
En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.
En el siguiente ejemplo en PHP se crea un objeto en un bucket específico cargando datos con el método
putObject(). Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, visite
Ejecución de ejemplos de PHP (p. 709).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
try {
// Upload data.
$result = $s3->putObject([
'Bucket' => $bucket,
'Key' => $keyname,
'Body' => 'Hello, world!',
'ACL' => 'public-read'
]);
Recursos relacionados
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:
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
• Uso de AWS SDK para PHP para cargas multiparte (API de bajo nivel) (p. 212)
• Uso de AWS SDK parar Ruby para carga multiparte (p. 214)
• Uso de la API de REST para carga multiparte (p. 215)
La carga multiparte permite cargar un solo objeto como un conjunto de partes. Cada parte es una parte
contigua de los datos del objeto. Puede cargar estas partes del objeto de forma independiente y en
cualquier orden. Si la transmisión de cualquier parte falla, puede retransmitir esta parte sin que las demás
partes se vean afectadas. Después de cargar todas las partes del objeto, Amazon S3 las combina y crea el
objeto. Por lo general, cuando el tamaño del objeto alcanza los 100 MB, deberá usar las cargas multipartes
en lugar de cargar el objeto en una única operación.
• Mayor velocidad: puede cargar las partes al mismo tiempo para aumentar la velocidad.
• Recuperación rápida ante cualquier problema de red: una parte de tamaño más pequeño reduce el
impacto de tener que reiniciar una carga fallida debido a un error de red.
• Detención y reanudación de cargas de objetos: puede cargar las partes del objeto con el paso del
tiempo. Una vez que inicia una carga multiparte, no existe fecha de expiración, por lo tanto, debe
completar o anular de forma explícita la carga multiparte.
• Inicio de una carga antes de conocer el tamaño final del objeto: puede cargar un objeto a medida que lo
crea.
Para obtener más información, consulte Información general de carga multiparte (p. 187).
La API de carga multiparte permite cargar objetos grandes en partes. Puede utilizar esta API para
cargar nuevos objetos grandes o realizar una copia de un objeto existente (consulte Operaciones en
objetos (p. 172)).
La carga multiparte es un proceso de tres pasos: debe iniciar la carga, cargar las partes del objeto y, luego
de haber cargado todas las partes, debe completar la carga multiparte. Al recibir la solicitud de carga
multiparte completa, Amazon S3 crea el objeto a partir de las partes cargadas para que pueda obtener
acceso al objeto como lo haría con cualquier otro objeto de su bucket.
Puede mostrar todas las cargas multipartes en curso u obtener una lista de las partes que ha cargado en
una carga multiparte específica. En esta sección, se explicarán cada una de estas operaciones.
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.
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.
Puede enumerar las partes de una carga multiparte específica o todas las cargas multipartes en curso.
La operación de lista de partes devuelve la información de las partes que ha cargado para una carga
multiparte específica. Para cada solicitud de lista de partes, Amazon S3 devuelve la información de las
partes para la carga multiparte específica, hasta un máximo de 1 000 partes. Si hay más de 1 000 partes
en la carga multiparte, debe enviar una serie de solicitudes de lista de partes para recuperar todas las
partes. Tenga en cuenta que la lista de partes que se devuelve no incluye las partes con carga incompleta.
Con la operación lista de cargas multiparte, puede obtener una lista de las cargas multiparte en curso.
Una carga multiparte en curso es una carga iniciada pero que aún no se ha completado ni anulado. Cada
solicitud devuelve 1 000 cargas multipartes como máximo. Si hay más de 1 000 cargas multipartes en
curso, debe enviar otras solicitudes para recuperar las cargas multipartes restantes. Solo utilice la lista
devuelta para verificación. No debe utilizar el resultado de esta lista al enviar una solicitud de completar
carga multiparte. En cambio, mantenga su propia lista de números de parte que especificó al cargarlas y
los valores correspondientes de ETag que devuelve Amazon S3.
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.
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.
Comience a cargar las partes luego de iniciar una carga multiparte. Amazon S3 almacena estas partes,
pero crea el objeto de las partes solo después de que usted las carga y envía una solicitud successful
para completar la carga multiparte (debe comprobar si la solicitud para completar una carga multiparte
es correcta). Al recibir la solicitud de carga multiparte completa, Amazon S3 combina las partes y crea un
objeto.
Si no envía la solicitud de completar carga multiparte correctamente, Amazon S3 no combinará las partes
ni creará un objeto. Por lo tanto, las partes permanecen en Amazon S3 y usted deberá pagar las partes
almacenadas en Amazon S3. Como práctica recomendada, configure una regla de ciclo de vida (con la
acción AbortIncompleteMultipartUpload) para reducir los costos de almacenamiento.
Amazon S3 admite una regla de ciclo de vida del bucket que puede utilizar para que Amazon S3 anule
las cargas multiparte que no se completan dentro de un período especificado de días luego de iniciarse.
Se podrá aplicar una operación de anulación cuando una carga multiparte no se completa dentro de un
período de tiempo y Amazon S3 anulará la carga multiparte (y eliminará las partes asociadas a la carga
multiparte).
El siguiente es un ejemplo de configuración de ciclo de vida que especifica una regla con la acción
AbortIncompleteMultipartUpload.
<LifecycleConfiguration>
<Rule>
<ID>sample-rule</ID>
<Prefix></Prefix>
<Status>Enabled</Status>
<AbortIncompleteMultipartUpload>
<DaysAfterInitiation>7</DaysAfterInitiation>
</AbortIncompleteMultipartUpload>
</Rule>
</LifecycleConfiguration>
Para obtener más información acerca de la configuración del ciclo de vida del bucket, consulte
Administración del ciclo de vida de los objetos (p. 127).
Note
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.
{
"Rules": [
{
"ID": "Test Rule",
"Status": "Enabled",
"Prefix": "",
"AbortIncompleteMultipartUpload": {
"DaysAfterInitiation": 7
}
}
]
}
3. Ejecute el siguiente comando de CLI para establecer la configuración del ciclo de vida de su bucket.
4. Para comprobar, recupere la configuración del ciclo de vida con el comando de CLI get-bucket-
lifecycle.
5. Para eliminar la configuración del ciclo de vida, utilice el comando de CLI delete-bucket-
lifecycle.
Elemento Especificación
Elemento Especificación
Puede utilizar un SDK de AWS para cargar un objeto en partes. Las siguientes bibliotecas de SDK de AWS
admiten la carga multiparte:
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.
Una persona debe tener los permisos necesarios para utilizar las operaciones de carga multiparte. Puede
utilizar las ACL, la política de bucket o la política de usuario para conceder permisos para realizar estas
operaciones. En la siguiente tabla se muestran los permisos requeridos para varias operaciones de carga
multiparte al utilizar las ACL, la política de bucket o la política de usuario.
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
Upload Part Debe tener permiso para realizar la acción s3:PutObject en un objeto para cargar
una parte.
Solo el iniciador de una carga multiparte puede cargar las partes. El propietario del
bucket debe permitir al iniciador realizar la acción s3:PutObject en un objeto para
que cargue una parte de ese objeto.
Upload Part Debe tener permiso para realizar la acción s3:PutObject en un objeto para cargar
(Copy) una parte. Dado que está cargando una parte de un objeto existente, debe tener
permiso para realizar la acción s3:GetObject en el objeto de origen.
Solo el iniciador de una carga multiparte puede cargar las partes. Para que el iniciador
cargue una parte del objeto, el propietario del bucket debe permitir al iniciador realizar
la acción s3:PutObject en un objeto.
Complete Debe tener permiso para realizar la acción s3:PutObject en un objeto para
Multipart completar una carga multiparte.
Upload
Solo el iniciador de una carga multiparte puede completar la carga multiparte. El
propietario del bucket debe permitir al iniciador realizar la acción s3:PutObject en un
objeto para que complete una carga multiparte para ese objeto.
Abort Multipart Debe tener permiso para realizar la acción s3:AbortMultipartUpload para anular
Upload una carga multiparte.
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.
Permisos Para realizar una carga multiparte con el cifrado mediante una clave de AWS
relacionados KMS, el solicitante debe tener permiso para realizar las acciones kms:Encrypt,
con el cifrado kms:Decrypt, kms:ReEncrypt*, kms:GenerateDataKey* y kms:DescribeKey
y el descifrado en la clave. Estos permisos son necesarios, ya que Amazon S3 debe descifrar y leer
de KMS datos de las partes de archivos cifrados antes de finalizar la carga multiparte.
Para obtener información acerca de la relación entre los permisos de la Access Control List (ACL, Lista
de control de acceso) y los permisos de las políticas de acceso, consulte Mapeo de permisos de ACL
y permisos de política de acceso (p. 422). Para obtener información acerca de los usuarios de IAM,
consulte Trabajo con usuarios y grupos.
Uso de AWS Java SDK para carga multiparte (API de nivel alto)
Temas
• Cargar un archivo (p. 193)
• Anulación de cargas multiparte (p. 194)
• Seguimiento del progreso de las cargas multiparte (p. 195)
En AWS SDK for Java se presenta una API de alto nivel, llamada TransferManager que simplifica
cargas multiparte (consulte Carga de objetos con la API de carga multiparte (p. 186)). Puede
cargar datos desde un archivo o una secuencia. También puede configurar opciones avanzadas,
como el tamaño de la parte que desea utilizar para la carga multiparte o el número de subprocesos
simultáneos que desea utilizar al cargar las partes. También puede establecer propiedades opcionales
para un objeto, la clase de almacenamiento o la ACL. Puede usar las clases PutObjectRequest y
TransferManagerConfiguration para establecer estas opciones avanzadas.
De ser posible, TransferManager intenta utilizar varios subprocesos para cargar varias partes de una
carga a la vez. Esto puede aumentar de forma importante el rendimiento, cuando se utiliza contenido de
gran tamaño y un ancho de banda grande.
Además de la funcionalidad de carga de archivos, la clase TransferManager permite anular una carga
multiparte en curso. Una carga se considera en proceso después de que la inicia y hasta que la completa
o anula. El TransferManager anula todas las cargas multiparte en curso en un bucket especificado
iniciado antes de una fecha y hora especificados.
Para obtener más información sobre cargas multiparte, incluida información sobre la funcionalidad
adicional ofrecida por los métodos de API de bajo nivel, consulte Carga de objetos con la API de carga
multiparte (p. 186).
Cargar un archivo
Example
En el siguiente ejemplo se muestra cómo cargar un objeto utilizando la API de Java de carga multiparte de
alto nivel (la clase TransferManager). Para obtener instrucciones sobre la creación y comprobación de
una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();
Example
El siguiente ejemplo la API de Java de alto nivel (la clase TransferManager) para anular todas las
cargas multiparte en curso que se iniciaron en un bucket específico hace más de una semana. Para
obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de
ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();
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.
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;
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));
// Optionally, you can wait for the upload to finish before continuing.
upload.waitForCompletion();
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
Uso de AWS Java SDK para una carga multiparte (API de bajo nivel)
Temas
• Cargar un archivo (p. 197)
• List Multipart Uploads (p. 198)
• Anulación de una carga multiparte (p. 199)
AWS SDK for Java presenta una API de bajo nivel que se parece bastante a la API REST de Amazon
S3 para cargas multiparte (consulte Carga de objetos con la API de carga multiparte (p. 186)). Use
la API de bajo nivel si necesita detener y reanudar cargas multiparte, variar los tamaños de las partes
durante la carga o si no conoce de antemano el tamaño de los datos de carga. Cuando no tenga estas
necesidades, utilice la API de alto nivel (consulte Uso de AWS Java SDK para carga multiparte (API de
nivel alto) (p. 193))
Cargar un archivo
En el siguiente ejemplo se demuestra cómo usar las clases de Java de bajo nivel para cargar un archivo.
Realiza los siguientes pasos:
Example
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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>();
// Upload the part and add the response's ETag to our list.
UploadPartResult uploadResult = s3Client.uploadPart(uploadRequest);
partETags.add(uploadResult.getPartETag());
filePosition += partSize;
}
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
Note
En lugar de anular cargas multiparte individualmente, puede anular todas las cargas multiparte
en curso iniciadas antes de un periodo de tiempo específico. Esta operación de limpieza resulta
útil para anular cargas multiparte iniciadas pero que no se finalizaron o que fueron anuladas. Para
obtener más información, consulte Anulación de cargas multiparte (p. 194).
Utilización de AWS SDK para .NET para carga multiparte (API de alto nivel)
Temas
• Carga de un archivo en un bucket de S3 con AWS SDK para .NET (API de alto nivel) (p. 201)
AWS SDK para .NET presenta una API de alto nivel que simplifica las cargas multiparte (consulte Carga
de objetos con la API de carga multiparte (p. 186)). Puede cargar datos desde un archivo, un directorio
o una secuencia. Para obtener más información acerca de las cargas multiparte de Amazon S3, consulte
Información general de carga multiparte (p. 187).
La clase TransferUtility proporciona métodos para cargar archivos y directorios, el seguimiento del
progreso de la carga y la anulación de cargas multiparte.
Carga de un archivo en un bucket de S3 con AWS SDK para .NET (API de alto nivel)
Para cargar un archivo a un bucket de S3, utilice la clase TransferUtility. Al cargar los datos de un
archivo, debe proporcionar el nombre de clave del objeto. Si no lo hace, la API utiliza el nombre del archivo
como nombre de clave. Al cargar los datos de una secuencia, debe proporcionar el nombre de clave del
objeto.
Para configurar opciones de carga avanzadas, como el tamaño de la parte, el número de subprocesos al
cargar las partes simultáneamente, los metadatos, la clase de almacenamiento o la ACL, utilice la clase
TransferUtilityUploadRequest.
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;
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");
await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
Console.WriteLine("Upload 4 completed");
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when writing
an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
}
}
Más información
Carga de un directorio
Puede utilizar la clase TransferUtility para cargar todo un directorio. De forma predeterminada, la
API solo carga los archivos en la raíz del directorio especificado. Sin embargo, puede especificar que se
carguen los archivos de forma recursiva en todos los subdirectorios.
Puede especificar expresiones de filtrado para seleccionar archivos en el directorio especificado según
algunos criterios de filtrado. Por ejemplo, para cargar solo archivos .pdf desde un directorio, especifique la
expresión de filtrado "*.pdf".
Cuando carga archivos desde un directorio, no puede especificar los nombres de clave de los objetos
resultantes. Amazon S3 construye los nombres de clave usando la ruta del archivo original. Por ejemplo,
suponga que tiene un directorio llamado c:\myfolder con la siguiente estructura:
Example
C:\myfolder
\a.txt
\b.pdf
\media\
An.mp3
Cuando carga este directorio, Amazon S3 utiliza los siguientes nombres de clave:
Example
a.txt
b.pdf
media/An.mp3
Example
En el siguiente ejemplo de código C# se carga un directorio a un bucket de Amazon S3. Muestra cómo
utilizar varias sobrecargas TransferUtility.UploadDirectory para cargar el directorio. Cada
llamada sucesiva de carga reemplaza la carga anterior. Para obtener instrucciones acerca de cómo crear y
probar una muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.IO;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class UploadDirMPUHighLevelAPITest
{
private const string existingBucketName = "*** bucket name ***";
private const string directoryPath = @"*** directory path ***";
// The example uploads only .txt files.
private const string wildCard = "*.txt";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
UploadDirAsync().Wait();
}
// 1. Upload a directory.
await directoryTransferUtility.UploadDirectoryAsync(directoryPath,
existingBucketName);
Console.WriteLine("Upload statement 1 completed");
await directoryTransferUtility.UploadDirectoryAsync(request);
Console.WriteLine("Upload statement 3 completed");
}
catch (AmazonS3Exception e)
{
Console.WriteLine(
"Error encountered ***. Message:'{0}' when writing an object",
e.Message);
}
catch (Exception e)
{
Console.WriteLine(
"Unknown encountered on server. Message:'{0}' when writing an object",
e.Message);
}
}
}
}
Anulación de cargas multiparte a un bucket de S3 con AWS SDK para .NET (API de alto nivel)
Para anular las cargas multiparte en curso, use la clase TransferUtility de AWS SDK para .NET.
Proporcione un valor para DateTime. A continuación, la API anula todas las cargas multiparte que se
iniciaron antes de la fecha y la hora especificadas y elimina las partes cargadas. Una carga se considera
en curso después de que la inicia y hasta que la completa o anule.
Dado que usted debe pagar por todo el almacenamiento relacionado con las partes cargadas, es
importante que complete la carga multiparte para finalizar la creación del objeto o anule la carga multiparte
para eliminar las partes cargadas. Para obtener más información acerca de las cargas multiparte de
Amazon S3, consulte Información general de carga multiparte (p. 187). Para obtener información sobre
los precios, consulte Carga multiparte y precios (p. 189).
En el siguiente ejemplo de código C# se anulan todas las cargas multiparte en curso que se iniciaron en
un bucket específico hace una semana. Para obtener información sobre la compatibilidad del ejemplo con
una versión específica de AWS SDK para .NET e instrucciones sobre cómo crear y probar una muestra
funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;
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;
Note
También puede anular una carga multiparte específica. Para obtener más información, consulte
Lista de cargas multiparte a un Bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 209).
Más información
Seguimiento del progreso de una carga multiparte a un bucket de S3 con AWS SDK para .NET
(API de alto nivel)
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;
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);
}
}
Más información
Uso de AWS SDK para .NET para cargas multiparte (API de bajo nivel)
AWS SDK para .NET presenta una API de bajo nivel que se parece bastante a la API REST de Amazon
S3 para carga multiparte (consulte Uso de la API de REST para carga multiparte (p. 215)). Use la API de
bajo nivel si necesita detenerse y reanudar cargas multiparte, variar los tamaños de las partes durante la
carga o si no conoce de antemano el tamaño de los datos. Utilice la API de alto nivel (consulte Utilización
de AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 200)) cuando no tenga estas
necesidades.
Temas
• Carga de un archivo en un bucket de S3 con AWS SDK para .NET (API de bajo nivel) (p. 207)
• Lista de cargas multiparte a un Bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 209)
• Seguimiento del progreso de la carga multiparte a un bucket de S3 con AWS SDK para .NET (bajo
nivel) (p. 209)
• Anulación de cargas multiparte a un bucket de S3 con AWS SDK para .NET (bajo nivel) (p. 210)
Carga de un archivo en un bucket de S3 con AWS SDK para .NET (API de bajo nivel)
En el siguiente ejemplo de código C# se muestra cómo usar la API de carga multiparte AWS SDK
para .NET de bajo nivel para cargar un archivo a un bucket de S3. Para obtener información sobre cargas
multiparte de Amazon S3, consulte Información general de carga multiparte (p. 187).
Note
Cuando usa la API de AWS SDK para .NET para cargar objetos grandes, puede presentarse un
tiempo de espera mientras los datos se escriben en la secuencia de la solicitud. Puede establecer
un tiempo de espera explícitamente con UploadPartRequest.
En el siguiente ejemplo de código C# se carga un archivo a un bucket de S3 con la API de bajo nivel
para la carga multiparte. Para obtener información sobre la compatibilidad del ejemplo con una versión
específica de AWS SDK para .NET e instrucciones sobre cómo crear y probar una muestra funcional,
consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class UploadFileMPULowLevelAPITest
{
private const string bucketName = "*** provide bucket name ***";
private const string keyName = "*** provide a name for the uploaded object ***";
private const string filePath = "*** provide the full path name of the file to
upload ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
// Upload parts.
long contentLength = new FileInfo(filePath).Length;
long partSize = 5 * (long)Math.Pow(2, 20); // 5 MB
try
{
Console.WriteLine("Uploading parts");
long filePosition = 0;
for (int i = 1; filePosition < contentLength; i++)
{
UploadPartRequest uploadRequest = new UploadPartRequest
{
BucketName = bucketName,
Key = keyName,
UploadId = initResponse.UploadId,
PartNumber = i,
PartSize = partSize,
FilePosition = filePosition,
FilePath = filePath
};
filePosition += partSize;
}
{
Console.WriteLine("An AmazonS3Exception was thrown: { 0}",
exception.Message);
Más información
Lista de cargas multiparte a un Bucket de S3 con AWS SDK para .NET (bajo nivel)
Para enumerar todas las cargas multiparte en curso en un bucket concreto, use la clase
ListMultipartUploadsRequest de la API de carga multiparte de bajo nivel de AWS SDK
para .NET. El método AmazonS3Client.ListMultipartUploads devuelve una instancia de la clase
ListMultipartUploadsResponse que ofrece información sobre las cargas multiparte en curso.
Una carga multiparte en curso es una carga multiparte que se ha iniciado mediante una solicitud de inicio
de carga multiparte pero que aún no se ha completado o anulado. Para obtener más información acerca de
las cargas multiparte de Amazon S3, consulte Información general de carga multiparte (p. 187).
En el siguiente ejemplo de código C# se muestra cómo usar AWS SDK para .NET para enumerar todas las
cargas multiparte en curso en un bucket. Para obtener información sobre la compatibilidad del ejemplo con
una versión específica de AWS SDK para .NET e instrucciones sobre cómo crear y probar una muestra
funcional, consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).
Más información
Seguimiento del progreso de la carga multiparte a un bucket de S3 con AWS SDK para .NET (bajo
nivel)
bajo nivel de AWS SDK para .NET. El evento se produce periódicamente. Devuelve información como el
número total de bytes que hay que transferir y el número de bytes transferidos.
En el siguiente ejemplo de código C# se muestra cómo seguir el progreso de cargas multiparte. Para ver
una muestra completa de código C# que incluye el código siguiente, consulte Carga de un archivo en un
bucket de S3 con AWS SDK para .NET (API de bajo nivel) (p. 207).
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
Anulación de cargas multiparte a un bucket de S3 con AWS SDK para .NET (bajo nivel)
Para anular una carga multiparte, debe proporcionar el ID de carga y los nombres de clave y bucket que
se usaron en la carga. Luego de haber anulado una carga multiparte, no puede usar el ID de carga para
cargar partes adicionales. Para obtener más información acerca de las cargas multiparte de Amazon S3,
consulte Información general de carga multiparte (p. 187).
En el siguiente ejemplo de código C# se muestra cómo anular una carga multiparte. Para ver una muestra
completa de código C# que incluye el código siguiente, consulte Carga de un archivo en un bucket de S3
con AWS SDK para .NET (API de bajo nivel) (p. 207).
También puede anular todas las cargas multiparte en curso que se iniciaron antes de un periodo de tiempo
específico. Esta operación de limpieza resulta útil para anular cargas multiparte que no se finalizaron o que
se anularon. Para obtener más información, consulte Anulación de cargas multiparte a un bucket de S3
con AWS SDK para .NET (API de alto nivel) (p. 204).
Más información
El método upload de la clase MultipartUploader es más adecuado para una carga multiparte simple.
Si tiene que detenerse y reanudar cargas multiparte, variar los tamaños de las partes durante la carga o
si no conoce de antemano el tamaño de los datos, use la API de PHP de bajo nivel. Para obtener más
información, consulte Uso de AWS SDK para PHP para cargas multiparte (API de bajo nivel) (p. 212).
Para obtener más información acerca de las cargas multipartes, consulte Carga de objetos con la API
de carga multiparte (p. 186). Para obtener información acerca de cómo cargar archivos con un tamaño
inferior a 5 GB, consulte Cargar un objeto con AWS SDK para PHP (p. 185).
En el siguiente ejemplo de PHP se carga un archivo a un bucket de Amazon S3. El ejemplo muestra cómo
configurar parámetros para el objeto MultipartUploader.
Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución de
ejemplos de PHP (p. 709).
require 'vendor/autoload.php';
use Aws\Common\Exception\MultipartUploadException;
use Aws\S3\MultipartUploader;
use Aws\S3\S3Client;
Recursos relacionados
Uso de AWS SDK para PHP para cargas multiparte (API de bajo nivel)
Temas
• Cargue un archivo en varias partes con la API de bajo nivel del Software Development Kit (SDK, Kit de
desarrollo de software) para PHP (p. 212)
• Lista de cargas multiparte con la API de AWS SDK para PHP de bajo nivel (p. 213)
• Anulación de una carga multiparte (p. 214)
AWS SDK para PHP presenta una API de bajo nivel que se parece bastante a la API REST de Amazon
S3 para carga multiparte (consulte Uso de la API de REST para carga multiparte (p. 215)). Use la
API de bajo nivel si necesita detenerse y reanudar cargas multiparte, variar los tamaños de las partes
durante la carga o si no conoce de antemano el tamaño de los datos. Si no tiene estos requisitos, utilice
las abstracciones de alto nivel de AWS SDK para PHP (consulte Uso del AWS PHP SDK para carga
multiparte (p. 211)).
Cargue un archivo en varias partes con la API de bajo nivel del Software Development Kit (SDK,
Kit de desarrollo de software) para PHP
Este tema muestra cómo usar el método uploadPart de bajo nivel de la versión 3 de AWS SDK para
PHP para cargar un archivo en varias partes. Se parte de la base de que usted ya sigue las instrucciones
para Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK
para PHP correctamente.
En el siguiente ejemplo de PHP se carga un archivo a un bucket de Amazon S3 con la API de PHP de bajo
nivel para la carga multiparte. Para obtener información acerca de la ejecución de ejemplos de PHP en
esta guía, consulte Ejecución de ejemplos de PHP (p. 709).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
$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'];
Recursos relacionados
Lista de cargas multiparte con la API de AWS SDK para PHP de bajo nivel
Este tema muestra cómo usar las clases de API de bajo nivel de la versión 3 de AWS SDK para PHP para
crear una lista de todas las cargas multiparte en curso en un bucket. Se parte de la base de que usted ya
sigue las instrucciones para Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708) y ha
instalado AWS SDK para PHP correctamente.
El siguiente ejemplo de PHP demuestra cómo enumerar todas las cargas multiparte en curso en un bucket.
require 'vendor/autoload.php';
use Aws\S3\S3Client;
$result = $s3->listMultipartUploads([
'Bucket' => $bucket
]);
Recursos relacionados
En el siguiente ejemplo de PHP se muestra cómo anular cargas multiparte en curso usando el método
abortMultipartUpload(). Para obtener información acerca de la ejecución de ejemplos de PHP en
esta guía, consulte Ejecución de ejemplos de PHP (p. 709).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Recursos relacionados
• Utiliza varios subprocesos para cargar las partes de objetos grandes simultáneamente.
Para obtener más información, consulte Uploading Files to Amazon S3 en el blog para desarrolladores de
AWS.
Como alternativa, puede utilizar directamente las siguientes operaciones de cliente de carga multiparte:
Para obtener más información, consulte Uso de la versión 3 de AWS SDK parar Ruby (p. 709).
Puede utilizar estas API para realizar sus propias solicitudes REST o puede utilizar uno de los SDK
que ofrecemos. Para obtener más información sobre SDKs, consulte Compatibilidad de API para carga
multiparte (p. 191).
Una dirección URL prefirmada le permite acceder al objeto identificado en la misma, siempre que el
creador de la URL prefirmada tenga permiso para obtener acceso al objeto. Es decir, si recibe una URL
prefirmada para cargar un objeto, podrá cargar el objeto solamente si el creador de la URL prefirmada
cuenta con los permisos necesarios para ello.
De forma predeterminada, todos los objetos y buckets son privados. Las direcciones URL prefirmadas
resultan útiles si quiere que su cliente o usuario pueda cargar un objeto específico en su bucket, pero no
quiere que tenga credenciales o permisos de seguridad de AWS. Al crear una dirección URL prefirmada,
debe facilitar sus credenciales de seguridad y, a continuación, especificar un nombre para el bucket, una
clave de objeto, un método HTTP (PUT para cargar objetos) y una fecha y hora de vencimiento. Las URL
prefirmadas son solo válidas para la duración especificada.
Puede generar una URL prefirmada mediante programación utilizando AWS SDK for Java o AWS SDK
para .NET. Si utiliza Microsoft Visual Studio, también puede usar AWS Explorer para generar una URL de
objeto prefirmada sin escribir código. Cualquiera que reciba una URL prefirmada válida puede cargar un
objeto mediante programación.
Para obtener más información, consulte Uso de Amazon S3 desde AWS Explorer.
Para obtener instrucciones acerca de cómo instalar AWS Explorer, consulte Uso de los SDK, la CLI y los
exploradores de AWS (p. 697).
Note
Cualquiera que tenga credenciales de seguridad válidas puede crear una URL prefirmada. Sin
embargo, para que pueda cargar un objeto correctamente, la URL prefirmada debe haber sido
creada por alguien que tenga permisos para realizar la operación en la que se basa la URL
prefirmada.
Carga de un objeto mediante una URL prefirmada (AWS SDK for Java)
Puede utilizar AWS SDK for Java para generar una URL prefirmada que usted, o cualquiera a quien le
dé la URL, puede usar para cargar un objeto en Amazon S3. Cuando usa la URL para cargar un objeto,
Amazon S3 crea el objeto en el bucket especificado. Si ya existe en el bucket un objeto con la misma clave
que se ha especificado en la URL prefirmada, Amazon S3 reemplaza el objeto existente con el objeto
cargado. Para completar la carga correctamente, siga estos pasos:
Example
Este ejemplo genera una URL prefirmada y la utiliza para cargar datos de muestra como un objeto. Para
obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de
ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.HttpMethod;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.S3Object;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// 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());
Este ejemplo genera una URL prefirmada para un objeto específico y la usa para cargar un archivo.
Para obtener información sobre la compatibilidad del ejemplo con una versión específica de AWS SDK
para .NET e instrucciones sobre cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
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;
Más información
Carga de un objeto mediante una URL prefirmada (AWS SDK parar Ruby)
Las siguientes tareas le guiarán a través del proceso de uso de un script de Ruby para cargar un objeto
mediante una URL prefirmada en SDK para Ruby - Versión 3.
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.
Al realizar la carga, se crea un objeto o se sustituye uno existente con la misma clave que
está especificada en la URL prefirmada.
En el siguiente ejemplo de código Ruby se muestran las tareas anteriores para SDK para Ruby - Versión 3.
Example
#Uploading an object using a presigned URL for SDK for Ruby - Version 3.
require 'aws-sdk-s3'
require 'net/http'
s3 = Aws::S3::Resource.new(region:'us-west-2')
obj = s3.bucket('BucketName').object('KeyName')
# Replace BucketName with the name of your bucket.
# Replace KeyName with the name of the object you are creating or replacing.
url = URI.parse(obj.presigned_url(:put))
Net::HTTP.start(url.host) do |http|
http.send_request("PUT", url.request_uri, body, {
# This is required, or Net::HTTP will add a default unsigned content-type.
"content-type" => "",
})
end
puts obj.get.body.read
# This will print out the contents of your object to the terminal window.
Copia de objetos
La operación de copia crea una copia de un objeto que ya esté almacenado en Amazon S3. Puede crear
una copia de su objeto de hasta 5 GB en una única operación atómica. Sin embargo, para copiar un objeto
mayor de 5 GB, debe usar la API de carga multiparte. Con la operación copy, puede:
Todos los objetos de Amazon S3 tienen metadatos. Son un conjunto de pares nombre-valor. Puede
establecer los metadatos de un objeto en el momento en el que lo sube. Tras cargar el objeto, no puede
modificar sus metadatos. La única manera de modificar los metadatos de un objeto es realizar una copia
del mismo y configurar sus metadatos. En la operación de copia, verá el mismo objeto en el origen y el
destino.
Todos los objetos tienen metadatos. Algunos de ellos son metadatos del sistema y otros definidos por el
usuario. Los usuarios controlan algunos de los metadatos del sistema, como la configuración de la clase de
almacenamiento que se ha de usar para el objeto y la del cifrado en el servidor. Cuando copia un objeto,
los metadatos del sistema controlados por el usuario y los metadatos definidos por el usuario también se
copian. Amazon S3 reinicia los metadatos controlados por el sistema. Por ejemplo, cuando se copia un
objeto, Amazon S3 restablece la fecha de creación del objeto copiado. No necesita establecer ninguno de
estos valores en su solicitud de copia.
Al copiar un objeto, puede decidir actualizar algunos de los valores de los metadatos. Por ejemplo, si su
objeto de origen está configurado para usar almacenamiento estándar, podría elegir usar almacenamiento
de redundancia reducida para la copia del objeto. También podría decidir alterar algunos de los valores
de metadatos definidos por el usuario presentes en el objeto de origen. Tenga en cuenta que si decide
actualizar cualquiera de los metadatos del objeto configurables por el usuario (definidos por el sistema o
por el usuario) durante la copia, debe especificar explícitamente todos los metadatos configurables por el
usuario presentes en el objeto de origen de la solicitud, incluso aunque solo cambie uno de los valores de
metadatos.
Para obtener más información acerca de los metadatos del objeto, consulte Clave y metadatos de
objetos (p. 105).
Note
• La copia de objetos entre ubicaciones genera cargos por uso de ancho de banda.
• Si el objeto de origen se archiva en GLACIER o DEEP_ARCHIVE, primero debe restaurar una
copia temporal antes de poder copiar el objeto en otro bucket. Para obtener información acerca
del archivado de objetos, consulte Transición a las clases de almacenamiento GLACIER y
DEEP ARCHIVE (archivado de objetos) (p. 132).
Al copiar objetos, puede solicitar a Amazon S3 que guarde el objeto de destino cifrado con una clave de
cifrado de AWS Key Management Service (AWS KMS), una clave de cifrado administrada por Amazon
S3 o una clave de cifrado facilitada por el cliente. También debe especificar la información de cifrado
correspondiente en la solicitud. Si el origen de la copia es un objeto almacenado en Amazon S3 con
cifrado del lado del servidor y una clave proporcionada por el cliente, tendrá que facilitar la información de
cifrado en la solicitud, de modo que Amazon S3 pueda descifrar el objeto para copiarlo. Para obtener más
información, consulte Protección de datos mediante cifrado (p. 274).
Para copiar más de un objeto de Amazon S3 con una sola solicitud, puede utilizar operaciones por lotes de
Amazon S3.
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
Temas
• Copiar un objeto con AWS SDK for Java (p. 221)
• Copiar un objeto de Amazon S3 en una única operación con AWS SDK para .NET (p. 222)
• Copiar un objeto con AWS SDK para PHP (p. 223)
• Copiar un objeto con AWS SDK parar Ruby (p. 224)
• Copia de un objeto con la API REST (p. 225)
En el siguiente ejemplo se muestra cómo copiar un objeto en Amazon S3 mediante AWS SDK for Java.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
Copiar un objeto de Amazon S3 en una única operación con AWS SDK para .NET
Un siguiente ejemplo de C# que muestra cómo usar AWS SDK para .NET de alto nivel para copiar objetos
con un tamaño de hasta 5 GB en una única operación. Para objetos que sean mayores de 5 GB, use el
ejemplo de copia de carga multiparte que se describe en Copie un objeto de Amazon S3 con la API de
carga multiparte de AWS SDK para .NET (p. 228).
En este ejemplo se realiza una copia de un objeto que tiene un máximo de 5 GB. Para obtener información
sobre la compatibilidad del ejemplo con una versión específica del AWS SDK para .NET e instrucciones
sobre cómo crear y probar un ejemplo funcional, consulte Ejecución de ejemplos de código .NET de
Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CopyObjectTest
{
private const string sourceBucket = "*** provide the name of the bucket with source
object ***";
private const string destinationBucket = "*** provide the name of the bucket to
copy the object to ***";
private const string objectKey = "*** provide the name of object to copy ***";
private const string destObjectKey = "*** provide the destination object key name
***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
Más información
En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.
En las siguientes tareas se mostrará el proceso de uso de las clases del SDK en PHP para copiar un
objeto que ya está almacenado en Amazon S3.
En las siguientes tareas se mostrará el proceso de uso de las clases de PHP para copiar un objeto en
Amazon S3.
Copia de objetos
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.
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;
// Copy an object.
$s3->copyObject([
'Bucket' => $targetBucket,
'Key' => "{$sourceKeyname}-copy",
'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
]);
Recursos relacionados
Copia de objetos
1 Utilice la gema modularizada de Amazon S3 para la versión 3 de AWS SDK parar Ruby,
solicite 'aws-sdk-s3' y proporcione sus credenciales de AWS. Para obtener más información
acerca de cómo proporcionar sus credenciales, consulte Realización de solicitudes con las
credenciales de usuario de IAM o de una cuenta de AWS (p. 19).
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'
begin
s3 = Aws::S3::Client.new(region: 'us-west-2')
puts 'Copied ' + source_key + ' from bucket ' + source_bucket_name + ' to bucket ' +
target_bucket_name + ' as ' + target_key
En este ejemplo se copia el objeto flotsam desde el bucket pacific al objeto jetsam del bucket
atlantic, conservando sus metadatos.
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>
Temas
• Copie un objeto con la API de carga multiparte de AWS SDK for Java (p. 226)
• Copie un objeto de Amazon S3 con la API de carga multiparte de AWS SDK para .NET (p. 228)
• Copia de un objeto con la API de carga multiparte de REST (p. 230)
Copie un objeto con la API de carga multiparte de AWS SDK for Java
Para copiar un objeto de Amazon S3 superior a 5 GB con AWS SDK for Java, use la API de Java de bajo
nivel. Para objetos inferiores a 5 GB, utilice la copia con una única operación que se describe en Copiar un
objeto con AWS SDK for Java (p. 221).
Para copiar un objeto mediante la API de Java de bajo nivel, siga estos pasos:
Example
En el siguiente ejemplo se muestra cómo usar la API de Java de bajo nivel de Amazon S3 para realizar
una copia multiparte. Para obtener instrucciones sobre la creación y comprobación de una muestra
funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// 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();
// 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();
}
}
}
return etags;
}
}
Este ejemplo muestra cómo copiar un objeto de Amazon S3 mayor de 5 GB de un bucket de S3 a otro con
la API de carga multiparte de AWS SDK para .NET. Para obtener información acerca de la compatibilidad
de SDK e instrucciones para crear y probar una muestra funcional, consulte Ejecución de ejemplos de
código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CopyObjectUsingMPUapiTest
{
private const string sourceBucket = "*** provide the name of the bucket with source
object ***";
private const string targetBucket = "*** provide the name of the bucket to copy the
object to ***";
private const string sourceObjectKey = "*** provide the name of object to copy
***";
private const string targetObjectKey = "*** provide the name of the object copy
***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
};
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.
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;
}
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
}
}
Más información
AWS SDK para .NET
Puede utilizar estas API para realizar sus propias solicitudes REST o puede utilizar uno de los SDK
que ofrecemos. Para obtener más información sobre SDKs, consulte Compatibilidad de API para carga
multiparte (p. 191).
Amazon S3 expone una operación de lista que le permite enumerar las claves que contiene un bucket.
Las claves se seleccionan para la lista por bucket y prefijo. Por ejemplo, piense en un bucket llamado
"dictionary" que contenga una clave para cada palabra en inglés. Podría realizar una llamada para
enumerar todas las claves en ese bucket que comiencen por la letra "q". Los resultados de listas siempre
se devuelven en orden binario UTF-8.
Tanto las operaciones de lista SOAP como REST devuelven un documento XML que contiene los nombres
de las claves coincidentes e información sobre el objeto identificado por cada clave.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Los grupos de claves que comparten un prefijo que termina con un delimitador especial se pueden
acumular por el prefijo común para realizar las listas. Esto permite que las aplicaciones organicen y
exploren sus claves jerárquicamente, del mismo modo que se organizarían los archivos en directorios
en un sistema de archivos. Por ejemplo, para ampliar el bucket dictionary de modo que contenga más
palabras, además de las que están en inglés, podría formar claves poniendo un prefijo a cada palabra
con su idioma y un delimitador, como "French/logical". Con este esquema de nomenclatura y la función
de listado jerárquico, podría recuperar una lista de palabras solo en francés. También podría explorar
la lista de nivel superior de idiomas disponibles sin tener que iterar por todas las claves que intervienen
lexicográficamente.
Para obtener más información sobre este aspecto de las listas, consulte Listado de claves jerárquicamente
con un prefijo y un delimitador (p. 231).
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:
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
El objetivo de los parámetros de prefijo y delimitador es ayudarle a organizar sus claves jerárquicamente y
explorarlas. Para hacerlo, escoja un delimitador para su bucket, como una barra inclinada (/), que no esté
presente en ninguno de sus nombres de clave esperados. A continuación, cree sus nombres de claves
concatenando todos los niveles que contenga la jerarquía, separando cada nivel con el delimitador.
Por ejemplo, si estuviera almacenando información sobre ciudades, puede que quiera organizadla de
forma natural por continente, país y provincia o estado. Dado que estos nombres no suelen contener
puntuación, podría seleccionar la barra inclinada (/) como delimitador. En el siguiente ejemplo se usa la
barra inclinada (/) como delimitador:
• Europa/Francia/Aquitania/Burdeos
• Norteamérica/Canadá/Quebec/Montreal
• Norteamérica/EE. UU./Washintgon/Bellevue
• Norteamérica/EE. UU./Washintgon/Seattle
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>"d1a7fb5eab1c16cb4f7cf341cf188c3d"</ETag>
<Size>6</Size>
<Owner>
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>displayname</DisplayName>
</Owner>
<StorageClass>STANDARD</StorageClass>
</Contents>
<CommonPrefixes>
<Prefix>photos/</Prefix>
</CommonPrefixes>
</ListBucketResult>
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,
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListObjectsV2Request;
import com.amazonaws.services.s3.model.ListObjectsV2Result;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
System.out.println("Listing objects");
do {
result = s3Client.listObjectsV2(req);
En el siguiente ejemplo de C# se enumeran las claves de objeto para un bucket. En el ejemplo, usamos
paginación para recuperar un conjunto de claves de objeto. Si hay más claves que devolver, Amazon S3
incluye un token de continuación en la respuesta. El código utiliza el token de continuación en la solicitud
subsiguiente para obtener el siguiente conjunto de claves del objeto.
Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ListObjectsTest
{
private const string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.
Para enumerar las claves de objeto que contiene un bucket usando AWS SDK para PHP, primero
debe enumerar los objetos que contiene el bucket y extraer la clave desde cada uno de los objetos
enumerados. Al enumerar los objetos en un bucket, tiene la opción de usar el método de bajo nivel Aws
\S3\S3Client::listObjects() o la clase de alto nivel Aws\ResultPaginator.
El método de bajo nivel listObjects() se asigna a la API REST subyacente de Amazon S3. Cada
solicitud listObjects() devuelve una página de hasta 1000 objetos. Si tiene más de 1000 objetos en
el bucket, su respuesta aparecerá incompleta y tendrá que enviar otra solicitud listObjects() para
recuperar el siguiente conjunto de 1000 objetos.
Puede usar el paginador de alto nivel ListObjects para que la tarea de enumerar los objetos que
contiene un bucket sea un poco más sencilla. Para usar el paginador ListObjects para crear una lista
de objetos, ejecute el método de cliente de Amazon S3 getPaginator() que se hereda desde la clase Aws/
AwsClientInterface con el comando ListObjects como primer argumento y una matriz que contenga
los objetos devueltos desde el bucket especificado como segundo argumento. Cuando se usa como
paginador ListObjects, el método getPaginator() devuelve todos los objetos que contiene el bucket
especificado. No hay límite de 1000 objetos, por lo que no ha de preocuparse de si la respuesta está o no
incompleta.
Las siguientes tareas le guían a través del proceso de uso de los métodos de cliente PHP de Amazon S3
para enumerar los objetos que contiene un bucket desde el que puede enumerar las claves de objetos.
El siguiente ejemplo en PHP muestra cómo enumerar las claves desde un bucket específico. Demuestra
cómo usar el método getIterator() de alto nivel para enumerar los objetos de un bucket y cómo
extraer la clave de cada uno de los objetos en la lista. También demuestra cómo usar el método
listObjects() de bajo nivel para enumerar los objetos de un bucket y cómo extraer la clave de cada
uno de los objetos en la lista devuelta. Para obtener información acerca de la ejecución de ejemplos de
PHP en esta guía, visite Ejecución de ejemplos de PHP (p. 709).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
Recursos relacionados
• AWS SDK para PHP para la clase Aws\S3\S3Client de Amazon S3
• Paginadores
• Documentación de AWS SDK para PHP
Eliminación de objetos
Temas
• Eliminación de objetos de un bucket habilitado para el control de versiones (p. 237)
• Eliminación de objetos de un bucket habilitado para la Multi Factor Authentication (MFA, Autenticación
multifactor) (p. 237)
• Recursos relacionados (p. 238)
• Eliminación de un objeto por solicitud (p. 238)
• Eliminación de varios objetos por solicitud (p. 243)
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.
• Especificar una solicitud de eliminación de objetos de buckets sin control de versiones: es decir,
especifica solo la clave del objeto, no el ID de versión. En este caso, Amazon S3 crea un marcador
de eliminación y devuelve su ID de versión en la respuesta. Esto hace que el objeto desaparezca
del bucket. Para obtener información acerca del control de versiones de los objetos y el concepto de
marcador de eliminación, consulte Control de versiones de objetos (p. 115).
• Especificar una solicitud de eliminación con control de versiones: es decir, especifica la clave y el ID de
versión. En este caso, se obtienen los siguientes dos resultados posibles:
• Si el ID de versión se asigna a una versión de objeto específica, Amazon S3 elimina la versión
específica del objeto.
• Si el ID de versión se asigna al marcador de eliminación de ese objeto, Amazon S3 elimina el
marcador de eliminación. Esto hace que el objeto aparezca nuevamente en su bucket.
• 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.
• Si tiene una solicitud de eliminación de varios objetos en la que solo se especifica eliminar objetos
sin control de versiones de un bucket habilitado para la MFA, y no proporciona un token de MFA, las
eliminaciones se realizan correctamente.
Para obtener información acerca de la eliminación de MFA, consulte Eliminación MFA (p. 451).
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
Para eliminar un objeto por solicitud, use la API DELETE (consulte DELETE Object). Para obtener más
información acerca de la eliminación de objetos, consulte Eliminación de objetos (p. 236).
Puede usar la API REST directamente o las bibliotecas de encapsulamiento que proporcionan los SDK de
AWS que permiten simplificar el desarrollo de su aplicación.
Para obtener más información sobre el control de versiones, consulte Control de versiones de
objetos (p. 115).
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
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
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
En el siguiente ejemplo se muestra cómo eliminar un objeto tanto de un bucket con control de versiones
como de un bucket sin control versiones. Para obtener más información sobre el control de versiones,
consulte Control de versiones de objetos (p. 115).
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;
Console.WriteLine("Deleting an object");
await client.DeleteObjectAsync(deleteObjectRequest);
}
catch (AmazonS3Exception e)
{
Console.WriteLine("Error encountered on server. Message:'{0}' when writing
an object", e.Message);
}
catch (Exception e)
{
Console.WriteLine("Unknown encountered on server. Message:'{0}' when
writing an object", e.Message);
}
}
}
}
1. Habilita el control de versiones en un bucket que especifique (si el control de versiones ya está
habilitado, esto no tiene ningún efecto).
2. Añadir un objeto de muestra al bucket. Como respuesta, Amazon S3 devuelve un ID de versión del
nuevo objeto añadido. El ejemplo utiliza este ID de versión en la solicitud de eliminación.
3. Elimina el objeto de muestra especificando tanto el nombre de clave como el ID de versión del objeto.
Note
Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class DeleteObjectVersion
{
private const string bucketName = "*** versioning-enabled bucket name ***";
private const string keyName = "*** Object Key Name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
Key = objectKey,
ContentBody = "This is the content body!"
};
PutObjectResponse response = await client.PutObjectAsync(request);
return response.VersionId;
}
}
}
En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.
En el siguiente ejemplo de PHP se elimina un objeto de un bucket. Como este ejemplo muestra cómo
eliminar objetos de buckets sin control de versiones, proporciona solo el nombre del bucket y la clave del
objeto (no un ID de versión) en la solicitud de eliminación. Para obtener información acerca de la ejecución
de ejemplos de PHP en esta guía, consulte Ejecución de ejemplos de PHP (p. 709).
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Recursos relacionados
• Eliminación de varios objetos con AWS SDK para .NET (p. 247)
• Eliminación de varios objetos con AWS SDK para PHP (p. 252)
• Eliminación de varios objetos con la API de REST (p. 254)
Amazon S3 proporciona la API de Multi-Object Delete (consulte Delete - Multi-Object Delete) que le
permite eliminar varios objetos en una sola solicitud. La API admite dos modos para la respuesta: detallado
y silencioso. De forma predeterminada, la operación utiliza el modo detallado. En modo detallado la
respuesta incluye el resultado de la eliminación de cada clave que se especifica en su solicitud. En el modo
silencioso, la respuesta incluye solo claves para las que la operación de eliminación detectó un error. Si
se eliminan con éxito todas las claves cuando se utiliza el modo silencioso, Amazon S3 devuelve una
respuesta vacía.
• Especifique solo el nombre de clave del objeto. Amazon S3 añadirá un marcador de eliminación al
objeto.
• Especifique el nombre de clave del objeto y la ID de versión que se va a eliminar. Amazon S3 eliminará
la versión especificada del objeto.
Example
En el siguiente ejemplo se utiliza la API de Multi-Object Delete para eliminar objetos de un bucket sin
control de versiones habilitado. En el ejemplo, se cargan objetos de muestra al bucket y luego se utiliza
el método AmazonS3Client.deleteObjects() para eliminar los objetos en una sola solicitud. En
DeleteObjectsRequest, el ejemplo especifica solo los nombres de clave del objeto, ya que los objetos
no tienen ID de versión.
Para obtener más información sobre la eliminación de objetos, consulte Eliminación de objetos (p. 236).
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.DeleteObjectRequest;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
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:
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;
try {
S3_CLIENT = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// 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");
}
}
Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class 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;
Example Eliminación de varios objetos para un bucket con control de versiones habilitado
En el siguiente ejemplo de C# se utiliza la API de Multi-Object Delete para eliminar objetos de un bucket
con control de versiones habilitado. En el ejemplo se realizan las siguientes acciones:
1. Crea objetos de muestra y los elimina especificando el nombre de clave y el ID de versión de cada
objeto. La operación elimina versiones específicas de los objetos.
2. Crea objetos de muestra y los elimina especificando solo los nombres de clave. Debido a que el ejemplo
no especifica los ID de versión, la operación solo añade marcadores de eliminación. Ni elimina ninguna
versión específica de los objetos. Tras la eliminación, estos objetos no aparecerán en la consola de
Amazon S3.
3. Elimina los marcadores de eliminación especificando las claves de objeto y los ID de versión de los
marcadores de eliminación. Cuando esta operación elimina los marcadores de eliminación, los objetos
reaparecen en la consola.
Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class DeleteMultipleObjVersionedBucketTest
{
private const string bucketName = "*** versioning-enabled bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
// Delete objects using only keys. Amazon S3 creates a delete marker and
// returns its version ID in the response.
List<DeletedObject> deletedObjects = await
NonVersionedDeleteAsync(keysAndVersions2);
return deletedObjects;
}
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);
}
}
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);
}
}
};
keys.Add(keyVersion);
}
return keys;
}
}
}
En este tema, se da por sentado que está familiarizado con las instrucciones para Uso del AWS SDK para
PHP y ejecución de ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP adecuadamente.
En el siguiente ejemplo de PHP se utiliza el método deleteObjects() para eliminar varios objetos de un
bucket sin control de versiones habilitado.
Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución de
ejemplos de PHP (p. 709).
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
En el siguiente ejemplo de PHP se utiliza el método deleteObjects() para eliminar varios objetos de un
bucket con control de versiones habilitado.
Para obtener información acerca de la ejecución de ejemplos de PHP en esta guía, consulte Ejecución de
ejemplos de PHP (p. 709).
<?php
require 'vendor/autoload.php';
use Aws\S3\S3Client;
]);
// 3. List the objects versions and get the keys and version IDs.
$versions = $s3->listObjectVersions(['Bucket' => $bucket])
->getPath('Versions');
Recursos relacionados
Amazon S3 Select funciona con objetos almacenados en formato CSV, JSON o Apache Parquet. También
funciona con objetos comprimidos con GZIP o BZIP2 (solo para objetos CSV y JSON), así como con
objetos cifrados del lado del servidor. Puede especificar el formato de los resultados como CSV o JSON, y
también puede determinar cómo se delimitan los registros en los resultados.
Las expresiones SQL se pasan a Amazon S3 en la solicitud. Amazon S3 Select es compatible con un
subconjunto de SQL. Para obtener más información sobre los elementos SQL compatibles con Amazon S3
Select, consulte Referencia de SQL para Select de Amazon S3 y Select de Glacier (p. 745).
Puede realizar consultas SQL con los SDK de AWS, la API REST SELECT Object Content, la AWS
Command Line Interface (AWS CLI) o la consola de Amazon S3. La consola de Amazon S3 limita la
cantidad de datos devueltos a 40 MB. Para recuperar más datos, utilice la AWS CLI o la API.
Requisitos y límites
A continuación, se describen los requisitos para utilizar Amazon S3 Select:
• Amazon S3 Select solo admite compresión en columnas usando GZIP o Snappy. Amazon S3 Select no
admite la compresión de todo el objeto para objetos Parquet.
• Amazon S3 Select no admite salida Parquet. Debe especificar el formato de salida como CSV o JSON.
• El tamaño de bloque sin comprimir máximo es de 256 MB.
• El número máximo de columnas es 100.
• Debe utilizar los tipos de datos especificados en el esquema del objeto.
• Seleccionar en un campo repetido devuelve solo el último valor.
Para obtener más información sobre la creación de una solicitud de Amazon S3 Select, consulte SELECT
Object Content en la Amazon Simple Storage Service API Reference. También puede consultar uno de los
ejemplos de código de SDK en las secciones siguientes.
Errores
Amazon S3 Select devuelve un código de error y un mensaje de error asociado cuando se produce un
problema al intentar ejecutar una consulta. Para ver una lista de los códigos de error y las descripciones,
consulte la sección sobre errores especiales de la página SELECT Object Content en la Amazon Simple
Storage Service API Reference.
Temas
• Recursos relacionados (p. 256)
• Selección de contenido de los objetos mediante el SDK para Java (p. 256)
• Selección de contenido de los objetos mediante la API de REST (p. 258)
• Selección de contenido de los objetos mediante otros SDK (p. 258)
Recursos relacionados
• Uso de los SDK, la CLI y los exploradores de AWS (p. 697)
Example Ejemplo
En el siguiente ejemplo de código Java se devuelve el valor de la primera columna de cada uno de los
registros almacenados en un objeto que contiene datos en formato CSV. También se solicita la devolución
de mensajes Progress y Stats. Se debe proporcionar un nombre de bucket válido y un objeto que
contenga datos en formato CSV.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
package com.amazonaws;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CSVInput;
import com.amazonaws.services.s3.model.CSVOutput;
import com.amazonaws.services.s3.model.CompressionType;
import com.amazonaws.services.s3.model.ExpressionType;
import com.amazonaws.services.s3.model.InputSerialization;
import com.amazonaws.services.s3.model.OutputSerialization;
import com.amazonaws.services.s3.model.SelectObjectContentEvent;
import com.amazonaws.services.s3.model.SelectObjectContentEventVisitor;
import com.amazonaws.services.s3.model.SelectObjectContentRequest;
import com.amazonaws.services.s3.model.SelectObjectContentResult;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* 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.
*/
/*
* 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.");
}
}
outputSerialization.setCsv(new CSVOutput());
request.setOutputSerialization(outputSerialization);
return request;
}
}
• Python: Uso del AWS SDK for Python (Boto) (p. 710).
Amazon S3 restaura una copia temporal del objeto solo durante el periodo especificado. Después, elimina
la copia del objeto restaurada. Puede modificar el periodo de vencimiento de una copia restaurada
mediante la reemisión de una restauración. En este caso, Amazon S3 actualiza el periodo de vencimiento
en relación con el momento actual.
Amazon S3 calcula la hora de vencimiento de la copia del objeto restaurada añadiendo el número de días
especificados en la solicitud de restauración a la hora actual. Después redondea el tiempo resultante a
la medianoche del día siguiente en hora universal coordinada (UTC). Por ejemplo, supongamos que un
objeto se ha creado el 15 de octubre de 2012 a las 10:30 UTC, y el periodo de restauración se fijó en tres
días. En este caso, la copia restaurada tiene como fecha de vencimiento el 19 de octubre de 2012 a las
00:00 UTC, momento en el que Amazon S3 elimina la copia del objeto.
Después de recibir una copia temporal del objeto restaurado, la clase de almacenamiento del objeto sigue
siendo GLACIER o DEEP_ARCHIVE. (Una solicitud de las operaciones de API HEAD Object o GET Object
devuelve GLACIER o DEEP_ARCHIVE como clase de almacenamiento).
Puede restaurar una copia de un objeto durante cualquier número de días. Sin embargo, debería
restaurar los objetos exclusivamente durante el tiempo necesario, debido a los costos de almacenamiento
asociados con la copia del objeto. Cuando se restaura un archivo, se paga tanto el archivado (según
la tarifa de GLACIER o DEEP_ARCHIVE) como una copia que se restaura de manera temporal (tarifa
de almacenamiento de redundancia reducida (RRS)). Para obtener información acerca de los precios,
consulte Precios de Amazon S3.
Siempre que sea necesario, puede restaurar segmentos de gran tamaño de los datos almacenados en
las clases de almacenamiento GLACIER y DEEP_ARCHIVE. Por ejemplo, es posible que desee restaurar
los datos para una copia secundaria. Sin embargo, si tiene que restaurar una cantidad de datos de
gran tamaño, tenga en cuenta que las clases de almacenamiento GLACIER y DEEP_ARCHIVE se han
diseñado para 35 solicitudes de restauración aleatorias por pebibyte (PiB) almacenado al día.
Para obtener información acerca del uso de transiciones de ciclo de vida para mover objetos a las clases
de almacenamiento GLACIER o DEEP_ARCHIVE, consulte Transición a las clases de almacenamiento
GLACIER y DEEP ARCHIVE (archivado de objetos) (p. 132).
Para restaurar más de un objeto de Amazon S3 con una sola solicitud, puede utilizar operaciones por lotes
de Amazon S3.
Temas
• Opciones de recuperación de archivos (p. 259)
• Actualizar la velocidad de una restauración en curso (p. 260)
• Restaurar un objeto archivado con la consola de Amazon S3 (p. 260)
• Restaurar un objeto archivado con AWS SDK for Java (p. 260)
• Restaurar un objeto archivado con AWS SDK para .NET (p. 261)
• Restaurar un objeto archivado con la API REST (p. 263)
• Expedited: las recuperaciones rápidas le permiten obtener acceso rápidamente a sus datos
almacenados en la clase de almacenamiento GLACIER cuando son necesarias solicitudes urgentes
ocasionales para un subconjunto de archivos. En todos los casos excepto para los objetos archivados
de mayor tamaño (más de 250 MB), los datos a los que se obtiene acceso con solicitudes rápidas
suelen estar disponibles en un plazo de entre 1 y 5 minutos. La capacidad aprovisionada garantiza
que la capacidad que necesitan las recuperaciones Expedited estará disponible cuando lo necesite.
Para obtener más información, consulte Capacidad aprovisionada (p. 260). Las recuperaciones
rápidas y la capacidad aprovisionada no están disponibles para los objetos almacenados en la clase
DEEP_ARCHIVE.
• Standard: las recuperaciones estándares le permiten acceder a sus objetos archivados en un plazo
de varias horas. Esta es la opción predeterminada para las solicitudes de recuperación de GLACIER
y DEEP_ARCHIVE que no especifican la opción de recuperación. Las recuperaciones estándar
finalizan en un plazo de entre 3 y 5 horas para los objetos que están almacenados en la clase de
almacenamiento GLACIER. Suelen finalizar en un plazo de 12 horas para los objetos que están
almacenados en la clase de almacenamiento DEEP_ARCHIVE.
• Bulk: las recuperaciones en bloque son la opción de recuperación menos costosa de Amazon
S3 Glacier, lo que le permite recuperar grandes cantidades de datos, incluso petabytes, de forma
económica. Las recuperaciones en bloque suelen finalizar en un plazo de entre 5 y 12 horas para los
objetos que están almacenados en la clase de almacenamiento GLACIER. Suelen finalizar en un plazo
de 48 horas para los objetos que están almacenados en la clase de almacenamiento DEEP_ARCHIVE.
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
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.
Puede adquirir capacidad aprovisionada con la consola de Amazon S3, la consola de Amazon S3 Glacier,
la API REST de Purchase Provisioned Capacity, los SDK de AWS o la AWS CLI. Para obtener información
acerca de los precios de la capacidad aprovisionada, consulte Precios de Amazon S3.
Las recuperaciones rápidas en las que se utiliza capacidad aprovisionada se siguen cobrando
según las solicitudes y las recuperaciones, y no están disponibles para la clase de almacenamiento
DEEP_ARCHIVE.
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.
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.
comprueba su estado de restauración. Para obtener más información acerca de la restauración de objetos
archivados, consulte Restaurar objetos archivados (p. 258). Para obtener instrucciones sobre la creación
y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon
S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.RestoreObjectRequest;
import java.io.IOException;
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);
El siguiente ejemplo de código C# inicia una solicitud de restauración de un objeto archivado durante 2
días. Amazon S3 mantiene el estado de restauración en los metadatos del objeto. Tras iniciar la solicitud,
el ejemplo recupera los metadatos del objeto y comprueba el valor de la propiedad RestoreInProgress.
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Ejecución
de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class RestoreArchivedObjectTest
{
private const string bucketName = "*** bucket name ***";
private const string objectKey = "** archived object key name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
Cuando realiza consultas Select, Glacier proporciona tres niveles de acceso a los datos— Expedited,
Standard y Bulk. Todos estos niveles tienen tiempos y costos de acceso diferentes, por lo que, a la hora
de seleccionar cualquiera de ellos, debe tener en cuenta la rapidez con la que desea que los datos estén
disponibles. Para obtener más información, consulte Niveles de acceso a los datos (p. 265).
Puede utilizar el tipo de restauración Select con los SDK de AWS, la API REST de Glacier y la AWS
Command Line Interface (AWS CLI).
Temas
• Requisitos y límites de Select (p. 263)
• ¿Cómo consulto los datos con el trabajo Select? (p. 264)
• Control de errores (p. 265)
• Niveles de acceso a los datos (p. 265)
• Más información (p. 266)
• Los objetos de archivos que se consultan utilizando el trabajo Select deben tener un formato de valores
separados por comas (CSV).
• Un bucket de S3 para salida. La cuenta de AWS que utilice para iniciar los trabajos de Glacier Select
debe tener permisos de escritura en el bucket de S3. El bucket de Amazon S3 debe estar en la misma
región de AWS que el bucket que contiene el objeto archivado que se está consultando.
• La cuenta de AWS solicitante debe tener permisos para realizar las acciones s3:RestoreObject
y s3:GetObject. Para obtener más información acerca de estos permisos, consulte Permisos
relacionados con operaciones de subrecursos de bucket (p. 360).
• El archivo no debe estar cifrado con SSE-C o cifrado del lado del cliente.
• 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.
Para consultar los datos de Glacier, cree una solicitud Select utilizando la operación POST Object restore.
Cuando se realiza una solicitud Select, debe proporcionar la expresión SQL, el archivo que se va a
consultar y la ubicación para almacenar los resultados.
La siguiente expresión de ejemplo devuelve todos los registros del objeto archivado especificado en POST
Object restore.
Glacier Select es compatible con un subconjunto del lenguaje ANSI SQL. Admite las cláusulas SQL
de filtrado más comunes, como SELECT, FROM y WHERE. No admite SUM, COUNT, GROUP BY, JOINS,
DISTINCT, UNION, ORDER BY y LIMIT. Para obtener más información sobre la compatibilidad con SQL,
consulte Referencia de SQL para Amazon S3 Select y Glacier Select en la Guía para desarrolladores de
Amazon Simple Storage Service.
También hay un archivo de referencia llamado job.txt que se escribe en la ubicación de salida. Una
vez que se escribe este archivo, nunca vuelve a actualizarse. El archivo de referencia se utiliza para lo
siguiente:
• Permite validar sincrónicamente el permiso de escritura y la mayoría de los errores de sintaxis SQL.
• Proporcionando una salida estática sobre la solicitud Select a la que puede hacer referencia fácilmente
siempre que quiera.
Por ejemplo, supongamos que realiza una solicitud Select con la ubicación de salida de resultados
s3://example-bucket/my-prefix y la respuesta del trabajo devuelve el ID de trabajo
examplekne1209ualkdjh812elkassdu9012e. Una vez que finalice el trabajo Select, podrá ver los
siguientes objetos de Amazon S3 en el bucket:
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/job.txt
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/abc
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/def
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/results/ghi
s3://example-bucket/my-prefix/examplekne1209ualkdjh812elkassdu9012e/result_manifest.txt
Los resultados de la consulta Select se dividen en varias partes. En el ejemplo, el trabajo Select utiliza
el prefijo especificado al configurar la ubicación de salida y agrega el ID de trabajo y el prefijo results.
A continuación, escribe los resultados en tres partes, con los nombres de objetos que terminan en abc,
def y ghi. El manifiesto de resultados contiene los tres archivos para permitir la recuperación mediante
programación. Si se produce un error en el trabajo, el archivo aparece con el prefijo de error y se genera
un archivo error_manifest.txt.
La longitud de un nombre de objeto de Amazon S3, lo que también se conoce como clave, no
puede ser superior a 1024 bytes. Glacier Select reserva 128 bytes para los prefijos. Además, la
longitud de la ruta de ubicación de Amazon S3 no puede ser mayor de 512 bytes. Si una solicitud
tiene una longitud superior a 512 bytes, devuelve una excepción y no se acepta.
Control de errores
El trabajo Select notifica dos tipos de errores. El primer conjunto de errores se envía de forma sincrónica
al ejecutar la consulta en POST Object restore. Estos errores se envían como parte de la respuesta HTTP.
Sin embargo, hay otro conjunto de errores que puede producirse durante la ejecución de la consulta, una
vez que se ha aceptado correctamente. En este caso, los errores se escriben en la ubicación de salida
especificada con el prefijo errors.
El trabajo Select deja de ejecutar la consulta cuando encuentra un error. Para ejecutar la consulta
correctamente, debe resolver todos los errores. Puede consultar los registros para identificar qué registros
provocaron los errores.
Como las consultas se ejecutan simultáneamente en varios nodos informáticos, los errores que se
obtienen no aparecen en orden. Por ejemplo, si la consulta experimenta un error en la fila 6234, eso no
significa que todas las filas anteriores se hayan procesado correctamente. Si se ejecutara de nuevo la
consulta, podría aparecer un error en otra fila.
• Expedited: le permite obtener acceso rápidamente a sus datos cuando es necesario utilizar solicitudes
urgentes ocasionales en un subconjunto de archivos. En todos los casos excepto para el objeto
archivado de mayor tamaño (más de 250 MB), los datos a los que se accede con solicitudes Expedited
suelen estar disponibles en entre 1 y 5 minutos. Existen dos tipos de acceso a datos Expedited:
bajo demanda y aprovisionadas. Las solicitudes bajo demanda son similares a las instancias bajo
demanda de EC2 y están disponibles la mayoría del tiempo. Las solicitudes aprovisionadas ofrecen la
garantía de estar disponibles cuando se las necesita. Para obtener más información, consulte Capacidad
aprovisionada (p. 266).
• Standard: le permite obtener acceso a los objetos archivados en un plazo de varias horas. Las
recuperaciones estándares finaliza en un plazo de entre 3 y 5 horas. Este es el nivel predeterminado.
• Bulk: la opción de acceso a datos de menor costo en Glacier, le permite recuperar grandes cantidades
de datos, incluso petabytes, de forma económica y en un mismo día. El acceso Bulk termina
habitualmente en un plazo de entre 5 y 12 horas.
Para realizar una solicitud Expedited, Standard o Bulk, establezca el elemento de la solicitud Tier
en la solicitud a la API REST POST Object restore según la opción que desee o su equivalente en la AWS
CLI o los SDK de AWS. Para el acceso, Expedited, no es necesario determinar si una recuperación
Expedited debería ser bajo demanda o aprovisionada. Si ha adquirido capacidad aprovisionada, todas las
recuperaciones Expedited se realizarán automáticamente con su capacidad aprovisionada. Para obtener
información acerca de los precios de los niveles, consulte Precios de Glacier.
Capacidad aprovisionada
La capacidad aprovisionada garantiza que su capacidad de recuperación para las recuperaciones rápidas
esté disponible cuando la necesite. Cada unidad de capacidad garantiza que se podrán realizar al menos
tres recuperaciones rápidas cada cinco minutos, y proporciona un desempeño de recuperación de hasta
150 MB/s.
Más información
• POST Object restore en la Amazon Simple Storage Service API Reference
• Referencia de SQL para Amazon S3 Select y Glacier Select en la Guía para desarrolladores de Amazon
Simple Storage Service
Después de que el análisis de clase de almacenamiento observa estos patrones de acceso poco
frecuentes a un conjunto de datos filtrados durante un periodo determinado de tiempo, podrá usar los
resultados del análisis para ayudar a mejorar sus políticas de ciclo de vida. Puede configurar el análisis
de clases de almacenamiento para analizar todos los objetos de un bucket. También puede configurar
filtros para agrupar objetos de modo que se analicen según un prefijo común (es decir, objetos que tengan
nombres que comiencen por una cadena común), por etiquetas de objetos o por prefijos y etiquetas.
Seguramente descubrirá que el filtrado por grupos de objetos es la mejor manera de beneficiarse del
análisis de clases de almacenamiento.
Important
El análisis de clases de almacenamiento no ofrece recomendaciones para las transiciones a las
clases de almacenamiento ONEZONE_IA o GLACIER.
Puede tener varios análisis de clases de almacenamiento por bucket, hasta 1000, y recibirá un análisis
separado para cada filtro. Las configuraciones de filtro múltiples le permiten analizar grupos específicos de
objetos para mejorar sus políticas de ciclo de vida que pasen objetos a STANDARD IA.
Temas
• ¿Cómo configuro el análisis de clases de almacenamiento? (p. 267)
• ¿Cómo uso el análisis de clases de almacenamiento? (p. 268)
• ¿Cómo puedo exportar los datos del análisis de clases de almacenamiento? (p. 271)
• API REST de análisis de Amazon S3 (p. 272)
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.
Cuando configura por primera vez un filtro, la consola de Amazon S3 muestra un mensaje 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
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:
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.
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:
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.
La consola de Amazon S3 muestra los patrones de acceso agrupados por los grupos de edad predefinidos
de los objetos como se muestra en el siguiente ejemplo.
El texto Frequently accessed (De acceso frecuente) o Infrequently accessed (De acceso poco
frecuente) que se muestra en la parte inferior de cada grupo de edad se basa en la misma lógica que la
recomendación de política de ciclo de vida que se prepara. Después de que se prepare la recomendación
de una política de ciclo de vida (RecommendedObjectAge), todos los niveles de edad por debajo de
la edad recomendada se marcan como acceso infrecuente, independientemente de la ratio de acceso
acumulativo actual. La intención de este texto es servir como apoyo visual para ayudarle en el proceso de
creación del ciclo de vida.
Debe crear una política de bucket en el bucket de destino para conceder permisos para que Amazon S3
compruebe qué cuenta de AWS es propietaria del bucket y escriba objetos en el bucket, en la ubicación
definida. Para ver una política de ejemplo, consulte Concesión de permisos para el inventario de Amazon
S3 y el análisis de Amazon S3 (p. 393).
Tras configurar los informes de análisis de las clases de almacenamiento, empezará a recibir el informe
exportado a diario tras 24 horas. Después de ese momento, Amazon S3 seguirá monitorizando y
proporcionando exportaciones diarias.
Puede abrir el archivo CSV en una aplicación de hoja de cálculo o importar el archivo en otras
aplicaciones, como Amazon Quicksight. Para obtener información sobre cómo usar archivos Amazon S3
con Amazon QuickSight, consulte Creación de un conjunto de datos utilizando los archivos de Amazon S3
en la Guía de usuario de Amazon QuickSight.
Los datos en el archivo exportado se ordenan por fecha en los grupos de edad de objetos,
como se muestra en los siguientes ejemplos. Si la clase de almacenamiento es STANDARD,
la fila contendrá también datos para las columnas ObjectAgeForSIATransition y
RecommendedObjectAgeForSIATransition.
Al final del informe, el grupo de edad de objetos es ALL. Las filas ALL contienen totales acumulados para
todos los grupos de edad y para ese día como se muestra en el ejemplo siguiente.
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.
Temas
• Protección de datos en Amazon S3 (p. 273)
• Administración de identidad y acceso en Amazon S3 (p. 312)
• Registro y monitorización en Amazon S3 (p. 438)
• Validación de la conformidad en Amazon S3 (p. 439)
• Resiliencia en Amazon S3 (p. 448)
• Seguridad de la infraestructura en Amazon S3 (p. 479)
• Configuración y análisis de vulnerabilidades en Amazon S3 (p. 480)
• Prácticas recomendadas de seguridad para Amazon S3 (p. 480)
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:
• 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.
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.
Tiene tres opciones mutuamente exclusivas en función de cómo seleccione administrar las claves de
cifrado:
• Cifrado del lado del servidor con claves de cifrado administradas por Amazon S3 (SSE-S3): cada objeto
se cifra con una clave exclusiva. Como medida de seguridad adicional, cifra la propia clave con una
clave maestra que rota periódicamente. El cifrado del lado del servidor de Amazon S3 utiliza uno de los
cifrados de bloques más seguros disponibles, Advanced Encryption Standard de 256 bits (AES-256),
para cifras sus datos. Para obtener más información, consulte Protección de los datos con el cifrado del
lado del servidor con claves de cifrado administradas por Amazon S3 (SSE-S3) (p. 281).
• Cifrado en el servidor con claves almacenadas en AWS KMS (SSE-KMS): similar a SSE-S3, pero
con algunos beneficios adicionales y cargos adicionales por el uso de este servicio. Hay permisos
separados para usar una clave sobre (una clave que protege la clave de cifrado de sus datos), que
proporciona protección adicional frente al acceso no autorizado a sus objetos en Amazon S3. SSE-KMS
le proporciona también un seguimiento de auditoría de cuándo se usaron sus claves y quién las usó.
Además, tendrá la opción de crear y administrar las claves de cifrado usted mismo o emplear una clave
predeterminada exclusiva para usted, el servicio que usa y la región en la que trabaja. Para obtener más
información, consulte Protección de datos con el cifrado en el servidor mediante claves almacenadas en
AWS KMS (SSE-KMS) (p. 275).
• Cifrado del lado del servidor con claves facilitadas por el cliente (SSE-C): usted administra las claves de
cifrado y Amazon S3 administra tanto el cifrado, al escribir en los discos, como el descifrado, al obtener
acceso a los objetos. Para obtener más información, consulte Protección de los datos con el cifrado del
lado del servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 290).
Note
Al enumerar los objetos en su bucket, la API de listado devuelve una lista de todos los objetos,
independientemente de si están cifrados.
definir las políticas que controlan cómo se pueden utilizar las claves y controlar el uso de las claves para
demostrar que se emplean correctamente. Puede usar estas claves para proteger sus datos en buckets de
Amazon S3.
La primera vez que añada un objeto cifrado con SSE-KMS a un bucket en una región, se crea una CMK
predeterminada automáticamente. Esta clave se utiliza para el cifrado SSE-KMS, a menos que seleccione
una CMK que haya creado por separado con AWS Key Management Service. Crear su propia CMK le
ofrece una mayor flexibilidad, incluida la opción de crear, rotar, desactivar y definir los controles de acceso
y auditar las claves de cifrado utilizadas para proteger los datos.
Para obtener más información, consulte ¿Qué es AWS Key Management Service? en la AWS Key
Management Service Developer Guide. Si utiliza AWS KMS, se aplican cargos adicionales por usar claves
de AWS KMS. Para obtener más información, consulte Precios de AWS Key Management Service.
Note
• Si carga o accede a objetos cifrados con SSE-KMS, tiene que usar AWS Signature Version 4
para reforzar la seguridad. Para obtener más información sobre cómo hacer esto con un SDK
de AWS, consulte Especificación de Signature Version en una autenticación de solicitud.
• Al utilizar el cifrado SSE-KMS con un bucket de S3, la clave de KMS debe estar en la misma
región que el bucket.
• Puede decidir crear y administrar las claves de cifrado usted mismo o usar su clave de servicio
predeterminada generada exclusivamente en un cliente por servicio y nivel de región.
• La ETag de la respuesta no es el MD5 de los datos del objeto.
• Las claves de datos usadas para cifrar sus datos también están cifradas, y se almacenan junto a los
datos que protegen.
• Las claves maestras auditables se pueden crear, rotar y deshabilitar desde la consola de AWS KMS.
• Los controles de seguridad de AWS KMS pueden ayudarle a cumplir los requisitos de conformidad
relacionados con el cifrado.
Amazon S3 admite políticas de bucket que podrá usar si requiere cifrado en el servidor para todos los
objetos almacenados en su bucket. Por ejemplo, la siguiente política de bucket deniega el permiso de
carga de objeto (s3:PutObject) para todos, si la solicitud no incluye el encabezado x-amz-server-
side-encryption, que solicita el cifrado del lado del servidor con SSE-KMS.
{
"Version":"2012-10-17",
"Id":"PutObjPolicy",
"Statement":[{
"Sid":"DenyUnEncryptedObjectUploads",
"Effect":"Deny",
"Principal":"*",
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::YourBucket/*",
"Condition":{
"StringNotEquals":{
"s3:x-amz-server-side-encryption":"aws:kms"
}
}
}
]
}
Todas las solicitudes GET y PUT para un objeto protegido por AWS KMS producirán un error si no
se realizan mediante SSL o no se realizan con SigV4.
SSE-KMS solo cifra los datos de objetos. Los metadatos de los objetos no se cifran.
Para obtener más información acerca del uso de la consola de Amazon S3 con claves de cifrado
almacenadas en AWS KMS, consulte ¿Cómo puedo cargar archivos y carpetas en un bucket de S3? en la
Guía del usuario de la consola de Amazon Simple Storage Service.
La API REST para crear objetos (consulte Especificación de AWS Key Management Service en Amazon
S3 con la API REST (p. 280)) proporciona un encabezado de solicitud, x-amz-server-side-
encryption, que puede utilizar para solicitar SSE-KMS con el valor aws:kms. También existe x-amz-
server-side-encryption-aws-kms-key-id, que especifica el ID de la clave de cifrado maestra de
AWS KMS; utilizada para el objeto. La API de Amazon S3 también admite el contexto de cifrado, con el
encabezado x-amz-server-side-encryption-context.
El contexto de cifrado puede ser cualquier valor que quiera, siempre que el encabezado se ajuste al
formato JSON cifrado en Base64. Sin embargo, como el contexto de cifrado no está cifrado y se guarda si
se activa el registro de AWS CloudTrail, el contexto de cifrado no debe incluir información confidencial. Es
recomendable que el contexto describa los datos que se cifran o descifran para poder entender mejor los
eventos de CloudTrail que genera AWS KMS. Para obtener más información, consulte Contexto de cifrado
en la AWS Key Management Service Developer Guide.
Además, Amazon S3 podría adjuntar una clave predefinida de aws:s3:arn con un valor igual al ARN del
objeto para el contexto de cifrado proporcionado. Esto solo ocurre si la clave aws:s3:arn no está aún en
el contexto de cifrado proporcionado, en cuyo caso esta clave predefinida se adjunta cuando Amazon S3
procesa las solicitudes PUT. Si esta clave aws:s3:arn ya está presente en su contexto de cifrado, la clave
no se adjunta una segunda vez al contexto de cifrado.
Si tiene esta clave predefinida como parte de su contexto de cifrado, podrá realizar un seguimiento de
las solicitudes pertinentes en CloudTrail, de modo que siempre podrá comprobar qué ARN de objeto
de Amazon S3 se ha usado con cada clave de cifrado. Además, esta clave predefinida como parte de
su contexto de cifrado garantiza que el contexto de cifrado no sea idéntico entre los distintos objetos de
Amazon S3, lo que refuerza la seguridad para sus objetos. La totalidad de su contexto de cifrado será
validada de modo que el valor sea igual al ARN del objeto.
• Operación PUT: cuando carga datos con la API PUT (consulte PUT Object), puede especificar estos
encabezados de solicitud.
• Iniciar carga multiparte: al cargar objetos grandes mediante la API de carga multiparte, puede especificar
estos encabezados. Debe especificar estos encabezados en la solicitud inicial (consulte la sección sobre
Iniciar carga multiparte).
• Operación POST: cuando utiliza una operación POST para cargar un objeto (consulte POST Object),
en vez de proporcionar los encabezados de solicitud, debe proporcionar la misma información en los
campos del formulario.
• Operación COPY: cuando copia un objeto (consulte PUT Object - Copy), tiene un objeto de origen y
uno de destino. Al pasar encabezados SSE-KMS con la operación COPY, se aplicarán solo al objeto de
destino.
Los SDK de AWS también proporcionan API de encapsulamiento para que solicite SSE-KMS con Amazon
S3.
Especificación de AWS Key Management Service en Amazon S3 con los SDK de AWS
Al utilizar los SDK de AWS, puede solicitar a Amazon S3 que use claves de cifrado administradas por AWS
Key Management Service (AWS KMS). En esta sección se brindan ejemplos en los que se utilizan los SDK
de AWS para Java y .NET. Para obtener información acerca de otros SDK, consulte Código de muestra y
bibliotecas.
En esta sección se explican varias operaciones de Amazon S3 en las que se usa el AWS SDK para Java y
cómo usar las claves de cifrado administradas por AWS KMS.
Operación PUT
Al cargar un objeto con el AWS SDK para Java, puede solicitar a Amazon S3 que use una clave de cifrado
administrada por AWS KMS agregando la propiedad SSEAwsKeyManagementParams como se muestra
en la siguiente solicitud:
En este caso, Amazon S3 usa la clave maestra predeterminada (consulte Protección de datos con el
cifrado en el servidor mediante claves almacenadas en AWS KMS (SSE-KMS) (p. 275)). Opcionalmente,
puede crear su propia clave y especificarla en la solicitud.
Para obtener más información acerca de creación de claves, consulte Programming the AWS KMS API en
la AWS Key Management Service Developer Guide.
Para ver ejemplos de código funcional sobre cómo cargar un objeto, consulte los temas siguientes.
Tendrá que actualizar esos ejemplos de código y facilitar la información de cifrado como se muestra en el
fragmento de código anterior.
• Para cargar un objeto en una única operación, consulte Cargar un objeto con AWS SDK for
Java (p. 182).
• Para una carga multiparte, consulte los siguientes temas:
• Para utilizar la API de carga multiparte de alto nivel, consulte Cargar un archivo (p. 193).
• Si utiliza la API de carga multiparte de bajo nivel, consulte Cargar un archivo (p. 197).
Operación de copia
clave de cifrado administrada por AWS KMS. Para obtener más información acerca de la copia de objetos,
consulte Copia de objetos (p. 219).
URL prefirmadas
Al crear una URL prefirmada para un objeto cifrado con una clave de cifrado administrada por AWS KMS
debe especificar explícitamente Signature Version 4:
Para ver un ejemplo del código, consulte Generar una URL de objeto prefirmada con AWS SDK for
Java (p. 179).
En esta sección se explican varias operaciones de Amazon S3 en las que se usa el AWS SDK para .NET y
cómo usar las claves de cifrado administradas por AWS KMS.
Operación PUT
Al cargar un objeto con el AWS SDK para .NET, puede solicitar a Amazon S3 que utilice una clave de
cifrado administrada por AWS KMS añadiendo la propiedad ServerSideEncryptionMethod como se
muestra en la siguiente solicitud.
En este caso, Amazon S3 usa la clave maestra predeterminada (consulte Protección de datos con el
cifrado en el servidor mediante claves almacenadas en AWS KMS (SSE-KMS) (p. 275)). Opcionalmente,
puede crear su propia clave y especificarla en la solicitud.
Para obtener más información acerca de creación de claves, consulte Programming the AWS KMS API en
la AWS Key Management Service Developer Guide.
Para ver ejemplos de código funcional sobre cómo cargar un objeto, consulte los temas siguientes.
Tendrá que actualizar estos ejemplos de código y facilitar la información de cifrado como se muestra en el
fragmento de código anterior.
• Para cargar un objeto en una única operación, consulte Cargar un objeto con AWS SDK
para .NET (p. 183).
• Para una carga multiparte, consulte los siguientes temas:
• Para utilizar la API de carga multiparte de alto nivel, consulte Carga de un archivo en un bucket de S3
con AWS SDK para .NET (API de alto nivel) (p. 201).
• Para utilizar la API de carga multiparte de bajo nivel, consulte Carga de un archivo en un bucket de S3
con AWS SDK para .NET (API de bajo nivel) (p. 207).
Operación de copia
URL prefirmadas
Al crear una URL prefirmada para un objeto cifrado con una clave de cifrado administrada por AWS KMS
debe especificar explícitamente Signature Version 4:
AWSConfigs.S3Config.UseSignatureVersion4 = true;
Para ver un ejemplo del código, consulte Generar una URL de objeto prefirmada con AWS SDK
para .NET (p. 180).
Cuando se crea un objeto: es decir, cuando está cargando un objeto nuevo o haciendo una copia de
un objeto existente, puede especificar el uso del cifrado del lado del servidor con claves de cifrado
administradas por AWS KMS (SSE-KMS) para cifrar sus datos agregando el encabezado x-amz-
server-side-encryption a la solicitud. Configure el valor del encabezado para el algoritmo de cifrado
aws:kms. Amazon S3 confirma que su objeto se guardó con SSE-KMS al devolver el encabezado de
respuesta x-amz-server-side-encryption.
• PUT Object
• PUT Object - Copy
• POST Object
• Initiate Multipart Upload
Cuando carga objetos grandes con la API de carga multiparte, puede especificar SSE-KMS al agregar
el encabezado x-amz-server-side-encryption a la solicitud Iniciar carga multiparte con el valor
aws:kms. Al copiar un objeto existente, independientemente de si el objeto de origen está cifrado o no, el
objeto de destino no está cifrado, a no ser que solicite explícitamente el cifrado en el servidor.
• 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-KMS, porque obtendrá el error HTTP 400: Solicitud errónea.
Protección de los datos con el cifrado del lado del servidor con claves de cifrado
administradas por Amazon S3 (SSE-S3)
El cifrado del lado del servidor protege los datos en reposo. Amazon S3 cifra cada objeto con una
clave única. Como medida de seguridad adicional, cifra la propia clave con una clave maestra que rota
periódicamente. El cifrado del lado del servidor de Amazon S3 utiliza uno de los cifrados de bloques más
seguros disponibles, Advanced Encryption Standard de 256 bits (AES-256), para cifras sus datos.
Si necesita cifrado de lado de servidor para todos los objetos que se almacenan en un bucket, use una
política de bucket. Por ejemplo, en la siguiente política de bucket se deniega el permiso para cargar un
objeto a menos que la solicitud incluya el encabezado x-amz-server-side-encryption para solicitar
el cifrado del lado del servidor:
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YourBucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::YourBucket/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
}
}
]
}
Note
Para solicitar cifrado del lado del servidor utilizando las API REST de creación de objetos, utilice el
encabezado de solicitud x-amz-server-side-encryption. Para obtener más información acerca de
las API REST, consulte Especificación del cifrado del lado del servidor con la API de REST (p. 289).
• Operaciones PUT: especifique el encabezado de solicitud cuando cargue datos con la API PUT. Para
obtener más información, consulte PUT Object.
• Iniciar carga multiparte: especifique el encabezado en la solicitud de inicio cuando cargue objetos
grandes mediante la API de carga multiparte. Para obtener más información, consulte la sección sobre
cómo iniciar la carga multiparte.
• Operaciones COPY: cuando copia un objeto, tiene un objeto de origen y otro de destino. Para obtener
más información, consulte Objeto PUT - Copia.
Note
Cuando utilice una operación POST para cargar un objeto, en vez de proporcionar el encabezado
de solicitud, debe proporcionar la misma información en los campos del formulario. Para obtener
más información, consulte POST Object.
Los SDK de AWS también proporcionan API de encapsulamiento que puede utilizar para solicitar el cifrado
del lado del servidor. También puede usar la Consola de administración de AWS para cargar objetos y
solicitar el cifrado del lado del servidor.
Especificación del cifrado del lado del servidor con AWS SDK for Java
Cuando use el AWS SDK for Java para cargar un objeto, puede usar el cifrado del lado del servidor
para cifrarlo. Para solicitar cifrado del lado del servidor utilice la propiedad ObjectMetadata de la
PutObjectRequest para establecer el encabezado de solicitud x-amz-server-side-encryption.
Cuando llama al método putObject() del AmazonS3Client, Amazon S3 cifra y guarda los datos.
También puede usar el cifrado en el lado del servidor cuando cargue objetos con la API de carga
multiparte:
• Cuando usa la API de carga multiparte de nivel alto, utiliza los métodos TransferManager para aplicar
cifrado del lado del servidor a los objetos a medida que los carga. Puede utilizar cualquier método de
carga que tome ObjectMetadata como parámetro. Para obtener más información, consulte Uso de
AWS Java SDK para carga multiparte (API de nivel alto) (p. 193).
• Cuando utiliza la API de carga multiparte de nivel bajo, puede especificar el cifrado del lado del
servidor al iniciar la carga multiparte. Añade la propiedad ObjectMetadata al llamar al método
InitiateMultipartUploadRequest.setObjectMetadata(). Para obtener más información,
consulte Cargar un archivo (p. 197).
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:
• Cambiar el estado de cifrado de un objeto (en este ejemplo, cifrar un objeto que no estaba cifrado
anteriormente) copiando el objeto.
• Comprobar el estado de cifrado del objeto.
Para obtener más información acerca del cifrado del lado del servidor, consulte Especificación del
cifrado del lado del servidor con la API de REST (p. 289). Para obtener instrucciones sobre la creación
y comprobación de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon
S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.internal.SSEResultBase;
import com.amazonaws.services.s3.model.*;
import java.io.ByteArrayInputStream;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
// Make a copy of the object and use server-side encryption when storing the copy.
CopyObjectRequest request = new CopyObjectRequest(bucketName,
sourceKey,
bucketName,
destKey);
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
request.setNewObjectMetadata(objectMetadata);
// Perform the copy operation and display the copy's encryption status.
CopyObjectResult response = s3Client.copyObject(request);
System.out.println("Object \"" + destKey + "\" uploaded with SSE.");
printEncryptionStatus(response);
// Delete the original, unencrypted object, leaving only the encrypted copy in
Amazon S3.
s3Client.deleteObject(bucketName, sourceKey);
System.out.println("Unencrypted object \"" + sourceKey + "\" deleted.");
}
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. 222).
En el siguiente ejemplo se carga un objeto. En la solicitud, el ejemplo indica a Amazon S3 que cifre el
objeto. A continuación el ejemplo recupera los metadatos de los objetos y comprueba el método de cifrado
que se utilizó. Para obtener información acerca de cómo crear y probar una muestra funcional, consulte
Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class SpecifyServerSideEncryptionTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** key name for object created ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
Especificación de cifrado del lado del servidor con AWS SDK para PHP
En este tema se muestra cómo usar las clases de la versión 3 de AWS SDK para PHP para agregar
cifrado del lado del servidor a objetos que cargue a Amazon Simple Storage Service (Amazon S3). Se
parte de la base de que usted ya sigue las instrucciones para Uso del AWS SDK para PHP y ejecución de
ejemplos de PHP (p. 708) y ha instalado AWS SDK para PHP correctamente.
Para cargar un objeto en Amazon S3, use el método Aws\S3\S3Client::putObject(). Para añadir el
encabezado de solicitud x-amz-server-side-encryption a su solicitud de carga, especifique el
parámetro ServerSideEncryption con el valor AES256, como se muestra en el siguiente ejemplo
de código. Para obtener información acerca de solicitudes de cifrado del lado del servidor, consulte
Especificación del cifrado del lado del servidor con la API de REST (p. 289).
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Cuando carga objetos grandes con la API de carga multiparte, puede especificar el cifrado del lado del
servidor para los objetos que está cargando, como sigue:
• Cuando utiliza la API de carga multiparte de bajo nivel, debe especificar el cifrado del lado del servidor
al llamar al método Aws\S3\S3Client::createMultipartUpload(). Para agregar el encabezado de solicitud
x-amz-server-side-encryption a su solicitud, especifique la clave del parámetro de la array
ServerSideEncryption con el valor AES256. Para obtener más información acerca de la API de
carga multiparte de bajo nivel, consulte Uso de AWS SDK para PHP para cargas multiparte (API de bajo
nivel) (p. 212).
• Cuando utiliza la API de carga multiparte de alto nivel, debe especificar el cifrado del lado del servidor
mediante el parámetro ServerSideEncryption del método CreateMultipartUpload. Para ver un
ejemplo de cómo usar el método setOption() con la API de carga multiparte de alto nivel, consulte
Uso del AWS PHP SDK para carga multiparte (p. 211).
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;
Para cambiar el estado de cifrado de un objeto existente, realice una copia del objeto con el método Aws
\S3\S3Client::copyObject() y elimine el objeto de origen. De forma predeterminada, copyObject() no
cifra el objeto de destino, a menos que solicite de forma explícita el cifrado del lado del servidor con el
parámetro ServerSideEncryption con el valor AES256. El siguiente ejemplo de código PHP realiza
una copia de un objeto y agrega cifrado en el servidor al objeto copiado.
require 'vendor/autoload.php';
use Aws\S3\S3Client;
Recursos relacionados
Especificación del cifrado del lado del servidor con AWS SDK parar Ruby
Cuando utiliza AWS SDK parar Ruby para cargar un objeto, puede especificar que el objeto se almacene
cifrado en reposo con el cifrado del lado del servidor (SSE). Cuando vuelve a leer el objeto, este se
descifra automáticamente.
En el siguiente ejemplo de la versión 3 de AWS SDK parar Ruby se muestra cómo especificar que un
archivo cargado en Amazon S3 quede cifrado en reposo.
# The following example demonstrates how to specify that a file uploaded to Amazon S3 be
encrypted at rest.
require 'aws-sdk-s3'
regionName = 'us-west-2'
bucketName = 'my-bucket'
key = 'key'
filePath = 'local/path/to/file'
encryptionType = 'AES256'
s3 = Aws::S3::Resource.new(region:regionName)
obj = s3.bucket(bucketName).object(key)
obj.upload_file(filePath, :server_side_encryption => encryptionType)
Para obtener un ejemplo que muestra cómo cargar un objeto sin SSE, consulte Cargar un objeto con AWS
SDK parar Ruby (p. 186).
El siguiente ejemplo de código muestra cómo determinar el estado de cifrado de un objeto existente.
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.
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')
Para obtener una muestra funcional que indica cómo copiar un objeto sin cifrado, consulte Copiar un objeto
con AWS SDK parar Ruby (p. 224).
Especificación del cifrado del lado del servidor con la API de REST
Cuando se crea un objeto: es decir, cuando está cargando un objeto nuevo o haciendo una copia de un
objeto existente, puede especificar si desea que Amazon S3 cifre los datos al añadir el encabezado x-
amz-server-side-encryption en la solicitud. Configure el valor del encabezado para el algoritmo de
cifrado AES256 compatible con Amazon S3. Amazon S3 confirma que su objeto se guardó con cifrado del
lado del servidor al devolver el encabezado de respuesta x-amz-server-side-encryption.
• PUT Object
• PUT Object - Copy
• POST Object
• Initiate Multipart Upload
Cuando carga objetos grandes con la API de carga multiparte, puede especificar el cifrado del lado
del servidor al añadir el encabezado x-amz-server-side-encryption a la solicitud Iniciar carga
multiparte. Cuando copia un objeto existente, independientemente de si el objeto de origen está cifrado o
no, el objeto de destino no está cifrado, a no ser que solicite explícitamente el cifrado en el servidor.
• 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
Protección de los datos con el cifrado del lado del servidor con claves de cifrado
proporcionadas por el cliente (SSE-C)
El cifrado en el servidor consiste en proteger los datos en reposo. El uso del cifrado en el servidor con
claves de cifrado proporcionadas por el cliente (SSE-C) le permite establecer sus propias claves de cifrado.
Con la clave de cifrado que proporcione como parte de su solicitud, Amazon S3 administra tanto el cifrado,
al escribir en los discos, como el descifrado, al obtener acceso a los objetos. Por tanto, no ha de mantener
ningún código para llevar a cabo el cifrado y el descifrado de los datos. Lo único que debe hacer es
administrar las claves de cifrado que proporcione.
Cuando carga un objeto, Amazon S3 usa la clave de cifrado facilitada para aplicar un cifrado AES-256 a
los datos y elimina la clave de cifrado de la memoria.
Important
Amazon S3 no almacena la clave de cifrado que usted facilite. En su lugar, almacena un valor
HMAC "salted" aleatorio de la clave de cifrado para validar las solicitudes futuras. El valor
HMAC "salted" no se puede usar para derivar el valor de la clave de cifrado ni para descifrar los
contenidos del objeto cifrado. Esto implica que, si pierde la clave de cifrado, habrá perdido el
objeto.
Note
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.
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.
Uso de SSE-C
Al usar el cifrado en el lado del servidor con claves de servidor facilitadas por el cliente (SSE-C), debe
facilitar la información de la clave de cifrado mediante los siguientes encabezados de solicitud.
Nombre Descripción
x-amz-server-side- Use este encabezado para especificar el algoritmo de cifrado. El valor del
encryption-customer- encabezado ha de ser "AES256".
algorithm
x-amz-server-side- Use este encabezado para facilitar la clave de cifrado de 256 bits con
encryption-customer- codificación base64 para que Amazon S3 pueda usarla para cifrar o
key descifrar los datos.
x-amz-server-side- Use este encabezado para facilitar el resumen MD5 de 128 bits con
encryption-customer- codificación en base64 de la clave de cifrado, según la RFC 1321. Amazon
key-MD5 S3 usa este encabezado para comprobar la integridad del mensaje y
garantizar que la clave de cifrado se haya transmitido sin errores.
Puede usar las bibliotecas de encapsulamiento del AWS SDK para agregar estos encabezados a su
solicitud. Si lo necesita, también puede realizar las llamadas a la API REST de Amazon S3 directamente
en su aplicación.
Note
No es posible utilizar la consola de Amazon S3 para cargar un objeto y solicitar SSE-C. Tampoco
puede usar la consola para actualizar (por ejemplo, cambiar la clase de almacenamiento o
agregar metadatos) un objeto existente almacenado con SSE-C.
• Operación GET: cuando recupera datos con la API GET (consulte GET Object), puede especificar los
encabezados de solicitud. No se admiten torrents para objetos cifrados mediante SSE-C.
• Operación HEAD: para recuperar metadatos de objetos con la API HEAD (consulte HEAD Object),
puede especificar estos encabezados de solicitud.
• Operación PUT: cuando carga datos con la API PUT (consulte PUT Object), puede especificar estos
encabezados de solicitud.
• Carga multiparte: al cargar objetos grandes mediante la API de carga multiparte, puede especificar
estos encabezados. Debe especificar estos encabezados en la solicitud inicial (consulte Initiate Multipart
Upload) y en cada solicitud de carga de partes subsiguiente (Upload Part). Para cada solicitud de carga
de parte, la información de cifrado ha de ser la misma que la facilitada en la solicitud inicial de la carga
multiparte.
• Operación POST: cuando utiliza una operación POST para cargar un objeto (consulte POST Object),
en vez de proporcionar los encabezados de solicitud, debe proporcionar la misma información en los
campos del formulario.
• Operación COPY: cuando copia un objeto (consulte PUT Object - Copy), tiene un objeto de origen y uno
de destino. Por consiguiente, ha de tener en cuenta lo que aparece a continuación:
• Si quiere que el objeto objetivo se cifre mediante el cifrado en el servidor con claves administradas por
AWS, debe facilitar el encabezado de solicitud x-amz-server-side-encryption.
• Si quiere que el objeto objetivo se cifre mediante SSE-C, debe facilitar información de cifrado mediante
los tres encabezados descritos en la tabla anterior.
• Si el objeto de origen está cifrado con SSE-C, debe facilitar la información de la clave de cifrado
mediante los siguientes encabezados, de modo que Amazon S3 puede descifrar el objeto para
copiarlo.
Nombre Descripción
x-amz-copy-source Incluya este encabezado para especificar el algoritmo que debe usar
-server-side Amazon S3 para descifrar el objeto de origen. Este valor debe ser
-encryption- AES256.
customer-algorithm
x-amz-copy- 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
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:
Para objetos no SSE-C, puede generar una URL prefirmada y pegarla directamente en un
navegador, por ejemplo, para acceder a los datos.
No obstante, esto no es así para objetos SSE-C porque además de la URL prefirmada también
tiene que incluir encabezamientos de HTTP específicos de objetos SSE-C Por tanto, puede
usar la URL prefirmada para objetos SSE-C solo mediante programación.
• Especificación del cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante AWS SDK for Java (p. 293)
• Especificación del cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante AWS SDK para .NET (p. 297)
• Especificación del cifrado en el servidor con claves de cifrado proporcionadas por el cliente mediante la
API REST (p. 304)
Especificación del cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante AWS SDK for Java
En el siguiente ejemplo se muestra cómo solicitar el cifrado del lado del servidor con claves
proporcionadas por el cliente (SSE-C) para objetos. En el ejemplo se realizan las siguientes operaciones.
Cada operación muestra cómo especificar encabezados relacionados con el SSE-C en la solicitud:
• Put object: carga un objeto y solicita el cifrado del lado del servidor mediante una clave de cifrado
proporcionada por un cliente.
• Get object: descargue el objeto que cargó en el paso anterior. En la solicitud, proporciona la misma
información de cifrado que proporcionara en el momento de cargar el objeto. Amazon S3 necesita esta
información para descifrar el objeto para poder devolvérselo.
• Get object metadata: recupera los metadatos del objeto. Proporciona la misma información de cifrado
usada al crear el objeto.
• Copy object: realiza una copia del objeto cargado previamente. Dado que el objeto de origen se
almacena mediante SSE-C, usted debe proporcionar la información de cifrado en su solicitud de copia.
De forma predeterminada, Amazon S3 cifra la copia del objeto solo si lo solicita explícitamente. En este
ejemplo se indica a Amazon S3 que almacene la copia cifrada del objeto con una nueva clave de SSE-C.
Note
Este ejemplo muestra cómo cargar un objeto en una operación única. Cuando utiliza la API de
carga multiparte para cargar objetos grandes, brinda información de cifrado como se muestra
en el siguiente ejemplo. Para ver ejemplos de cargas multiparte que utilizan AWS SDK for Java,
consulte Uso de AWS Java SDK para carga multiparte (API de nivel alto) (p. 193) y Uso de AWS
Java SDK para una carga multiparte (API de bajo nivel) (p. 196).
Para añadir la información de cifrado necesaria, incluya una SSECustomerKey en su solicitud. Para
obtener más información acerca de la clase SSECustomerKey, consulte Uso de SSE-C (p. 291).
Para obtener más información acerca de SSE-C, consulte Protección de los datos con el cifrado del
lado del servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 290). Para obtener
instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba de ejemplos de
código Java de Amazon S3 (p. 706).
Example
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.*;
import javax.crypto.KeyGenerator;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
try {
S3_CLIENT = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// Upload an object.
uploadObject(bucketName, keyName, new File(uploadFileName));
// 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();
}
}
S3_CLIENT.copyObject(copyRequest);
System.out.println("Object copied");
}
Otras operaciones de Amazon S3 con SSE-C mediante AWS SDK for Java
En el ejemplo de la sección anterior se muestra cómo solicitar cifrado en el servidor con claves
proporcionadas por el cliente (SSE-C) en operaciones PUT, GET, Head y Copy. En esta sección se
describen otras API que admiten SSE-C.
Para cargar objetos grandes, puede utilizar la API de carga multiparte (consulte Carga de objetos con la
API de carga multiparte (p. 186)). Puede usar API de nivel alto o de nivel bajo para cargar objetos grandes.
Estas API admiten los encabezados relacionados con el cifrado en la solicitud.
• Cuando utiliza la API TransferManager de alto nivel, usted proporciona los encabezados específicos
del cifrado en la PutObjectRequest (consulte Uso de AWS Java SDK para carga multiparte (API de
nivel alto) (p. 193)).
• Al usar la API de bajo nivel, proporcionará información relacionada con el cifrado en la
InitiateMultipartUploadRequest, seguida por información de cifrado idéntica en cada
UploadPartRequest. No necesita proporcionar encabezados específicos de cifrado en su
CompleteMultipartUploadRequest. Para ver ejemplos, consulte Uso de AWS Java SDK para una
carga multiparte (API de bajo nivel) (p. 196).
En el siguiente ejemplo se usa TransferManager para crear objetos y se muestra cómo facilitar la
información relacionada con SSE-C. En el ejemplo se realiza lo siguiente:
Example
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.CopyObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.SSECustomerKey;
import com.amazonaws.services.s3.transfer.Copy;
import com.amazonaws.services.s3.transfer.TransferManager;
import com.amazonaws.services.s3.transfer.TransferManagerBuilder;
import com.amazonaws.services.s3.transfer.Upload;
import javax.crypto.KeyGenerator;
import java.io.File;
import java.security.SecureRandom;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();
// 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);
Especificación del cifrado del lado del servidor con claves de cifrado proporcionadas por el cliente
mediante AWS SDK para .NET
En el siguiente ejemplo de código C# se muestra cómo funciona el cifrado del lado del servidor con
claves proporcionadas por el cliente (SSE-C). En el ejemplo se realizan las siguientes operaciones. Cada
operación muestra cómo especificar encabezados relacionados con el SSE-C en la solicitud.
• Put object: carga un objeto y solicita el cifrado del lado del servidor mediante claves de cifrado
proporcionadas por un cliente.
• Get object: descarga el objeto cargado en el paso anterior. La solicitud proporciona la misma información
de cifrado que proporcionara en el momento de cargar el objeto. Amazon S3 necesita esta información
para descifrar el objeto y devolvérselo.
• Get object metadata: proporciona la misma información de cifrado utilizada cuando se creó el objeto para
recuperar los metadatos del objeto.
• Copy object: realiza una copia del objeto cargado. Dado que para almacenar el objeto de origen
se utiliza el SSE-C, la solicitud de copia debe proporcionar la información de cifrado. De forma
predeterminada, Amazon S3 no cifra una copia de un objeto. El código indica a Amazon S3 que cifre el
objeto copiado con el SSE-C proporcionando la información relacionada con el cifrado para el objeto de
destino. También almacena el objeto de destino.
Note
Para ver ejemplos de cómo cargar objetos grandes con la API de carga multiparte, consulte
Utilización de AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 200) y Uso de
AWS SDK para .NET para cargas multiparte (API de bajo nivel) (p. 207).
Para obtener más información acerca de SSE-C, consulte Protección de los datos con el cifrado del
lado del servidor con claves de cifrado proporcionadas por el cliente (SSE-C) (p. 290). Para obtener
información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de ejemplos de
código .NET de Amazon S3 (p. 708).
Example
using Amazon.S3;
using Amazon.S3.Model;
using System;
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;
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,
En el ejemplo de la sección anterior se muestra cómo solicitar cifrado del lado del servidor con claves
proporcionadas por el cliente (SSE-C) en operaciones PUT, GET, Head y Copy. En esta sección se
describen otras API de Amazon S3 que admiten SSE-C.
Para cargar objetos grandes, puede utilizar la API de carga multiparte (consulte Carga de objetos con la
API de carga multiparte (p. 186)). AWS SDK para .NET proporciona API de nivel alto o de nivel bajo para
cargar objetos grandes. Estas API admiten los encabezados relacionados con el cifrado en la solicitud.
• Cuando utiliza la API de Transfer-Utility de alto nivel, usted proporciona los encabezados
específicos del cifrado en TransferUtilityUploadRequest como se muestra. Para ver ejemplos de
código, consulte Utilización de AWS SDK para .NET para carga multiparte (API de alto nivel) (p. 200).
• Al usar la API de bajo nivel, proporcionará información relacionada con el cifrado en la solicitud de inicio
de la carga multiparte, seguida por información de cifrado idéntica en las solicitudes de carga de partes
subsiguientes. No necesita proporcionar encabezados específicos de cifrado en su solicitud de carga
multiparte completa. Para ver ejemplos, consulte Uso de AWS SDK para .NET para cargas multiparte
(API de bajo nivel) (p. 207).
A continuación se muestra un ejemplo de carga multiparte de bajo nivel que hace una copia de un objeto
grande existente. En el ejemplo, el objeto que se copiará se guarda en Amazon S3 mediante el SSE-
C y usted también desea usar el SSE-C para guardar el objeto de destino. En el ejemplo usted hace lo
siguiente:
• Inicie una solicitud de carga multiparte proporcionando una clave de cifrado y la información
relacionada.
• Proporcione las claves de cifrado del objeto de origen y de destino, y la información relacionada en
CopyPartRequest.
• Recupere los metadatos del objeto para obtener el tamaño del objeto de origen que se copiará.
Example
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class SSECLowLevelMPUcopyObjectTest
{
private const string existingBucketName = "*** bucket name ***";
private const string sourceKeyName = "*** source object key name ***";
private const string targetKeyName = "*** key name for the target object
***";
private const string filePath = @"*** file path ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
static void Main()
{
s3Client = new AmazonS3Client(bucketRegion);
CopyObjClientEncryptionKeyAsync().Wait();
}
// 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 ***"
};
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);
}
}
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
};
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)
{
Console.WriteLine("Exception occurred: {0}", exception.Message);
AbortMultipartUploadRequest abortMPURequest = new
AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = sourceKeyName,
UploadId = initResponse.UploadId
};
await s3Client.AbortMultipartUploadAsync(abortMPURequest);
}
}
}
}
Especificación del cifrado en el servidor con claves de cifrado proporcionadas por el cliente
mediante la API REST
Las siguientes API REST de Amazon S3 son compatibles con encabezados relacionados con el cifrado
en el lado del servidor con claves de cifrado facilitadas por el cliente. Para obtener más información sobre
estos encabezados, consulte Uso de SSE-C (p. 291).
• GET Object
• HEAD Object
• PUT Object
• PUT Object - Copy
• POST Object
• Initiate Multipart Upload
• Upload Part
• Upload Part - Copy
Los siguientes SDK de AWS admiten el cifrado del lado del cliente:
El cliente obtiene una clave de cifrado de datos única para cada objeto que carga.
• Al descargar un objeto: el cliente descarga el objeto cifrado de Amazon S3 junto con la versión de blob
de cifrado de la clave de cifrado de datos almacenada como metadatos de los objetos. El cliente luego
envía el blob de cifrado a AWS KMS para obtener la versión de texto sin formato de la clave, de manera
que pueda descifrar los datos de los objetos.
Para obtener más información acerca de AWS KMS, consulte ¿Qué es AWS Key Management Service?
en la AWS Key Management Service Developer Guide.
Example
En el siguiente ejemplo se carga un objeto en Amazon S3 usando AWS KMS con el AWS SDK for Java.
En el ejemplo se usa una clave maestra del cliente (CMK) administrada por AWS para cifrar los datos del
cliente antes de cargarlos en Amazon S3. Si ya tiene una CMK, puede usarla especificando el valor de la
variable kms_cmk_id en el código de muestra. Si no dispone de una CMK, o bien necesita otra, puede
generar una utilizando la API de Java. En el ejemplo se muestra cómo generar una CMK.
Para obtener más información sobre el material de claves consulte Importación del material de claves en
AWS Key Management Service (AWS KMS). Para obtener instrucciones sobre la creación y comprobación
de una muestra funcional, consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.RegionUtils;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.kms.AWSKMS;
import com.amazonaws.services.kms.AWSKMSClientBuilder;
import com.amazonaws.services.kms.model.CreateKeyResult;
import com.amazonaws.services.s3.AmazonS3Encryption;
import com.amazonaws.services.s3.AmazonS3EncryptionClientBuilder;
import com.amazonaws.services.s3.model.CryptoConfiguration;
import com.amazonaws.services.s3.model.KMSEncryptionMaterialsProvider;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
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();
// 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;
// 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();
}
}
}
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.
• Al cargar un objeto: usted proporciona una clave maestra del lado del cliente al cliente de cifrado de
Amazon S3. El cliente usa la clave maestra solo para cifrar la clave de cifrado de datos que genera
aleatoriamente. El proceso ocurre de la siguiente manera:
1. El cliente de cifrado de Amazon S3 genera una clave simétrica de un solo uso (también denominada
clave de cifrado de datos o clave de datos) localmente. Utiliza la clave de datos para cifrar los datos
de un único objeto de Amazon S3. El cliente genera una clave de datos independiente para cada
objeto.
2. El cliente cifra la clave de cifrado de datos con la clave maestra que usted proporciona. El cliente
carga la clave de datos cifrados y su descripción esencial como parte de los metadatos de los objetos.
El cliente usa la descripción esencial para determinar qué clave maestra del lado del cliente usar para
descifrar.
3. El cliente carga los datos cifrados en Amazon S3 y también guarda la clave de datos cifrados como
metadatos de los objetos (x-amz-meta-x-amz-key) en Amazon S3.
• Al descargar un objeto: el cliente primero descarga el objeto cifrado de Amazon S3. Con la descripción
esencial de los metadatos del objeto, el cliente determina qué clave maestra usar para descifrar la clave
de datos. El cliente usa la clave maestra para descifrar la clave de datos y usa la clave de datos para
descifrar el objeto.
La clave maestra del lado del cliente que usted proporciona puede ser una clave simétrica o un par de
claves públicas/privadas. En los ejemplos siguientes se muestra cómo utilizar ambos tipos de claves.
Para obtener más información, consulte Client-Side Data Encryption with the AWS SDK for Java and
Amazon S3 (Cifrado de datos del lado del cliente con el AWS SDK for Java y Amazon S3).
Note
Si obtiene un mensaje de error de cifrado cuando usa la API de cifrado por primera vez,
su versión de JDK puede tener un archivo de política de jurisdicción de Java Cryptography
Extension (JCE, Extensión de criptografía Java) que limite la longitud máxima de la clave para
las transformaciones de cifrado y descifrado a 128 bits. El SDK de AWS requiere una longitud
máxima de clave de 256 bits. Para comprobar la longitud máxima de su clave, use el método
getMaxAllowedKeyLength() de la clase javax.crypto.Cipher. Para eliminar la restricción
de longitud de clave, instale los archivos de políticas de jurisdicción de seguridad ilimitada de la
extensión de criptografía Java (JCE) en la página de descargas de Java SE.
Example
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3EncryptionClientBuilder;
import com.amazonaws.services.s3.model.*;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
// 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();
// 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();
}
}
Para obtener instrucciones sobre la creación y comprobación de una muestra funcional, consulte Prueba
de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3EncryptionClientBuilder;
import com.amazonaws.services.s3.model.*;
import 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;
// 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();
// Verify that the data that you downloaded is the same as the original data.
System.out.println("Plaintext: " + new String(plaintext));
Amazon S3 ofrece opciones de política de acceso ampliamente categorizadas como políticas basadas en
recursos y políticas de usuario. Las políticas de acceso que adjunte a sus recursos (buckets y objetos) se
denominan políticas basadas en recursos. Por ejemplo, las políticas de bucket y las listas de control de
acceso (ACL) son políticas basadas en recursos. También puede adjuntar políticas de acceso a usuarios
de su cuenta. Estas se denominan políticas de usuario. Puede que quiera usar políticas basadas en
recursos, políticas de usuario o una combinación de ambas para administrar los permisos en sus recursos
de Amazon S3. Los temas de introducción facilitan directrices generales para administrar permisos.
Le aconsejamos que consulte primero los temas sobre control de accesos. Para obtener más información,
consulte Introducción a la administración de permisos de acceso para los recursos de Amazon
S3 (p. 312). A continuación, para obtener más información sobre opciones de política de acceso
específicas, consulte los siguientes temas:
Los temas de esta sección presentan información general sobre la administración de permisos de acceso
a sus recursos de Amazon S3 y facilita directrices sobre cuándo usar cada método de control de acceso.
El tema también presenta guías introductorias de ejemplo. Le aconsejamos que consulte estos temas en
orden.
Varias prácticas recomendadas de seguridad también abarcan el control de acceso, entre ellas se
encuentran:
Temas
• Recursos de Amazon S3: buckets y objetos (p. 313)
• Propiedad de los buckets y objetos de Amazon S3 (p. 313)
• Operaciones de recursos (p. 315)
• Administración del acceso a recursos (opciones de políticas de acceso) (p. 315)
• ¿Qué método de control de acceso debo usar? (p. 317)
• Más información (p. 318)
• lifecycle: almacena información de configuración del ciclo de vida (véase Administración del ciclo de
vida de los objetos (p. 127)).
• website: almacena información de configuración del sitio web, si configura su bucket para el
alojamiento web (véase Alojamiento de un sitio web estático en Amazon S3 (p. 523)).
• versioning: almacena la configuración del control de versiones (véase PUT Bucket versioning).
• policy y acl (lista de control de acceso): almacenan información de permisos de acceso para el
bucket.
• cors (uso compartido de recursos entre orígenes): permite la configuración del bucket para permitir las
solicitudes entre orígenes (véase Cross-Origin Resource Sharing (CORS, Uso compartido de recursos
entre orígenes) (p. 163)).
• logging: le permite solicitar a Amazon S3 que guarde los registros de acceso al bucket.
• acl: almacena una lista de permisos de acceso en el objeto. En este tema se aborda cómo utilizar
este subrecurso para administrar los permisos de objetos (véase Administración de acceso con
ACL (p. 418)).
• restore: permite temporalmente la restauración de un objeto archivado (véase POST Object restore).
Un objeto en la clase de almacenamiento Glacier es un objeto archivado. Para obtener acceso al objeto,
primero debe iniciar una solicitud de restauración, que restaurará una copia del objeto archivado. En la
solicitud, ha de especificar el número de días durante los que quiera que exista la copia restaurada. Para
obtener más información acerca del archivado de objetos, consulte Administración del ciclo de vida de
los objetos (p. 127).
• La cuenta de AWS que se usa para crear buckets y cargar objetos es el propietario de dichos recursos.
• Si carga un objeto utilizando credenciales de usuario o rol de AWS Identity and Access Management
(IAM), la cuenta de AWS a la que pertenece el usuario o el rol es el propietario del objeto.
• Un propietario del bucket puede conceder permisos entre cuentas a otra cuenta de AWS (o a usuarios
de otra cuenta) para cargar objetos. En este caso, la cuenta de AWS que carga los objetos es el
propietario de los mismos. El propietario del bucket no tiene permisos sobre los objetos que son
propiedad de otras cuentas, con las siguientes excepciones:
• El propietario del bucket es quien paga las facturas. El propietario del bucket puede denegar el
acceso a cualquier objeto, o eliminar cualquier objeto del bucket, independientemente de quién sea el
propietario.
• El propietario del bucket puede archivar los objetos o restaurar los objetos archivados,
independientemente de quién sea el propietario. El archivado se refiere a la clase de almacenamiento
empleada para almacenar los objetos. Para obtener más información, consulte Administración del ciclo
de vida de los objetos (p. 127).
El propietario del bucket puede permitir solicitudes no autenticadas. Por ejemplo, se permiten solicitudes
PUT Object no autenticadas cuando un bucket tiene una política de bucket pública, o cuando una ACL
de bucket concede acceso WRITE o FULL_CONTROL al grupo Todos los usuarios o al usuario anónimo
específicamente. Para obtener más información acerca de las políticas de bucket públicas y las ACL
públicas, consulte Qué significa "pública" (p. 433).
Todas las solicitudes no autenticadas las realiza el usuario anónimo. En las listas de control
de acceso (ACL), este usuario se representa mediante el ID de usuario canónico específico
65a011a29cdf8ec533ec3d1ccaae921c. Si se carga un objeto en un bucket mediante una solicitud no
autenticada, el usuario anónimo es el propietario del objeto. La ACL del objeto predeterminado concede
acceso FULL_CONTROL al usuario anónimo como propietario del objeto. Por lo tanto, Amazon S3 permite
solicitudes no autenticadas para recuperar el objeto o modificar su ACL.
Para impedir que el usuario anónimo modifique objetos, le recomendamos que no implemente políticas
de bucket que permitan escrituras públicas anónimas en su bucket o que utilicen ACL que permitan al
usuario anónimo acceso de escritura a su bucket. Para imponer este comportamiento recomendado, utilice
Amazon S3 Block Public Access.
Para obtener más información acerca del bloqueo del acceso público, consulte Uso de Amazon S3 Block
Public Access (p. 430). Para obtener más información acerca de las ACL, consulte Información general
de las Access Control Lists (ACL, Listas de control de acceso) (p. 419).
Important
AWS recomienda que no use las credenciales del usuario raíz de la cuenta de AWS para
realizar solicitudes autenticadas. En su lugar, cree un usuario de IAM y concédale derechos de
acceso completos. Estos usuarios se denominan usuarios administradores. Puede utilizar las
credenciales del usuario administrador, en lugar de las credenciales de usuario raíz de la cuenta
de AWS, para interactuar con AWS y realizar tareas, tales como crear un bucket, crear usuarios y
concederles permisos. Para obtener más información, consulte Diferencias entre las credenciales
de usuario raíz de una cuenta de AWS y Credenciales de usuario de IAM en la AWS General
Reference y Prácticas recomendadas de IAM en la Guía del usuario de IAM.
Operaciones de recursos
Amazon S3 proporciona un conjunto de operaciones para trabajar con los recursos de Amazon S3. Para
obtener una lista de las operaciones disponibles, visite los temas relativos a operaciones en buckets y
operaciones en objetos en la Amazon Simple Storage Service API Reference.
La política de acceso describe quién tiene acceso a qué. Puede asociar una política de acceso con un
recurso (bucket y objeto) o un usuario. Del mismo modo, puede categorizar las políticas de acceso de
Amazon S3 disponibles de las siguientes maneras:
• Políticas basadas en recursos: las políticas de buckets y las listas de control de accesos (ACL) se basan
en recursos porque las adjunta a sus recursos de Amazon S3.
• ACL: cada bucket y cada objeto de – tiene una ACL asociada. Una ACL es una lista de concesiones
en la que se identifica el beneficiario y el permiso concedido. Puede utilizar las ACL para otorgar
permisos de lectura/escritura básicos a otras cuentas de AWS. Las ACL usan un esquema XML
específico a Amazon S3.
xsi:type="Canonical User">
<ID>*** Owner-Canonical-User-ID ***</ID>
<DisplayName>display-name</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
Tanto las ACL de bucket como de objeto usan el mismo esquema XML.
• Política de bucket: para su bucket, puede agregar una política de bucket con la que concederá a otras
cuentas de AWS o usuarios de IAM permisos para el bucket y los objetos que contiene. Los permisos
de objetos solo se aplican a aquellos objetos que cree el propietario del bucket. Las políticas de bucket
complementan y, en muchos casos, sustituyen a las políticas de acceso basadas en ACL.
A continuación se muestra un ejemplo de política de bucket. Debe expresar las políticas de bucket
(y las de usuarios) con un archivo JSON. La política concede permisos de lectura anónimos sobre
todos los objetos de un bucket. La política de bucket tiene una instrucción, que permite la acción
s3:GetObject (permiso de lectura) en objetos que estén en un bucket llamado examplebucket. Al
especificar el principal con un signo de comodín (*), la política permite el acceso anónimo, aunque
debe utilizarse con cuidado. Por ejemplo, la siguiente política de bucket haría que los objetos fueran
accesibles públicamente:
{
"Version":"2012-10-17",
"Statement": [
{
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
• Políticas de usuario: puede usar IAM para administrar el acceso a sus recursos de Amazon S3. Puede
crear usuarios de IAM, grupos y roles en su cuenta y adjuntarles políticas de acceso, en las que les
concederá acceso a recursos de AWS, incluido Amazon S3.
Para obtener más información acerca de IAM, consulte la página de detalles del producto AWS Identity
and Access Management (IAM).
ejemplo permite al usuario asociado y vinculado realizar seis acciones de Amazon S3 diferentes en un
bucket y sobre los objetos que contiene. Puede adjuntar esta política a un usuario, grupo o rol de IAM
específicos.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExampleStatement1",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket",
"s3:DeleteObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::examplebucket/*",
"arn:aws:s3:::examplebucket"
]
},
{
"Sid": "ExampleStatement2",
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}
Cuando Amazon S3 recibe una solicitud, ha de evaluar todas las políticas de acceso para determinar si ha
de autorizar o denegar la solicitud. Para obtener más información sobre evalúa estas políticas Amazon S3,
consulte Cómo Amazon S3 autoriza una solicitud (p. 318).
• ¿Cuándo debería usar cada uno de los métodos de control de acceso? Por ejemplo, para conceder
permisos para un bucket, ¿debo usar una política de buckets o una ACL de bucket? Soy el propietario
del bucket y de los objetos que contiene. ¿Debo usar una política de acceso basada en recursos o una
política de usuario de IAM? Si uso una política de acceso basada en recursos, ¿debo usar una política
de bucket o una ACL de objeto para administrar los permisos del objeto?
• Soy el propietario de un bucket, pero no de todos los objetos que contiene. ¿Cómo se administran los
permisos de acceso para los objetos que son propiedad de otro?
• Si concedo acceso mediante el uso de una combinación de estas opciones de políticas de acceso,
¿cómo determina Amazon S3 si un usuario tiene permiso para realizar una operación solicitada?
En las siguientes secciones se explican estas alternativas para el control de acceso, cómo Amazon S3
evalúa los mecanismos de control de acceso y cuándo utilizar cada uno de los métodos de control de
acceso. También ofrecen tutoriales de ejemplo.
Más información
Le recomendamos que consulte primero los temas de introducción en los que se explican las opciones
disponibles para administrar el acceso a sus recursos de Amazon S3. Para obtener más información,
consulte Introducción a la administración de permisos de acceso para los recursos de Amazon
S3 (p. 312). Puede recurrir a los siguientes temas para obtener más información sobre opciones de
política de acceso específicas.
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:
Para realizar una operación específica en un recurso, el principal de IAM necesita permiso
tanto de la cuenta principal de AWS a la que pertenece como de la cuenta de AWS a la que
pertenece el recurso.
• Si la solicitud es para una operación en un objeto que no pertenece al propietario del bucket, además
de asegurarse de que el solicitante tenga permisos del propietario del objeto, Amazon S3 también debe
revisar la política de bucket para asegurarse de que el propietario del bucket no haya establecido la
denegación explícita en el objeto.
Note
El propietario del bucket (que paga la factura) puede denegar explícitamente el acceso a los
objetos del bucket independientemente de quién sea el propietario. El propietario del bucket
también puede eliminar cualquier objeto del bucket.
Para determinar si el solicitante tiene permiso para realizar la operación específica, Amazon S3 hace lo
siguiente, por orden, cuando recibe una solicitud:
1. Convierte todas las políticas de acceso relevantes (política de usuario, política de bucket, ACL) en
tiempo de ejecución en un conjunto de políticas para evaluación.
2. Evalúa el conjunto de políticas resultante en los siguiente pasos. En cada paso, Amazon S3 evalúa un
subconjunto de políticas en un contexto específico, en función de la autoridad del contexto.
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.
• Cómo hace Amazon S3 para autorizar una solicitud para una operación de bucket (p. 319)
• Cómo hace Amazon S3 para autorizar una solicitud para una operación de objeto (p. 322)
Temas relacionados
Le recomendamos que consulte primero los temas de introducción en los que se explican las opciones
para administrar el acceso a los recursos de Amazon S3. Para obtener más información, consulte
Introducción a la administración de permisos de acceso para los recursos de Amazon S3 (p. 312).
Puede recurrir a los siguientes temas para obtener más información sobre opciones de política de acceso
específicas.
Cómo hace Amazon S3 para autorizar una solicitud para una operación de bucket
Cuando Amazon S3 recibe una solicitud para una operación de bucket, convierte todos los permisos
relevantes, permisos de basados en recursos (política de bucket, lista de control de acceso [ACL] de
bucket) y política de usuario de IAM si la solicitud es de un principal de IAM, en un conjunto de políticas
para evaluar en tiempo de ejecución. Luego, evalúa el conjunto de políticas resultante en una serie de
pasos de acuerdo con un contexto específico: contexto de usuario o contexto de bucket.
1. Contexto de usuario: si el solicitante es un principal de IAM, este debe tener permiso de la cuenta
principal de AWS a la que pertenece. En este paso, Amazon S3 evalúa un subconjunto de políticas
perteneciente a la cuenta principal (también denominada autoridad del contexto). Este subconjunto de
políticas incluye la política de usuario que la cuenta principal asocia al principal. Si la cuenta principal
también es propietaria del recurso en la solicitud (en este caso, el bucket), Amazon S3 también evalúa
las políticas de recursos correspondientes (política de bucket y ACL de bucket) al mismo tiempo.
Siempre que se realiza una solicitud de operación de bucket, los registros de acceso al servidor
registran el ID canónico del solicitante. Para obtener más información, consulte Registro de acceso al
servidor de Amazon S3 (p. 674).
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.
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.
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.
1. Dado que la solicitud se realiza con credenciales raíz de una cuenta de AWS, el contexto de usuario no
se evalúa.
2. En el contexto de bucket, Amazon S3 examina la política de bucket. Si el propietario del bucket (cuenta
2222-2222-2222 de AWS) no autorizó a la cuenta 1111-1111-1111 de AWS a realizar la operación
solicitada, Amazon S3 deniega la solicitud. De lo contrario, Amazon S3 acepta la solicitud y realiza la
operación.
Ejemplo 3: Operación de bucket solicitada por un principal de IAM cuya cuenta principal de AWS
también es propietaria del bucket
En el ejemplo, la solicitud es enviada por Jill, una usuaria de IAM en la cuenta 1111-1111-1111 de AWS,
que también es propietaria del bucket.
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.
Jill necesitará permisos de la cuenta principal de AWS y el propietario del bucket. Amazon S3 evalúa el
contexto de la siguiente manera:
1. Dado que la solicitud es de un principal de IAM, Amazon S3 evalúa el contexto de usuario mediante la
revisión de las políticas estipuladas por la cuenta para verificar que Jill tenga los permisos necesarios.
Si Jill tiene permiso, Amazon S3 continúa con la evaluación del contexto de bucket; en caso contrario,
deniega la solicitud.
2. En el contexto de bucket, Amazon S3 verifica que el propietario del bucket 2222-2222-2222 le haya
otorgado permiso a Jill (o a su cuenta principal de AWS) para realizar la operación solicitada. Si Jill tiene
ese permiso, Amazon S3 acepta la solicitud y realiza la operación; de lo contrario, Amazon S3 deniega
la solicitud.
Cómo hace Amazon S3 para autorizar una solicitud para una operación de objeto
Cuando Amazon S3 recibe una solicitud para una operación de bucket, convierte todos los permisos
relevantes, permisos de basados en recursos (lista de control de acceso [ACL] de objeto, política de
bucket, ACL de bucket) y las políticas de usuario de IAM, en un conjunto de políticas para evaluar en
tiempo de ejecución. Luego, evalúa el conjunto de políticas resultante en una serie de pasos. En cada
paso, evalúa un subconjunto de políticas en tres contextos específicos: contexto de usuario, contexto de
bucket y contexto de objeto.
1. Contexto de usuario: si el solicitante es un principal de IAM, este debe tener permiso de la cuenta
principal de AWS a la que pertenece. En este paso, Amazon S3 evalúa un subconjunto de políticas
perteneciente a la cuenta principal (también denominada autoridad del contexto). Este subconjunto de
políticas incluye la política de usuario que la cuenta principal asocia al principal. Si la cuenta principal
también es propietaria del recurso en la solicitud (bucket, objeto), Amazon S3 evalúa las políticas de
recursos correspondientes (política de bucket, ACL de bucket y ACL de objeto) al mismo tiempo.
Note
Si la cuenta principal de AWS es propietaria del recurso (bucket u objeto), puede conceder
permisos a nivel de recursos a su principal de IAM mediante la política de usuario o la política
de recursos.
2. Contexto de bucket: en este contexto, Amazon S3 evalúa las políticas pertenecientes a la cuenta de
AWS que es propietaria del bucket.
Si la cuenta de AWS que es propietaria del objeto en la solicitud no es la misma que la propietaria del
bucket, en el contexto de bucket Amazon S3 verifica las políticas si el propietario del bucket denegó
explícitamente el acceso al objeto. Si se estableció una denegación explícita en el objeto, Amazon S3
no autoriza la solicitud.
3. Contexto de objeto: el solicitante debe tener permisos del propietario del objeto para realizar una
operación de objeto específica. En este paso, Amazon S3 evalúa la ACL de objeto.
Note
Si los propietarios del bucket y del objeto son los mismos, el acceso al objeto se puede
conceder en la política de bucket, que se evalúa en el contexto de bucket. Si los propietarios
son diferentes, los propietarios del objeto deben utilizar una ACL de objeto para conceder
permisos. Si la cuenta de AWS que es propietaria del objeto es también la cuenta principal a la
que pertenece el principal de IAM, esta puede configurar los permisos del objeto en una política
de usuario, que se evalúa en el contexto de usuario. Para obtener más información acera del
uso de estas alternativas de políticas de acceso, consulte Directrices de uso de las opciones de
política de acceso disponibles (p. 324).
En este ejemplo, Jill, la usuaria de IAM cuya cuenta principal de AWS es 1111-1111-1111, envía una
solicitud de operación de objeto (por ejemplo, Get object) para un objeto que pertenece a la cuenta
3333-3333-3333 de AWS en un bucket que pertenece a la cuenta 2222-2222-2222 de AWS.
Jill necesitará permisos de la cuenta principal de AWS, el propietario del bucket y el propietario del objeto.
Amazon S3 evalúa el contexto de la siguiente manera:
1. Dado que la solicitud es de un principal de IAM, Amazon S3 evalúa el contexto de usuario para verificar
que la cuenta principal 1111-1111-1111 de AWS le haya otorgado a Jill el permiso para realizar la
operación solicitada. Si Jill tiene permiso, Amazon S3 evalúa el contexto de bucket. De lo contrario,
Amazon S3 deniega la solicitud.
2. En el contexto de bucket, el propietario de bucket, la cuenta 2222-2222-2222 de AWS, es la autoridad
del contexto. Amazon S3 evalúa la política de bucket para determinar si el propietario del bucket le
denegó explícitamente el acceso al objeto a Jill.
3. En el contexto de objeto, la autoridad del contexto es la cuenta 3333-3333-3333 de AWS, propietaria del
objeto. Amazon S3 evalúa la ACL de objeto para determinar si Jill tiene permiso para acceder al objeto.
Si lo tiene, Amazon S3 autoriza la solicitud.
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.
• Si la cuenta de AWS que es propietaria del objeto también es propietaria del bucket, puede escribir una
política de bucket para administrar los permisos del objeto.
• Si la cuenta de AWS propietaria del objeto quiere conceder permisos a un usuario de su cuenta, puede
emplear una política de usuario.
Por tanto, ¿cuándo se han de usar las ACL de objetos para administrar los permisos de objetos? A
continuación figuran los escenarios en los que puede usar ACL de objetos para administrar permisos de
objetos.
• Una ACL de objeto es la única manera de administrar el acceso a los objetos que no sean propiedad del
propietario del bucket: una cuenta de AWS propietaria del bucket puede conceder a otra cuenta de AWS
permisos para cargar objetos. El propietario del bucket no es propietario de estos objetos. La cuenta de
AWS que creó el objeto debe conceder permisos mediante ACL de objetos.
Note
Un propietario de un bucket no puede conceder permisos para objetos que no son de su
propiedad. Por ejemplo, una política de bucket que concede permisos de objeto solo se aplica
a objetos que sean propiedad del propietario del bucket. Sin embargo, el propietario del bucket,
quien paga las facturas, puede escribir una política de bucket para denegar el acceso a los
objetos del bucket, independientemente de quién sea su propietario. El propietario del bucket
también puede eliminar cualquier objeto del bucket.
• Los permisos varían entre los diferentes objetos y se han de administrar en el nivel de objeto: puede
escribir una única instrucción de política que conceda a una cuenta de AWS permisos de lectura para
millones de objetos con un prefijo de nombre de clave específico. Por ejemplo, conceda permisos de
lectura sobre objetos que comiencen por el prefijo de nombre de clave "logs". Sin embargo, si sus
permisos de acceso varían en función del objeto, conceder permisos a objetos individuales con una
política de bucket podría no resultar práctico. Además, las políticas de bucket tienen un límite de tamaño
de 20 KB.
En este caso, puede que le resulte una alternativa adecuada usar ACL de objetos. Sin embargo, incluso
las ACL de objetos están limitadas a un máximo de 100 concesiones (consulte Información general de
las Access Control Lists (ACL, Listas de control de acceso) (p. 419)).
• Las ACL de objetos solo controlan los permisos en el nivel de objeto: solo hay una única política de
bucket para la totalidad del bucket, pero las ACL de objetos se especifican por objeto.
Una cuenta de AWS que sea propietaria de un bucket puede conceder a otra cuenta de AWS permisos
para administrar las políticas de acceso. Permite a la cuenta determinada cambiar cualquier aspecto
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.
El único caso de uso recomendado para las ACL de buckets es conceder permisos de escritura al grupo
Envío de archivos de registro de Amazon S3 para escribir objetos de registro de acceso en su bucket
(consulte Registro de acceso al servidor de Amazon S3 (p. 674)). Si quiere que Amazon S3 envíe
registros de acceso a su bucket, tendrá que conceder permisos de escritura en el bucket al grupo Envío de
archivos de registro. La única manera en la que puede conceder los permisos necesarios al grupo Envío
de archivos de registro es mediante una ACL de bucket, como se demuestra en el siguiente fragmento de
ACL de bucket.
• Si quiere administrar permisos entre cuentas para todos los permisos de Amazon S3: puede usar ACL
para conceder permisos entre cuentas a otras cuentas, pero las ACL solo admiten un conjunto limitado
de permisos (¿Qué permisos puedo conceder? (p. 421)), y no incluyen todos los permisos de Amazon
S3. Por ejemplo, no puede conceder permisos sobre subrecursos de bucket (consulte Administración de
identidad y acceso en Amazon S3 (p. 312)) con una ACL.
A pesar de que tanto las políticas de bucket como las de usuario admiten la concesión de permisos para
todas las operaciones de Amazon S3 (consulte Especificación de permisos en una política (p. 357)),
las políticas de usuario tienen como objetivo la administración de permisos para usuarios en su cuenta.
Para los permisos entre cuentas para otras cuentas o usuarios de AWS en otra cuenta, debe usar una
política de bucket.
Tenga en cuenta que AWS Identity and Access Management (IAM) le permite crear varios usuarios con
su cuenta de AWS y administrar sus permisos con políticas de usuario. Un usuario de IAM debe tener
permisos de la cuenta principal a la que pertenece, y de la cuenta de AWS propietaria del recurso al que
quiere obtener acceso el usuario. Se puede conceder los permisos de las siguientes maneras:
• Permiso de la cuenta principal: la cuenta principal puede conceder permisos a su usuario adjuntando
una política de usuario.
• Permiso del propietario del recurso: el propietario del recurso puede conceder permisos al usuario de
IAM (con una política de bucket) o a la cuenta principal (con una política de bucket, una ACL de bucket o
una ACL de objeto).
Esto se puede comparar a cuando un niño quiere jugar con un juguete que pertenece a otro niño. En
este caso, el niño debe obtener permiso de un padre para jugar con el juguete, y también permiso del
propietario del mismo.
Delegación de permisos
Si una cuenta de AWS es propietaria de un recurso, puede conceder esos permisos a otra cuenta de AWS.
Esa cuenta, a continuación, puede delegar esos permisos, o un subconjunto de ellos, a usuarios de la
cuenta. Esto se conoce como delegación de permisos. Sin embargo, una cuenta que recibe permisos de
otra cuenta no puede delegar permisos entre cuentas a otra cuenta de AWS.
Temas relacionados
Le recomendamos que consulte primero todos los temas de introducción en los que se explican cómo
administrar el acceso a sus recursos de Amazon S3 y las directrices relacionadas. Para obtener más
información, consulte Introducción a la administración de permisos de acceso para los recursos de Amazon
S3 (p. 312). Puede recurrir a los siguientes temas para obtener más información sobre opciones de
política de acceso específicas.
• Ejemplo 1: Propietario del bucket que concede permisos de bucket a sus usuarios (p. 329)
Los usuarios de IAM que crea en su cuenta no tienen permisos de forma predeterminada. En este
ejercicio, usted le otorga a un usuario permiso para realizar operaciones de bucket y objeto.
• Ejemplo 2: Propietario del bucket que concede permisos de bucket entre cuentas (p. 334)
En este ejercicio, el propietario de un bucket, la Cuenta A, concede permisos entre cuentas a otra cuenta
de AWS, la Cuenta B. Luego, la Cuenta B delega esos permisos a los usuarios de su cuenta.
• Administración de permisos de objetos cuando los propietarios del objeto y del bucket no son los mismos
Los escenarios de ejemplo en este caso incluyen a un propietario de bucket que concede permisos de
objetos a otros, pero no todos los objetos en el bucket le pertenecen al propietario del bucket. ¿Qué
permisos necesita el propietario del bucket y cómo puede delegar esos permisos?
La cuenta de AWS que crea un bucket se denomina propietario de bucket. El propietario puede conceder
permisos a otras cuentas de AWS para cargar objetos, y las cuentas de AWS que crean objetos son las
propietarias de estos. El propietario del bucket no tiene permisos sobre aquellos objetos creados por
otras cuentas de AWS. Si el propietario del bucket escribe una política de bucket que concede acceso a
los objetos, la política no se aplica a los objetos que le pertenecen a otras cuentas.
En este caso, el propietario del objeto primero debe otorgar permisos al propietario del bucket con una
Access Control List (ACL, Lista de control de acceso) de objetos. Luego, el propietario del objeto puede
delegar esos permisos de objeto a otros, a usuarios de su propia cuenta o a otra cuenta de AWS, como
se muestra en los siguientes ejemplos.
• Ejemplo 3: Propietario del bucket que le concede a sus usuarios permisos para objetos que no posee
(p. 340)
En este ejercicio, el propietario del bucket primero obtiene permisos del propietario del objeto. Luego,
el propietario del bucket delega esos permisos a usuarios de su propia cuenta.
• Ejemplo 4: Propietarios de buckets que conceden permisos a otras cuentas para objetos que no les
pertenecen (p. 345)
Después de recibir los permisos del propietario del objeto, el propietario del bucket no puede delegar
permisos a otras cuentas de AWS ya que no se admite la delegación entre cuentas (consulte
Delegación de permisos (p. 326)). En lugar de eso, el propietario del bucket puede crear un rol
de IAM con permisos para realizar operaciones específicas (como Get object) y permitir que otra
cuenta de AWS asuma ese rol. Luego, cualquiera que asuma el rol puede acceder a los objetos. En
este ejemplo se muestra cómo el propietario de un bucket utiliza un rol de IAM para habilitar esta
delegación entre cuentas.
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.
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.
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.
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
aws help
aws s3 ls
A medida que avanza por los tutoriales de ejemplo, creará usuarios y guardará las credenciales de
usuario en los archivos de configuración mediante la creación de perfiles, como se muestra en el siguiente
ejemplo. Tenga en cuenta que estos perfiles tienen nombres (AccountAadmin y AccountBadmin):
[profile AccountAadmin]
aws_access_key_id = User AccountAadmin access key ID
aws_secret_access_key = User AccountAadmin secret access key
region = us-west-2
[profile AccountBadmin]
aws_access_key_id = Account B access key ID
aws_secret_access_key = Account B secret access key
region = us-east-1
Para ejecutar un comando con estas credenciales de usuario, añade el parámetro --profile
especificando el nombre de perfil. El siguiente comando de la CLI de AWS recupera una lista de objetos en
examplebucket y especifica el perfil AccountBadmin.
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
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 ).
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.
Para ver una lista de los comandos, consulte Amazon Simple Storage Service Cmdlets.
Ahora está listo para probar los ejercicios. Siga los enlaces provistos al principio de la sección.
Ejemplo 1: Propietario del bucket que concede permisos de bucket a sus usuarios
Temas
• Paso 0: Prepárese para el tutorial (p. 330)
• Paso 1: cree recursos (un bucket y un usuario de IAM) en la Cuenta A y concédales
permisos (p. 331)
• Paso 2: prueba de permisos (p. 333)
En este ejercicio, una cuenta de AWS es la propietaria de un bucket, y tiene a un usuario de IAM en
la cuenta. De forma predeterminada, el usuario no tiene permisos. La cuenta principal debe conceder
permisos al usuario para realizar cualquier tarea. Tanto la cuenta del propietario del bucket como la cuenta
principal, a la que pertenece el usuario, son la misma. Por tanto, la cuenta de AWS puede usar una política
de bucket, una política de usuario o ambas para conceder a su usuario permisos sobre el bucket. Puede
conceder algunos permisos mediante una política de bucket y otros permisos mediante una política de
usuario.
1. El administrador de la cuenta crea una política de bucket en la que se concede un conjunto de permisos
al usuario.
2. El administrador de la cuenta adjunta una política de usuario al usuario, en la que se conceden permisos
adicionales.
3. A continuación, el usuario prueba los permisos concedidos tanto mediante la política de bucket como
mediante la política de usuario.
Para este ejemplo, necesitará una cuenta de AWS. En lugar de usar las credenciales raíces de la cuenta,
creará un usuario administrador (consulte Acerca del uso de un usuario administrador para crear recursos
y conceder permisos (p. 327)). Nos referimos a la cuenta de AWS y al usuario administrador de la
siguiente manera:
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.
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:
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:
Para obtener instrucciones, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).
Paso 1: cree recursos (un bucket y un usuario de IAM) en la Cuenta A y concédales permisos
Con las credenciales del usuario AccountAadmin en la Cuenta A y la URL especial de inicio de sesión del
usuario de IAM, inicie sesión en la Consola de administración de AWS y realice los siguientes pasos:
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:
Dado que la cuenta propietaria del bucket y la cuenta principal a la que pertenece el usuario coinciden,
la cuenta de AWS puede conceder al usuario permisos con una política de bucket, una política de
usuario o ambas. En este ejemplo, usará ambas. Si el objeto también es propiedad de la misma
cuenta, el propietario del bucket puede conceder permisos de objeto en la política del bucket (o una
política de IAM).
En la instrucción Principal, el ARN del usuario es lo que identifica a Dave. Para obtener más
información sobre los elementos de las políticas, consulte Información general del lenguaje de la
política de acceso (p. 354).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket"
]
},
{
"Sid": "statement2",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
}
]
}
b. Cree una política en línea para el usuario Dave utilizando la siguiente política. La política concede
a Dave el permiso s3:PutObject. Tendrá que actualizar la política proporcionando el nombre
del bucket.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PermissionForObjectOperations",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
]
}
]
}
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.
Compruebe que los permisos funcionan con las credenciales de Dave. Puede utilizar uno de los dos
procedimientos siguientes.
[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.
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.
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.
Ejemplo 2: Propietario del bucket que concede permisos de bucket entre cuentas
Temas
• Paso 0: Prepárese para el tutorial (p. 335)
• Paso 1: Realice las tareas de la cuenta A (p. 336)
• Paso 2: Realice las tareas de la cuenta B (p. 337)
• Paso 3: Crédito adicional: Pruebe la denegación explícita (p. 338)
• Paso 4: Eliminación (p. 339)
Una cuenta de AWS, por ejemplo, la cuenta A, puede concederle a otra cuenta de AWS, la cuenta B,
permiso para acceder a sus recursos como buckets y objetos. La cuenta B puede delegar estos permisos a
los usuarios en su cuenta. En este escenario de ejemplo, un propietario de bucket concede permiso entre
cuentas a otra cuenta para realizar operaciones de bucket específicas.
Note
La cuenta A también puede usar una política de bucket para conceder permisos directamente
a un usuario de la cuanta B. Pero aún así, el usuario necesitará permiso de la cuenta principal,
la cuenta B, a la que pertenece el usuario, incluso aunque la cuenta B no tenga permisos de la
cuenta A. El usuario podrá acceder al recurso siempre y cuando tenga permiso del propietario del
recurso y la cuenta principal.
1. El usuario administrador de la cuenta A adjunta una política de bucket que concede permisos entre
cuentas a la cuenta B para realizar operaciones de bucket específicas.
Tenga en cuenta que el usuario administrador en la cuenta B heredará automáticamente los permisos.
2. El usuario administrador de la cuenta B le adjunta la política de usuario al usuario que delega los
permisos que recibió de la cuenta A.
3. El usuario de la cuenta B luego accede a un objeto en el bucket que pertenece a la cuenta A para
verificar los permisos.
Para este ejemplo, necesita dos cuentas. En la siguiente tabla se muestra cómo nos referimos a estas
cuentas y a sus usuarios administradores. De acuerdo con las directrices de IAM (consulte Acerca del
uso de un usuario administrador para crear recursos y conceder permisos (p. 327)), no utilizamos las
credenciales raíz de la cuenta en este tutorial. En lugar de eso, usted crea un usuario administrador en
cada cuenta y utiliza esas credenciales para crear recursos y conceder permisos.
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.
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:
Para obtener más información, consulte Cómo inician sesión los usuarios en la cuenta en la Guía
del usuario de IAM.
d. Repita el paso anterior con las credenciales de la cuenta B y cree el usuario administrador
AccountBadmin.
2. Configure la interfaz de línea de comandos (CLI) de AWS o las herramientas de AWS para Windows
PowerShell. Asegúrese de guardar las credenciales del usuario administrador de la siguiente manera:
• Si está usando la CLI de AWS, cree dos perfiles, AccountAadmin y AccountBadmin, en el archivo de
configuración.
• Si usa las herramientas de AWS para Windows PowerShell, asegúrese de almacenar las
credenciales para la sesión como AccountAadmin y AccountBadmin.
Para obtener instrucciones, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).
3. Guarde las credenciales de usuario administrador, también denominadas perfiles. Puede utilizar
el nombre de perfil en lugar de especificar las credenciales para cada comando que escribe.
Para obtener más información, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).
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
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.
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.
Paso 1.3: Adjunte una política de bucket para conceder permisos entre cuentas a la cuenta B
Para obtener instrucciones, consulte ¿Cómo agrego una política de bucket en S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example permissions",
"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.
Para obtener instrucciones, consulte Creación de usuarios de IAM (Consola de administración de AWS) en
la Guía del usuario de IAM.
Se asume que usted está registrado en la consola con las credenciales de usuario AccountBadmin.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Example",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket"
]
}
]
}
Para obtener instrucciones, consulte Uso de políticas insertadas en la Guía del usuario de IAM.
1. Añada el perfil UserDave al archivo de configuración de la CLI de AWS. Para obtener más información
acerca del archivo de configuración, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).
[profile UserDave]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1
2. En el símbolo del sistema, escriba el siguiente comando de la CLI de AWS para asegurarse de que
Dave ahora puede obtener una lista de objetos de examplebucket que pertenece a la cuenta A.
Tenga en cuenta que el comando especifica el perfil UserDave.
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.
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.
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:
Paso 4: Eliminación
1. Después de que haya terminado de probar, puede realizar lo siguiente para limpiar.
• Si se creó el bucket para este ejercicio, en la consola de Amazon S3, elimine los objetos y
luego elimine el bucket.
• En la consola de IAM, elimine el usuario AccountAadmin.
2. Inicie sesión en la Consola de administración de AWS (Consola de administración de AWS) con las
credenciales de la cuenta B. En la consola de IAM, elimine el usuario AccountBadmin.
Ejemplo 3: Propietario del bucket que le concede a sus usuarios permisos para
objetos que no posee
Temas
• Paso 0: Prepárese para el tutorial (p. 341)
• Paso 1: Realice las tareas de la cuenta A (p. 342)
• Paso 2: Realice las tareas de la cuenta B (p. 343)
• Paso 3: Pruebe los permisos (p. 344)
• Paso 4: Eliminación (p. 344)
El escenario para este ejemplo es que el propietario de un bucket desea conceder permiso para acceder
a objetos, pero no todos los objetos del bucket pertenecen al propietario del bucket. ¿Cómo puede el
propietario de un bucket conceder permiso para objetos que no posee? Para este ejemplo, el propietario
del bucket intenta conceder permiso a usuarios en su propia cuenta.
El propietario de un bucket puede habilitar otras cuentas de AWS para cargar objetos. Estos objetos
pertenecen a las cuentas donde se crearon. El propietario del bucket no posee objetos que no fueron
creados por el propietario del bucket. Por lo tanto, para que el propietario del bucket brinde acceso a estos
objetos, el propietario del objeto primero debe conceder permiso al propietario del bucket mediante una
lista de control de acceso (ACL, access control list) de objetos. Para obtener más información, consulte
Propiedad de los buckets y objetos de Amazon S3 (p. 313).
En este ejemplo, el propietario del bucket delega permiso a usuarios en su propia cuenta. El siguiente es
un resumen de los pasos del tutorial:
1. El usuario administrador de la cuenta A adjunta una política de bucket con dos instrucciones.
• Conceda permiso entre cuentas a la cuenta B para cargar objetos.
• Permita que un usuario en su propia cuenta pueda acceder a los objetos en el bucket.
Para este ejemplo, necesita dos cuentas. La siguiente tabla muestra cómo denominamos a estas cuentas
y a los usuarios administradores en estas cuentas. De acuerdo con las directrices de IAM (consulte Acerca
del uso de un usuario administrador para crear recursos y conceder permisos (p. 327)), no utilizamos
las credenciales raíz de la cuenta en este tutorial. En lugar de eso, usted crea un usuario administrador en
cada cuenta y utiliza esas credenciales para crear recursos y conceder permisos.
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.
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. 327).
Con el URL de inicio de sesión de usuario de IAM para la cuenta A, primero inicie sesión en la Consola
de administración de AWS como usuario AccountAadmin. Este usuario creará un bucket y le asociará una
política.
Paso 1.2: Cree un bucket, un usuario y añada una política de bucket para conceder permisos de
usuario
1. En la consola de Amazon S3, cree un bucket. Este ejercicio asume que el bucket se crea en la región
del Este de EE. UU. (Virginia del Norte) y el nombre es examplebucket.
Para ver instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service
2. En la consola de IAM, cree un usuario, Dave.
{
"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/*"
]
}
]
}
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:
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.
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.
1. Use el comando Write-S3Object de las herramientas de AWS para Windows PowerShell para
cargar un objeto.
2. Añada un permiso a la ACL de objetos para concederle al propietario del bucket el control total del
objeto.
Ahora verifique que el usuario Dave en la cuenta A pueda acceder al objeto que pertenece a la cuenta B.
1. Añada las credenciales del usuario Dave al archivo de configuración de la CLI de AWS y cree un
nuevo perfil, UserDaveAccountA. Para obtener más información, consulte Configuración de las
herramientas para los tutoriales de ejemplo (p. 327).
[profile UserDaveAccountA]
aws_access_key_id = access-key
aws_secret_access_key = secret-access-key
region = us-east-1
1. Guarde las credenciales del usuario Dave de AWS, como UserDaveAccountA, en un almacenamiento
persistente.
Paso 4: Eliminación
1. Después de que haya terminado de probar, puede realizar lo siguiente para limpiar.
En este ejemplo de caso, usted posee un bucket y ha habilitado a otras cuentas de AWS para cargar
objetos. Es decir, el bucket puede tener objetos que pertenecen otras cuentas de AWS.
Suponga que como propietario del bucket debe conceder permiso entre cuentas para ciertos objetos,
independientemente de quién sea el propietario, a un usuario en otra cuenta. Por ejemplo, ese usuario
podría ser una aplicación de facturación que necesita obtener acceso a los metadatos de los objetos. Hay
dos cuestiones clave:
• El propietario del bucket no tiene permisos sobre aquellos objetos creados por otras cuentas de AWS.
Por lo tanto, para que el propietario del bucket conceda permisos para aquellos objetos que no le
pertenecen, el propietario del objeto, la cuenta de AWS que creó los objetos, primero debe concederle
permiso al propietario del bucket. Luego, el propietario del bucket puede delegar esos permisos.
• La cuenta del propietario del bucket puede delegar permisos a usuarios en su propia cuenta (consulte
Ejemplo 3: Propietario del bucket que le concede a sus usuarios permisos para objetos que no posee
(p. 340)), pero no puede delegar permisos a otras cuentas de AWS, ya que no se admite la delegación
entre cuentas.
En este caso, el propietario del bucket puede crear un rol de AWS Identity and Access Management (IAM)
con permiso para obtener acceso a los objetos y conceder otro permiso de la cuenta de AWS para asumir
la función de manera temporal, con el cual se podría obtener acceso a los objetos en el bucket.
• Una política de confianza que identifica a otra cuenta de AWS para que pueda asumir la función.
• Una política de acceso que define qué permisos, por ejemplo, s3:GetObject, se conceden cuando
alguien asume el rol. Para ver una lista de permisos que puede especificar en una política, consulte
Especificación de permisos en una política (p. 357).
La cuenta de AWS que se identifica en la política de confianza luego concede a su usuario permiso para
asumir la función. El usuario puede luego realizar lo siguiente para obtener acceso a los objetos:
Para obtener más información acerca de los roles de IAM, consulte Roles de IAM en la Guía del usuario de
IAM.
1. El usuario administrador de la cuenta A asocia una política de bucket por la cual concede un permiso
condicional a la cuenta B para cargar objetos.
2. El administrador de la cuenta A crea un rol de IAM, con la cual establece una relación de confianza
con la cuenta C, de manera que los usuarios de esa cuenta puedan obtener acceso a la cuenta A. La
política de acceso asociada con la función limita lo que el usuario de la cuenta C puede hacer cuando el
usuario obtiene acceso a la cuenta A.
3. El administrador de la cuenta B carga un objeto al bucket que pertenece a la cuenta A y concede un
permiso de control absoluto al propietario del bucket.
4. El administrador de la cuenta C crea un usuario y asocia una política de usuario que le permite al
usuario asumir la función.
5. El usuario de la cuenta C primero asume la función, la cual le devuelve al usuario credenciales de
seguridad temporales. Con esas credenciales temporales, el usuario obtiene acceso a los objetos en el
bucket.
Para este ejemplo, se necesitan tres cuentas. La siguiente tabla muestra cómo denominamos a estas
cuentas y a los usuarios administradores en estas cuentas. De acuerdo con las directrices de IAM
(consulte Acerca del uso de un usuario administrador para crear recursos y conceder permisos (p. 327)),
no utilizamos las credenciales raíz de la cuenta en este tutorial. En cambio, usted crea un usuario
administrador en cada cuenta y usa esas credenciales para crear recursos y conceder permisos.
Se recomienda abrir el editor de textos y tomar notas a medida que se explican los pasos.
Específicamente, necesitará ID de cuentas, ID de usuarios canónicos, URL de inicio de sesión
de usuarios de IAM para cada cuenta a fin de conectarse a la consola y Amazon Resource Name
(ARN, Nombres de recursos de Amazon) para los usuarios de IAM y funciones.
1. Asegúrese de tener tres cuentas de AWS y de que cada cuenta tenga un usuario administrador, como
se muestra en la tabla de la sección anterior.
a. Inscríbase en cuentas de AWS, según sea necesario. Denominamos estas cuentas cuenta A,
cuenta B y cuenta C.
i. Vaya a https://aws.amazon.com/s3/ y haga clic en Create an AWS Account (Crear una cuenta
de AWS).
ii. Siga las instrucciones en pantalla.
Cuando su cuenta esté activada y lista para usar, AWS se lo notificará por email.
b. Con las credenciales de la cuenta A, inicie sesión en la consola de IAM y haga lo siguiente para
crear un usuario administrador:
• Cree el usuario AccountAadmin y anote las credenciales de seguridad. Para obtener más
información acerca de cómo añadir usuarios, consulte Creación de un usuario de IAM en su
cuenta de AWS en la Guía del usuario de IAM.
• Conceda privilegios de administrador a AccountAadmin adjuntando una política de usuario que
le conceda acceso total. Para obtener instrucciones, consulte Uso de las políticas en Guía del
usuario de IAM.
• En Dashboard (Panel) de la consola de IAM, anote la IAM User Sign-In URL (URL de inicio
de sesión de usuario de IAM). Los usuarios de esta cuenta deben usar este URL para iniciar
sesión en la Consola de administración de AWS. Para obtener más información, diríjase a
Cómo inician sesión los usuarios en la cuenta en la Guía del usuario de IAM.
c. Repita el paso anterior para crear usuarios administradores de la cuenta B y de la cuenta C.
2. Para la cuenta C, anote el ID de usuario canónico.
Cuando crea un rol de IAM en la cuenta A, la política de confianza le concede a la cuenta C el permiso
para asumir la función mediante la especificación del ID de la cuenta. Puede buscar la información de
la cuenta de la siguiente manera:
Note
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:
Para obtener instrucciones, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).
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.
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.
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: Cree un rol de IAM para permitirle a la cuenta C el acceso entre cuentas a la cuenta A
En la consola de IAM, cree un rol de IAM (“examplerole”) para conceder el permiso a la cuenta C para
asumir la función. Asegúrese de seguir registrado como administrador de la cuenta A, ya que la función se
debe crear en la cuenta A.
1. Antes de crear el rol, prepare la política administrada que define los permisos que requiere el rol. Más
tarde, en otro paso, la asociará al rol.
a. En el panel de navegación de la izquierda, haga clic en Policies (Políticas) y, luego, haga clic en
Create Policy (Crear política).
b. Junto a Create Your Own Policy, haga clic en Select.
c. Escriba access-accountA-bucket en el campo Policy Name.
d. Copie la siguiente política de acceso y péguela en el campo Policy Document. La política de
acceso le concede a la función el permiso de s3:GetObject, de manera que cuando el usuario
de la cuenta C asuma la función, solo pueda realizar la operación s3:GetObject.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}
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 siguiente política de confianza establece una relación de confianza con la cuenta C mediante la
concesión del permiso para realizar la acción sts:AssumeRole. Para obtener más información,
consulte AssumeRole en la AWS Security Token Service API Reference.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountC-ID:root"
},
"Action": "sts:AssumeRole"
}
]
}
12. Anote el nombre de recurso de Amazon (ARN) de la función examplerole que creó.
Más adelante en los pasos siguientes, se asocia una política de usuario para permitirle a un usuario de
IAM que asuma esta función y la función se identifica con el valor de ARN.
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.
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.
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.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["sts:AssumeRole"],
"Resource": "arn:aws:iam::AccountA-ID:role/examplerole"
}
]
}
[profile AccountCDave]
aws_access_key_id = UserDaveAccessKeyID
aws_secret_access_key = UserDaveSecretAccessKey
region = us-west-2
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.
Como respuesta, el AWS Security Token Service (STS) devuelve credenciales de seguridad
temporales (ID de clave de acceso, clave de acceso secreta y un token de sesión).
2. Guarde las credenciales de seguridad temporales en el archivo de configuración de la CLI de AWS en
el perfil TempCred.
[profile TempCred]
aws_access_key_id = temp-access-key-ID
aws_secret_access_key = temp-secret-access-key
aws_session_token = session-token
region = us-west-2
3. En el símbolo del sistema, ejecute el siguiente comando de la CLI de AWS para obtener acceso
a los objetos con las credenciales temporales. Por ejemplo, el comando especifica la Application
Programming Interface (API, Interfaz de programación de aplicaciones) de head-object para recuperar
los metadatos de los objetos para el objeto HappyFace.jpg.
Como la política de acceso asociada con la función examplerole permite las acciones, Amazon S3
procesa la solicitud. Puede probar cualquier otra acción en cualquier otro objeto del bucket.
Si prueba cualquier otra acción, por ejemplo, get-object-acl, se le denegará el permiso porque no
se le permite esa acción al rol.
Versión de API 2006-03-01
352
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario
Usamos el usuario Dave para asumir la función y obtener acceso al objeto con credenciales
temporales. También podría ser una aplicación en la cuenta C que obtuviera acceso a los objetos en
el bucket examplebucket. La aplicación puede obtener las credenciales de seguridad temporales y
la cuenta C puede delegar el permiso de la aplicación para asumir la función examplerole.
Paso 4: Eliminación
1. Después de que haya terminado de probar, puede realizar lo siguiente para limpiar.
Recursos relacionados
• Creación de un rol para delegar permisos a un usuario de IAM en la Guía del usuario de IAM.
• Tutorial: Delegación del acceso entre cuentas de AWS mediante roles de IAM en la Guía del usuario de
IAM.
• Trabajo con políticas en la Guía del usuario de IAM.
Le recomendamos que consulte primero los temas de introducción en los que se explican los
conceptos básicos y las opciones disponibles para administrar el acceso a sus recursos de
Amazon S3. Para obtener más información, consulte Introducción a la administración de permisos
de acceso para los recursos de Amazon S3 (p. 312).
Temas
• Información general del lenguaje de la política de acceso (p. 354)
• Ejemplos de política de bucket (p. 387)
• Ejemplos de políticas de usuario (p. 396)
• Recursos: los buckets y objetos son los recursos de Amazon S3 a los que puede conceder o denegar
permisos. En una política, se usa el nombre de recurso de Amazon (ARN) para identificar el recurso.
• Acciones: Amazon S3 admite un conjunto de operaciones para cada recurso. Con las palabras clave
de acción puede identificar las operaciones del recurso que desea permitir o denegar (consulte
Especificación de permisos en una política (p. 357)).
Por ejemplo, el permiso s3:ListBucket autoriza el permiso de usuario para la operación GET Bucket
(List Objects) de Amazon S3.
• Efecto: el efecto obtenido cuando el usuario solicita la acción específica, que puede ser permitir o
denegar.
Si no concede o permite el acceso de forma explícita a un recurso, el acceso será denegado de forma
implícita. También puede denegar de forma explícita el acceso a un recurso para asegurarse de que un
usuario no obtenga acceso a él, aunque otra política se lo conceda.
• Entidad principal: la cuenta o el usuario con permiso de acceso a las acciones y los recursos en la
instrucción. En una política de bucket, el principal es el usuario, cuenta, servicio u otra entidad que
reciba este permiso.
La política de bucket del ejemplo siguiente ilustra los elementos comunes de políticas anteriores.
La política autoriza a Dave, un usuario en la cuenta ID-cuenta, los permisos s3:GetObject,
s3:GetBucketLocation y s3:ListBucket de Amazon S3 en el bucket examplebucket.
{
"Version": "2012-10-17",
"Id": "ExamplePolicy01",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account-ID:user/Dave"
},
"Action": [
"s3:GetObject",
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::examplebucket/*",
"arn:aws:s3:::examplebucket"
]
}
]
}
Para obtener más información acerca de los elementos de la política de acceso, consulte los siguientes
temas:
arn:partition:service:region:namespace:relative-id
• aws indica un nombre de partición común. Si sus recursos están en la región China (Pekín), aws-cn
será el nombre de la partición.
• s3 indica el servicio.
• No se especifica la región ni el espacio de nombres.
• Para Amazon S3, puede ser un bucket-name o un bucket-name/object-key. Puede utilizar
comodines.
arn:aws:s3:::bucket_name
arn:aws:s3:::bucket_name/key_name
arn:aws:s3:::examplebucket/developers/design_info.doc
• Puede utilizar comodines como parte del ARN del recurso. Puede utilizar caracteres comodín (* y ?) en
cualquier segmento del ARN (las partes se separan mediante signos de dos puntos). Un asterisco (*)
representa cualquier combinación de cero o más caracteres y un signo de interrogación (?) representa
un único carácter. Puede utilizar varios caracteres * o ? en cada segmento, pero un carácter comodín no
puede abarcar varios segmentos.
• Este ARN utiliza el carácter comodín * en la parte de identificador relativo del ARN para identificar
todos los objetos del bucket examplebucket.
arn:aws:s3:::examplebucket/*
Este ARN utiliza * para indicar todos los recursos de Amazon S3 (todos los buckets y objetos en su
cuenta).
arn:aws:s3:::*
• Este ARN utiliza los dos caracteres comodín, * e ?, en la parte de identificador relativo. Identifica
todos los objetos en los buckets como example1bucket, example2bucket, example3bucket, etc.
arn:aws:s3:::example?bucket/*
• Puede utilizar variables de política en los ARN de Amazon S3. Cuando se evalúa una política, estas
variables predefinidas se sustituyen por los valores correspondientes. Supongamos que organiza los
buckets como una colección de carpetas, una carpeta para cada uno de los usuarios. El nombre de la
carpeta será igual al nombre del usuario. Para conceder a los usuarios permisos para sus carpetas,
puede especificar una variable de política en el ARN del recurso:
arn:aws:s3:::bucket_name/developers/${aws:username}/
Para encontrar el ARN de un bucket de S3, puede consultar las páginas de permisos Bucket Policy
(Política de bucket) o CORS configuration (Configuración CORS) de la consola de Amazon S3. Para
obtener más información, consulte ¿Cómo agrego una política de bucket en S3? o ¿Cómo permito que se
compartan recursos entre dominios con CORS? en la Guía del usuario de la consola de Amazon Simple
Storage Service.
Para obtener más información acerca de los ARN, consulte los siguientes temas:
Para obtener más información acerca de otros elementos del lenguaje de la política de acceso, consulte
Información general del lenguaje de la política de acceso (p. 354).
• Para conceder permisos para una cuenta de AWS, use el siguiente formato para identificar la cuenta.
"AWS":"account-ARN"
Por ejemplo:
"Principal":{"AWS":"arn:aws:iam::AccountNumber-WithoutHyphens:root"}
Amazon S3 también admite un ID de usuario canónico, que es una forma encubierta del ID de cuenta de
AWS. Puede usar el siguiente formato para especificar este ID.
"CanonicalUser":"64-digit-alphanumeric-value"
Por ejemplo:
"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
"Principal":{"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}
• Para conceder permisos a todos los usuarios, lo que también se denomina acceso anónimo, puede
establecer el carácter comodín, "*", como valor de Principal. Por ejemplo, si configura el bucket
como sitio web, es porque desea que todos los objetos en el bucket tengan acceso público. Estos son
ejemplos equivalentes:
"Principal":"*"
"Principal":{"AWS":"*"}
Warning
Para obtener más información, consulte la sección sobre el uso de una identidad de acceso de origen
para restringir el acceso a su contenido de Amazon S3 en la Guía para desarrolladores de Amazon
CloudFront.
Para obtener más información acerca de otros elementos del lenguaje de la política de acceso, consulte
Información general del lenguaje de la política de acceso (p. 354).
Temas
• Permisos para operaciones de objetos (p. 358)
En esta sección se proporciona una lista de los permisos para las operaciones de objetos que puede
especificar en una política.
Para conceder permiso para los datos de versión específica de un objeto, debe
conceder este permiso. Es decir, necesita este permiso de Amazon S3 cuando
especifica el número de versión al realizar cualquiera de estas solicitudes.
List Parts
s3:ListMultipartUploadParts
s3:PutObject PUT Object, POST Object, Initiate Multipart Upload, Upload Part, Complete
Multipart Upload, PUT Object - Copy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/Dave"
},
"Action": ["s3:PutObject","s3:PutObjectAcl"],
"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}
Puede utilizar un carácter comodín para conceder permisos para todas las acciones de Amazon S3.
"Action": "*"
En esta sección se proporciona una lista de los permisos relacionados con las operaciones de bucket que
puede especificar en una política.
GET Service
s3:ListAllMyBuckets
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:CreateBucket",
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::*"
]
}
]
}
Si el usuario va a utilizar la consola para ver buckets y ver el contenido de cualquiera de estos buckets,
el usuario debe tener los permisos s3:ListAllMyBuckets y s3:GetBucketLocation. Para ver un
ejemplo, consulte la "Política para acceso a la consola" en la sección Escribir políticas de IAM: cómo
conceder acceso a un bucket de S3.
En esta sección se proporciona una lista de los permisos relacionados con las operaciones de subrecursos
de bucket que puede especificar en una política.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::Account-ID:user/Dave"
},
"Action": [
"s3:GetObjectVersion",
"s3:GetBucketAcl"
],
"Resource": "arn:aws:s3:::examplebucket"
}
]
}
Para eliminar objetos, puede llamar de forma explícita a la API DELETE Object o configurar el ciclo
de vida (consulte Administración del ciclo de vida de los objetos (p. 127)) para que Amazon S3 pueda
eliminar los objetos cuando caduque su vida útil. Para impedir de forma explícita que los usuarios o
las cuentas eliminen objetos, debe denegarles de forma explícita los permisos s3:DeleteObject,
s3:DeleteObjectVersion y s3:PutLifecycleConfiguration. De forma predeterminada, los
usuarios no tienen permisos. Pero cuando crea usuarios, los añade a grupos y les concede permisos, es
posible que los usuarios adquieran algunos permisos que usted no deseaba concederles. Aquí es donde
puede utilizar la denegación explícita, que sustituye a todos los demás permisos que un usuario puede
tener y deniega los permisos para acciones específicas.
En esta sección se proporciona una lista de los permisos relacionados con las operaciones de cuenta que
puede especificar en una política.
s3:CreateJob CreateJob
s3:DescribeJob DescribeJob
GET PublicAccessBlock
s3:GetAccountPublicAccessBlock
s3:ListJobs ListJobs
UpdateJobPriority
s3:UpdateJobPriority
UpdateJobStatus
s3:UpdateJobStatus
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:GetAccountPublicAccessBlock"
],
"Resource":[
"*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::examplebucket/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": [
"public-read"
]
}
}
}
]
}
Para obtener más información sobre cómo especificar condiciones en un lenguaje de política de acceso,
consulte Condición en la Guía del usuario de IAM.
En los siguientes temas, se describen las claves de condición generales de AWS y específicas de Amazon
S3 y se proporcionan ejemplos de políticas.
Temas
• Claves de condición disponibles (p. 364)
• Claves generales de AWS: AWS proporciona un conjunto de claves comunes admitidas por todos los
servicios de AWS que admiten políticas. Estas claves que son comunes para todos los servicios se
denominan claves generales de AWS y utilizan el prefijo aws:. Para ver una lista de claves generales de
AWS, consulte Claves de condición disponibles en la Guía del usuario de IAM. También existen claves
específicas para Amazon S3, que utilizan el prefijo s3:. Las claves específicas para Amazon S3 se
describen en el siguiente punto.
La política de bucket del ejemplo siguiente concede a los usuarios autenticados el permiso para usar
la acción s3:GetObject si la solicitud se genera a partir de un rango específico de direcciones
IP (192.168.143.*), a menos que la dirección IP sea 192.168.143.188. En el bloque de condición,
IpAddress y NotIpAddress son condiciones y cada una recibe un par clave-valor para evaluación. En
este ejemplo, los pares de clave-valor usan la clave general de AWS aws:SourceIp.
Note
Los valores de clave IPAddress y NotIpAddress especificados en la condición utilizan la
notación CIDR como se describe en RFC 4632. Para obtener más información, consulte http://
www.rfc-editor.org/rfc/rfc4632.txt.
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": "*",
"Action":["s3:GetObject"] ,
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition" : {
"IpAddress" : {
"aws:SourceIp": "192.168.143.0/24"
},
"NotIpAddress" : {
"aws:SourceIp": "192.168.143.188/32"
}
}
}
]
}
• Claves específicas de Amazon S3: además de las claves generales de AWS, las siguientes claves
de condición solo pueden aplicarse para conceder permisos específicos de Amazon S3. Estas claves
específicas de Amazon S3 utilizan el prefijo s3:.
• s3:x-amz-acl
• s3:x-amz-copy-source
• s3:x-amz-metadata-directive
• s3:x-amz-server-side-encryption
• s3:VersionId
• s3:LocationConstraint
• s3:delimiter
• s3:max-keys
• s3:prefix
• s3:x-amz-server-side-encryption-aws-kms-key-id
• s3:ExistingObjectTag/<tag-key>
Para ver ejemplos de políticas que utilizan claves de condición relacionadas a las etiquetas de objetos,
consulte Etiquetado de objetos y políticas de control de acceso (p. 121).
• s3:RequestObjectTagKeys
• s3:RequestObjectTag/<tag-key>
• s3:object-lock-remaining-retention-days
• s3:object-lock-mode
• s3:object-lock-retain-until-date
• s3:object-lock-legal-hold
Por ejemplo, la siguiente política de bucket concede el permiso s3:PutObject para dos cuentas de
AWS, si la solicitud incluye el encabezado x-amz-acl, que permite la lectura pública del objeto.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid":"AddCannedAcl",
"Effect":"Allow",
"Principal": {
"AWS": ["arn:aws:iam::account1-ID:root","arn:aws:iam::account2-ID:root"]
},
"Action":["s3:PutObject"],
"Resource": ["arn:aws:s3:::examplebucket/*"],
"Condition": {
"StringEquals": {
"s3:x-amz-acl":["public-read"]
}
}
}
]
}
Important
No todas las condiciones son adecuadas para todas las acciones. Por ejemplo, es adecuado
incluir una condición s3:LocationConstraint en una política que concede el permiso
s3:CreateBucket de Amazon S3, pero no el permiso s3:GetObject. Amazon S3 puede
realizar pruebas de errores semánticos de este tipo que implican condiciones específicas de
Amazon S3. Sin embargo, si crea una política para un usuario de IAM e incluye una condición de
Versión de API 2006-03-01
365
Amazon Simple Storage Service Guía del desarrollador
Uso de políticas de bucket y usuario
Amazon S3 no válida semánticamente, no se reportará ningún error porque IAM no puede validar
condiciones de Amazon S3.
En la siguiente sección se describen las claves de condición que se pueden utilizar para conceder
permisos condicionales a las operaciones de bucket y objeto. Además, existen claves de condición
relacionadas con la autenticación Signature Version 4 de Amazon S3. Para obtener más información,
consulte el tema relativo a las claves de política específicas de la autenticación de Amazon S3 Signature
Version 4 en la Amazon Simple Storage Service API Reference.
• Los nombres de las claves de condición tienen el prefijo s3:. Por ejemplo,
s3:x-amz-acl
.
• Cada clave de condición se asigna al encabezado de solicitud con el mismo nombre permitido por la API
en la que se puede establecer la condición. Es decir, las claves de condición indican el comportamiento
de los encabezados de solicitud con el mismo nombre. Por ejemplo:
• La clave de condición s3:x-amz-acl que puede utilizar para conceder el permiso de condición para
el permiso
s3:PutObject
define el comportamiento del encabezado de solicitud x-amz-acl que admite la API de PUT Object.
• La clave de condición s3:VersionId que puede utilizar para conceder permisos condicionales para
el permiso
s3:GetObjectVersion
define el comportamiento del parámetro de consulta versionId que establece en una solicitud GET
Object.
Al conceder el permiso
s3:PutObject, el propietario del
bucket puede añadir una condición
con esta clave para solicitar que el
usuario especifique este encabezado
en la solicitud. El propietario del
bucket puede conceder ese permiso
condicional para garantizar que los
objetos cargados por el usuario estén
cifrados cuando se guardan.
Al conceder el permiso
s3:PutObject, el propietario del
bucket puede añadir una condición con
esta clave para restringir el ID de clave
de AWS KMS utilizado para el cifrado
de objetos a un valor específico.
arn:aws:kms:region:acct-
id:key/key-id
s3:ExistingObjectTag/
s3:DeleteObjectVersionTagging Con esta clave de condición, puede
<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).
s3:ExistingObjectTag/
s3:GetObjectVersionTagging Con esta clave de condición, puede
<tag-key> limitar el permiso solo a objetos que
tienen una clave y un valor específicos
para la etiqueta. Para ver ejemplos,
consulte Etiquetado de objetos y
políticas de control de acceso (p. 121).
Ejemplo 1: Concesión de permisos s3:PutObject con una condición que solicita que el propietario
del bucket tenga control total
Supongamos que la cuenta A tiene un bucket y el administrador de la cuenta desea conceder permisos
para cargar objetos a Dave, usuario en la cuenta B. De forma predeterminada, los objetos que carga Dave
pertenecen a la cuenta B y la cuenta A no tiene permisos sobre estos objetos. El propietario del bucket,
que paga las facturas, desea tener los permisos completos sobre los objetos que carga Dave. Para esto, el
administrador de la cuenta A puede conceder el permiso s3:PutObject a Dave, con la condición de que
la solicitud incluya los encabezados específicos de ACL, que concede permisos totales de forma explícita o
utiliza una ACL predefinida (consulte PUT Object).
La siguiente política de bucket concede el permiso s3:PutObject al usuario Dave con una condición
que utiliza la clave de condición s3:x-amz-grant-full-control, que requiere que la solicitud
incluya el encabezado x-amz-full-control.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/Dave"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
}
]
}
Note
En este ejemplo se describe el permiso entre cuentas. Sin embargo, si Dave, quien obtiene el
permiso, pertenece a la cuenta de AWS que tiene el bucket, este permiso condicional no será
necesario, ya que Dave pertenece a la cuenta principal que es propietaria de los objetos que el
usuario carga.
La política de bucket anterior concede el permiso condicional al usuario Dave en la cuenta B. Mientras
esta política tenga vigencia, es posible que Dave obtenga el mismo permiso sin ninguna condición
mediante otra política. Por ejemplo, Dave puede pertenecer a un grupo y usted concede el permiso
s3:PutObject al grupo sin ninguna condición. Para evitar esas ambigüedades en los permisos, puede
escribir una política de acceso más estricta y añadir una denegación explícita. En este ejemplo, deniega
el permiso de carga de forma explícita al usuario Dave si no incluye los encabezados necesarios en la
solicitud que concede los permisos completos al propietario del bucket. La denegación explícita siempre
sustituye a cualquier otro permiso concedido. A continuación, se muestra un ejemplo de la política de
acceso revisada.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
},
{
"Sid": "statement2",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-grant-full-control": "id=AccountA-CanonicalUserID"
}
}
}
]
}
Si tiene dos cuentas de AWS, puede usar la AWS Command Line Interface (AWS CLI) para probar la
política. Puede asociar la política y, con las credenciales de Dave, usar el siguiente comando put-
object de la AWS CLI para probar el permiso. Para proporcionar las credenciales de Dave, debe
añadir el parámetro --profile. Para conceder el permiso de control total al propietario del bucket,
debe añadir el parámetro --grant-full-control. Para obtener más información acerca de la
configuración y el uso de la AWS CLI, consulte Configuración de las herramientas para los tutoriales de
ejemplo (p. 327).
• Requiere el encabezado x-amz-acl con una ACL predefinida que conceda permiso de control total al
propietario del bucket.
Para pedir el encabezado x-amz-acl en la solicitud, puede reemplazar el par clave-valor en el bloque
Condition y especificar la clave de condición s3:x-amz-acl, tal y como se muestra en el siguiente
ejemplo.
"Condition": {
"StringNotEquals": {
"s3:x-amz-acl": "bucket-owner-full-control"
}
Para probar el permiso con la AWS CLI, debe especificar el parámetro --acl. Luego, la AWS CLI añade
el encabezado x-amz-acl cuando envía la solicitud.
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.
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:
La siguiente política de bucket concede al usuario Dave el permiso s3:PutObject. Le permite copiar solo
los objetos con la condición de que la solicitud incluya el encabezado s3:x-amz-copy-source y el valor
del encabezado especifique el prefijo de nombre de clave /examplebucket/public/*.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "cross-account permission to user in your own account",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": ["s3:PutObject"],
"Resource": "arn:aws:s3:::examplebucket/*"
},
{
"Sid": "Deny your user permission to upload object if copy source is not /
bucket/folder",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotLike": {
"s3:x-amz-copy-source": "examplebucket/public/*"
}
}
}
]
}
Puede usar el comando copy-object de la AWS CLI para probar el permiso. Para especificar el
origen, debe añadir el parámetro --copy-source y el prefijo de nombre de clave debe coincidir con
el prefijo permitido en la política. Tiene que proporcionar las credenciales al usuario Dave utilizando el
parámetro --profile. Para obtener más información acerca de la configuración de la AWS CLI, consulte
Configuración de las herramientas para los tutoriales de ejemplo (p. 327).
La política anterior utiliza la condición StringNotLike. Para conceder el permiso para copiar solo un
objeto específico, debe cambiar la condición de StringNotLike a StringNotEquals y, a continuación,
especificar la clave exacta del objeto, tal como se muestra.
"Condition": {
"StringNotEquals": {
"s3:x-amz-copy-source": "examplebucket/public/PublicHappyFace1.jpg"
}
}
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.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "statement1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": ["s3:GetObjectVersion"],
"Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg"
},
{
"Sid": "statement2",
"Effect": "Deny",
"Principal": {
"AWS": "arn:aws:iam::AccountA-ID:user/Dave"
},
"Action": ["s3:GetObjectVersion"],
"Resource": "arn:aws:s3:::examplebucketversionenabled/HappyFace.jpg",
"Condition": {
"StringNotEquals": {
"s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e"
}
}
}
]
}
En este caso, Dave tiene que saber el ID de versión exacta del objeto para recuperar el objeto.
Puede usar el comando get-object de la AWS CLI para probar estos permisos y el parámetro --
version-id para identificar la versión específica del objeto. El comando recupera el objeto y lo guarda en
el archivo OutputFile.jpg.
{
"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"
]
}
}
}
]
}
En la siguiente tabla se muestra una lista de permisos específicos de operaciones de buckets que puede
conceder en las políticas. En cada permiso se muestran las claves disponibles que puede usar a la hora de
especificar una condición.
Ejemplo 1: Permiso para que un usuario cree un bucket pero solo en una región específica
Supongamos que el administrador de una cuenta de AWS desea conceder al usuario (Dave) el
permiso para crear un bucket solo en la región América del Sur (São Paulo). El administrador de la
cuenta puede asociar la siguiente política de usuario que concede el permiso s3:CreateBucket con
una condición, tal como se muestra. El par clave-valor en el bloque Condition especifica la clave
s3:LocationConstraint y la región sa-east-1 como su valor.
Note
En este ejemplo, el propietario del bucket concede el permiso a uno de sus usuarios, así que
se puede usar una política de bucket o de usuario. En este ejemplo se muestra una política de
usuario.
Para ver una lista de las regiones de Amazon S3, consulte Regiones y puntos de enlace en la AWS
General Reference.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:CreateBucket"
],
"Resource":[
"arn:aws:s3:::*"
],
"Condition": {
"StringLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
}
]
}
Esta política impide que el usuario cree un bucket en cualquier otra región, excepto la región sa-east-1.
Sin embargo, es posible que otras políticas concedan al usuario el permiso para crear buckets en otra
región. Por ejemplo, si el usuario pertenece a un grupo, es posible que el grupo tenga una política
asociada que permite a todos los usuarios en el grupo crear buckets en otra región. Para asegurarse de
que el usuario no obtenga el permiso para crear buckets en otra región, puede añadir una instrucción de
denegación explícita en esta política.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:CreateBucket"
],
"Resource":[
"arn:aws:s3:::*"
],
"Condition": {
"StringLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Action":[
"s3:CreateBucket"
],
"Resource":[
"arn:aws:s3:::*"
],
"Condition": {
"StringNotLike": {
"s3:LocationConstraint": "sa-east-1"
}
}
}
]
}
La instrucción Deny utiliza la condición StringNotLike. Es decir, la solicitud para crear un bucket se
deniega si la restricción de ubicación no es "sa-east-1". La denegación explícita no permite al usuario crear
un bucket en ninguna otra región, independientemente de los permisos que obtenga el usuario.
Puede usar el siguiente comando create-bucket de la AWS CLI para probar la política. En este ejemplo
se utiliza el archivo bucketconfig.txt para especificar la restricción de ubicación. Observe la ruta del
archivo de Windows. Tiene que actualizar el nombre y la ruta del bucket según corresponda. Debe usar
el parámetro --profile para proporcionar las credenciales de usuario. Para obtener más información
acerca de la configuración y el uso de la AWS CLI, consulte Configuración de las herramientas para los
tutoriales de ejemplo (p. 327).
{"LocationConstraint": "sa-east-1"}
Ejemplo 2: Permiso para que un usuario obtenga una lista de objetos en un bucket de acuerdo con
un prefijo específico
El propietario del bucket puede impedir que el usuario cree una lista de contenido de una carpeta
específica en el bucket. Esto resulta útil si los objetos en el bucket están organizados por prefijos de
nombre de clave. En ese caso, la consola de Amazon S3 utiliza los prefijos para mostrar una jerarquía
de carpetas (solo la consola admite el concepto de carpetas; la API de Amazon S3 admite solo buckets y
objetos).
En este ejemplo, la cuenta del propietario del bucket y la cuenta principal, a la que pertenece el usuario,
son las mismas. Por lo tanto, el propietario del bucket puede usar una política de bucket o de usuario.
Primero mostraremos una política de usuario.
La siguiente política de usuario concede el permiso s3:ListBucket (consulte GET Bucket (List Objects))
con una condición que requiere que el usuario especifique prefix en la solicitud con el valor projects.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Action":[
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::examplebucket"
],
"Condition" : {
"StringEquals" : {
"s3:prefix": "projects"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Action":[
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::examplebucket"
],
"Condition" : {
"StringNotEquals" : {
"s3:prefix": "projects"
}
}
}
]
}
La condición impide que el usuario cree una lista de claves de objetos con el prefijo projects. Esta
denegación explícita añadida impide que el usuario realice una lista de claves con cualquier otro prefijo,
independientemente de los demás permisos que tenga el usuario. Por ejemplo, es posible que el
usuario obtenga el permiso para crear una lista de claves de objetos sin ninguna restricción, mediante
actualizaciones de políticas de usuario anteriores o mediante una política de bucket. Pero, como la
denegación explícita siempre sustituye a cualquier otro permiso, la solicitud del usuario para crear listas de
claves que no tengan el prefijo project se deniega.
La política anterior es una política de usuario. Si añade el elemento Principal a la política, que identifica
al usuario, tendrá una política de bucket, tal como se muestra.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"statement1",
"Effect":"Allow",
"Principal": {
"AWS": "arn:aws:iam::BucketOwner-accountID:user/user-name"
},
"Action":[
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::examplebucket"
],
"Condition" : {
"StringEquals" : {
"s3:prefix": "examplefolder"
}
}
},
{
"Sid":"statement2",
"Effect":"Deny",
"Principal": {
"AWS": "arn:aws:iam::BucketOwner-AccountID:user/user-name"
},
"Action":[
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::examplebucket"
],
"Condition" : {
"StringNotEquals" : {
"s3:prefix": "examplefolder"
}
}
}
]
}
Puede usar el siguiente comando list-object de la AWS CLI para probar la política. En el comando,
usa el parámetro --profile para proporcionar las credenciales de usuario. Para obtener más
información acerca de la configuración y el uso de la AWS CLI, consulte Configuración de las herramientas
para los tutoriales de ejemplo (p. 327).
Si el bucket tiene el control de versiones habilitado, para crear una lista de los objetos en el bucket, en
vez del permiso s3:ListBucket, debe conceder el permiso s3:ListBucketVersions en la política
anterior. Este permiso también admite la clave de condición s3:prefix.
Puede utilizar la herramienta AWS Policy Generator para crear una política de bucket para su bucket de
Amazon S3. Luego, puede utilizar el documento generado para configurar su política de bucket a través de
la consola de Amazon S3, mediante una serie de herramientas de terceros o a través de su aplicación.
Important
Temas
• Concesión de permisos a varias cuentas con condiciones adicionales (p. 387)
• Concesión de permisos de solo lectura a un usuario anónimo (p. 388)
• Restricción del acceso a direcciones IP específicas (p. 388)
• Restricción del acceso a un origen de referencia de HTTP específico (p. 389)
• Concesión de permiso a una identidad de origen Amazon CloudFront (p. 390)
• Incorporación de una política de bucket para requerir MFA (p. 391)
• Concesión de permisos entre cuentas para cargar objetos al mismo tiempo que se garantiza que el
propietario del bucket tenga el control total (p. 393)
• Concesión de permisos para el inventario de Amazon S3 y el análisis de Amazon S3 (p. 393)
• Ejemplo de políticas de bucket para puntos de enlace de la VPC para Amazon S3 (p. 394)
{
"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"]}}
}
]
}
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::examplebucket/*"]
}
]
}
Warning
Extreme las precauciones a la hora de otorgar acceso anónimo a su bucket de S3. Al otorgar
acceso anónimo, cualquier persona puede acceder a su bucket. Se recomienda encarecidamente
que no otorgue nunca ningún tipo de acceso de escritura anónimo en su bucket de S3.
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {"aws:SourceIp": "54.240.143.0/24"},
"NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"}
}
}
]
}
Cuando comienza a utilizar direcciones IPv6, le recomendamos que actualice todas las políticas de su
organización con sus rangos de dirección IPv6 además de los rangos IPv4 existentes para asegurarse de
que las políticas sigan funcionando mientras adopta IPv6.
En el siguiente ejemplo de política de bucket se muestra cómo combinar los rangos de dirección IPv4 y
IPv6 para incluir todas las direcciones IP válidas de su organización. La política de ejemplo permitiría el
acceso a las direcciones IP de ejemplo 54.240.143.1 y 2001:DB8:1234:5678::1, y denegaría el
acceso a las direcciones 54.240.143.129 y 2001:DB8:1234:5678:ABCD::1.
Los valores de IPv6 para aws:SourceIp deben estar en formato CIDR estándar. Para IPv6 aceptamos
el uso de :: para representar un rango de 0, por ejemplo, 2032001:DB8:1234:5678::/64. Para obtener más
información, consulte Operadores de condición de dirección IP en la Guía del usuario de IAM.
{
"Id":"PolicyId2",
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AllowIPmix",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:*",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"54.240.143.0/24",
"2001:DB8:1234:5678::/64"
]
},
"NotIpAddress": {
"aws:SourceIp": [
"54.240.143.128/30",
"2001:DB8:1234:5678:ABCD::/80"
]
}
}
}
]
}
"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:GetObject",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition":{
"StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
}
}
]
}
Asegúrese de que los navegadores que utiliza incluyan el encabezado http referer en la solicitud.
Para aumentar la seguridad del acceso a los objetos del bucket examplebucket puede añadir una
denegación explícita a la política de bucket como se muestra en el siguiente ejemplo. La denegación
explícita sustituye cualquier permiso que pueda conceder a los objetos del bucket examplebucket con
otros medios como las ACL o las políticas de usuario.
Important
Tenga en cuenta que este ejemplo impedirá que todos los usuarios (incluido el usuario raíz)
realicen las acciones de Amazon S3, incluida la administración de políticas de buckets. Piense en
añadir un tercer Sid que permita al usuario raíz realizar las acciones de s3:*.
{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
{
"Sid": "Allow get requests referred by www.example.com and example.com.",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
}
},
{
"Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/
*"]}
}
}
]
}
se utiliza para permitir la característica de contenido privado de CloudFront. La política utiliza el prefijo
CanonicalUser, en lugar de AWS, para especificar un ID de usuario canónico. Para obtener más
información sobre soporte de CloudFront para la publicación de contenido privado, consulte el tema
Distribución de contenido privado en la Guía para desarrolladores de Amazon CloudFront. Debe
especificar el ID de usuario canónico para la identidad de acceso de origen de distribución de CloudFront.
Para obtener instrucciones acerca de cómo buscar el ID de usuario canónico, consulte Especificación de
un elemento principal en una política (p. 356).
{
"Version":"2012-10-17",
"Id":"PolicyForCloudFrontPrivateContent",
"Statement":[
{
"Sid":" Grant a CloudFront Origin Identity access to support private content",
"Effect":"Allow",
"Principal":{"CanonicalUser":"CloudFront Origin Identity Canonical User ID"},
"Action":"s3:GetObject",
"Resource":"arn:aws:s3:::examplebucket/*"
}
]
}
Cuando Amazon S3 recibe una solicitud con autenticación de MFA, la clave aws:MultiFactorAuthAge
brinda un valor numérico que indica el tiempo que transcurrió (en segundos) desde que se creó la
credencial temporal. Si la credencial temporal provista en la solicitud no se creó con un dispositivo de
MFA, este valor de clave es nulo (no está presente). En una política de bucket, puede añadir una condición
para revisar este valor, como se muestra en el siguiente ejemplo de política de bucket. La política deniega
cualquier operación de Amazon S3 en la carpeta /taxdocuments del bucket examplebucket si la
solicitud no incluye una MFA. Para obtener más información acerca de la autenticación MFA, consulte Uso
de Multi-Factor Authentication (MFA) en AWS en la Guía del usuario de IAM.
{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
"Condition": { "Null": { "aws:MultiFactorAuthAge": true }}
}
]
}
La siguiente política de bucket es una extensión de la política de bucket anterior. Incluye dos instrucciones
de política. Una instrucción concede el permiso para s3:GetObject en un bucket (examplebucket)
a todas las personas y la otra instrucción restringe aún más el acceso a la carpeta examplebucket/
taxdocuments del bucket al exigir la autenticación MFA.
{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
"Condition": { "Null": { "aws:MultiFactorAuthAge": true } }
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}
Puede utilizar de forma opcional una condición numérica para limitar la duración de la validez de la clave
aws:MultiFactorAuthAge, independientemente de la duración de la credencial de seguridad temporal
que se utiliza en la autenticación de la solicitud. Por ejemplo, la siguiente política de bucket, además
de exigir la autenticación MFA, también verifica el tiempo que transcurrió desde que se creó la sesión
temporal. La política deniega cualquier operación si el valor de clave aws:MultiFactorAuthAge indica
que la sesión temporal se creó hace más de una hora (3600 segundos).
{
"Version": "2012-10-17",
"Id": "123",
"Statement": [
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
"Condition": {"Null": {"aws:MultiFactorAuthAge": true }}
},
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/taxdocuments/*",
"Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }}
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::examplebucket/*"
}
]
}
Concesión de permisos entre cuentas para cargar objetos al mismo tiempo que se
garantiza que el propietario del bucket tenga el control total
Puede permitir que otra cuenta de AWS cargue objetos en su bucket. Sin embargo, como propietario
del bucket, puede optar por tener el control total de los objetos que se cargan a su bucket. La siguiente
política establece que se le debe denegar a una cuenta de AWS específica (111111111111) la capacidad
de cargar objetos a menos que la cuenta permita el acceso de control total al propietario del bucket
que se identifica a través de la dirección de correo electrónico (xyz@amazon.com). La condición
StringNotEquals en la política especifica la clave de condición s3:x-amz-grant-full-control
para expresar el requisito (consulte Especificación de las condiciones de una política (p. 363)).
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"111",
"Effect":"Allow",
"Principal":{"AWS":"1111111111"},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::examplebucket/*"
},
{
"Sid":"112",
"Effect":"Deny",
"Principal":{"AWS":"1111111111" },
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotEquals": {"s3:x-amz-grant-full-control":["emailAddress=xyz@amazon.com"]}
}
}
]
}
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":[
{
"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"
}
}
}
]
}
Amazon VPC le permite lanzar recursos de Amazon Web Services (AWS) en una red virtual que haya
definido. Un punto de enlace de la VPC le permite crear una conexión privada entre su VPC y otro servicio
de AWS sin necesidad de acceder a través de Internet, a través de una conexión de virtual private network
(VPN, Red privada virtual), una instancia NAT o AWS Direct Connect.
Un punto de enlace de la VPC para Amazon S3 es una entidad lógica dentro de una VPC que únicamente
permite conectarse a Amazon S3. El punto de enlace de la VPC direcciona las solicitudes a Amazon S3 y
direcciona las respuestas de vuelta a la VPC. Los puntos de enlace de la VPC solo cambian la forma en
que se direccionan las solicitudes; los nombres de DNS y los puntos de enlace públicos de Amazon S3
seguirán funcionando con los puntos de enlace de la VPC. Para obtener información importante acerca de
cómo utilizar los puntos de enlace de Amazon VPC con Amazon S3, consulte Puntos de enlace de la VPC
de Gateway y Puntos de enlace para Amazon S3 en la Guía del usuario de Amazon VPC.
Los puntos de enlace de la VPC para Amazon S3 brindan dos maneras de controlar el acceso a los datos
de Amazon S3:
• Puede controlar qué solicitudes, usuarios o grupos obtienen acceso a través de un punto de enlace de la
VPC específico. Para obtener información acerca de este tipo de control de acceso, consulte Control del
acceso a los servicios con Puntos de enlace de la VPC en la Guía del usuario de Amazon VPC.
• Puede controlar que VPC o puntos de enlace de la VPC tienen acceso a sus buckets de S3 a través de
las políticas de bucket de S3. Para ver ejemplos de este tipo de control de acceso de política de bucket,
consulte los siguientes temas sobre restricción de acceso.
Temas
• Restricción del acceso a un punto de enlace de la VPC específico (p. 395)
• Restricción del acceso a una VPC específica (p. 395)
• Recursos relacionados (p. 396)
Important
Al aplicar las políticas de bucket de S3 para los puntos de conexión de la VPC que se describen
en esta sección, puede bloquear el acceso al bucket sin querer. Los permisos de bucket pensados
para limitar el acceso del bucket a las conexiones procedente de su punto de enlace de la VPC
pueden bloquear todas las conexiones al bucket. Para obtener información acerca de cómo
resolver este problema, consulte How do I regain access to an Amazon S3 bucket after applying
a policy to the bucket that restricts access to my VPC endpoint? en el Centro de conocimiento de
AWS Support.
El siguiente es un ejemplo de una política de bucket de S3 que restringe el acceso a un bucket específico,
examplebucket, solo desde el punto de conexión de la VPC con el ID vpce-1a2b3c4d. La política
deniega todo el acceso al bucket si el punto de conexión especificado no se está utilizando. La condición
aws:sourceVpce se utiliza para especificar el punto de conexión. La condición aws:sourceVpce no
requiere un nombre de recurso de Amazon (ARN, Amazon resource name) para el recurso de punto de
conexión de la VPC, solo el ID de la VPC. Para obtener más información acerca del uso de las condiciones
en una política, consulte Especificación de las condiciones de una política (p. 363).
{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}
Puede crear una política de bucket para restringir el acceso a una VPC específica con la condición
aws:sourceVpc. Esto es útil si tiene múltiples puntos de enlace de la VPC configurados en la misma
VPC y desea administrar el acceso a sus buckets de S3 para todos sus puntos de enlace. El siguiente
es el ejemplo de una política que le brinda a la VPC vpc-111bbb22 acceso a examplebucket y sus
objetos. La política deniega todo el acceso al bucket si la VPC especificada no se está utilizando. La clave
de condición vpc-111bbb22 no requiere un ARN para el recurso de VPC, solo el ID de VPC.
{
"Version": "2012-10-17",
"Id": "Policy1415115909153",
"Statement": [
{
"Sid": "Access-to-specific-VPC-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::examplebucket",
"arn:aws:s3:::examplebucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": "vpc-111bbb22"
}
}
}
]
}
Recursos relacionados
Las siguientes políticas de ejemplo funcionarán si las prueba mediante programación. Sin embargo, debe
conceder permisos adicionales que necesita la consola de Amazon S3 para utilizarlas con dicha consola.
Para obtener información acerca del uso de estas políticas con la consola de Amazon S3, consulte
Tutorial: Control del acceso a un bucket con las políticas de usuario (p. 401).
Temas
• Permiso para que el usuario de IAM tenga acceso a uno de los buckets (p. 396)
• Permiso para que cada usuario de IAM tenga acceso a una carpeta en un bucket (p. 397)
• Permiso para que un grupo tenga una carpeta compartida en Amazon S3 (p. 400)
• Permiso para que sus usuarios lean objetos en una parte del bucket corporativo (p. 400)
• Permiso para que un socio coloque archivos en una parte específica del bucket corporativo (p. 400)
• Tutorial: Control del acceso a un bucket con las políticas de usuario (p. 401)
Permiso para que el usuario de IAM tenga acceso a uno de los buckets
En este ejemplo, desea conceder acceso a uno de sus buckets, examplebucket, a un usuario de IAM en
su cuenta de AWS y permitirle que añada, actualice y elimine objetos.
{
"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/*"
}
]
}
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: Control del acceso a un bucket con las políticas
de usuario (p. 401).
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ],
"Effect": "Allow",
"Resource": [ "arn:aws:s3:::*" ]
},
{
"Sid": "AllowRootLevelListingOfTheBucket",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::examplebucket"],
"Condition":{
"StringEquals":{
"s3:prefix":[""], "s3:delimiter":["/"]
}
}
},
{
"Sid": "AllowListBucketOfASpecificUserPrefix",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::examplebucket"],
"Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] }
}
},
{
"Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix",
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::examplebucket/${aws:username}/*"
}
]
}
Note
Aunque los nombres de usuario de IAM son identificadores descriptivos fáciles, no necesariamente deben
ser identificadores globales únicos. Por ejemplo, si el usuario Bob abandona la organización y se une un
usuario con el mismo nombre (Bob), este puede tener acceso a la información del usuario anterior con el
mismo nombre. En vez de usar nombres de usuario, puede crear carpetas con los ID de usuario. Cada
ID de usuario es único. En este caso, debe modificar la política anterior para usar la variable de política
${aws:userid}. Para obtener más información acerca de los identificadores de usuarios, consulte
Identificadores de IAM en la Guía del usuario de IAM.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"
],
"Resource":"arn:aws:s3:::my_corporate_bucket/home/${aws:userid}/*"
}
]
}
Permiso para que los usuarios que no son de IAM (usuarios de aplicaciones móviles) tengan
acceso a las carpetas de un bucket
Supongamos que desea desarrollar una aplicación móvil, un juego que almacena los datos de usuario
en un bucket de S3. Debe crear una carpeta en el bucket para cada usuario de la aplicación. También
debe limitar el acceso para que cada usuario solo tenga acceso a su propia carpeta. Pero no puede
crear carpetas antes de que alguien descargue la aplicación y comience a jugar porque no tiene un ID de
usuario.
En este caso, puede solicitar a los usuarios que inicien sesión en la aplicación con los proveedores de
identidades públicos como Login with Amazon, Facebook o Google. Una vez que los usuarios iniciaron
sesión en la aplicación mediante uno de estos proveedores, tendrán un ID de usuario que usted podrá
utilizar para crear carpetas específicas de usuarios en tiempo de ejecución.
Luego, puede utilizar la identidad federada de sitio web en AWS Security Token Service para integrar la
información del proveedor de identidad con su aplicación y obtener credenciales de seguridad temporales
para cada usuario. Luego puede crear políticas de IAM para permitir que la aplicación tenga acceso a su
bucket y realice operaciones como crear carpetas específicas de usuario y cargar datos. Para obtener más
información acerca de la identidad federada de sitio web, consulte Acerca de identidades web federadas
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/share/marketing/*"
}
]
}
Permiso para que sus usuarios lean objetos en una parte del bucket corporativo
En este ejemplo, crea un grupo denominado AllUsers, que contiene todos los usuarios de IAM que
pertenecen a la cuenta de AWS. A continuación asocia una política que concede al grupo el acceso a
GetObject y GetObjectVersion, pero solo para objetos en la carpeta my_corporate_bucket/
readonly.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource":"arn:aws:s3:::my_corporate_bucket/readonly/*"
}
]
}
Permiso para que un socio coloque archivos en una parte específica del bucket
corporativo
En este ejemplo, crea un grupo llamado WidgetCo que representa a una compañía asociada. Crea un
usuario de IAM para la persona o aplicación específica en la compañía asociada que necesita acceso y,
luego, coloca al usuario en el grupo.
Luego, asocia una política que concede al grupo PutObject acceso a la siguiente carpeta en el bucket
corporativo: my_corporate_bucket/uploads/widgetco.
Como quiere evitar que el grupo WidgetCo realice cualquier otro tipo de acción en el bucket, añade
una instrucción que deniega explícitamente el permiso para cualquier permiso de Amazon S3, excepto
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/*"
}
]
}
Temas
• Conceptos básicos de buckets y carpetas (p. 401)
• Resumen de tutorial (p. 403)
• Prepárese para el tutorial (p. 404)
• Paso 1: cree un bucket (p. 404)
• Paso 2: cree usuarios y un grupo de IAM (p. 405)
• Paso 3: compruebe que los usuarios de IAM no tengan permisos (p. 405)
• Paso 4: otorgue permisos en el nivel de grupo (p. 406)
• Paso 5: otorgue permisos específicos al usuario Alice de IAM (p. 412)
• Paso 6: otorgue permisos específicos al usuario Bob de IAM (p. 416)
• Paso 7: proteja la carpeta Private (p. 416)
• Paso 8: eliminación (p. 418)
• Recursos relacionados (p. 418)
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.
Cuando la consola muestra la carpeta Development del bucket companybucket, envía una solicitud a
Amazon S3 en la que especifica el prefijo Development y el delimitador /. La respuesta de la consola
se parece a una lista de carpetas del sistema de archivos de su equipo. En el ejemplo anterior se
muestra que el bucket companybucket tiene un objeto con la clave Development/Projects1.xls.
La consola utiliza las claves del objeto para inferir una jerarquía lógica. Amazon S3 no tiene una jerarquía
física, solo buckets que contienen objetos en una estructura plana de archivos. Cuando crea objetos con
la API de Amazon S3, puede utilizar las claves del objeto que implican una jerarquía lógica. Al crear una
jerarquía lógica de objetos, puede administrar el acceso a carpetas individuales, tal y como se explica en
este tutorial.
Antes de comenzar, asegúrese de estar familiarizado con el concepto del contenido del bucket en el nivel
raíz. Supongamos que el bucket companybucket tiene los siguientes objetos:
• Private/privDoc1.txt
• Private/privDoc2.zip
• Development/project1.xls
• Development/project2.xls
• Finance/Tax2011/document1.pdf
• Finance/Tax2011/document2.pdf
• s3-dg.pdf
Estas claves de objeto crean una jerarquía lógica con Private, Development y Finance como carpetas
en el nivel raíz y s3-dg.pdf como un objeto en el nivel raíz. Cuando elige el nombre del bucket en la
consola de Amazon S3, los elementos en el nivel raíz aparecen tal y como se muestran en la siguiente
imagen. La consola muestra los prefijos de nivel principal (Private/, Development/ y Finance/) como
carpetas en el nivel raíz. La clave del objeto s3-dg.pdf no tiene prefijo y, por lo tanto, aparece como un
elemento en el nivel raíz.
Resumen de tutorial
En este tutorial, creará un bucket con tres carpetas: (Private, Development y Finance).
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.
Para iniciar sesión en la Consola de administración de AWS con las credenciales de su cuenta de AWS,
consulte https://console.aws.amazon.com/. Un usuario de IAM no puede iniciar sesión con el mismo
enlace. Un usuario de IAM debe utilizar una página de inicio de sesión habilitada para IAM. Como
propietario de la cuenta, puede proporcionar este enlace a los usuarios.
Para obtener más información acerca de IAM, consulte La página de inicio de sesión de Consola de
administración de AWS en la Guía del usuario de IAM.
Para 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
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
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.
Si utiliza dos navegadores, ahora puede utilizar el segundo navegador para iniciar sesión en la consola con
una de las credenciales de usuario de IAM.
1. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de inicio
de sesión para usuarios de IAM (p. 404)), inicie sesión en la Consola de administración de AWS con
cualquiera de las credenciales de usuario de IAM.
2. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.
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.
• 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.
En este paso, creará una política administrada que conceda a los usuarios los permisos mínimos para
que puedan mostrar todos los buckets que pertenecen a la cuenta principal y, a continuación, asociará la
política al grupo Consultants. Al asociar la política administrada a un usuario o grupo, permite al usuario
o grupo obtener una lista de buckets que pertenecen a la cuenta principal de AWS.
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.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": ["s3:ListAllMyBuckets"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::*"]
}
]
}
Para obtener instrucciones paso a paso acerca de cómo asociar una política administrada, consulte
Adición y eliminación de permisos de identidad de IAM en la Guía del usuario de IAM.
Asocie los documentos de la política a los usuarios y grupos de IAM en la consola de IAM. Asocie la
política al grupo porque quiere que ambos usuarios puedan mostrar los buckets.
4. Pruebe el permiso.
a. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de
inicio de sesión para usuarios de IAM (p. 404)), inicie sesión en la consola con cualquiera de las
credenciales del usuario de IAM.
b. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.
Ahora, la consola debería mostrar todos los buckets pero no los objetos que ellos contienen.
Paso 4.2: permita a los usuarios mostrar el contenido de un bucket en el nivel raíz
A continuación, permita a todos los usuarios del grupo Consultants mostrar los elementos del bucket
companybucket en el nivel raíz. Cuando un usuario elija el bucket de la empresa en la consola de
Amazon S3, podrá ver los elementos del bucket en el nivel raíz.
Note
En este ejemplo se utiliza companybucket a título ilustrativo. Debe utilizar el nombre del bucket
que creó.
Es necesario realizar un análisis de forma más detenida para comprender qué solicitud envía la consola a
Amazon S3 cuando selecciona el nombre de un bucket, la respuesta que devuelve Amazon S3 y la forma
en que la consola interpreta la respuesta.
Al elegir el nombre de un bucket, la consola envía la solicitud GET Bucket (List Objects) a Amazon S3.
Esta solicitud incluye los siguientes parámetros:
<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.
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:
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>
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
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":["/"]
}
}
}
]
}
a. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de
inicio de sesión para usuarios de IAM (p. 404)), inicie sesión en la Consola de administración de
AWS.
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.
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:
Sin embargo, los usuarios aún no pueden hacer demasiado. A continuación, conceda permisos específicos
del usuario de la siguiente manera:
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.
Ahora debe conceder permisos adicionales a Alice para que pueda ver el contenido de la carpeta
Development y obtener y colocar objetos en esa carpeta.
Paso 5.1: otorgue permiso al usuario Alice de IAM para mostrar el contenido de la carpeta
Development
Para que Alice pueda mostrar el contenido de la carpeta Development, debe aplicar una política
al usuario Alice que le conceda permiso para ejecutar la acción s3:ListBucket en el bucket
companybucket, siempre que la solicitud incluya el prefijo Development/. Utilice una política insertada,
ya que quiere que esta política se aplique únicamente al usuario Alice. Para obtener más información
sobre las políticas insertadas, consulte Políticas administradas y políticas insertadas en la Guía del usuario
de 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.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action": ["s3:ListBucket"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringLike":{"s3:prefix":["Development/*"] }
}
}
]
}
f. Elija Review Policy (Revisar la política). En la página siguiente, introduzca un nombre en el campo
Name (Nombre) y, a continuación, elija Create policy (Crear política).
3. Pruebe el cambio en los permisos de Alice:
a. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de
inicio de sesión para usuarios de IAM (p. 404)), inicie sesión en la Consola de administración de
AWS.
b. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.
c. En la consola de Amazon S3, compruebe que Alice pueda ver la lista de objetos en la carpeta
Development/ del bucket.
Cuando el usuario selecciona la carpeta /Development para ver la lista de objetos que
contiene, la consola de Amazon S3 envía la solicitud ListObjects a Amazon S3 con el prefijo
/Development. Debido a que se le ha concedido permiso al usuario para ver la lista de objetos
con el prefijo Development y el delimitador /, Amazon S3 devuelve la lista de objetos con el
prefijo de clave Development/ y la consola muestra la lista.
Paso 5.2: otorgue permisos al usuario Alice de IAM para obtener y colocar objetos en la carpeta
Development
Para que Alice pueda obtener y colocar objetos en la carpeta Development, necesitará permiso para
ejecutar las acciones s3:GetObject y s3:PutObject. Las siguientes instrucciones de política conceden
estos permisos, siempre que la solicitud incluya el parámetro prefix con un valor de Development/.
{
"Sid":"AllowUserToReadWriteObjectData",
"Action":["s3:GetObject", "s3:PutObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket/Development/*"]
}
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.
{
"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/*"]
}
]
}
a. Con el enlace de inicio de sesión del usuario de IAM (consulte Para proporcionar un enlace de
inicio de sesión para usuarios de IAM (p. 404)), inicie sesión en la Consola de administración de
AWS.
b. Abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.
c. En la consola de Amazon S3, compruebe que Alice pueda añadir y descargar un objeto en la
carpeta Development.
Paso 5.3: deniegue permisos de forma explícita al usuario Alice de IAM para que no obtenga
acceso a ninguna otra carpeta del bucket
El usuario Alice ahora puede mostrar el contenido del bucket companybucket en el nivel raíz. También
puede obtener y colocar objetos en la carpeta Development. Si realmente desea ajustar los permisos de
acceso, puede denegar de forma explícita el acceso a Alice a cualquier otra carpeta del bucket. Si existe
alguna otra política (política de bucket o ACL) que conceda acceso a Alice a otra carpeta del bucket, esta
denegación explícita anula estos permisos.
Puede añadir la siguiente instrucción a la política del usuario Alice que requiere que todas las solicitudes
que Alice envía a Amazon S3 incluyan el parámetro prefix, cuyo valor puede ser Development/* o una
cadena vacía.
{
"Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] },
"Null" : {"s3:prefix":false }
}
}
• 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
elementos del bucket en el nivel raíz como lo hizo la consola en la explicación anterior. Para obtener
más información, consulte Paso 4.2: permita a los usuarios mostrar el contenido de un bucket en el nivel
raíz (p. 407).
• La expresión condicional StringNotLike asegura que la solicitud falle, si se especifica el valor del
parámetro prefix y no el parámetro Development/*.
Siga los pasos de la sección anterior y vuelva a actualizar la política insertada que creó para el usuario
Alice.
Copie la siguiente política y péguela en el campo de texto de la política para sustituir la política existente.
{
"Version": "2012-10-17",
"Statement":[
{
"Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action":["s3:ListBucket"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket"],
"Condition":{
"StringLike":{"s3:prefix":["Development/*"]
}
}
},
{
"Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder",
"Action":["s3:GetObject", "s3:PutObject"],
"Effect":"Allow",
"Resource":["arn:aws:s3:::companybucket/Development/*"]
},
{
"Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::companybucket"],
"Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] },
"Null" : {"s3:prefix":false }
}
}
]
}
Para asegurarse de que la carpeta Private sea privada, puede añadir estas dos instrucciones de
denegación a la política de grupo:
• 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.
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":[""]}
}
},
{
"Sid": "RequireFolderStyleList",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringNotEquals":{"s3:delimiter":"/"}
}
},
{
"Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
"Action": ["s3:*"],
"Effect": "Deny",
"Resource":["arn:aws:s3:::companybucket/Private/*"]
},
{
"Sid": "DenyListBucketOnPrivateFolder",
"Action": ["s3:ListBucket"],
"Effect": "Deny",
"Resource": ["arn:aws:s3:::*"],
"Condition":{
"StringLike":{"s3:prefix":["Private/"]}
}
}
]
}
Paso 8: eliminación
Para realizar una limpieza, abra la consola de IAM y elimine los usuarios Alice y Bob. Para obtener
instrucciones paso a paso, consulte Eliminación de un usuario de IAM en la Guía del usuario de IAM.
Para asegurarse de que no le apliquen cargos adicionales por almacenamiento, debe eliminar los objetos y
el bucket que creó para este ejercicio.
Recursos relacionados
Las listas de control de acceso (ACL) son una de las opciones de política de acceso basada en recursos
(consulte Información general sobre la administración de acceso (p. 313)) que puede utilizar para
administrar el acceso a sus buckets y objetos. Puede utilizar las ACL para otorgar permisos de lectura/
escritura básicos a otras cuentas de AWS. Hay límites en la administración de permisos con ACL. Por
ejemplo, puede otorgar permisos solo a otras cuentas de AWS; no puede otorgar permisos a usuarios en
su cuenta. No puede otorgar permisos condicionales ni tampoco puede denegar permisos explícitamente.
Las ACL son adecuadas para situaciones específicas. Por ejemplo, si el propietario de un bucket
les permite a otras cuentas de AWS cargar objetos, los permisos para estos objetos solo se pueden
administrar con una ACL de objeto de la cuenta de AWS que es propietaria del objeto.
Los siguientes temas introductorios explican los conceptos básicos y las opciones disponibles para
administrar el acceso a sus recursos de Amazon S3 y ofrecen directrices sobre qué opciones de política de
acceso debe utilizar y cuándo.
• Introducción a la administración de permisos de acceso para los recursos de Amazon S3 (p. 312)
• Directrices de uso de las opciones de política de acceso disponibles (p. 324)
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
La ACL de muestra incluye un elemento Owner que identifica al propietario a través del ID de usuario
canónico de la cuenta de AWS. Para obtener instrucciones acerca de cómo buscar su identificador de
usuario canónico, consulte Búsqueda del ID de usuario canónico de una cuenta de AWS (p. 420). El
elemento Grant identifica al beneficiario (ya sea una cuenta de AWS o un grupo predefinido) y el permiso
otorgado. Esta ACL predeterminada tiene un elemento Grant para el propietario. Usted otorga permisos al
añadir elementos Grant, con cada concesión identifica al beneficiario y al permiso.
Note
¿Quién es un beneficiario?
Un beneficiario puede ser una cuenta de AWS o uno de los grupos de Amazon S3 predefinidos. Puede
conceder permiso a una cuenta de AWS mediante la dirección de correo electrónico o del ID de usuario
canónico. Sin embargo, si proporciona una dirección de correo electrónico en su solicitud de concesión,
Amazon S3 detecta el ID de usuario canónico para esa cuenta y lo añade a la ACL. Las ACL resultantes
siempre incluye el ID de usuario canónico para la cuenta de AWS, no la dirección de correo electrónico de
la cuenta de AWS.
Important
Solo las siguientes regiones de AWS permiten utilizar direcciones de correo electrónico para
especificar un beneficiario de una concesión:
Para ver una lista de todas las regiones y puntos de enlace admitidos en Amazon S3, consulte
Regiones y puntos de enlace en la Referencia general de AWS.
Warning
Cuando les otorga a otras cuentas de AWS acceso a sus recursos, asegúrese de que las cuentas
de AWS puedan delegar sus permisos a usuarios de sus cuentas. Esto se conoce como acceso
entre cuentas. Para obtener información acerca del uso del acceso entre cuentas, consulte
Creación de un rol para delegar permisos a un usuario de IAM en la Guía del usuario de IAM.
El ID de usuario canónico está asociado a su cuenta de AWS. Es una cadena larga, como
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be. Para obtener
información acerca de cómo encontrar el ID de usuario canónico de su cuenta, consulte Buscar el ID de
usuario canónico de su cuenta.
También puede buscar el ID de usuario canónico de una cuenta de AWS mediante la lectura de la ACL
de un bucket o un objeto para la cual la cuenta de AWS tiene permisos de acceso. Cuando una cuenta de
AWS individual recibe permisos mediante una solicitud de concesión, se añade una entrada de concesión
a la ACL con el ID de usuario canónico de la cuenta de AWS.
Note
Si hace su bucket público (no se recomienda) cualquier usuario sin autenticar puede cargar
objetos al bucket. Estos usuarios anónimos no tienen una cuenta de AWS. Cuando un usuario
anónimo carga un objeto en su bucket Amazon S3 agrega un ID de usuario canónico especial
(65a011a29cdf8ec533ec3d1ccaae921c) como propietario del objeto en la ACL. Para obtener
más información, consulte Propiedad de los buckets y objetos de Amazon S3 (p. 313).
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:
Este grupo representa todas las cuentas de AWS. El permiso de acceso a este grupo permite que
cualquier cuenta de AWS pueda acceder al recurso. Sin embargo, todas las solicitudes deben estar
firmadas (autenticadas).
Warning
Al conceder acceso al Grupo Usuarios autenticados cualquier usuario autenticado de AWS en
el mundo puede acceder a su recurso.
• Grupo Todos los usuarios: representado por http://acs.amazonaws.com/groups/global/
AllUsers.
El permiso de acceso a este grupo permite que cualquier persona en el mundo tenga acceso al recurso.
Las solicitudes pueden estar firmadas (autenticadas) o pueden no incluir una firma (anónimas). Las
solicitudes sin firmar omiten el encabezado de autenticación en la solicitud.
Warning
Recomendamos encarecidamente que no conceda nunca los permisos WRITE, WRITE_ACP
o FULL_CONTROL al grupo Todos los usuarios. Por ejemplo, los permisos WRITE permiten a
cualquier persona almacenar objetos en su bucket y usted tendrá que asumir los costos. Esto
también permite a otras personas eliminar objetos que quizás desee conservar. Para obtener
más información sobre estos permisos, consulte la sección siguiente ¿Qué permisos puedo
conceder? (p. 421).
• Grupo Envío de archivos de registro: representado por http://acs.amazonaws.com/groups/s3/
LogDelivery.
El permiso de escritura (WRITE) en un bucket le permite a este grupo escribir registros de acceso al
servidor (consulte Registro de acceso al servidor de Amazon S3 (p. 674)) en el bucket.
Note
Cuando utiliza ACL, el beneficiario puede ser una cuenta de AWS o uno de los grupos de Amazon
S3 predefinidos. Sin embargo, el beneficiario no puede ser un usuario de IAM. Para obtener más
información acerca de los usuarios y los permisos de AWS en IAM, consulte Utilización de AWS
Identity and Access Management.
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
Warning
Extreme las precauciones a la hora de conceder permisos de acceso a sus objetos y buckets
de S3. Por ejemplo, la concesión de acceso WRITE a un bucket permite al beneficiario crear,
sobrescribir y eliminar cualquier objeto en el bucket. Se recomienda encarecidamente que lea
toda esta sección Información general de las Access Control Lists (ACL, Listas de control de
acceso) (p. 419) antes de conceder permisos.
Como se muestra en la tabla anterior, una ACL permite solo un conjunto limitado de permisos, en
comparación con el número de permisos que puede configurar en una política de acceso (consulte
Especificación de permisos en una política (p. 357)). Cada uno de estos permisos permite una o más
operaciones de Amazon S3.
La siguiente tabla muestra cómo cada permiso de ACL se asigna a los permisos de política de acceso
correspondientes. Como puede ver, la política de acceso permite más permisos que ACL. ACL se utiliza
principalmente para conceder permisos básicos de lectura/escritura, similar a los permisos del sistema de
archivos. Para obtener más información acerca de cuándo utilizar la ACL, consulte Directrices de uso de
las opciones de política de acceso disponibles (p. 324).
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
<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 predefinidas, conocidas como ACL predefinidas. Cada
ACL predefinida tiene un conjunto predefinido de beneficiarios y permisos. En la siguiente tabla se muestra
el conjunto de ACL predefinidas y las concesiones predefinidas asociadas.
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.
Note
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.
• Configuración de ACL con encabezados de solicitud: cuando envía una solicitud para crear un recurso
(bucket u objeto), usted configura una ACL con los encabezados de solicitud. Con estos encabezados,
usted puede especificar una ACL predefinida o especificar concesiones de forma explícita (identificación
explícita del beneficiario y los permisos).
• Configuración de ACL con cuerpo de solicitud: cuando envía una solicitud para configurar una ACL en un
recurso existente, puede configurar la ACL en el encabezado de solicitud o en el cuerpo.
Para obtener más información, consulte Administración de las ACL (p. 425).
Existen varias formas de añadir concesiones a su ACL de recursos. Puede utilizar la Consola de
administración de AWS, que brinda una UI para administrar permisos sin escribir ningún código. Puede
utilizar la API de REST o uno de los SDK de AWS. Estas bibliotecas simplifican aún más sus tareas de
programación.
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;
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);
// 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();
}
}
}
Example
En este ejemplo se actualiza la ACL en un objeto. En el ejemplo se realizan las siguientes tareas:
• Añadir dos permisos: acceso completo para el propietario y WRITE_ACP (consulte ¿Qué permisos
puedo conceder? (p. 421)) para un usuario identificado por una dirección de correo electrónico
• Guardar la ACL en el objeto
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AccessControlList;
import com.amazonaws.services.s3.model.CanonicalGrantee;
import com.amazonaws.services.s3.model.EmailAddressGrantee;
import com.amazonaws.services.s3.model.Permission;
import java.io.IOException;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
// 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);
Ejemplo 1: Creación de un bucket y uso de una ACL predefinida para configurar permisos
Este ejemplo de código C# crea un bucket. En la solicitud, el código también especifica una ACL
predefinida que concede permisos al grupo Envío de archivos de registro para escribir registros en el
bucket.
Para obtener instrucciones sobre la creación y comprobación de un ejemplo funcional, consulte Ejecución
de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ManagingBucketACLTest
{
private const string newBucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
En este ejemplo de código C# se actualiza la ACL en un objeto existente. En el ejemplo se realizan las
siguientes tareas:
Para obtener instrucciones sobre la creación y comprobación de un ejemplo funcional, consulte Ejecución
de ejemplos de código .NET de Amazon S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ManagingObjectACLTest
{
private const string bucketName = "*** bucket name ***";
private const string keyName = "*** object key name ***";
private const string emailAddress = "*** email address ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
public static void Main()
{
client = new AmazonS3Client(bucketRegion);
TestObjectACLTestAsync().Wait();
}
private static async Task TestObjectACLTestAsync()
{
try
{
// Retrieve the ACL for the object.
GetACLResponse aclResponse = await client.GetACLAsync(new GetACLRequest
{
BucketName = bucketName,
Key = keyName
});
// Retrieve the owner (we use this to re-add permissions after we clear
the ACL).
Owner owner = acl.Owner;
// 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
};
nuevos no permiten acceso público, pero los usuarios pueden modificar políticas de bucket o permisos
de objetos para permitir el acceso público. La configuración de Amazon S3 Block Public Access anula
estas políticas y permisos para poder limitar el acceso público a estos recursos. Con Amazon S3 Block
Public Access, los administradores de cuentas y los propietarios de buckets pueden configurar fácilmente
controles centralizados para limitar el acceso público a sus recursos de Amazon S3 que se aplican
independientemente de cómo se crean los recursos.
Cuando Amazon S3 recibe una solicitud para acceder a un bucket o a un objeto, determina si el bucket
o la cuenta del propietario del bucket tiene aplicada una configuración de Block Public Access. Si hay
una configuración de Block Public Access que prohíbe el acceso solicitado, Amazon S3 rechaza la
solicitud. Amazon S3 Block Public Access proporciona cuatro configuraciones. Estas configuraciones son
independientes y se pueden usar en cualquier combinación. Además, cada configuración puede aplicarse
a un bucket o a toda una cuenta de AWS. Si un bucket tiene configuraciones de Block Public Access
diferentes de las de la cuenta de su propietario, Amazon S3 aplica la combinación más restrictiva de la
configuración de nivel de cuenta y de nivel de bucket. Cuando Amazon S3 evalúa si una configuración de
Block Public Access prohíbe una operación, rechaza cualquier solicitud que infringiría una configuración de
nivel de cuenta o de nivel de bucket.
Note
• Puede habilitar configuraciones de Block Public Access solo para buckets y cuentas de AWS.
Amazon S3 no admite configuraciones de Block Public Access por objeto.
• Cuando aplica la configuración de Block Public Access a una cuenta, la configuración se aplica
globalmente a todas las regiones de AWS. La configuración podría no entrar en vigor en todas
las regiones de manera inmediata o simultánea, pero acabará propagándose a todas las
regiones.
Temas
• Habilitación de Block Public Access en la consola de Amazon S3 (p. 431)
• Configuración de Block Public Access (p. 432)
• Qué significa "pública" (p. 433)
• Permisos (p. 435)
• Ejemplos (p. 436)
Nombre Descripción
• 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.
Nombre Descripción
IgnorePublicAcls Al configurar esta opción en TRUE provoca que Amazon S3 ignore todas las ACL
públicas en un bucket y cualquier objeto que contenga. Esta configuración le
permite bloquear de manera segura el acceso público concedido por las ACL al
tiempo que permite llamadas a PUT Object que incluyen una ACL pública (frente
a la BlockPublicAcls que rechaza llamadas a PUT Object que incluyen una
ACL pública). La habilitación de esta configuración no afecta a la persistencia de
ninguna ACL existente y no evita el establecimiento de ACL públicas nuevas.
BlockPublicPolicy Configurar esta opción en TRUE hace que Amazon S3 rechace llamadas a la
política de buckets de PUT si la política de buckets especificada permite el
acceso público. Esta configuración le permite permitir a los usuarios administrar
políticas de bucket sin permitirles compartir públicamente el bucket o los objetos
que contiene. La habilitación de esta configuración no afecta a las políticas de
bucket existentes.
Important
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.
Amazon S3 considera que una ACL de objetos o buckets es pública si concede cualquier permiso
a los miembros de los grupos AllUsers o AuthenticatedUsers definidos previamente. Para
obtener más información acerca de los grupos predefinidos, consulte Grupos predefinidos de Amazon
S3 (p. 420).
Políticas
Al evaluar una política de bucket, Amazon S3 comienza suponiendo que la política es pública. A
continuación, evalúa la política para determinar si califica como no pública. Para que se considere no
pública, una política de bucket debe conceder acceso solo a valores fijos (valores que no contienen un
comodín) de uno o más de los siguientes:
• Un conjunto de Classless Inter-Domain Routings (CIDR), mediante aws:SourceIp. Para obtener
más información sobre CIDR, consulte RFC 4632 en la página web de RFC EditoR.
• Una entidad principal de AWS, un usuario, un rol o una entidad principal de servicio (por ejemplo,
aws:PrincipalOrgID)
• aws:SourceArn
• aws:SourceVpc
• aws:SourceVpce
• aws:SourceOwner
• aws:SourceAccount
• s3:x-amz-server-side-encryption-aws-kms-key-id
• aws:userid, fuera del patrón "AROLEID:*"
Bajo estas reglas, las siguientes políticas de ejemplo se consideran públicas:
{
"Principal": { "Federated": "graph.facebook.com" },
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow"
}
{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow"
}
{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow",
"Condition": { "StringLike": {"aws:SourceVpc": "vpc-*"}}
}
Puede convertir estas políticas en no públicas incluyendo cualquiera de las claves de condición
indicadas con anterioridad, utilizando un valor fijo. Por ejemplo, puede convertir la última política de
arriba en no pública estableciendo aws:SourceVpc en un valor fijo, de esta manera:
{
"Principal": "*",
"Resource": "*",
"Action": "s3:PutObject",
"Effect": "Allow",
"Condition": {"StringEquals":
Versión{"aws:SourceVpc":
de API 2006-03-01 "vpc-91237329"}}
434
Amazon Simple Storage Service Guía del desarrollador
Bloqueo de acceso público
Para obtener más información acerca de las políticas de bucket, consulte Uso de políticas de bucket y
usuario (p. 353).
Ejemplo
Este ejemplo muestra cómo evalúa Amazon S3 una política que contiene concesiones de acceso público y
no público.
Imagine que un bucket tiene una política que concede acceso a un conjunto de entidades principales
fijas. Bajo las reglas descritas con anterioridad, esta política no es pública. Por tanto, si habilita la
configuración RestrictPublicBuckets, la política permanece en efecto tal y como está redactada,
porque RestrictPublicBuckets solo se aplica a buckets que tienen políticas públicas. Sin embargo,
si añade una instrucción pública a la política, RestrictPublicBuckets surtirá efecto en el bucket.
Solo permite a las entidades principales del servicio de AWS y a los usuarios autorizados de la cuenta del
propietario del bucket tener acceso al bucket.
Suponga, por ejemplo, que un bucket propiedad de "Cuenta-1 tiene una política que contiene lo siguiente:
1. Una instrucción que concede acceso a AWS CloudTrail (que es una entidad principal de servicio de
AWS)
2. Una instrucción que concede acceso a la cuenta "Cuenta-2"
3. Una instrucción que concede acceso al público, especificando, por ejemplo, "Principal": "*" sin
Condition limitante
Esta política califica como pública debido a la tercera instrucción. Con esta política en vigor y
RestrictPublicBuckets habilitado, Amazon S3 solo permite obtener acceso a CloudTrail. Aunque la
instrucción 2 no es pública, Amazon S3 inhabilita el acceso por parte de "Cuenta-2". Esto se debe a que
la instrucción 3 convierte en pública a toda la política, por lo que se aplica RestrictPublicBuckets.
Como consecuencia, Amazon S3 deshabilita el acceso entre cuentas, aunque la política delega el acceso
a una cuenta específica, "Cuenta-2". Pero si elimina la instrucción 3 de la política, la política no califica
como pública y RestrictPublicBuckets ya no es aplicable. Así, "Cuenta-2" recupera el acceso al
bucket, aunque deje RestrictPublicBuckets habilitado.
Permisos
Para usar características de Amazon S3 Block Public Access, debe contar con los siguientes permisos:
Note
Las operaciones DELETE necesitan los mismos permisos que las operaciones PUT. NO hay
permisos separados para las operaciones DELETE.
Ejemplos
Uso de Block Public Access con la AWS CLI
Para ello, puede usar Amazon S3 Block Public Access a través de la AWS CLI. El comando utilizado
depende de si quiere realizar una llamada Block Public Access en un bucket o en una cuenta. Para obtener
más información acerca de cómo configurar y usar la AWS CLI, consulte ¿Qué es la AWS Command Line
Interface?
Bucket
Para realizar operaciones de Block Public Access en un bucket, use el servicio de la AWS CLI s3api.
Estas son las operaciones de nivel de bucket que utilizan este servicio:
• PUT PublicAccessBlock (para un bucket)
• GET PublicAccessBlock (para un bucket)
• DELETE PublicAccessBlock (para un bucket)
• GET BucketPolicyStatus
Cuenta
Para realizar operaciones de Block Public Access en una cuenta, use el servicio de la AWS CLI
s3control. Estas son las operaciones de nivel de cuenta que utilizan este servicio:
• PUT PublicAccessBlock (para una cuenta)
• GET PublicAccessBlock (para una cuenta)
• DELETE PublicAccessBlock (para una cuenta)
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.
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.
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.
Con las alarmas de Amazon CloudWatch, puede ver una métrica determinada durante el periodo
especificado. Si la métrica supera un umbral determinado, se envía una notificación a un tema de
Amazon SNS o política de AWS Auto Scaling. Las alarmas de CloudWatch no invocan acciones
por tener un estado determinado. En su lugar, el estado debe haber cambiado y debe mantenerse
durante el número de periodos especificado. Para obtener más información, consulte Monitorización
de métricas con Amazon CloudWatch (p. 636).
Registros de AWS CloudTrail
CloudTrail proporciona un registro de las medidas adoptadas por un usuario, un rol o un servicio
de AWS en Amazon S3. Mediante la información que recopila CloudTrail, se puede determinar la
solicitud que se envió a Amazon S3, la dirección IP desde la que se realizó la solicitud, quién realizó la
solicitud, cuándo la realizó y detalles adicionales. Para obtener más información, consulte Registro de
llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 647).
Registros de acceso de Amazon S3
Los registros de acceso del servidor proporcionan registros detallados sobre las solicitudes que se
realizan a un bucket. Los registros de acceso al servidor resultan útiles para muchas aplicaciones. Por
ejemplo, la información del registro de acceso puede ser útil en auditorías de acceso y seguridad. Para
obtener más información, consulte Registro de acceso al servidor de Amazon S3 (p. 674).
AWS Trusted Advisor
Trusted Advisor aprovecha las prácticas recomendadas aprendidas al atender a cientos de miles de
clientes de AWS. Trusted Advisor inspecciona su entorno de AWS y realiza recomendaciones cuando
surge la oportunidad de ahorrar dinero, mejorar el rendimiento y la disponibilidad del sistema o ayudar
a cerrar deficiencias de seguridad. Todos los clientes de AWS tienen acceso a cinco comprobaciones
de Trusted Advisor. Los clientes con un plan de soporte Business o Enterprise pueden ver todas las
comprobaciones de Trusted Advisor.
Trusted Advisor cuenta con las siguientes comprobaciones relacionadas con Amazon S3:
• Configuración de registro de los buckets de Amazon S3.
• Comprobaciones de seguridad de los buckets de Amazon S3 que tienen permisos de acceso
abierto.
• Comprobaciones de la tolerancia a errores de los buckets de Amazon S3 que no tienen activado el
control de versiones, o que lo tienen suspendido.
Para obtener más información, consulte AWS Trusted Advisor en la Guía del usuario de AWS Support.
Las siguientes prácticas recomendadas sobre seguridad también evalúan el registro y la monitorización:
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.
• En las Guías de inicio rápido de seguridad y conformidad se incluyen consideraciones sobre arquitectura
y se ofrecen pasos para implementar los entornos de referencia centrados en la seguridad y la
conformidad en AWS.
• En el documento técnico Diseño de arquitecturas para la conformidad y la seguridad de HIPAA se
describe cómo las empresas utilizan AWS para poder cumplir los requisitos de HIPAA.
• Losrecursos de conformidad de AWS incluyen diferentes cuadernos de trabajo y guías que se pueden
aplicar a su sector y ubicación.
• AWS Config puede ayudarlo a evaluar en qué medida las configuraciones de los recursos cumplen las
prácticas internas, las directrices del sector y las normativas.
• AWS Security Hub ofrece una vista integral de su estado de seguridad en AWS que lo ayuda a
comprobar la conformidad con las normas del sector de seguridad y las prácticas recomendadas.
• Bloqueo de objetos de Amazon S3 puede ayudarle a cumplir con los requisitos técnicos de los
reguladores de servicios financieros (como SEC, FINRA y CFTC) que requieren un almacenamiento de
datos de una escritura y muchas lecturas (WORM) para determinados tipos de libros e información de
registros.
• Inventario de Amazon S3 (p. 439) puede ayudarle a auditar e informar sobre el estado de replicación y
cifrado de los objetos para sus necesidades empresariales, de conformidad y legales.
Inventario de Amazon S3
El inventario de Amazon S3 es una de las herramientas que facilita Amazon S3 para ayudarle a administrar
su almacenamiento. Puede utilizarlo para auditar e informar sobre el estado de replicación y cifrado de los
objetos para sus necesidades empresariales, de conformidad y legales. Puede simplificar o acelerar los
flujos de trabajo empresariales y los trabajos relacionados con big data mediante el inventario de Amazon
S3, que facilita una alternativa programada a la operación de la API alternativa sincrónica List de Amazon
S3.
El inventario de Amazon S3 proporciona archivos de salida con formato de valores separados por comas
(CSV), Apache optimized row columnar (ORC) o Apache Parquet (Parquet) que muestran diaria o
semanalmente los objetos y los metadatos correspondientes en un bucket de S3 o un prefijo compartido
(objetos con nombres que comienzan con la misma cadena). Para obtener información acerca de los
precios del inventario de Amazon S3, consulte Precios de Amazon S3.
Puede configurar varias listas de inventario para un bucket. Puede configurar qué metadatos de objeto
incluir en el inventario, si enumerar todas las versiones de un objeto o solo las actualizadas, si almacenar
el resultado del archivo con la lista de inventario y si generar el inventario con una frecuencia diaria o
semanal. También puede especificar que el archivo con la lista de inventario esté cifrado.
Puede consultar el inventario de Amazon S3 mediante SQL estándar utilizando Amazon Athena, Amazon
Redshift Spectrum y otras herramientas como, por ejemplo, Presto, Apache Hive y Apache Spark. Es muy
fácil utilizar Athena para ejecutar consultas en sus archivos de inventario. Puede utilizar Athena para las
consultas del inventario de Amazon S3 en todas las regiones donde Athena está disponible.
Temas
• ¿Cómo configuro el inventario de Amazon S3? (p. 440)
• ¿Qué incluye un inventario de Amazon S3? (p. 442)
• ¿Dónde se encuentran las listas de inventario? (p. 444)
• ¿Cómo sé cuándo está completo un inventario? (p. 446)
• Consultas de inventario con Amazon Athena (p. 447)
• API de REST del inventario de Amazon S3 (p. 448)
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:
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:
Debe crear una política de bucket en el bucket de destino para conceder permisos para que Amazon
S3 escriba objetos en el bucket, en la ubicación definida. Para ver una política de ejemplo, consulte
Concesión de permisos para el inventario de Amazon S3 y el análisis de Amazon S3 (p. 393).
2. Configure un inventario para enumerar los objetos de un bucket de origen y publicar la lista en un bucket
de destino.
Al configurar una lista de inventario para un bucket de origen, debe especificar el bucket de destino en el
que quiera que se almacene la lista, y si desea generar la lista cada día o cada semana. También puede
configurar qué metadatos de objetos ha de incluir, y si enumerar todas las versiones de objetos o solo
las versiones actuales.
Puede especificar que el archivo con la lista de inventario se cifre mediante claves administradas por
Amazon S3 (SSE-S3) o claves almacenadas en AWS KMS (SSE-KMS). Para obtener más información
sobre SSE-S3 y SSE-KMS, consulte Protección de datos con el cifrado del lado del servidor (p. 275).
Si va a utilizar el cifrado SSE-KMS, consulte el paso 3.
• Para obtener información sobre cómo utilizar la consola para configurar una lista de inventario,
consulte ¿Cómo puedo configurar el inventario de Amazon S3? en la Guía del usuario de la consola
de Amazon Simple Storage Service.
• Para usar la API de Amazon S3 para una lista de inventario, use la API REST PUT Bucket inventory
configuration o su equivalente de la AWS CLI o los SDK de AWS.
3. Para cifrar el archivo con la lista de inventario con SSE-KMS, conceda a Amazon S3 permiso para
utilizar la clave de AWS KMS.
Puede configurar el cifrado para el archivo con la lista de inventario usando la Consola de
administración de AWS, la API REST, la AWS CLI o los SDK de AWS. Cualquiera que sea el método
que elija, debe conceder a Amazon S3 permiso para usar la clave maestra del cliente (CMK) de AWS
KMS para cifrar el archivo de inventario. Puede conceder permiso a Amazon S3 modificando la política
de claves de la CMK de AWS KMS que se va a usar para cifrar el archivo de inventario. Para obtener
más información, consulte la siguiente sección, Conceder permiso a Amazon S3 para cifrar mediante su
clave de AWS KMS (p. 442).
Debe conceder a Amazon S3 permiso para cifrar mediante su clave de AWS KMS con una política de
claves. En el procedimiento siguiente se describe cómo utilizar la consola de AWS Identity and Access
Management (IAM) para modificar la política de claves para la CMK de AWS KMS que se utiliza para cifrar
el archivo de inventario.
1. Inicie sesión en la Consola de administración de AWS con la cuenta de AWS propietaria de la CMK de
AWS KMS y abra la consola de IAM en https://console.aws.amazon.com/iam/.
2. En el panel de navegación izquierdo, elija Encryption keys (Claves de cifrado).
3. En Región (Región), elija la región de AWS apropiada. No use el selector de regiones de la barra de
navegación (en la esquina superior derecha).
4. Elija el alias de la CMK con la que desea cifrar el inventario.
5. En la sección Key Policy (Política de claves) de la página, elija Switch to policy view (Cambiar a la
vista de política).
6. Mediante el editor de Key Policy (Política de claves), inserte la siguiente política de claves en la
política existente y después elija Save Changes (Guardar cambios). Es posible que desee copiar la
política al final de la política existente.
{
"Sid": "Allow Amazon S3 use of the key",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey*"
],
"Resource": "*"
}
También puede utilizar la API de la política de claves PUT de AWS KMS PutKeyPolicy para copiar la
política de claves en la CMK que se va a usar para cifrar el archivo de inventario. Para obtener más
información acerca de cómo crear y editar CMK de AWS KMS, consulte Introducción en la AWS Key
Management Service Developer Guide.
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. 115). (este campo no estará incluido si la lista
solo refleja la versión actual de los objetos).
• IsLatest: estará establecido en True si el objeto es la versión actual del objeto. (este campo no estará
incluido si la lista solo refleja la versión actual de los objetos).
• Size (Tamaño): el tamaño del objeto en bytes.
• Last modified date (Fecha de la última modificación): la fecha de creación del objeto o la última fecha de
modificación, si esta última fecha es posterior a la primera.
• ETag: la etiqueta de entidad es un hash del objeto. que solo refleja los cambios en su contenido, no en
los metadatos. La ETag puede ser o no un resumen MD5 de los datos del objeto. Esto dependerá del
método de creación del objeto y del tipo de cifrado.
• Storage class (Clase de almacenamiento): la clase de almacenamiento utilizado para almacenar el
objeto. Para obtener más información, consulte Clases de almacenamiento de Amazon S3 (p. 110).
• Multipart upload flag (Marcador de carga multiparte): establecido en True si el objeto se cargó
mediante una carga multiparte. Para obtener más información, consulte Información general de carga
multiparte (p. 187).
• Delete marker (Marcador de eliminación): establecido en True, si el objeto es un marcador de
eliminación. Para obtener más información, consulte Control de versiones de objetos (p. 115). (Este
campo se añade automáticamente al informe si este se ha configurado para que incluya todas las
versiones de los objetos).
• Replication status (Estado de replicación): establecido en PENDING, COMPLETED, FAILED o REPLICA.
Para obtener más información, consulte Información del estado de replicación (p. 618).
• Encryption status (Estado de cifrado): establecido en SSE-S3, SSE-C, SSE-KMS o NOT-SSE. El estado
de cifrado del servidor para SSE-S3, SSE-KMS y SSE con claves proporcionadas por el cliente (SSE-C).
Un estado de NOT-SSE significa que el objeto no está cifrado con el cifrado del servidor. Para obtener
más información, consulte Protección de datos mediante cifrado (p. 274).
• Object lock Retain until date (Fecha de retención del bloqueo del archivo): la fecha hasta la que no
se puede eliminar un objeto bloqueado. Para obtener más información, consulte Bloqueo de objetos
mediante el bloqueo de objetos de Amazon S3 (p. 472).
• Object lock Mode (Modo de bloqueo del objeto): establecido en Governance o Compliance para los
objetos que están bloqueados. Para obtener más información, consulte Bloqueo de objetos mediante el
bloqueo de objetos de Amazon S3 (p. 472).
• Object lock Legal hold status (Estado de retención legal de bloqueo del objeto): establecido en On si se
ha aplicado una retención legal a un objeto; de no ser así, estará establecido en Off. Para obtener más
información, consulte Bloqueo de objetos mediante el bloqueo de objetos de Amazon S3 (p. 472).
A continuación se muestra una lista de inventario CSV de ejemplo abierta en una aplicación de hoja de
cálculo. La fila del encabezado se muestra únicamente para ayudar a explicar el ejemplo; no está incluida
en la lista real.
Le recomendamos que cree una política del ciclo de vida que elimine las listas de inventario antiguas. Para
obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127).
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.
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
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
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:
{
"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"
}
]
}
{
"sourceBucket": "example-source-bucket",
"destinationBucket": "arn:aws:s3:::example-destination-bucket",
"version": "2016-11-30",
"creationTimestamp" : "1514944800000",
"fileFormat": "ORC",
"fileSchema":
"struct<bucket:string,key:string,version_id:string,is_latest:boolean,is_delete_marker:boolean,size:big
"files": [
{
"key": "inventory/example-source-bucket/data/
d794c570-95bb-4271-9128-26023c8b4900.orc",
"size": 56291,
"MD5checksum": "5925f4e78e1695c2d020b9f6eexample"
}
]
}
{
"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.
Amazon S3 puede publicar eventos en un tema de Amazon Simple Notification Service (Amazon SNS),
una cola de Amazon Simple Queue Service (Amazon SQS) o una función de AWS Lambda. Para obtener
más información, consulte Configuración de notificaciones de eventos de Amazon S3 (p. 551).
La siguiente configuración de notificación define que todos los archivos manifest.checksum agregados
recientemente al bucket de destino se procesen con la función cloud-function-list-write de AWS
Lambda.
<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<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.
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.
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/.
)
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.
2. Para añadir nuevas listas de inventario a la tabla, utilice el siguiente comando MSCK REPAIR TABLE.
3. Después de realizar los dos primeros pasos, puede ejecutar consultas ad hoc en su inventario, tal y
como se muestra en el siguiente ejemplo.
Para obtener más información acerca del uso de Athena, consulte Guía del usuario de Amazon Athena.
Resiliencia en Amazon S3
La infraestructura global de AWS está conformada por regiones y zonas de disponibilidad. Las regiones
de AWS proporcionan varias zonas de disponibilidad físicamente independientes y aisladas que se
encuentran conectadas mediante redes con un alto nivel de rendimiento y redundancia, además de baja
latencia. Estas zonas de disponibilidad ofrecen un medio eficaz de diseñar y utilizar aplicaciones y bases
de datos. Tienen una mayor disponibilidad, tolerancia a errores y escalabilidad que las infraestructuras
de centros de datos tradicionales únicos o múltiples. Si específicamente necesita replicar sus datos en
distancias geográficas mayores, puede utilizar Replicación (p. 573), que permite la copia automática y
asincrónica de objetos en los buckets de diferentes regiones de AWS.
Cada región de AWS cuenta con varias zonas de disponibilidad. Puede implementar sus aplicaciones
en varias zonas de disponibilidad en la misma región para la tolerancia de errores y la baja latencia. Las
zonas de disponibilidad están conectadas entre sí con redes de fibra óptica rápidas y privadas, lo que
permite diseñar aplicaciones con facilidad que conmuten por error entre las zonas de disponibilidad sin
interrupciones.
Para obtener más información sobre las zonas de disponibilidad y las regiones de AWS, consulte
Infraestructura global de AWS.
Además de la infraestructura global de AWS, Amazon S3 ofrece varias características que le ayudan con
sus necesidades de resiliencia y copia de seguridad de los datos.
Una configuración del ciclo de vida es un conjunto de reglas que definen acciones que Amazon S3
aplica a un grupo de objetos. Con las reglas de configuración del ciclo de vida, puede indicarle a
Amazon S3 que pase los objetos a otras clases de almacenamiento más económicas, que los archive
o que los elimine. Para obtener más información, consulte Administración del ciclo de vida de los
objetos (p. 127).
Control de versiones
El control de versiones es una forma de conservar diversas variantes de un objeto en el mismo bucket.
Puede utilizar el control de versiones para conservar, recuperar y restaurar todas las versiones de los
objetos almacenados en su bucket de Amazon S3. Con el control de versiones, puede recuperarse
fácilmente de acciones no deseadas del usuario y de errores de la aplicación. Para obtener más
información, consulte Uso del control de versiones (p. 449).
Bloqueo de objetos de Amazon S3
Puede usar el bloqueo de objetos de Amazon S3 para almacenar objetos mediante un modelo de
escritura única y lectura múltiple (WORM). Utilizando Amazon S3 el bloqueo de objeto, puede evitar
que se elimine o se sobrescriba un objeto durante un periodo de tiempo determinado o de manera
indefinida. El bloqueo de objeto de Amazon S3 le permite cumplir con los requisitos normativos que
precisen de almacenamiento WORM o agregar una capa de protección adicional frente a cambios
y eliminaciones de objetos. Para obtener más información, consulte Bloqueo de objetos mediante el
bloqueo de objetos de Amazon S3 (p. 472).
Clases de almacenamiento
Amazon S3 ofrece una gama de clases de almacenamiento para los objetos que almacene. Dos de
estas clases de almacenamiento (STANDARD_IA y ONEZONE_IA) están diseñadas para datos de
larga duración y de acceso poco frecuente, como copias de seguridad. También puede emplear la
clase de almacenamiento GLACIER para archivar objetos a los que no necesita acceder a tiempo real.
Para obtener más información, consulte Clases de almacenamiento de Amazon S3 (p. 110).
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:
Important
Si cuenta con una política de ciclo de vida para la caducidad de un objeto en el bucket sin
versiones y quiere mantener el mismo comportamiento de eliminación cuando habilite el control
de versiones, debe agregar una política de vencimiento no actual. La política de vencimiento
no actual administrará las eliminaciones de las versiones de objetos no actuales en el bucket
habilitado para el control de versiones. (Un bucket con habilitación de versiones mantiene la
versión actual y cero o más versiones objeto no actuales). Para obtener más información, consulte
How Do I Create a Lifecycle Policy for an S3 Bucket? en la Guía del usuario de la consola de
Amazon Simple Storage Service.
Los buckets pueden tener tres estados: sin control de versiones (estado predeterminado), con control de
versiones habilitado o con control de versiones suspendido.
Important
Tras habilitar el control de versiones en un bucket, nunca puede volver a un estado sin control de
versiones. Sin embargo, sí que puede suspender el control de versiones en el bucket.
El estado del control de versiones se aplica a todos los objetos (nunca solo a una parte) del bucket. A
partir de la primera vez que habilite el control de versiones en un bucket, los objetos que contiene siempre
estarán versionados y tendrán un ID de versión exclusivo. Tenga en cuenta lo siguiente:
• Los objetos almacenados en un bucket antes de establecer el estado del control de versiones tienen el
ID de versión null. Al habilitar el control de versiones, los objetos existentes en el bucket no cambian.
Lo que cambia es la forma en la que Amazon S3 administrará los objetos en las solicitudes futuras. Para
obtener más información, consulte Administración de objetos en un bucket con control de versiones
habilitado (p. 455).
• El propietario del bucket (o cualquier usuario con los permisos adecuados) puede suspender el control
de versiones para dejar de acumular versiones de objetos. Al suspender el control de versiones,
los objetos existentes en el bucket no cambian. Lo que cambia es la forma en la que Amazon
S3 administrará los objetos en las solicitudes futuras. Para obtener más información, consulte
Administración de objetos en un bucket con control de versiones suspendido (p. 469).
Tanto la consola como los SDK llaman a la API REST que proporciona Amazon S3 para administrar el
control de versiones.
Note
Si lo necesita, también puede realizar las llamadas a la API REST de Amazon S3 directamente
desde su código. Sin embargo, esto puede ser engorroso porque debe escribir el código para
autenticar las solicitudes.
Cada bucket que cree tiene un subrecurso de control de versiones (consulte Opciones de configuración
de buckets (p. 58)) asociado. De forma predeterminada, su bucket no tendrá control de versiones y, por
tanto, el subrecurso de control de versiones almacena una configuración vacía.
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</VersioningConfiguration>
Para habilitar el control de versiones, envía una solicitud a Amazon S3 con una configuración para el
control de versiones que incluye un estado.
<VersioningConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Status>Enabled</Status>
</VersioningConfiguration>
Para suspender el control de versiones, puede configurar el valor de estado como Suspended.
El propietario de un bucket, una cuenta de AWS que haya creado el bucket (cuenta raíz), y los usuarios
autorizados pueden configurar el estado de control de versiones de un bucket. Para obtener más
información sobre los permisos, consulte Administración de identidad y acceso en Amazon S3 (p. 312).
Para ver un ejemplo de cómo configurar el control de versiones, consulte Ejemplos de habilitación del
control de versiones en buckets (p. 452).
Eliminación MFA
También puede agregar opcionalmente otra capa de seguridad si configura un bucket para habilitar la
eliminación con MFA (autenticación multifactor), lo que requiere una autenticación adicional para alguna de
las siguientes operaciones:
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.
Note
La eliminación con MFA y el acceso a la API protegido con MFA son características cuyo objetivo
es proporcionar protección en distintos escenarios. Puede configurar la eliminación con MFA
en un bucket para garantizar que los datos en el bucket no se puedan eliminar por accidente.
El acceso a la API protegido por MFA se usa para aplicar otro factor de autenticación (código
de MFA) al obtener acceso a recursos de Amazon S3 confidenciales. Puede requerir que todas
las operaciones relacionadas con estos recursos de Amazon S3 se realicen con credenciales
temporales creadas con MFA. Para ver un ejemplo, consulte Incorporación de una política de
bucket para requerir MFA (p. 391).
Para obtener más información sobre cómo adquirir y activar un dispositivo de autenticación,
consulte https://aws.amazon.com/iam/details/mfa/.
Temas relacionados
Para obtener más información, consulte los siguientes temas:
En esta sección se presentan ejemplos de cómo habilitar el control de versiones en un bucket. En los
ejemplos, primero se habilita el control de versiones en un bucket y después se recupera el estado de
control de versiones. Para ver una introducción, consulte Uso del control de versiones (p. 449).
Para obtener instrucciones acerca de cómo crear y probar una muestra funcional, consulte Prueba de
ejemplos de código Java de Amazon S3 (p. 706).
import java.io.IOException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;
SetBucketVersioningConfigurationRequest setBucketVersioningConfigurationRequest =
new SetBucketVersioningConfigurationRequest(bucketName,configuration);
s3Client.setBucketVersioningConfiguration(setBucketVersioningConfigurationRequest);
Example
using System;
using Amazon.S3;
using Amazon.S3.Model;
namespace s3.amazon.com.docsamples
{
class BucketVersioningConfiguration
{
static string bucketName = "*** bucket name ***";
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.
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. 456)
• Uso de los SDK de AWS (p. 456)
• Mediante la API de REST (p. 456)
Mediante la consola
Para obtener instrucciones, consulte la sección sobre cómo cargar un objeto en un bucket de S3 en la
Guía del usuario de la consola de Amazon Simple Storage Service.
Para ver ejemplos de cómo cargar objetos con los SDK de AWS para Java, .NET y PHP, consulte Carga
de objetos (p. 181). Los ejemplos para cargar objetos en buckets sin control de versiones y con control de
versiones habilitado son iguales, aunque en el caso de los buckets con control de versiones habilitado,
Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor nulo.
Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.
1 Habilite el control de versiones en un bucket con una solicitud PUT Bucket versioning. Para
obtener más información, consulte PUT Bucket versioning.
2 Envíe una solicitud PUT, POST o COPY para almacenar un objeto en el bucket.
Cuando se agrega un objeto a un bucket con control de versiones habilitado, Amazon S3 devuelve el ID de
versión del objeto en el encabezado de respuesta x-amz-version-id; por ejemplo:
x-amz-version-id: 3/L4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY
Note
Los valores del ID de versión que asigna Amazon S3 son seguros para URL (se pueden usar
como parte de un URI).
Esta sección proporciona un ejemplo de cómo enumerar versiones de un objeto en un bucket con control
de versiones habilitado. Amazon S3 almacena la información de versión de un objeto en el subrecurso
versiones (consulte Opciones de configuración de buckets (p. 58)) asociado con el bucket.
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.
Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
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();
}
}
}
Para obtener información acerca de cómo crear y probar una muestra funcional, consulte Ejecución de
ejemplos de código .NET de Amazon S3 (p. 708).
Example
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ListObjectsVersioningEnabledBucketTest
{
static string bucketName = "*** bucket name ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
{
BucketName = bucketName,
// You can optionally specify key name prefix in the request
// if you want list of object versions of a specific object.
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.
• 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.
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.
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.
Example Recuperación de objetos que comiencen con una clave y un ID de versión específicos
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.
Para ver ejemplos de cómo cargar objetos con los SDK de AWS para Java, .NET y PHP, consulte
Obtención de objetos (p. 173). Los ejemplos para cargar objetos en buckets sin control de versiones y con
control de versiones habilitado son iguales, aunque en el caso de los buckets con control de versiones
habilitado, Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor
nulo.
Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.
Mediante REST
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 .
Temas relacionados
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.
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.
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
• La acción Expiration se aplica a la versión actual del objeto y, en lugar de eliminar la versión actual,
Amazon S3 conserva la versión actual como versión no actual agregándole un marcador de eliminación
que, posteriormente, se convierte en la versión actual.
• La acción NoncurrentVersionExpiration se aplica a las versiones no actuales del objeto
y Amazon S3 elimina permanentemente estas versiones de objeto. No puede recuperar objetos
eliminados permanentemente.
Para obtener más información, consulte Administración del ciclo de vida de los objetos (p. 127).
• Cuando está habilitado el control de versiones, un DELETE simple no puede eliminar permanentemente
un objeto.
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.
Para ver ejemplos de cómo eliminar objetos con los SDK de AWS para Java, .NET y PHP, consulte
Eliminación de objetos (p. 236). Los ejemplos para eliminar objetos en buckets sin control de versiones y
con control de versiones habilitado son iguales, aunque en el caso de los buckets con control de versiones
habilitado, Amazon S3 asigna un número de versión. De lo contrario, el número de versión es un valor
nulo.
Para obtener información acerca del uso de otros SDK de AWS, consulte Código de muestra y bibliotecas.
Mediante REST
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
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.
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
Para obtener más información acerca de la habilitación de la eliminación con MFA, consulte Eliminación
MFA (p. 451).
Un marcador de eliminación es un marcador para un objeto versionado que haya recibido el nombre en
una solicitud DELETE simple. Dado que el objeto estaba en un bucket con control de versiones habilitado,
el objeto no se ha eliminado. El marcador de eliminación, sin embargo, hace que Amazon S3 se comporte
como si se hubiese eliminado.
Un marcador de eliminación tiene un nombre de clave (o clave) y un ID de versión al igual que cualquier
otro objeto. Sin embargo, un marcador de eliminación se diferencia de otros objetos en los siguientes
aspectos:
Los marcadores de eliminación acumulan cargos nominales por almacenamiento en Amazon S3. El
tamaño de almacenamiento de un marcador de eliminación es igual al tamaño del nombre de clave del
marcador de eliminación. Un nombre de clave es una secuencia de caracteres Unicode. La codificación
UTF-8 agrega entre 1 y 4 bytes de almacenamiento al bucket para cada carácter del nombre. Para
obtener más información sobre nombres de clave, consulte Claves de objeto (p. 105). Para obtener
información acerca de cómo eliminar marcadores de eliminación, consulte Eliminación de marcadores de
eliminación (p. 466).
Solo Amazon S3 puede crear un marcador de eliminación, lo hace cuando envía una solicitud DELETE
Object a un objeto en un bucket con control de versiones habilitado o suspendido. El objeto denominado
en la solicitud DELETE no se elimina realmente. Por el contrario, el marcador de eliminación se convierte
en la versión actual del objeto. (El nombre de la clave del objeto, o clave, se convierte en la clave del
marcador de eliminación). Si intenta obtener un objeto y su versión actual es un marcador de eliminación,
Amazon S3 responde con:
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.
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 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.
El efecto de eliminar el marcador de eliminación es que ahora una solicitud GET simple devolverá la
versión actual (121212) del objeto.
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.
204 NoContent
x-amz-version-id: versionID
x-amz-delete-marker: true
El objeto copiado se convierte en la versión actual del mismo, y se conservan todas las versiones del
objeto.
Al eliminar la versión actual del objeto, en efecto, estará convirtiendo la versión anterior en la versión
actual del mismo.
Dado que se conservan todas las versiones de los objetos, puede hacer que cualquier versión sea la
versión actual copiando una versión específica del objeto en el mismo bucket. En el siguiente gráfico, el
objeto de origen (ID=111111) se copia en el mismo bucket. Amazon S3 facilita un nuevo ID (88778877)
y se convierte en la versión actual del objeto. Por tanto, el bucket contendrá tanto la versión original del
objeto (111111) como su copia (88778877).
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.
<AccessControlPolicy>
<Owner>
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>mtd@amazon.com</DisplayName>
</Owner>
<AccessControlList>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="CanonicalUser">
<ID>a9a7b886d6fd24a52fe8ca5bef65f89a64e0193f23000e241bf9b1c61be666e9</ID>
<DisplayName>BucketOwner@amazon.com</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
Del mismo modo, para obtener permisos para una versión de objeto específica, debe facilitar su ID de
versión en una solicitud GET Object versionId acl. Debe incluir el ID de versión porque, de forma
predeterminada, GET Object acl devuelve los permisos de la versión actual del objeto.
En el siguiente ejemplo, Amazon S3 devuelve los permisos para la clave, my-image.jpg, ID de versión
DVBH40Nr8X8gUMLUo.
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.
En el siguiente gráfico se muestra cómo Amazon S3 agrega un ID de versión null a un objeto cuando se
agrega a un bucket con control de versiones suspendido.
Si ya existe una versión nula en el bucket y agrega otro objeto con la misma clave, el objeto agregado
sobrescribe la versión nula original.
Si hay objetos versionados en el bucket, la versión que someta a la operación PUT se convertirá en la
versión actual del objeto. En el siguiente gráfico se muestra cómo agregar un objeto a un bucket que
contiene objetos versionados no sobrescribe el objeto ya presente en el bucket. En esta caso, la versión
111111 ya estaba en el bucket. Amazon S3 adjunta un ID de versión nulo al objeto que se agrega, y lo
almacena en el bucket. La versión 111111 no se sobrescribe.
Si ya existe una versión nula en un bucket, la versión nula se sobrescribe, como se muestra en el siguiente
gráfico.
Tenga en cuenta que aunque la clave y el ID de versión (null) de la versión nula son las mismas antes y
después de la operación PUT, los contenidos de la versión nula almacenados originalmente en el bucket se
sustituyen por los contenidos del PUT del objeto en el bucket.
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.
Cohasset Associates ha evaluado el uso de Amazon S3 object lock en entornos sujetos a las normativas
SEC 17a-4, CTCC y FINRA. Para obtener más información acerca de cómo Amazon S3 object lock está
relacionado con estas regulaciones, consulte la evaluación de cumplimiento de Cohasset Associates.
Amazon S3 object lock proporciona dos formas de administrar la retención de objetos: periodos de
retención y retenciones legales.
• Un periodo de retención especifica un periodo de tiempo fijo durante el cual los objetos permanecen
bloqueados. Durante este periodo, el objeto tiene protección WORM y no es posible sobrescribirlo ni
eliminarlo.
• Una retención legal proporciona la misma protección que un periodo de retención, pero no tiene fecha
de vencimiento. En cambio, la retención legal sigue vigente hasta que la elimine explícitamente. Las
retenciones legales son independientes de los periodos de retención.
Una versión de un objeto puede tener tanto un periodo de retención como una retención legal, solo una
de estas opciones o ninguna de ellas. Para obtener más información, consulte Información general del
bloqueo de objetos de Amazon S3 (p. 473).
Amazon S3 object lock solo funciona en buckets con control de versiones y los periodos de retención y
las retenciones legales se aplican a versiones individuales de los objetos. Cuando bloquea una versión de
un objeto, Amazon S3 almacena la información de bloqueo en los metadatos de esa versión del objeto. Al
colocar un periodo de retención o retención legal en un objeto se protege solo la versión especificada en
la solicitud. No se impide la creación de nuevas versiones del objeto. Si pone un objeto en un bucket que
tiene el mismo nombre de clave que un objeto que ya existe y está protegido, Amazon S3 crea una nueva
versión de ese objeto, la almacena en el bucket según se haya solicitado y comunica que la solicitud se
ha completado correctamente. La versión existente y protegida del objeto sigue bloqueada conforme a su
configuración de retención.
Para obtener información acerca del uso de Amazon S3 object lock en la Consola de administración de
AWS, consulte ¿Cómo puedo bloquear un objeto de Amazon S3? en la Guía del usuario de la consola de
Amazon Simple Storage Service.
Temas
• Información general del bloqueo de objetos de Amazon S3 (p. 473)
• Administración del bloqueo de objetos de Amazon S3 (p. 476)
Para obtener información acerca de la administración del estado de bloqueo de sus objetos de Amazon S3,
consulte the section called “Administración del bloqueo de objetos” (p. 476).
En las siguientes secciones se describen las características principales deAmazon S3 object lock.
Temas
• Modos de retención (p. 473)
• Periodos de retención (p. 474)
• Retenciones legales (p. 475)
• Configuración del bucket (p. 475)
• Permisos necesarios (p. 476)
Modos de retención
Amazon S3 object lock proporciona dos modos de retención:
• Modo Gobierno
• Modo Cumplimiento
Estos modos de retención aplican diferentes niveles de protección a los objetos. Puede aplicar cualquier
modo de retención a cualquier versión del objeto protegida por Amazon S3 object lock.
En el modo Gobierno, los usuarios no pueden sobrescribir ni eliminar una versión del objeto ni alterar su
configuración de bloqueo a menos que tengan permisos especiales. Con el modo Gobierno, evita que
la mayoría de los usuarios eliminen un objeto, pero puede seguir otorgando permiso a algunos usuarios
para alterar la configuración de retención o eliminar el objeto si es necesario. También puede usar el modo
Gobierno para probar la configuración del periodo de retención antes de crear un periodo de retención
en el modo Cumplimiento. Para anular o eliminar la configuración de retención del modo Gobierno, el
usuario debe tener el permiso s3:BypassGovernanceRetention que debe incluir explícitamente x-
amz-bypass-governance-retention:true como encabezado de la solicitud con cualquier solicitud
que requiera la anulación del modo Gobierno.
Note
En el modo Cumplimiento, ningún usuario puede sobrescribir ni eliminar una versión de objeto protegida,
incluido el usuario raíz de la cuenta de AWS. Una vez que se ha bloqueado un objeto en el modo
Cumplimiento, no es posible cambiar su modo de retención ni acortar su periodo de retención. El modo
Cumplimiento asegura que no se pueda sobrescribir ni eliminar una versión del objeto en toda la duración
del periodo de retención.
Note
La actualización de los metadatos de la versión del objeto, como ocurre cuando coloca o altera
el bloqueo de un objeto, no sobrescribe las versiones del objeto ni restablece su marca temporal
Last-Modified.
Periodos de retención
Un periodo de retención protege una versión de un objeto por un periodo de tiempo determinado. Cuando
coloca un periodo de retención en una versión del objeto, Amazon S3 almacena una marca temporal en
los metadatos de la versión del objeto para indicar el vencimiento del periodo de retención. Cuando vence
el periodo de retención, es posible sobrescribir o eliminar la versión del objeto a menos que también haya
colocado una retención legal en la versión del objeto.
Puede colocar un periodo de retención en una versión del objeto bien explícitamente o bien a través
de una configuración predeterminada del bucket. Si aplica explícitamente un periodo de retención a
una versión del objeto, especifica una fecha de finalización de la retención de esta versión. Amazon S3
almacena la fecha de finalización de la retención en los metadatos de la versión del objeto y la protege
hasta que vence el periodo de retención.
Si solicita colocar una versión del objeto en un bucket que contiene un modo y período de
retención explícitos, esa configuración anula la configuración predeterminada del bucket para esa
versión del objeto.
Como todos los demás ajustes de Amazon S3 object lock, los períodos de retención solo se aplican a
versiones del objeto individuales. Diferentes versiones del mismo objeto pueden tener distintos modos y
periodos de retención.
Por ejemplo, supongamos que tiene un objeto para el que han transcurrido 15 días de un periodo de
retención de 30 días y aplica PUT a un objeto en Amazon S3 con el mismo nombre y un periodo de
retención de 60 días. En este caso, PUT se considerará correcto y Amazon S3 creará una nueva versión
del objeto con un periodo de retención de 60 días. La versión antigua mantiene su periodo de retención
original y podrá borrarse en 15 días.
Puede ampliar el periodo de retención una vez que ha aplicado una configuración de retención a una
versión de un objeto. Para ello, envíe una nueva solicitud de bloqueo para la versión del objeto con una
Retain Until Date que es posterior a la configurada actualmente para esa versión del objeto. Amazon
S3 reemplaza el periodo de retención actual con el periodo nuevo, más largo. Cualquier usuario con
permiso para colocar un periodo de retención en un objeto puede ampliar dicho periodo de retención para
una versión del objeto bloqueada en cualquier modo.
Retenciones legales
Amazon S3 object lock también le permite colocar una retención legal en una versión del objeto. Al igual
que un periodo de retención, la retención legal impide que se sobrescriba o elimine una versión de un
objeto. Sin embargo, una retención legal no tiene asociado un periodo de retención y sigue vigente hasta
que se elimine. Los usuarios con el permiso s3:PutObjectLegalHold pueden colocar y eliminar
libremente retenciones legales.
Las retenciones legales son independientes de los periodos de retención. Siempre que el bucket que
contiene el objeto tenga el Amazon S3 object lock habilitado, puede colocar y eliminar retenciones legales
sin importar si la versión del objeto especificada tiene establecido un período de retención. La colocación
de una retención legal en una versión de un objeto no afecta al modo ni al periodo de retención de dicha
versión del objeto. Por ejemplo, supongamos que coloca una retención legal en una versión de un objeto
al mismo tiempo que esta también recibe protección de un periodo de retención. Si vence el periodo de
retención, el objeto no perderá su protección WORM. En cambio, la retención legal continúa protegiendo el
objeto hasta que un usuario autorizado la elimine explícitamente. De igual modo, si elimina una retención
legal en una versión del objeto que tiene un periodo de retención vigente, la versión del objeto seguirá
protegida hasta que venza el periodo de retención.
Para poder bloquear un objeto, debe configurar el bucket para que use el Amazon S3 object lock. Para
hacerlo, cuando crea el bucket debe especificar que desea habilitar el Amazon S3 object lock. Tras
configurar el bucket para el Amazon S3 object lock, puede bloquear objetos en ese bucket con periodos de
retención, retenciones legales o ambas opciones.
Note
• Solo puede habilitar el Amazon S3 object lock en buckets nuevos. Si desea activar Amazon S3
object lock para un bucket existente, entre en contacto con AWS Support.
• Cuando crea un bucket con Amazon S3 object lock habilitado, Amazon S3 habilita
automáticamente el control de versiones para ese bucket.
• Una vez que cree un bucket con Amazon S3 object lock habilitado, no puede deshabilitar el
bloqueo de objetos ni suspender el control de versiones en ese bucket.
Para obtener información acerca de la habilitación de Amazon S3 object lock en la consola, consulte
¿Cómo puedo bloquear un objeto de Amazon S3? en la Guía del usuario de la consola de Amazon Simple
Storage Service.
Al activar Amazon S3 object lock para un bucket, este puede almacenar objetos protegidos. Sin embargo,
la configuración no protege automáticamente los objetos que incluye en el bucket. Si desea proteger
automáticamente las versiones del objeto colocadas en el bucket, puede configurar un periodo de
retención predeterminado. La configuración predeterminada se aplica a todos los objetos nuevos
colocados en el bucket a menos que especifique de forma explícita un modo y periodo de retención
diferentes para el objeto cuando lo crea.
Tip
Si desea aplicar el modo y el periodo de retención predeterminados del bucket a todas las nuevas
versiones del objeto colocadas en el bucket, establezca las opciones predeterminadas del bucket
y deniegue a los usuarios el permiso para establecer la configuración de retención del objeto. A
continuación, Amazon S3 aplica el modo y el periodo de retención predeterminados a las nuevas
versiones del objeto colocadas en el bucket y rechaza todas las solicitudes de poner un objeto
que incluya una configuración y un modo de retención.
La configuración predeterminada del bucket requiere tanto un modo como un periodo. El modo
predeterminado del bucket es Gobierno o Cumplimiento. Para obtener más información, consulte Modos
de retención (p. 473).
Un periodo de retención predeterminado no es una marca temporal sino un periodo de días o años. Al
colocar una versión de un objeto en un bucket con un periodo de retención determinado, Amazon S3
object lock calcula una fecha de eliminación de la retención. Lo hace añadiendo el periodo de retención
predeterminado a la marca temporal de creación de la versión del objeto. Amazon S3 almacena la marca
temporal resultante como la fecha de finalización de la retención de la versión del objeto, como si hubiera
calculado manualmente la marca temporal y la hubiera colocado en la versión del objeto usted mismo.
La configuración predeterminada se aplica solo a los objetos nuevos colocados en el bucket. La colocación
de una configuración de retención predeterminada en un bucket no coloca ninguna configuración de
retención en los objetos que ya están en este.
Important
Los bloqueos de objeto se aplican solo a las versiones individuales del objeto. Si coloca un objeto
en un bucket que tiene un periodo de retención predeterminado y no especifica explícitamente un
periodo de retención para ese objeto, Amazon S3 crea el objeto con un periodo de retención que
coincida con lo predeterminado en el bucket. Después de crear un objeto, el periodo de retención
es independiente del periodo de retención predeterminado del bucket. El cambio del periodo de
retención predeterminado del bucket no altera el periodo de retención existente de los objetos en
ese bucket.
Note
Si configura un periodo de retención predeterminado en el bucket, las solicitudes para cargar
objetos en dicho bucket deben incluir el encabezado Content-MD5. Para obtener más
información, consulte PUT Object en la Amazon Simple Storage Service API Reference.
Permisos necesarios
Las operaciones de Amazon S3 object lock necesitan permisos específicos. Para obtener más información,
consulte Permisos para operaciones de objetos (p. 358).
Temas
• Visualización de la información de bloqueo de un objeto (p. 477)
• Omitir el modo de gobierno (p. 477)
• Configurar eventos y notificaciones (p. 477)
• Configuración de límites de retención (p. 478)
• Administración de marcadores de eliminación y ciclos de vida de los objetos (p. 478)
• Uso del bloqueo de objetos con la replicación (p. 478)
A fin de ver el periodo de retención y el modo de retención de la versión del objeto, debe tener el permiso
s3:GetObjectRetention. A fin de ver el estado de la retención legal de la versión del objeto, debe
tener el permiso s3:GetObjectLegalHold. Si usa los comandos GET o HEAD para una versión del
objeto pero no tiene los permisos necesarios para ver su estado de bloqueo, la solicitud se considerará
correcta. Sin embargo, no devolverá aquella información para cuya visualización no tenga permiso.
Para ver la configuración de retención predeterminada del bucket (si tiene una), solicite
la configuración de bloqueo de objetos del bucket. Para ello, debe tener el permiso
s3:GetBucketObjectLockConfiguration. Si realiza una solicitud para ver la configuración de
bloqueo de objetos en un bucket que no tiene habilitado Amazon S3 object lock, Amazon S3 devuelve un
error.
Puede configurar informes de inventario de Amazon S3 acerca de sus buckets para incluir Retain Until
Date, object lock Mode y Legal Hold Status en todos los objetos de un bucket. Para obtener más
información, consulte Inventario de Amazon S3 (p. 439).
Omitir el modo 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.
Para obtener más información acerca de los eventos de Amazon S3, consulte Configuración de
notificaciones de eventos de Amazon S3 (p. 551).
Puede usar las notificaciones de eventos de Amazon S3 para realizar un seguimiento del acceso y los
cambios a los datos y las configuraciones de bloqueo de objetos mediante AWS CloudTrail. Para obtener
más información acerca de CloudTrail, consulte la documentación de AWS CloudTrail.
También puede utilizar Amazon CloudWatch para generar alertas según estos datos. Para obtener
información acerca de CloudWatch, consulte la documentación de Amazon CloudWatch.
{
"Version": "2012-10-17",
"Id": "<Policy1436912751980>",
"Statement": [
{
"Sid": "<Stmt1436912698057>",
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:PutObjectRetention"
],
"Resource": "arn:aws:s3:::<example-bucket>/*",
"Condition": {
"NumericGreaterThan": {
"s3:object-lock-remaining-retention-days": "10"
}
}
}
]
}
Note
Si el bucket es el bucket de destino para una política de replicación y desea configurar períodos
de retención mínimos y máximos admisibles para réplicas de objeto que se crean utilizando la
replicación, debe incluir la acción s3:ReplicateObject en su política de bucket.
Para obtener más información acerca del uso de políticas de buckets, consulte Uso de políticas de bucket
y usuario (p. 353).
Las configuraciones de administración del ciclo de vida del objeto continúan funcionando normalmente en
objetos protegidos, incluida la colocación de marcadores de eliminación. Sin embargo, las versiones de
los objetos protegidos permanecen a salvo de eliminación o sobrescritura gracias a una configuración de
ciclo de vida. Para obtener más información acerca de la administración de ciclos de vida de los objetos,
consulte Administración del ciclo de vida de los objetos (p. 127).
Para configurar el bloqueo de objetos con la replicación, puede elegir una de las siguientes opciones.
Para completar el paso 2 en las opciones anteriores, tiene que ponerse en contacto con AWS Support.
Este proceso se requiere para garantizar que la replicación se configure correctamente.
Antes de ponerse en contacto con AWS Support, consulte los siguientes requisitos para configurar el
bloqueo de objetos con la replicación:
Para obtener más información acerca del bloqueo de objetos de Amazon S3, consulte Bloqueo de objetos
mediante el bloqueo de objetos de Amazon S3 (p. 472).
El acceso a Amazon S3 a través de la red se realiza mediante las API publicadas por AWS. Los clientes
deben admitir Transport Layer Security (TLS) 1.0. Nosotros recomendamos TLS 1.2. Los clientes también
deben admitir conjuntos de cifrado con confidencialidad directa total (PFS) tales como Ephemeral Diffie-
Hellman (DHE) o Elliptic Curve Diffie-Hellman Ephemeral (ECDHE). Además, las solicitudes se deben
firmar con AWS Signature V4 o AWS Signature V2, lo que requiere que se proporcionen credenciales
válidas.
Estas API se pueden invocar desde cualquier ubicación de red. Sin embargo, Amazon S3 admite políticas
de acceso basadas en recursos, que pueden incluir restricciones en función de la dirección IP de origen.
También puede utilizar las políticas de bucket de Amazon S3 para controlar el acceso a los buckets desde
puntos de enlace de Amazon Virtual Private Cloud (Amazon VPC) específicos o VPC específicas. Este
proceso aísla con eficacia el acceso de red a un bucket de Amazon S3 determinado únicamente desde la
VPC específica de la red de AWS. Para obtener más información, consulte Ejemplo de políticas de bucket
para puntos de enlace de la VPC para Amazon S3 (p. 394).
Las siguientes prácticas recomendadas sobre seguridad también evalúan la seguridad de la infraestructura
en Amazon S3:
Las siguientes prácticas recomendadas sobre seguridad también evalúan la configuración y los análisis de
vulnerabilidades en Amazon S3:
Temas
• Prácticas recomendadas preventivas de seguridad de Amazon S3 (p. 480)
• Monitorización y auditoría de prácticas recomendadas de Amazon S3 (p. 483)
Asegúrese que sus buckets de Amazon S3 empleen las políticas correctas y que no sean accesibles
públicamente.
A menos que necesite de forma explícita que alguien en Internet pueda leer o escribir en su bucket de
S3, debe asegurarse de que este no sea público. Estos son algunos de los pasos que puede realizar:
• Uso de Block Public Access de Amazon S3 Con Amazon S3 Block Public Access, los
administradores de cuentas y los propietarios de buckets pueden configurar fácilmente controles
centralizados para limitar el acceso público a sus recursos de Amazon S3, que se aplican
independientemente de cómo se creen los recursos. Para obtener más información, consulte Uso de
Amazon S3 Block Public Access (p. 430).
• Identifique las políticas de bucket de Amazon S3 que permiten identidades con comodines, como
Principal “*” (que, efectivamente, significa “cualquiera”) o permite una acción comodín “*” (que,
efectivamente, permite al usuario llevar a cabo cualquier acción en el bucket de Amazon S3).
• Tenga en cuenta que, de forma parecida, la lista de control de acceso (ACL) del bucket de Amazon
S3 facilita la lectura, escritura o el acceso completo a “Everyone” o “Any authenticated AWS user”.
• Utilice la API de ListBuckets para examinar todos sus buckets de Amazon S3. A continuación,
utilice GetBucketAcl, GetBucketWebsite y GetBucketPolicy para determinar si el bucket
cuenta con configuración y controles de acceso compatibles.
• Utilice AWS Trusted Advisor para inspeccionar su implementación de Amazon S3.
• Considere la implementación de controles de detección en curso usando la Reglas de AWS Config
administrada de s3-bucket-public-read-prohibited y s3-bucket-public-write-prohibited.
Para obtener más información, consulte Configuración de permisos de acceso a buckets y objetos en
la Guía del usuario de la consola de Amazon Simple Storage Service.
Implemente el acceso a los privilegios mínimos
Cuando concede permisos, debe decidir a quién concede cada permiso y para qué recurso de
Amazon S3 se lo concede. Habilite las acciones específicas que desea permitir en dichos recursos.
Por lo tanto, debe conceder únicamente los permisos obligatorios para realizar una tarea. La
implementación del acceso con privilegios mínimos es esencial a la hora de reducir los riesgos de
seguridad y el impacto que podrían causar los errores o los intentos malintencionados.
Las siguientes herramientas están disponibles para implementar el acceso a los privilegios mínimos:
• Políticas de usuario deIAM yLímites de permisos paras las entidades de IAM
• Políticas de buckets de Amazon S3
• Listas de control de acceso (ACL)Amazon S3
• Políticas de control de servicios
Para recibir asesoramiento sobre lo que tener en cuenta al elegir uno o más de los mecanismos
anteriores, consulte Introducción a la administración de permisos de acceso para los recursos de
Amazon S3 (p. 312).
Utilice los roles de IAM para las aplicaciones y servicios de AWS que necesiten acceso a Amazon S3
Tienen que incluir credenciales válidas de AWS en sus solicitudes API de AWS para las aplicaciones
de Amazon EC2 u otros servicios de AWS y así acceder a los recursos de Amazon S3. No debe
almacenar las credenciales de AWS directamente en la aplicación ni en la instancia de Amazon
EC2. Estas son las credenciales a largo plazo que no rotan automáticamente y que podrían tener un
impacto empresarial significativo si se comprometen.
En su lugar, debería utilizar un rol de IAM para administrar las credenciales temporales de las
aplicaciones o servicios que necesitan acceder a Amazon S3. Al utilizar un rol, no tiene que distribuir
credenciales a largo plazo (como un nombre de usuario y una contraseña o claves de acceso) a
una instancia Amazon EC2 o un servicio de AWS como AWS Lambda. El rol proporciona permisos
temporales que las aplicaciones pueden utilizar al realizar llamadas a otros recursos de AWS.
Para obtener más información, consulte los siguientes temas en la Guía del usuario de IAM.
• Roles de IAM
• Situaciones habituales con los roles: usuarios, aplicaciones y servicios
Habilite la eliminación de la Multi-Factor Authentication (MFA)
La eliminación de MFA le puede se de utilidad para evitar eliminaciones accidentales del bucket. Si
la eliminación de MFA no está habilitada, cualquier usuario con la contraseña de un usuario de IAM o
raíz con los suficientes privilegios puede eliminar de forma permanente un objeto de Amazon S3.
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
Dispone de las siguientes opciones para proteger datos en reposo en Amazon S3.
• Cifrado en el servidor: solicite que Amazon S3 cifre su objeto antes de guardarlo en discos de sus
centros de datos y, a continuación, lo descifre al descargarlo. El cifrado en el servidor le puede
ser de utilidad para minimizar el riesgo de sus datos al cifrarlos con una clave almacenada en un
mecanismo distinto de que almacena los datos por sí mismo.
Amazon S3 ofrece distintas opciones de cifrado en el servidor. Para obtener más información,
consulte Protección de datos con el cifrado del lado del servidor (p. 275).
• Cifrado en el cliente: puede cifrar datos en el cliente y cargar los datos cifrados en Amazon S3. En
este caso, administra el proceso de cifrado, las claves de cifrado y las herramientas relacionadas. Al
igual que con el cifrado en el servidor, el cifrado en el cliente le puede ser de utilidad para minimizar
el riesgo al cifrar los datos con una clave almacenada en un mecanismo distinto de que almacena
los datos por sí mismo.
Amazon S3 ofrece distintas opciones de cifrado en el cliente. Para obtener más información,
consulte Protección de datos con el cifrado del lado del cliente (p. 304).
Aplique el cifrado de datos en tránsito
Puede utilizar HTTPS (TLS) para ayudarle a evitar posibles ataques de acceso no autorizado o de
manipulación del tráfico de red con ataques de «persona en medio» o similares. Debería permitir solo
las conexiones cifradas a través de HTTPS (TLS) mediante la condición aws:SecureTransport en las
políticas de bucket de Amazon S3.
El bloqueo de objetos de Amazon S3 le permite almacenar objetos con un modelo de «escritura única
y lectura múltiple» (WORM). El bloqueo de objetos de Amazon S3 le puede ser de utilidad para evitar
la eliminación accidental o inadecuada de datos. Por ejemplo, podría utilizar el bloqueo de objetos de
Amazon S3 para proteger sus registros de AWS CloudTrail.
Habilite el control de versiones
El control de versiones es una forma de conservar diversas variantes de un objeto en el mismo bucket.
Puede utilizar el control de versiones para conservar, recuperar y restaurar todas las versiones de los
objetos almacenados en su bucket de Amazon S3. Con el control de versiones, puede recuperarse
fácilmente de acciones no deseadas del usuario y de errores de la aplicación.
Para obtener más información, consulte Uso del control de versiones (p. 449).
Tenga en cuenta la replicación entre regiones de Amazon S3
Note
CRR precisa que tanto el origen y el destino de los buckets de S3 tengan habilitado el control
de versiones.
Un punto de enlace de la VPC para Amazon S3 es una entidad lógica dentro de una Amazon Virtual
Private Cloud (Amazon VPC) que únicamente permite conectarse a Amazon S3. Puede utilizar las
políticas de bucket de Amazon S3 para controlar el acceso a los buckets desde puntos de enlace
específicos de la Amazon VPC, o de VPC específicas. Un punto de enlace de la VPC puede ser de
utilidad para evitar que el tráfico pueda recorrer una red de Internet de acceso público o estar sujeto a
una red de Internet de acceso público.
Los puntos de enlace de la VPC para Amazon S3 brindan dos maneras de controlar el acceso a los
datos de Amazon S3:
• Puede controlar qué solicitudes, usuarios o grupos obtienen acceso a través de un punto de enlace
de la VPC específico.
• Puede controlar que VPC o puntos de enlace de la VPC tienen acceso a sus buckets de S3 a través
de las políticas de bucket de S3.
• Puede ser de utilidad para evitar la sustracción de datos mediante el uso de una VPC que no tiene
una gateway de Internet.
Para obtener más información, consulte Ejemplo de políticas de bucket para puntos de enlace de la
VPC para Amazon S3 (p. 394).
Utilice Tag Editor para identificar los recursos que precisan más seguridad o una auditoría y utilice
dichas etiquetas cuando tenga que buscarlos. Para obtener más información, consulte Buscar
recursos para etiquetar.
Utilice el inventario de Amazon S3 para auditar e informar sobre el estado de replicación y cifrado
de los objetos para sus necesidades empresariales, de conformidad y legales. Para obtener más
información, consulte Inventario de Amazon S3 (p. 439).
Cree grupos de recursos para sus recursos de Amazon S3. Para obtener más información, consulte
¿Qué es AWS Resource Groups?
Implemente la monitorización con herramientas de monitorización de AWS
Por ejemplo, puede monitorizar las métricas de CloudWatch de Amazon S3, sobre todo respecto a
PutRequests, GetRequests, 4xxErrors y DeleteRequests. Para obtener más información,
consulte Monitorización de métricas con Amazon CloudWatch (p. 636). Para obtener más
información, consulte Monitorización de Amazon S3 (p. 635).
Si desea ver un segundo ejemplo, consulte Ejemplo: actividad del bucket de Amazon S3. Este ejemplo
describe cómo crear una alarma de Amazon CloudWatch, que se dispara cuando se produce una
llamada a la API de Amazon S3 a la política de bucket de PUT o DELETE, el ciclo de vida de bucket,
la replicación de bucket o a PUT, un bucket ACL.
Habilite el registro de acceso al servidor de Amazon S3
El registro de acceso al servidor brinda registros detallados de las solicitudes realizadas a un bucket.
Los registros de acceso al servidor pueden ayudarle con la seguridad y la auditoría de accesos; le
pueden ayudar a saber más sobre su base de clientes y a comprender su factura de Amazon S3. Para
obtener información acerca de cómo habilitar el registro de acceso del servidor, consulte Registro de
acceso al servidor de Amazon S3 (p. 674).
Tenga en cuenta también los controles de detección en curso mediante la regla administrada de AWS
Config, s3-bucket-logging-enabled.
Use AWS CloudTrail
AWS CloudTrail proporciona un registro de las medidas adoptadas por un usuario, un rol o un servicio
de AWS en Amazon S3. Mediante la información recopilada por CloudTrail, puede determinar la
solicitud que se realizó a Amazon S3, la dirección IP de origen desde la que se realizó, quién la
realizó y cuándo, etc. Por ejemplo, puede identificar entradas de CloudTrail para acciones Put que
afecten al acceso a los datos, sobre todo PutBucketAcl, PutObjectAcl, PutBucketPolicy
y PutBucketWebsite. Para obtener más información, consulte Registro de llamadas a la API de
Amazon S3 mediante AWS CloudTrail (p. 647).
También puede utilizar CloudTrail junto con el registro de acceso al servidor de Amazon S3. El
registro de acceso al servidor de Amazon S3 le proporciona un registro de acceso de las solicitudes
realizadas al bucket, pero no da visibilidad a las operaciones de la API a nivel de objeto. CloudTrail
admite las operaciones de API a nivel de objeto de Amazon S3, como GetObject, DeleteObject
y PutObject. Monitorizar dichos eventos, llamados eventos de datos, puede proporcionarle
información valiosa sobre las operaciones relacionadas con sus objetos de Amazon S3. Para obtener
más información, consulte Eventos de datos en la AWS CloudTrail User Guide.
Habilite AWS Config
Varias de las prácticas recomendadas que se enumeran en este tema sugieren la creación de
reglas de AWS Config. AWS Config le permite examinar, auditar y evaluar las configuraciones de
sus recursos de AWS. AWS Config monitoriza las configuraciones de sus recursos, permitiéndole
evaluar las configuraciones registradas frente a las configuraciones de seguridad deseadas. Con AWS
Config puede revisar los cambios en las configuraciones y las relaciones entre los recursos de AWS,
investigar los historiales detallados de configuración de recursos y determinar la conformidad general
con respecto a las configuraciones especificadas en sus pautas internas. Esto le puede ser de utilidad
para simplificar las auditorías de conformidad, los análisis de seguridad, la administración de cambios
y la resolución de problemas operativos. Para obtener más información, consulte Configuración de
AWS Config mediante la consola en la Guía para desarrolladores de AWS Config. Al especificar los
tipos de recursos para registras, asegúrese de incluir los recursos de Amazon S3.
Para ver un ejemplo de cómo utilizar AWS Config para monitorizar y dar respuesta a los buckets de
Amazon S3 que permiten el acceso a una red pública, consulte Cómo utilizar la configuración de AWS
para monitorizar y dar respuesta a los buckets de Amazon S3 que permiten el acceso a redes de
acceso a la red pública en el blog de seguridad de AWS.
Considere utilizar Amazon Macie con Amazon S3
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.
Utilice operaciones por lotes de Amazon S3 para copiar objetos y establecer etiquetas o listas de control
de acceso (ACL). También puede iniciar la restauración de objetos desde Amazon S3 Glacier o invocar
una función de AWS Lambda que realice acciones personalizadas con sus objetos. Puede realizar estas
operaciones en una lista personalizada de objetos o puede utilizar un informe de inventario de Amazon S3
para facilitar la generación de las listas de objetos, incluso las de mayor tamaño. Las operaciones por lotes
de Amazon S3 utilizan las mismas API de Amazon S3 que se utilizan con Amazon S3, por lo que la interfaz
le resultará familiar.
Temas
• Terminología (p. 486)
• Conceptos básicos: trabajos de las operaciones por lotes de Amazon S3 (p. 487)
• Creación de trabajos de operaciones por lotes de Amazon S3 (p. 488)
• Operaciones (p. 494)
• Administración de trabajos de operaciones por lotes (p. 504)
• Ejemplos de operaciones por lotes de Amazon S3 (p. 508)
Terminología
En esta sección, se utilizan los términos trabajo, operación y tarea, cuyas definiciones son las siguientes:
Trabajo
Un trabajo es la unidad de trabajo básica para operaciones por lotes de Amazon S3. Un trabajo
contiene toda la información necesaria para ejecutar la operación especificada en los objetos
enumerados en el manifiesto. Una vez que se proporciona esta información y se solicita que el trabajo
comience, el trabajo ejecuta la operación en cada objeto del manifiesto.
Operación
Una operación es un solo comando que quiere que un trabajo ejecute. Cada trabajo contiene
solamente un tipo de operación con un único conjunto de parámetros, que operaciones por lotes de
Amazon S3 ejecuta en cada objeto.
Tarea
Una tarea es la unidad de ejecución de un trabajo. Una tarea representa una llamada específica a una
operación de API de Amazon S3 o AWS Lambda para realizar la operación del trabajo en un único
objeto. En el transcurso de la vida útil de un trabajo, operaciones por lotes de Amazon S3 crea una
tarea para cada objeto especificado en el manifiesto.
Temas
• Cómo funciona un trabajo de operaciones por lotes de Amazon S3 (p. 487)
• Especificación de un manifiesto (p. 487)
Para crear un trabajo, debe proporcionar a las operaciones por lotes de Amazon S3 una lista de objetos
y especificar la acción que se debe realizar con dichos objetos. Las operaciones por lotes de Amazon S3
admiten las siguientes operaciones:
Los objetos sobre los que quiere que un trabajo actúe se enumeran en un objeto de manifiesto. Los
trabajos realizan la operación especificada en cada uno de los objetos incluidos en su manifiesto. Puede
utilizar un informe Inventario de Amazon S3 (p. 439) con formato CSV como manifiesto, lo cual facilita la
creación de grandes listas de objetos situados en un bucket. También puede especificar un manifiesto en
un formato CSV sencillo que le permite realizar operaciones por lotes en una lista personalizada de objetos
incluidos en un solo bucket.
Después de crear un trabajo, Amazon S3 procesa la lista de objetos del manifiesto y ejecuta la operación
especificada en cada objeto. Mientras el trabajo se está ejecutando, puede monitorizar su avance desde
un programa o a través de la consola Amazon S3. También puede configurar un trabajo para generar un
informe de finalización cuando haya terminado. En el informe de finalización, se describen los resultados
de cada una de las tareas ejecutadas por el trabajo. Para obtener más información sobre la monitorización
de trabajos, consulte Administración de trabajos de operaciones por lotes (p. 504).
Especificación de un manifiesto
Un manifiesto es un objeto de Amazon S3 que muestra las claves de objeto sobre las que desea que
Amazon S3 actúe. Si crea un manifiesto para un trabajo, debe especificar la clave de objeto del manifiesto,
una ETag y un ID de versión opcional. El contenido del manifiesto debe tener codificación URL. No se
admiten los manifiestos que utilizan cifrado en el servidor con claves proporcionadas por el cliente (SSE-C)
o cifrado en el servidor con claves administradas por AWS KMS (SSE-KMS). El manifiesto debe contener
el nombre del bucket, la clave del objeto y, de manera opcional, la versión del objeto. Las operaciones por
lotes de Amazon S3 no utilizan ninguno de los demás campos.
Puede especificar un manifiesto en una solicitud de creación de trabajo utilizando uno de los dos formatos
siguientes.
• Informe de inventario de Amazon S3: debe ser un informe de inventario de Amazon S3 con formato
CSV. Debe especificar el archivo manifest.json que está asociado con el informe de inventario. Para
obtener más información sobre los informes de inventario, consulte Inventario de Amazon S3 (p. 439).
Si el informe de inventario incluye los identificadores de las versiones, las operaciones por lotes de
Amazon S3 se ejecutarán en las versiones del objeto especificadas.
• Archivo CSV: cada fila del archivo debe incluir el nombre del bucket, la clave del objeto y, de manera
opcional, la versión del objeto. Las claves de objeto deben estar codificadas como URL, tal y como
se muestra en los siguientes ejemplos. El manifiesto debe incluir los ID de versión de todos los
objetos u omitirlos. Para obtener más información acerca del formato CSV del manifiesto, consulte
JobManifestSpec en la Amazon Simple Storage Service API Reference.
Examplebucket,objectkey1
Examplebucket,objectkey2
Examplebucket,objectkey3
Examplebucket,photos/jpgs/objectkey4
Examplebucket,photos/jpgs/newjersey/objectkey5
Examplebucket,object%20key%20with%20spaces
A continuación se muestra un ejemplo de un manifiesto en formato CSV que incluye los ID de versión:
Examplebucket,objectkey1,PZ9ibn9D5lP6p298B7S9_ceqx1n5EJ0p
Examplebucket,objectkey2,YY_ouuAJByNW1LRBfFMfxMge7XQWxMBF
Examplebucket,objectkey3,jbo9_jhdPEyB4RrmOxWS0kU0EoNrU_oI
Examplebucket,photos/jpgs/objectkey4,6EqlikJJxLTsHsnbZbSRffn24_eh5Ny4
Examplebucket,photos/jpgs/newjersey/objectkey5,imHf3FAiRsvBW_EHB8GOu.NHunHO1gVs
Examplebucket,object%20key%20with%20spaces,9HkPvDaZY5MVbMhn6TMn1YTb5ArQAo3w
Important
Si los objetos del manifiesto están en un bucket con control de versiones, debe especificar los
ID de versión de los objetos. Cuando se crea un objeto, las operaciones por lotes de Amazon
S3 analizan todo el manifiesto antes de ejecutar el trabajo. Sin embargo, no realizan una
"instantánea" del estado del bucket.
Debido a que los manifiestos pueden contener miles de millones de objetos, los trabajos podrían
tardar mucho tiempo en ejecutarse. Si sobrescribe un objeto con una versión nueva mientras un
trabajo está en ejecución y no especificó el ID de versión de ese objeto, Amazon S3 realizará la
operación en la última versión del objeto y no en la versión que existía cuando se creó el trabajo.
La única manera de evitar este comportamiento consiste en especificar los ID de versión de los
objetos que aparecen en el manifiesto.
Operación
Especifique la operación que quiere que operaciones por lotes de Amazon S3 ejecute en los objetos
del manifiesto. Cada tipo de operación acepta parámetros que son específicos de dicha operación,
lo que le permite realizar las mismas tareas que si la operación se realizara individualmente en cada
objeto.
Manifiesto
El manifiesto es una lista de todos los objetos en los que quiere que operaciones por lotes de Amazon
S3 ejecute la acción especificada. Puede utilizar un informe con formato CSV Inventario de Amazon
S3 (p. 439) como manifiesto o usar su propia lista CSV de objetos personalizada. Para obtener más
información sobre los manifiestos, consulte Especificación de un manifiesto (p. 487).
Prioridad
Utilice las prioridades de los trabajos para indicar la prioridad relativa de este trabajo con respecto
a otros que se estén ejecutando en la cuenta. Cuanto más elevado sea el número, mayor será la
prioridad.
Las prioridades de los trabajos solo tienen significado en relación con las prioridades establecidas
para otros trabajos de la misma cuenta y región, de modo que puede elegir el sistema de numeración
que mejor que le convenga. Por ejemplo, es posible que desee asignar la prioridad 1 a todos los
trabajos Initiate Restore Object, la prioridad 2 a todos los trabajos PUT Object Copy y la
prioridad 3 a todos los trabajos Put Object ACL. Las operaciones por lotes establecen la prioridad
de los trabajos en función de los números asignados, pero el orden no siempre se mantiene de forma
estricta. De este modo, no debería utilizar prioridades de trabajo para garantizar que cualquier trabajo
comenzará o finalizará antes que cualquier otro trabajo. Si necesita garantizar un orden estricto, debe
esperar hasta que un trabajo finalice para comenzar el siguiente.
RoleArn
Debe especificar un rol de IAM que ejecute el trabajo. El rol de IAM que utilice debe tener permisos
suficientes para realizar la operación especificada en el trabajo. Por ejemplo, para ejecutar un trabajo
PUT Object Copy, el rol de IAM debe tener permisos s3:GetObject en el bucket de origen y
permisos s3:PutObject en el bucket de destino. El rol también necesita permisos para leer el
manifiesto y escribir el informe de finalización del trabajo. Para obtener más información sobre los
roles de IAM, consulte Roles de IAM. Para obtener más información sobre los permisos de Amazon
S3, consulte Especificación de permisos en una política (p. 357).
Informe
Especifique si desea que operaciones por lotes de Amazon S3 genere un informe de finalización.
Si solicita un informe de finalización del trabajo, tiene que proporcionar los parámetros del informe
en este elemento. La información necesaria incluye el bucket donde quiere almacenar el informe, el
formato del informe, si quiere que el informe incluya detalles de todas las tareas o solo tareas con
error, y una cadena de prefijos opcional.
Descripción (opcional)
También puede proporcionar una descripción de hasta 256 caracteres que le ayude a monitorizar
y seguir el trabajo. Amazon S3 incluirá esta descripción siempre que devuelva información sobre el
trabajo o cuando muestre detalles del trabajo en la consola de Amazon S3. Puede ordenar y filtrar
los trabajos fácilmente en función de las descripciones asignadas. Las descripciones no tienen que
ser únicas, por lo que puede usar descripciones como categorías (por ejemplo, "trabajos de copia de
registros semanales") que le ayuden a hacer un seguimiento de los grupos de trabajos parecidos.
Cuando cree un trabajo a través de la AWS CLI, los SDK de AWS o la API REST, puede definir
operaciones por lotes de Amazon S3 para comenzar a procesar el trabajo automáticamente. El trabajo se
ejecuta en cuanto está listo y no tiene que esperar a que se ejecuten otros trabajos de mayor prioridad.
Cuando cree un trabajo a través de la Consola de administración de AWS, tendrá que revisar los detalles
del trabajo y confirmar que desea ejecutarlo para que operaciones por lotes pueda comenzar a procesarlo.
Después de confirmar que desea ejecutar el trabajo, avanza como si lo hubiera creado a través de uno de
los otros métodos. Si un trabajo permanece suspendido durante más de 30 días, no se ejecutará.
Temas
• Permisos necesarios para crear un trabajo de operaciones por lotes de Amazon S3 (p. 490)
• Creación de un rol de Amazon S3 de operaciones por lotes de IAM (p. 490)
Política de confianza
Para que la entidad principal del servicio de operaciones por lotes de Amazon S3 pueda asumir el rol, debe
asociar al rol de IAM la siguiente política de confianza.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"batchoperations.s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
Políticas de permisos
En función del tipo de operaciones, puede asociar una de estas políticas.
Note
• Con independencia de la operación que realice, Amazon S3 necesita permisos para leer el
objeto del manifiesto del bucket de S3 y, de forma opcional, escribir un informe en el bucket.
Por lo tanto, todas las políticas que se indican a continuación contienen estos permisos.
• Para los manifiestos de informe de inventario de Amazon S3, las operaciones por lotes de
Amazon S3 necesitan permiso para leer el objeto manifest.json, así como todos los archivos
CSV de datos asociados.
• Los permisos específicos de las versiones como s3:GetObjectVersion solo son obligatorios
cuando especifica el ID de la versión de los objetos.
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::{{DestinationBucket}}/*"
},
{
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectTagging"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::{{SourceBucket}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
{
"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}}/*"
]
}
]
}
{
"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}}/*"
]
}
]
}
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:RestoreObject"
],
"Resource": "arn:aws:s3:::{{TargetResource}}/*"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetBucketLocation"
],
"Resource": [
"arn:aws:s3:::{{ManifestBucket}}/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetBucketLocation"
],
"Resource":[
"arn:aws:s3:::{{ReportBucket}}/*"
]
}
]
}
Recursos relacionados
• Conceptos básicos: trabajos de las operaciones por lotes de Amazon S3 (p. 487)
• Operaciones (p. 494)
• Administración de trabajos de operaciones por lotes (p. 504)
Operaciones
operaciones por lotes de Amazon S3 admite cinco operaciones diferentes. En los temas de esta sección,
se describen las distintas operaciones.
Temas
• PUT Object Copy (p. 494)
• Initiate Restore Object (p. 494)
• Invocación de una función de Lambda desde operaciones por lotes de Amazon S3 (p. 496)
• Put Object ACL (p. 503)
• Put Object Tagging (p. 503)
Restricciones y limitaciones
• Todos los objetos de origen deben estar en el mismo bucket.
• Todos los objetos de destino deben estar en el mismo bucket.
• Debe tener permisos de lectura en el bucket de origen y permisos de escritura en el bucket de destino.
• Los objetos que se van a copiar pueden tener un tamaño máximo de 5 GB.
• Los trabajos PUT Object Copy se deben crear mejor en la región de destino, por ejemplo, la región a la
que pretende copiar los objetos.
• Pueden utilizarse todas las opciones de PUT Object Copy, excepto las comprobaciones condicionales en
ETags y cifrado del lado de servidor con claves de cifrado que proporcionó el cliente.
• Si los buckets no tienen control de versiones, se sobrescribirán los objetos con el mismo nombre de
clave.
• Los objetos no se copian necesariamente en el mismo orden en el que aparecen en el manifiesto. Por
tanto, para los buckets con control de versiones, si es importante conservar el orden de versión actual/no
actual, debe copiar primero todas las versiones no actuales y copiar después las versiones actuales en
un trabajo posterior una vez completado el primer trabajo.
• ExpirationInDays
Cuando se restaura un objeto desde S3 Glacier, el objeto restaurado es una copia temporal que
Amazon S3 elimina tras un periodo de tiempo establecido. Este elemento especifica cuánto tiempo
va a permanecer disponible la copia en Amazon S3. Una vez que venza la copia temporal, el objeto
solamente podrá recuperarse si se restaura de nuevo desde S3 Glacier. Para obtener más información
sobre la restauración de objetos, consulte Restaurar objetos archivados (p. 258).
• GlacierJobTier
Amazon S3 puede restaurar objetos desde S3 Glacier en función de tres niveles diferentes de
recuperación: Expedited, Standard y Bulk. Las operaciones por lotes de Amazon S3 solo admiten
los niveles Standard y Bulk. Para obtener más información acerca de los niveles de recuperación de
S3 Glacier, consulte Opciones de recuperación de archivos (p. 259). Para obtener más información
acerca del precio de cada nivel, consulte la sección "Precios de recuperación" en Precios de Amazon
S3 Glacier.
Important
El trabajo Initiate Restore Object solamente inicia la solicitud para restaurar objetos. operaciones
por lotes de Amazon S3 notifica que el trabajo de un objeto se ha completado una vez que
se ha iniciado la solicitud de dicho objeto. Amazon S3 no actualiza el trabajo ni envía ninguna
notificación cuando los objetos se han restaurado. No obstante, puede utilizar las notificaciones
de eventos para recibir notificaciones cuando los objetos estén disponibles en Amazon S3.
Para obtener más información, consulte Configuración de notificaciones de eventos de Amazon
S3 (p. 551).
Solapamiento de restauraciones
Si un trabajo Initiate Restore Object intenta restaurar un objeto que ya está en proceso de restaurarse, las
operaciones por lotes de Amazon S3 se comportarán del modo siguiente:
Limitaciones
Los trabajos Initiate Restore Object tienen las limitaciones siguientes:
• Los trabajos Initiate Restore Object deben crearse en la misma región que los objetos archivados.
• operaciones por lotes de Amazon S3 no admite el comando SELECT de S3 Glacier.
• operaciones por lotes de Amazon S3 no admite el nivel de recuperación Expedited.
Puede trabajar con operaciones por lotes de Amazon S3 para Lambda utilizando la Consola de
administración de AWS, AWS Command Line Interface (AWS CLI), los SDK de AWS o las API de REST.
Para obtener más información acerca del uso de Lambda, consulte Introducción a AWS Lambda en la
AWS Lambda Developer Guide.
En las secciones siguientes se explica cómo comenzar a utilizar operaciones por lotes de Amazon S3 con
Lambda.
Temas
• Uso de Lambda con operaciones por lotes de Amazon S3 (p. 496)
• Creación de una función de Lambda para utilizarla con operaciones por lotes de Amazon S3. (p. 497)
• Creación de un trabajo de operaciones por lotes de Amazon S3 que invoca una función de
Lambda (p. 500)
• Proporcionar información a nivel de tarea en los manifiestos de Lambda (p. 501)
Crea un trabajo de operaciones por lotes de Amazon S3 que invoca su función de Lambda. El trabajo
ejecuta la misma función de Lambda en todos los objetos que aparecen en el manifiesto. Puede controlar
las versiones de su función de Lambda que se utilizarán mientras se procesan los objetos del manifiesto.
Las operaciones por lotes de Amazon S3 admiten nombres de recursos de Amazon (ARN) incompletos,
alias y versiones específicas. Para obtener más información, consulte Introducción al control de versiones
de AWS Lambda en la AWS Lambda Developer Guide.
Si proporciona el trabajo de operaciones por lotes de Amazon S3 con un ARN de función que utiliza un
alias o el calificador $LATEST, y actualiza la versión a la que apunta cualquiera de ellos, las operaciones
por lotes de Amazon S3 comienzan por llamar a la nueva versión de su función de Lambda. Esto puede
resultar útil cuando se desea actualizar la funcionalidad en medio de un trabajo grande. Si no quiere que
las operaciones por lotes de Amazon S3 cambien la versión que se utiliza, facilite la versión específica en
el parámetro FunctionARN al crear el trabajo.
Debe crear funciones de Lambda específicamente para su uso con las operaciones por lotes de Amazon
S3 No es posible reutilizar funciones de Lambda basadas en eventos de Amazon S3. Esto es debido a que
las funciones de Lambda que se utilizan para las operaciones por lotes de Amazon S3 deben aceptar y
devolver campos de datos especiales.
El siguiente es un ejemplo de la política de confianza que puede usar para el rol de ejecución. Da a
Lambda permiso para ejecutar la función invocada por un trabajo operaciones por lotes de Amazon S3.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "batchoperations.s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
A continuación, se muestra un ejemplo de una política de IAM que concede a las operaciones por lotes de
Amazon S3 permiso para invocar la función de Lambda y leer el manifiesto de entrada.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BatchOperationsLambdaPolicy",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:PutObject",
"lambda:InvokeFunction"
],
"Resource": "*"
}
]
}
Example Solicitud
{
"invocationSchemaVersion": "1.0",
"invocationId": "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo",
"job": {
"id": "f3cc4f60-61f6-4a2b-8a21-d07600c373ce"
},
"tasks": [
{
"taskId": "dGFza2lkZ29lc2hlcmUK",
"s3Key": "customerImage1.jpg",
"s3VersionId": "1",
"s3BucketArn": "arn:aws:s3:us-east-1:0123456788:awsexamplebucket"
}
]
}
Example Respuesta
{
"invocationSchemaVersion": "1.0",
"treatMissingKeysAs" : "PermanentFailure",
"invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo",
"results": [
{
"taskId": "dGFza2lkZ29lc2hlcmUK",
"resultCode": "Succeeded",
"resultString": "[\"Mary Major", \"John Stiles\"]"
}
]
Como muestra el ejemplo, las claves de las operaciones por lotes de Amazon S3 están codificadas en
URL. Para utilizar Amazon S3 con otros servicios de AWS, es importante que decodifique la URL de la
clave que se pasa desde las operaciones por lotes de Amazon S3.
import boto3
import urllib
from botocore.exceptions import ClientError
# Prepare results
results = []
# Mark as succeeded
resultCode = 'Succeeded'
resultString = str(response)
except ClientError as e:
# If request timed out, mark as a temp failure
# and Amason S3 batch operations will make the task for retry. If
# any other exceptions are received, mark as permanent failure.
errorCode = e.response['Error']['Code']
errorMessage = e.response['Error']['Message']
if errorCode == 'RequestTimeout':
resultCode = 'TemporaryFailure'
resultString = 'Retry request to Amazon S3 due to timeout.'
else:
resultCode = 'PermanentFailure'
resultString = '{}: {}'.format(errorCode, errorMessage)
except Exception as e:
# Catch all exceptions to permanently fail the task
resultCode = 'PermanentFailure'
resultString = 'Exception: {}'.format(e.message)
finally:
results.append({
'taskId': taskId,
'resultCode': resultCode,
'resultString': resultString
})
return {
'invocationSchemaVersion': invocationSchemaVersion,
'treatMissingKeysAs': 'PermanentFailure',
'invocationId': invocationId,
'results': results
}
def rename_key(s3Key):
# Rename the key by adding additional suffix
return s3Key + '_new_suffix'
• El ARN de la función de Lambda (que puede incluir el alias de la función o un número de versión
específico)
• Un rol de IAM con permiso para invocar la función
• El parámetro de acción LambdaInvokeFunction
Para obtener más información acerca de la creación de un trabajo de operaciones por lotes de Amazon S3,
consulte Creación de trabajos de operaciones por lotes de Amazon S3 (p. 488) y Operaciones (p. 494).
En el siguiente ejemplo se crea un trabajo de operaciones por lotes de Amazon S3 que invoca una función
de Lambda mediante la AWS CLI.
Para especificar parámetros por clave en su manifiesto de operaciones por lotes de Amazon S3 para su
uso en el código de su función de Lambda, use el siguiente formato JSON codificado en URL. El campo
key se pasa a su función de Lambda como si fuera una clave de objeto de Amazon S3. Pero la función de
Lambda puede interpretar que contiene otros valores o claves múltiples, como se muestra a continuación.
Note
El número máximo de caracteres para el campo key del manifiesto es 1024.
Example — Manifiesto que sustituye las "claves de Amazon S3" por cadenas JSON
La versión codificada en URL debe facilitarse a las operaciones por lotes de Amazon S3.
my-bucket,%7B%22origKey%22%3A%20%22object1key%22%2C%20%22newKey%22%3A%20%22newObject1Key
%22%7D
my-bucket,%7B%22origKey%22%3A%20%22object2key%22%2C%20%22newKey%22%3A%20%22newObject2Key
%22%7D
my-bucket,%7B%22origKey%22%3A%20%22object3key%22%2C%20%22newKey%22%3A%20%22newObject3Key
%22%7D
Example — Función de Lambda con formato de manifiesto que escribe resultados en el informe
del trabajo
import json
from urllib.parse import unquote_plus
# This example Lambda function shows how to parse JSON that is encoded into the Amazon S3
batch
# operations manifest containing lines like this:
#
# bucket,encoded-json
# bucket,encoded-json
# bucket,encoded-json
#
# For example, if we wanted to send the following JSON to this Lambda function:
#
# Prepare results
results = []
# S3 batch operations currently only passes a single task at a time in the array of
tasks.
task = event['tasks'][0]
try:
# Assume it will succeed for now
resultCode = 'Succeeded'
resultString = ''
# Decode the JSON string that was encoded into the S3 Key value and convert the
# resulting string into a JSON structure.
s3Key_decoded = unquote_plus(s3Key)
keyJson = json.loads(s3Key_decoded)
# Extract some values from the JSON that we might want to operate on. In this
example
# we won't do anything except return the concatenated string as a fake result.
newKey = keyJson['newKey']
origKey = keyJson['origKey']
resultString = origKey + " --> " + newKey
except Exception as e:
# If we run into any exceptions, fail this task so batch operations does retry it
and
# return the exception string so we can see the failure message in the final report
# created by batch operations.
resultCode = 'PermanentFailure'
resultString = 'Exception: {}'.format(e)
finally:
# Send back the results for this task.
results.append({
'taskId': taskId,
'resultCode': resultCode,
'resultString': resultString
})
return {
'invocationSchemaVersion': invocationSchemaVersion,
'treatMissingKeysAs': 'PermanentFailure',
'invocationId': invocationId,
'results': results
}
Las operaciones por lotes de Amazon S3 permite utilizar ACL personalizadas que los usuarios pueden
definir y ACL predefinidas que están incluidas en Amazon S3 con un conjunto de permisos de acceso
preestablecidos.
Si los objetos del manifiesto están en un bucket con control de versiones, puede aplicar las ACL a
versiones específicas de cada objeto. Para ello, especifique un ID de versión para cada objeto del
manifiesto. Si no incluye el ID de versión de un objeto, las operaciones por lotes de Amazon S3 aplicarán
la ACL a la última versión del objeto.
Note
Si desea limitar el acceso público en todos los objetos de un bucket, debe utilizar el bloqueo
de acceso público de Amazon S3 en lugar de las operaciones por lotes de Amazon S3. Con el
bloqueo de acceso público, se puede limitar el acceso público en cada bucket o cuenta utilizando
una única y sencilla operación que surte efecto rápidamente. Esta opción es más adecuada
cuando el objetivo es controlar el acceso público en todos los objetos de un bucket o una cuenta.
Utilice las operaciones por lotes de Amazon S3 cuando necesite aplicar una ACL personalizada a
cada uno de los objetos del manifiesto. Para obtener más información sobre el bloqueo de acceso
público de Amazon S3, consulte Uso de Amazon S3 Block Public Access (p. 430).
Restricciones y limitaciones
• El rol que especifique para ejecutar el trabajo Put Object Acl debe tener permisos para realizar la
operación PUT Object acl de Amazon S3 subyacente. Para obtener más información sobre los permisos
necesarios, consulte PUT Object acl en la Amazon Simple Storage Service API Reference.
• Las operaciones por lotes de Amazon S3 utilizan la operación PUT Object acl de Amazon S3 para
aplicar la ACL especificada a cada uno de los objetos del manifiesto. Por tanto, todas las restricciones y
limitaciones que se aplican a la operación PUT Object acl subyacente también se aplicarán a los trabajos
Put Object Acl de las operaciones por lotes de Amazon S3. Para obtener más información, consulte la
sección Recursos relacionados (p. 503) de esta página.
Recursos relacionados
• Administración de acceso con ACL (p. 418)
• GET Object ACL en la Amazon Simple Storage Service API Reference
Para crear un trabajo Put Object Tagging, tiene que proporcionar el conjunto de etiquetas que desee
aplicar. Las operaciones por lotes de Amazon S3 aplican el mismo conjunto de etiquetas a todos los
objetos. El conjunto de etiquetas que proporcione sustituirá a los conjuntos que ya estén asociados con los
objetos del manifiesto. Las operaciones por lotes de Amazon S3 no permiten que se agreguen etiquetas a
los objetos mientras se mantienen las existentes.
Si los objetos del manifiesto están en un bucket con control de versiones, puede aplicar un conjunto
de etiquetas a versiones específicas de cada objeto. Para ello, especifique un ID de versión para cada
objeto del manifiesto. Si no incluye el ID de versión de un objeto, las operaciones por lotes de Amazon S3
aplicarán el conjunto de etiquetas a la última versión de cada objeto.
Restricciones y limitaciones
• El rol que especifique para ejecutar el trabajo Put Object Tagging debe tener permisos para realizar
la operación PUT Object tagging de Amazon S3 subyacente. Para obtener más información sobre los
permisos necesarios, consulte PUT Object tagging en la Amazon Simple Storage Service API Reference.
• Las operaciones por lotes de Amazon S3 utilizan la operación PUT Object tagging de Amazon S3
para aplicar etiquetas a cada uno de los objetos del manifiesto. Por tanto, todas las restricciones y
limitaciones que se aplican a la operación PUT Object tagging subyacente también se aplicarán a los
trabajos Put Object tagging de las operaciones por lotes de Amazon S3. Para obtener más información,
consulte la sección Recursos relacionados (p. 504) de esta página.
Recursos relacionados
• Etiquetado de objetos (p. 118)
• GET Object tagging en la Amazon Simple Storage Service API Reference
• PUT Object tagging en la Amazon Simple Storage Service API Reference
Temas
• Hacer un listado de trabajos (p. 504)
• Ver detalles del flujo de trabajo (p. 505)
• Asignación de la prioridad de los trabajos (p. 505)
• Estado del trabajo (p. 505)
• Seguimiento de los errores de los trabajos (p. 507)
• Notificaciones y registro (p. 508)
• Informes de finalización (p. 508)
La prioridad de un trabajo se puede modificar mientras está en ejecución. Si se envía un nuevo trabajo con
una prioridad mayor mientras hay otro trabajo en ejecución, el trabajo con menor prioridad se detendrá
para permitir que se ejecute el de mayor prioridad.
Note
operaciones por lotes de Amazon S3 respeta las prioridades de los trabajos en la medida de lo
posible. Aunque por lo general los trabajos con mayor prioridad prevalecerán sobre los trabajos
con una prioridad más baja, Amazon S3 no garantiza un orden estricto de los trabajos.
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
Para impedir que los trabajos ejecuten un número elevado de operaciones incorrectamente, Amazon
S3 impone un umbral de errores de tareas en cada trabajo de operaciones por lotes. Una vez que un
trabajo ha ejecutado al menos 1000 tareas, Amazon S3 monitoriza la tasa de errores de tareas. Si en algún
momento la tasa de errores (el número de tareas con error en comparación con el número total de tareas
ejecutadas) supera el 50 %, el trabajo deja de ejecutarse. Si el trabajo deja de ejecutarse porque se ha
superado el umbral de errores de tareas, es posible identificar la causa de dichos errores. Por ejemplo,
podría ocurrir que, por accidente, haya incluido en el manifiesto algunos objetos que no existen en el
bucket especificado. Después de solucionar los errores, podrá volver a enviar el trabajo.
Note
operaciones por lotes de Amazon S3 se ejecuta de forma asincrónica y las tareas no tienen que
ejecutarse necesariamente en el mismo orden en el que los objetos aparecen en el manifiesto.
Por tanto, no puede utilizar el orden del manifiesto para determinar qué tareas de los objetos se
ejecutaron o no correctamente. En su lugar, puede examinar el informe de finalización del trabajo
(si solicitó uno) o ver los registros de eventos de AWS CloudTrail para tratar de determinar el
origen de los errores.
Notificaciones y registro
Además de solicitar informes de finalización, también puede capturar, revisar y auditar la actividad de
operaciones por lotes con eventos de Amazon S3. A medida que el trabajo avanza, emite eventos que
se pueden capturar mediante AWS CloudTrail, Amazon Simple Notification Service (Amazon SNS) y
Amazon Simple Queue Service (Amazon SQS). Como las operaciones de lotes utilizan las API de Amazon
S3 existentes para realizar tareas, esas tareas también emiten los mismos eventos que si se las llamara
directamente. Así, puede hacer un seguimiento y registrar el avance de su trabajo y todas sus tareas
mediante la misma notificación, registrando y auditando herramientas y procesos que ya utiliza con
Amazon S3. Para obtener más información acerca de los eventos de Amazon S3, consulte Configuración
de notificaciones de eventos de Amazon S3 (p. 551).
Informes de finalización
Al crear un trabajo, puede solicitar un informe de finalización. Siempre que operaciones por lotes de
Amazon S3 invoque correctamente al menos una tarea, Amazon S3 generará un informe de finalización
cuando las tareas terminen de ejecutarse, encuentren algún error o se cancelen. Puede configurar el
informe de finalización para incluir todas las tareas o solo las tareas con error.
El informe de finalización incluye la configuración del trabajo, el estado y la información de cada tarea,
incluidas la clave y la versión del objeto, el estado, códigos de error y descripciones de los errores. Aunque
no se configure un informe de finalización, es posible monitorizar y auditar el trabajo y las tareas con
CloudTrail, Amazon CloudWatch, Amazon SNS y Amazon SQS. Sin embargo, los informes de finalización
constituyen un mecanismo sencillo para ver los resultados de las tareas en un formato unificado sin
necesidad de realizar ninguna configuración adicional. Para ver un ejemplo de un informe de finalización,
consulte Ejemplos de informes de finalización de las operaciones por lotes de Amazon S3 (p. 509).
El informe de finalización contiene información adicional sobre cada tarea, incluidas la clave y la versión
del objeto, el estado, códigos de error y descripciones de los errores. La descripción de los errores de cada
tarea que ha fallado se puede utilizar para diagnosticar problemas durante la creación de trabajos, como
los permisos.
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"
}
Los informes de tareas con errores contienen los campos Bucket, Key, VersionId, TaskStatus,
ErrorCode, HTTPStatusCode y ResultMessage de todas las tareas con errores.
El siguiente informe de ejemplo muestra un caso en el que la función de AWS Lambda agotó el tiempo
de espera, provocando que se sobrepasara el umbral de errores. Esto hizo que se marcara como
PermanentFailure.
Los informes de tareas correctas contienen los campos Bucket, Key, VersionId, TaskStatus,
ErrorCode, HTTPStatusCode y ResultMessage de todas las tareas finalizadas.
awsexamplebucket,image_17775,,succeeded,200,,"{u'CopySourceVersionId':
'xVR78haVKlRnurYofbTfYr3ufYbktF8h', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 39, tzinfo=tzlocal()), u'ETag':
'""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata': {'HTTPStatusCode':
200, 'RetryAttempts': 0, 'HostId': 'nXNaClIMxEJzWNmeMNQV2KpjbaCJLn0OGoXWZpuVOFS/
iQYWxb3QtTvzX9SVfx2lA3oTKLwImKw=', 'RequestId': '3ED5852152014362', 'HTTPHeaders':
{'content-length': '234', 'x-amz-id-2': 'nXNaClIMxEJzWNmeMNQV2KpjbaCJLn0OGoXWZpuVOFS/
iQYWxb3QtTvzX9SVfx2lA3oTKLwImKw=', 'x-amz-copy-source-version-id':
'xVR78haVKlRnurYofbTfYr3ufYbktF8h', 'server': 'AmazonS3', 'x-amz-request-id':
'3ED5852152014362', 'date': 'Fri, 05 Apr 2019 17:35:39 GMT', 'content-type': 'application/
xml'}}}"
awsexamplebucket,image_17763,,succeeded,200,,"{u'CopySourceVersionId':
'6HjOUSim4Wj6BTcbxToXW44pSZ.40pwq', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 39, tzinfo=tzlocal()),
u'ETag': '""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata':
{'HTTPStatusCode': 200, 'RetryAttempts': 0, 'HostId': 'GiCZNYr8LHd/
Thyk6beTRP96IGZk2sYxujLe13TuuLpq6U2RD3we0YoluuIdm1PRvkMwnEW1aFc=', 'RequestId':
'1BC9F5B1B95D7000', 'HTTPHeaders': {'content-length': '234', 'x-amz-id-2': 'GiCZNYr8LHd/
Thyk6beTRP96IGZk2sYxujLe13TuuLpq6U2RD3we0YoluuIdm1PRvkMwnEW1aFc=', 'x-amz-copy-source-
version-id': '6HjOUSim4Wj6BTcbxToXW44pSZ.40pwq', 'server': 'AmazonS3', 'x-amz-request-id':
'1BC9F5B1B95D7000', 'date': 'Fri, 05 Apr 2019 17:35:39 GMT', 'content-type': 'application/
xml'}}}"
awsexamplebucket,image_17860,,succeeded,200,,"{u'CopySourceVersionId':
'm.MDD0g_QsUnYZ8TBzVFrp.TmjN8PJyX', u'CopyObjectResult': {u'LastModified':
datetime.datetime(2019, 4, 5, 17, 35, 40, tzinfo=tzlocal()), u'ETag':
'""fe66f4390c50f29798f040d7aae72784""'}, 'ResponseMetadata': {'HTTPStatusCode':
200, 'RetryAttempts': 0, 'HostId': 'F9ooZOgpE5g9sNgBZxjdiPHqB4+0DNWgj3qbsir
+sKai4fv7rQEcF2fBN1VeeFc2WH45a9ygb2g=', 'RequestId': '8D9CA56A56813DF3', 'HTTPHeaders':
{'content-length': '234', 'x-amz-id-2': 'F9ooZOgpE5g9sNgBZxjdiPHqB4+0DNWgj3qbsir
+sKai4fv7rQEcF2fBN1VeeFc2WH45a9ygb2g=', 'x-amz-copy-source-version-id':
'm.MDD0g_QsUnYZ8TBzVFrp.TmjN8PJyX', 'server': 'AmazonS3', 'x-amz-request-id':
'8D9CA56A56813DF3', 'date': 'Fri, 05 Apr 2019 17:35:40 GMT', 'content-type': 'application/
xml'}}}"
destino. En las secciones siguientes, se explica cómo almacenar y utilizar un manifiesto que se encuentra
en otra cuenta de AWS.
Temas
• Mediante un informe de inventario entregado a la cuenta de AWS de destino (p. 511)
• Uso de un manifiesto CSV almacenado en la cuenta de AWS de origen (p. 513)
En el siguiente procedimiento de la consola, se configuran los permisos para que un trabajo de las
operaciones por lotes de Amazon S3 copie objetos desde una cuenta de origen a una cuenta de destino, y
el informe de inventario se almacena en la cuenta de AWS de destino.
Para configurar el inventario de Amazon S3 para buckets de origen y destino que pertenecen a
distintas cuentas de AWS
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.
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.
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.
3. Copie la política de bucket de destino que aparece en la consola.
4. En la cuenta de destino, añada la política de bucket que ha copiado al bucket de manifiestos de
destino donde se almacena el informe de inventario.
5. En la cuenta de destino, cree un rol basado en la política de confianza de las operaciones por lotes
de Amazon S3. Para obtener más información sobre la política de confianza, consulte Política de
confianza (p. 490). Para obtener más información sobre cómo crear un rol, consulte Creación de un
rol para delegar permisos a un servicio de AWS en la Guía del usuario de IAM.
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/*"
]
}
]
}
{
"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/*"
}
]
}
7. Una vez que el informe de inventario esté disponible, cree un trabajo de copia del objeto PUT de las
operaciones por lotes de Amazon S3 en la cuenta de destino y seleccione el informe de inventario en
el bucket de manifiestos de destino. Necesita el ARN del rol que creó en la cuenta de destino.
Para obtener información general sobre cómo crear un trabajo, consulte Creación de trabajos de
operaciones por lotes de Amazon S3 (p. 488). Para obtener información sobre cómo crear un trabajo
utilizando la consola, consulte Creación de trabajos de operaciones por lotes de Amazon S3 en la
Guía del usuario de la consola de Amazon Simple Storage Service.
En el siguiente procedimiento, se muestra cómo configurar los permisos cuando se utiliza un trabajo de
las operaciones por lotes de Amazon S3 para copiar objetos desde una cuenta de origen a una cuenta de
destino con el archivo de manifiesto CSV almacenado en la cuenta de origen.
1. En la cuenta de destino, cree un rol basado en la política de confianza de las operaciones por lotes de
Amazon S3. En este procedimiento, la cuenta de destino es la cuenta en la que se copian los objetos.
Para obtener más información sobre la política de confianza, consulte Política de confianza (p. 490).
Para obtener más información sobre cómo crear un rol, consulte Creación de un rol para delegar
permisos a un servicio de AWS en la Guía del usuario de IAM.
Si crea el rol utilizando la consola, introduzca un nombre para el rol (el rol de ejemplo utiliza el nombre
BatchOperationsDestinationRoleCOPY). Elija el servicio S3 y, a continuación, elija el caso de
uso S3 bucket Batch Operations (Operaciones por lotes de bucket de S3), que aplica la política de
confianza al rol. A continuación, elija Create policy (Crear política) para asociar la política siguiente al
rol.
{
"Version": "2012-10-17",
"Statement": [
{
"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/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceManfiestRead",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::DestinationAccountNumber:user/
ConsoleUserCreatingJob",
"arn:aws:iam::DestinationAccountNumber:role/
BatchOperationsDestinationRoleCOPY"
]
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::ObjectSourceManifestBucket/*"
}
]
}
Esta política también concede permisos para permitir a un usuario de la consola que esté creando un
trabajo en la cuenta de destino los mismos permisos en el bucket de manifiestos de origen a través de
la misma política de bucket.
3. En la cuenta de origen, cree una política de bucket para el bucket de origen que conceda el rol que
creó para obtener (GET) objetos, ACL, etiquetas y versiones en el bucket de origen. operaciones por
lotes de Amazon S3 podrá obtener objetos del bucket de origen a través del rol de confianza.
A continuación, se muestra un ejemplo de política de bucket para el bucket que contiene los objetos
de origen.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowBatchOperationsSourceObjectCOPY",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::DestinationAccountNumber:role/
BatchOperationsDestinationRoleCOPY"
},
"Action": [
"s3:GetObject",
"s3:GetObjectVersion",
"s3:GetObjectAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource": "arn:aws:s3:::ObjectSourceBucket/*"
}
]
}
4. Cree un trabajo de las operaciones por lotes de Amazon S3 en la cuenta de destino. Necesita el ARN
del rol que creó en la cuenta de destino.
Para obtener información general sobre cómo crear un trabajo, consulte Creación de trabajos de
operaciones por lotes de Amazon S3 (p. 488). Para obtener información sobre cómo crear un trabajo
utilizando la consola, consulte Creación de trabajos de operaciones por lotes de Amazon S3 en la
Guía del usuario de la consola de Amazon Simple Storage Service.
1. Cree un rol de IAM y asígnele permisos. Este rol concede a Amazon S3 permiso para añadir las
etiquetas de objetos para las que se crea un trabajo en el próximo paso.
"Action":"sts:AssumeRole"
}
]
}'
Registre el nombre de recurso de Amazon (ARN) del rol. Lo necesitará para poder crear los
trabajos.
b. Cree una política de IAM con permisos y asóciela al rol de IAM que creó en el paso anterior. Para
obtener más información sobre los permisos, consulte Concesión de permisos para operaciones
por lotes de Amazon S3 (p. 490).
--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
5. Actualice la prioridad del trabajo (cuanto más elevado sea el número, mayor será la prioridad de
ejecución).
Temas
• Creación de un trabajo de operaciones por lotes de Amazon S3 utilizando AWS SDK for
Java (p. 518)
• Cancelación de un trabajo de operaciones por lotes de Amazon S3 utilizando AWS SDK for
Java (p. 519)
• Actualización del estado de un trabajo de operaciones por lotes de Amazon S3 utilizando AWS SDK for
Java (p. 520)
• Actualización de la prioridad de un trabajo de operaciones por lotes de Amazon S3 utilizando AWS
SDK for Java (p. 521)
Para obtener información acerca de la configuración de permisos que necesita para crear un trabajo,
consulte Concesión de permisos para operaciones por lotes de Amazon S3 (p. 490).
Example
package aws.example.s3control;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;
import com.amazonaws.services.s3control.model.*;
import java.util.UUID;
import java.util.ArrayList;
try {
JobOperation jobOperation = new JobOperation()
.withS3PutObjectTagging(new S3SetObjectTaggingOperation()
.withTagSet(tagSet)
);
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();
}
}
}
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;
try {
AWSS3Control s3ControlClient = AWSS3ControlClient.builder()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(US_WEST_2)
.build();
s3ControlClient.updateJobStatus(new UpdateJobStatusRequest()
.withAccountId(accountId)
.withJobId(jobId)
.withStatusUpdateReason("No longer needed")
.withRequestedJobStatus("Cancelled"));
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it and returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
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;
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();
}
}
}
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;
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();
}
}
}
Temas
• Punto de enlace de sitio web (p. 524)
• Configuración de un bucket para alojamiento de sitios web (p. 526)
• Tutoriales de ejemplo: alojamiento de sitios web en Amazon S3 (p. 538)
Para alojar un sitio web estático; debe configurar un bucket de Amazon S3 para el alojamiento de sitio web
y cargar el contenido del sitio web en el bucket. Este bucket debe tener acceso de lectura público. El hecho
de que todo el mundo tenga acceso de lectura a este bucket es intencionado. El sitio web está entonces
disponible en el punto de enlace del sitio web específico de la región AWS del bucket, que está en uno de
los formatos siguientes:
<bucket-name>.s3-website-<AWS-region>.amazonaws.com
<bucket-name>.s3-website.<AWS-region>.amazonaws.com
Para ver una lista de los puntos de enlace de sitio web específicos por región de AWS para Amazon S3,
consulte Punto de enlace de sitio web (p. 524). Por ejemplo, supongamos que crea un bucket llamado
examplebucket en Región EE.UU. Oeste (Oregón) y lo configura como sitio web. En los siguientes
Uniform Resource Locators (URL, Localizadores uniformes de recursos) de ejemplo, se provee el acceso
al contenido del sitio web:
• Este URL devuelve un documento de índice predeterminado que configuró para el sitio web.
http://examplebucket.s3-website-us-west-2.amazonaws.com/
• Este URL solicita el objeto photo.jpg, que está almacenado en el nivel raíz del bucket.
http://examplebucket.s3-website-us-west-2.amazonaws.com/photo.jpg
http://examplebucket.s3-website-us-west-2.amazonaws.com/docs/doc1.html
En lugar de obtener acceso al sitio web con el punto de enlace de sitio web de Amazon S3, puede usar su
propio dominio, como example.com, para alojar su contenido. Amazon S3, junto con Amazon Route 53,
permite alojar un sitio web en el dominio raíz. Por ejemplo, si tiene el dominio raíz example.com y aloja
el sitio web en Amazon S3, los visitantes podrán obtener acceso al sitio web desde cualquier navegador al
escribir http://www.example.com o http://example.com. Para ver un tutorial de ejemplo, consulte
Ejemplo: configuración de un sitio web estático con un dominio personalizado (p. 540).
Para configurar un bucket para el alojamiento de un sitio web, debe añadir la configuración de sitio web
al bucket. Para obtener más información, consulte Configuración de un bucket para alojamiento de sitios
web (p. 526).
Note
Los puntos de enlace de sitio web de Amazon S3 no admiten HTTPS. Para obtener información
acerca de cómo utilizar HTTPS con un bucket de Amazon S3, consulte la sección sobre cómo se
usa CloudFront para atender solicitudes HTTPS para mi bucket de Amazon S3 y Exigir HTTPS
para la comunicación entre CloudFront y su origen de Amazon S3.
Los puntos de enlace de sitio web de Amazon S3 no admiten HTTPS. Para obtener información
acerca de cómo utilizar HTTPS con un bucket de Amazon S3, consulte la sección sobre cómo se
usa CloudFront para atender solicitudes HTTPS para mi bucket de Amazon S3 y Exigir HTTPS
para la comunicación entre CloudFront y su origen de Amazon S3.
A continuación, se muestran las dos formas generales de un punto de enlace de sitio web de Amazon S3.
bucket-name.s3-website-region.amazonaws.com
bucket-name.s3-website.region.amazonaws.com
El uso de una forma u otra de punto de enlace depende de la región donde se encuentre el bucket. Por
ejemplo, si el bucket se llama example-bucket y se encuentra en la región EE.UU. Oeste (Oregón), el
sitio web estará disponible en el siguiente punto de enlace de sitio web de Amazon S3:
http://example-bucket.s3-website-us-west-2.amazonaws.com/
http://example-bucket.s3-website.eu-central-1.amazonaws.com/
Para ver una lista de puntos de enlace de Amazon S3 por región, consulte Puntos de enlace de sitios web
de Amazon Simple Storage Service en la Referencia general de AWS.
Para que sus clientes puedan obtener acceso al contenido en el punto de enlace de sitio web, debe
configurar el contenido para poder leerlo públicamente. Para ello, puede utilizar una política de bucket
o una Access Control List (ACL, Lista de control de acceso) en un objeto para conceder los permisos
necesarios.
Note
Los buckets de pago por solicitante no permiten el acceso mediante puntos de enlace de sitio
web. Cualquier solicitud a este tipo de bucket recibirá una respuesta 403 Access Denied. Para
obtener más información, consulte Buckets de pago por solicitante (p. 83).
Si tiene un dominio registrado, puede añadir una entrada CNAME de DNS para asociar el punto de enlace
del sitio web de Amazon S3. Por ejemplo, si ha registrado el dominio www.example-bucket.com,
puede crear un bucket www.example-bucket.com y añadir un registro CNAME de DNS que se asocie
a www.example-bucket.com.s3-website-<region>.amazonaws.com. Todas las solicitudes
a http://www.example-bucket.com serán direccionadas a www.example-bucket.com.s3-
website-<region>.amazonaws.com. Para obtener más información, consulte Alojamiento virtual de
buckets (p. 46).
Diferencia clave Punto de enlace de la API de REST Punto de conexión de sitio web
Control de acceso Admite contenido público y privado. Admite solo contenido público que se
puede leer.
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
Para ver una lista con los puntos de enlace de Amazon S3, consulte Puntos de enlace de solicitud (p. 12).
Para obtener información acerca de lo que es un documento de índice, consulte Configuración para el
uso de documentos de índice (p. 526).
Cuando configura el bucket como un sitio web, debe proporcionar el nombre del documento de índice.
Luego debe cargar un objeto con este nombre y configurarlo para que se pueda leer públicamente.
La barra diagonal en el URL raíz es opcional. Por ejemplo, si configura el sitio web con index.html como
un documento de índice, cualquier de los siguientes dos URL devuelve index.html.
http://example-bucket.s3-website-region.amazonaws.com/
http://example-bucket.s3-website-region.amazonaws.com
Para obtener más información acerca de los puntos de enlace de sitio web de Amazon S3, consulte Punto
de enlace de sitio web (p. 524).
• sample1.jpg
• photos/2006/Jan/sample2.jpg
• photos/2006/Feb/sample3.jpg
Aunque están almacenados sin una organización jerárquica, puede inferir la siguiente estructura lógica de
carpeta de los nombres de clave.
El concepto de carpeta que admite la consola de Amazon S3 está basado en los nombres de clave de
objetos. Para continuar con el ejemplo anterior, la consola muestra el bucket examplebucket con una
carpeta photos.
Puede cargar objetos en el bucket o en la carpeta photos dentro del bucket. Si añade el objeto
sample.jpg al bucket, el nombre de clave será sample.jpg. Si carga el objeto a la carpeta photos, el
nombre de clave del objeto será photos/sample.jpg.
Si crea esa estructura de carpeta en el bucket, debe tener un documento de índice en cada nivel. Cuando
un usuario especifica un URL que es similar a la búsqueda de una carpeta, la presencia o ausencia de una
barra diagonal determina el comportamiento del sitio web. Por ejemplo, el siguiente URL, con una barra
diagonal, devuelve el documento de índice photos/index.html.
http://example-bucket.s3-website-region.amazonaws.com/photos/
No obstante, si excluye la barra diagonal de la dirección URL anterior, Amazon S3 buscará primero un
objeto photos en el bucket. Si no encuentra el objeto photos, busca un documento de índice photos/
index.html. Si se encuentra el documento, Amazon S3 devuelve un mensaje 302 Found y apunta
a la clave photos/. Para las solicitudes subsiguientes a photos/, Amazon S3 devuelve photos/
index.html. Si no encuentra el documento de índice, Amazon S3 devuelve un error.
La siguiente política de bucket de ejemplo concede a todos los usuarios el acceso a los objetos en la
carpeta especificada. Para obtener más información acerca de las políticas de bucket, consulte Uso de
políticas de bucket y usuario (p. 353).
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]
Note
• Para alojar un sitio web, el bucket debe tener acceso de lectura público. El hecho de que todo el
mundo tenga acceso de lectura a este bucket es intencionado.
• La política de bucket solo se aplica a los objetos que pertenecen al propietario del bucket.
Si el bucket contiene objetos que no pertenecen al propietario del bucket, se debe conceder
el permiso READ público para esos objetos mediante la lista de control de acceso (ACL) de
objetos.
Puede conceder el permiso de lectura pública para sus objetos con una política de bucket o una ACL
de objetos. Para que un objeto tenga permiso de lectura pública mediante una ACL, conceda el permiso
READ al grupo AllUsers, como se muestra en el siguiente elemento concedido. Añada el siguiente
elemento concedido a la ACL de objetos. Para obtener más información sobre la administración de las
ACL, consulte Administración de acceso con ACL (p. 418).
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers</URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
Ahora puede revisar los registros en el bucket de logs.example.com, tanto en root como en cdn
folders.
301 Moved Cuando un usuario envía una solicitud directamente a los puntos de enlace de
Permanently sitio web de Amazon S3 (http://s3-website-<region>.amazonaws.com/),
(Desplazado Amazon S3 devuelve una respuesta 301 Moved Permanently (Desplazado
permanentemente) permanentemente) y redirige esas solicitudes a https://aws.amazon.com/
s3/.
302 Found Cuando Amazon S3 recibe una solicitud para una clave x, http://
(Encontrado) <bucket>.s3-website-<region>.amazonaws.com/x, sin barra diagonal,
primero busca el objeto con el nombre de clave x. Si no encuentra el objeto,
Amazon S3 determina que la solicitud es para una subcarpeta x, redirige la
solicitud, añade una barra al final y devuelve el código 302 Found (Encontrado).
304 Not Modified Los usuarios de Amazon S3 solicitan encabezados If-Modified-Since, If-
(No modificado) Unmodified-Since, If-Match y/o If-None-Match para determinar si el
objeto solicitado es el mismo que la copia almacenada que conserva el cliente.
Si el objeto es el mismo, el punto de enlace del sitio web devuelve una respuesta
304 Not Modified (No modificado).
400 Malformed El punto de enlace de sitio web devuelve una respuesta 400 Malformed Request
Request (Solicitud (Solicitud con formato incorrecto) cuando un usuario intenta obtener acceso a un
con formato bucket con el punto de enlace regional incorrecto.
incorrecto)
403 Forbidden El punto de enlace de sitio web devuelve una respuesta 403 Forbidden (Prohibido)
cuando la solicitud de un usuario se traduce en un objeto que no se puede leer
públicamente. El propietario del objeto debe permitir la lectura pública del objeto
mediante una política de bucket o una ACL.
404 Not Found (No El punto de enlace de sitio web devuelve una respuesta 404 Not Found (No
encontrado) encontrado) por las razones siguientes:
• Amazon S3 determina que el URL del sitio web hace referencia a una clave de
objeto que no existe.
• Amazon infiere que la solicitud es para un documento de índice que no existe.
• Un bucket especificado en el URL no existe.
• Un bucket especificado en el URL existe pero no está configurado como sitio
web.
Puede crear un documento personalizado que se devuelve para 404 Not Found
(No encontrado). Asegúrese de que el documento esté cargado al bucket
configurado como sitio web y que la configuración de alojamiento del sitio web
utilice el documento.
Para obtener información acerca de cómo interpreta Amazon S3 una URL como
una solicitud de objeto o un documento de índice, consulte Configuración para el
uso de documentos de índice (p. 526).
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).
Si se produce un error, Amazon S3 devuelve un documento de error HTML. Si ha configurado su sitio web
con un documento de error personalizado, Amazon S3 devolverá ese documento. Sin embargo, algunos
navegadores muestran su propio mensaje de error cuando se produce un error, y omiten el documento
de error de Amazon S3. Por ejemplo, cuando se produce un error HTTP 404 Not Found, Google Chrome
puede omitir el documento de error de Amazon S3 y mostrar su propio error.
Temas
• Soporte de redireccionamiento de página en la consola de Amazon S3 (p. 532)
• Configuración de redireccionamiento de página desde la API de REST (p. 533)
• Redireccionamientos condicionales avanzados (p. 534)
redireccionar una solicitud a otro objeto, debe establecer la ubicación de redireccionamiento para la clave
del objeto de destino. Para redireccionar una solicitud a un URL externo, debe establecer la ubicación de
redireccionamiento para el URL que desee. Para obtener más información acerca de los metadatos del
objeto, consulte Metadatos de objetos definidos por el sistema (p. 108).
Un bucket configurado para un alojamiento de sitio web contiene el punto de enlace de sitio web y el punto
de enlace REST. Una solicitud para una página que está configurada como un redireccionamiento 301
tiene los siguientes resultados posibles, en función del punto de enlace de la solicitud:
• Punto de enlace de sitio web en región específica: Amazon S3 redirige la solicitud de página según el
valor de la propiedad x-amz-website-redirect-location.
• Punto de enlace REST: Amazon S3 no redirige la solicitud de página. Devuelve el objeto solicitado.
Para obtener más información acerca de los puntos de enlace, consulte Diferencias clave entre el punto de
enlace del sitio web de Amazon y de la API de REST (p. 525).
• Para conservar el contenido del objeto page1.html y solo redireccionar las solicitudes de la página,
seleccione el objeto page1.html.
También puede establecer el valor para un URL externo, como http://www.example.com. Por
ejemplo, si su dominio raíz es example.com, y desea enviar solicitudes para http://example.com
y para http://www.example.com, puede crear dos buckets denominados example.com y
www.example.com. A continuación, mantenga el contenido en uno de los buckets (por ejemplo,
example.com), y configure el otro bucket para redirigir todas las solicitudes al bucket example.com.
• Para eliminar el contenido del objeto page1.html y redireccionar solicitudes, puede cargar un nuevo
objeto de cero bytes con la misma clave, page1.html, para reemplazar el objeto existente. Luego,
debe especificar Website Redirect Location para page1.html en el proceso de carga. Para
obtener más información acerca de cómo cargar un objeto, consulte Carga de objetos en S3 en la Guía
del usuario de la consola de Amazon Simple Storage Service.
• PUT Object
• Initiate Multipart Upload
• POST Object
• PUT Object - Copy
Cuando establece un redireccionamiento de página, puede conservar o eliminar el contenido del objeto.
Por ejemplo, supongamos que tiene un objeto page1.html en el bucket.
• Para conservar el contenido de page1.html y redirigir solo las solicitudes de página, puede enviar
una solicitud PUT Object - Copy para crear un nuevo objeto page1.html que utilice el objeto existente
page1.html como origen. Debe establecer el encabezado x-amz-website-redirect-location
en su solicitud. Cuando se completa la solicitud, la página original tendrá su contenido sin cambios, pero
Amazon S3 redireccionará cualquier solicitud a esa página a la ubicación de redireccionamiento que
especificó.
• Para eliminar el contenido del objeto page1.html y redireccionar solicitudes a la página, puede
enviar una solicitud PUT Object para cargar un objeto de cero bytes con la misma clave de objeto:
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.
Al configurar un bucket para el alojamiento de un sitio web, tiene la opción de especificar reglas avanzadas
de redireccionamiento.
Para redireccionar a otro host todas las solicitudes dirigidas al punto de enlace del sitio web del bucket,
solo necesita proporcionar el nombre de host.
Debe describir las reglas con XML. En la sección siguiente se proveen ejemplos de la sintaxis general para
especificar reglas de redireccionamiento.
<RoutingRules> =
<RoutingRules>
<RoutingRule>...</RoutingRule>
[<RoutingRule>...</RoutingRule>
...]
</RoutingRules>
<RoutingRule> =
<RoutingRule>
[ <Condition>...</Condition> ]
<Redirect>...</Redirect>
</RoutingRule>
<Condition> =
<Condition>
[ <KeyPrefixEquals>...</KeyPrefixEquals> ]
[ <HttpErrorCodeReturnedEquals>...</HttpErrorCodeReturnedEquals> ]
</Condition>
Note: <Condition> must have at least one child element.
<Redirect> =
<Redirect>
[ <HostName>...</HostName> ]
[ <Protocol>...</Protocol> ]
[ <ReplaceKeyPrefixWith>...</ReplaceKeyPrefixWith> ]
[ <ReplaceKeyWith>...</ReplaceKeyWith> ]
[ <HttpRedirectCode>...</HttpRedirectCode> ]
</Redirect>
Note: <Redirect> must have at least one child element.
Also, you can have either ReplaceKeyPrefix with or ReplaceKeyWith,
but not both.
Nombre Descripción
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.
Nombre Descripción
• index.html
• docs/article1.html
• docs/article2.html
Ha decidido cambiar el nombre de la carpeta docs/ a documents/. Después de hacer este cambio,
deberá redireccionar las solicitudes para el prefijo docs/ a documents/. Por ejemplo, la solicitud para
docs/article1.html se redireccionará a documents/article1.html.
En este caso, debe añadir la siguiente regla de enrutamiento a la configuración del sitio web:
<RoutingRules>
<RoutingRule>
<Condition>
<KeyPrefixEquals>docs/</KeyPrefixEquals>
</Condition>
<Redirect>
<ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith>
</Redirect>
</RoutingRule>
</RoutingRules>
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>
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>
En esta sección se presentan dos ejemplos. En el primer ejemplo, debe configurar un bucket para el
alojamiento de sitio web, cargar un documento de índice de muestra y probar el punto de enlace del sitio
web de Amazon S3 para el bucket. En el segundo ejemplo, se muestra cómo puede utilizar su propio
dominio, como, por ejemplo, example.com, en vez del punto de enlace del sitio web del bucket de S3, y
distribuir contenido desde el bucket de Amazon S3 configurado como un sitio web. En el ejemplo, solo se
muestra cómo Amazon S3 ofrece el soporte para el dominio raíz.
Temas
• Paso 1: crear un bucket y configurarlo como un sitio web. (p. 539)
• Paso 2: añadir una política de bucket para que el contenido del bucket sea público. (p. 539)
• Paso 3: cargar un documento de índice. (p. 540)
• Paso 4: probar el sitio web. (p. 540)
Para ver instrucciones paso a paso, consulte ¿Cómo puedo crear un bucket de S3? en Guía del
usuario de la consola de Amazon Simple Storage Service
Para conocer las directrices de nomenclatura de buckets, consulte Restricciones y limitaciones de los
buckets (p. 60). Para obtener información adicional acerca de la nomenclatura de buckets, si tiene un
nombre de dominio registrado, consulte Personalización de URL de Amazon S3 con CNAME (p. 49).
3. Abra el bucket en el panel Properties (Propiedades), seleccione Static Website Hosting (Alojamiento
de un sitio web estático) y realice los siguientes pasos:
a. Elija Use this bucket to host a website (Usar este bucket para alojar un sitio web).
b. En la casilla Index Document (Documento de índice), escriba el nombre de su documento de
índice. Generalmente, el nombre es index.html.
c. Seleccione Save (Guardar) para guardar la configuración del sitio web.
d. Escriba el valor Endpoint (Punto de enlace).
Este es un punto de enlace de sitio web proporcionado por Amazon S3 para su bucket. Para
probar el sitio web, utilice el punto de enlace en los siguientes pasos.
{
"Version":"2012-10-17",
"Statement":[{
"Sid":"PublicReadForGetBucketObjects",
"Effect":"Allow",
"Principal": "*",
"Action":["s3:GetObject"],
"Resource":["arn:aws:s3:::example-bucket/*"
]
}
]
}
5. Seleccione Save.
Para ver instrucciones, consulte Carga de objetos en S3 en la Guía del usuario de la consola de
Amazon Simple Storage Service.
A continuación, se muestran las dos formas generales de un punto de enlace de sitio web de Amazon S3.
http://example-bucket.s3-website-region.amazonaws.com
http://example-bucket.s3-website.region.amazonaws.com
Ahora puede alojar un sitio web en Amazon S3. Este sitio web está disponible en el punto de enlace
del sitio web de Amazon S3. Sin embargo, es posible que tenga un dominio, como example.com, que
desee utilizar para distribuir el contenido del sitio web creado. Es posible que también desee hacer
uso de la funcionalidad de dominio raíz de Amazon S3 para distribuir las solicitudes para http://
www.example.com y http://example.com. Esto requiere pasos adicionales. Para ver un ejemplo,
consulte Ejemplo: configuración de un sitio web estático con un dominio personalizado (p. 540).
Temas
• Antes de comenzar (p. 541)
• Paso 1: Registro de un dominio (p. 541)
• Paso 2: Creación y configuración de buckets, y carga de datos (p. 541)
• Paso 3: Adición de registros de alias para example.com y www.example.com (p. 544)
• Paso 4: Pruebas (p. 546)
Antes de comenzar
A medida que siga los pasos de este ejemplo, trabajará con los siguientes servicios:
Amazon Route 53: puede utilizar Route 53 para registrar dominios y para definir a dónde quiere dirigir el
tráfico de Internet para su dominio. Explicamos cómo crear los registros de alias de Route 53 que dirigen el
tráfico para su dominio (example.com) y subdominio (www.example.com) a un bucket de Amazon S3 que
contiene un archivo HTML.
Amazon S3: usted utiliza Amazon S3 para crear buckets, cargar una página de sitio web de muestra,
configurar permisos para que todos puedan ver el contenido y configurar los buckets para el alojamiento en
el sitio web.
En este paso, usted inicia sesión en la consola de Amazon S3 con sus credenciales de cuenta de AWS y
crea los dos buckets siguientes.
• example.com
• www.example.com
Note
Al igual que los dominios, los subdominios deben tener sus propios buckets S3, y los buckets
deben compartir los mismos nombres que los subdominios. En este ejemplo, creamos el
subdominio www.example.com; por lo tanto, también necesitamos un bucket de S3 denominado
www.example.com.
Para crear sus buckets y cargar el contenido de su sitio web para el alojamiento
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
Alojará el contenido fuera del bucket de dominio raíz (example.com) y redireccionará las solicitudes
para www.example.com al bucket de dominio raíz. Puede almacenar contenido en cualquiera de los
buckets. Para este ejemplo, aloja contenido en el bucket example.com. El contenido puede incluir
archivos de texto, fotos familiares, vídeos; lo que desee. Si todavía no creó un sitio web, solo necesita
un archivo para este ejemplo. Puede cargar cualquier archivo. Por ejemplo, puede crear un archivo
con la siguiente HTML y cargarlo en el bucket. El nombre del archivo de la página de inicio de un sitio
web por lo general es index.html, pero puede brindarle cualquier nombre. En un paso posterior, usted
proporciona este nombre de archivo como el nombre del documento de índice para su sitio web.
Para obtener instrucciones paso a paso, consulte ¿Cómo puedo cargar archivos y carpetas en un
bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service
4. Para alojar un sitio web, el bucket debe tener acceso de lectura público. El hecho de que todo el
mundo tenga acceso de lectura a este bucket es intencionado. Para conceder acceso de lectura
público, adjunte la siguiente política de bucket al bucket example.com, sustituyendo example.com
por el nombre de su bucket. Para obtener instrucciones paso a paso para adjuntar una política de
bucket, consulte ¿Cómo agrego una política de bucket en S3? en la Guía del usuario de la consola de
Amazon Simple Storage Service
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"PublicReadGetObject",
"Effect":"Allow",
"Principal":"*",
"Action":[
"s3:GetObject"
],
"Resource":[
"arn:aws:s3:::example.com/*"
]
}
]
}
Ahora tiene dos buckets, example.com y www.example.com y cargó el contenido de su sitio web
al bucket example.com. En el siguiente paso, configura www.example.com para redireccionar
solicitudes a su bucket example.com. Al redireccionar las solicitudes, puede conservar solo una
copia del contenido de su sitio web. Tanto los visitantes que escriben www en los navegadores como
aquellos que especifican solo el dominio raíz se direccionan al mismo contenido de sitio web en su
bucket example.com.
En este paso, usted configura ambos buckets para el alojamiento de sitio web. Primero, configura
example.com como un sitio web y luego configura www.example.com para redireccionar todas las
solicitudes al bucket example.com.
6. Seleccione Save.
En el siguiente paso, utiliza Amazon Route 53 para permitir a los clientes utilizar todos los URL para
navegar a su sitio.
Si todavía no utiliza Amazon Route 53, puede comenzar a utilizarlo aquí. Una vez que lo
tenga configurado, podrá continuar con las instrucciones que se indican a continuación.
2. En la lista de zonas hospedadas, elija el nombre de su dominio.
3. Elija Create Record Set (Crear conjunto de registros).
Note
Cada registro contiene información acerca de cómo desea dirigir el tráfico de un dominio
(example.com) o subdominio (www.example.com). Los registros se almacenan en la zona
hospedada del dominio.
4. Especifique los valores siguientes:
Nombre
Para el primer registro que cree, acepte el valor predeterminado, que es el nombre de la zona
hospedada y el dominio. De este modo se dirigirá el tráfico de Internet al bucket que tiene el
mismo nombre que el dominio.
Repita este paso para crear otro registro para su subdominio. En el segundo registro, escriba
www. De este modo se dirigirá el tráfico de Internet al bucket de www.example.com.
Tipo
Seleccione Yes.
Alias Target
Escriba el nombre de su punto de enlace de Amazon S3, por ejemplo example.com (s3-
website-us-west-2).
Note
Especifique el mismo valor de Alias Target (Destino de alias) para ambos registros.
Route 53 averigua a qué bucket dirigirá el tráfico en función del nombre del registro.
Routing Policy
En la siguiente captura de pantalla se muestra el registro de alias para example.com como ejemplo.
También debe crear un registro de alias para www.example.com.
Note
Paso 4: Pruebas
Para verificar que el sitio web funcione correctamente, en su navegador, pruebe los siguientes URL:
En algunos casos, posiblemente deba eliminar el caché de su navegador web para ver el comportamiento
esperado.
CloudFront copia en caché el contenido en las ubicaciones de borde durante el período que usted
especifique. Si un visitante solicita contenido que se ha copiado en caché y ha excedido la fecha de
vencimiento, CloudFront accede al servidor de origen para verificar si hay disponible una versión más
reciente del contenido. Si se encuentra una versión más reciente, CloudFront copiará esta nueva versión
en la ubicación de borde. Los cambios que realice en el contenido original se replicarán en las ubicaciones
de borde a medida que los visitantes soliciten el contenido.
Para aumentar la velocidad del sitio, use CloudFront para completar las siguientes tareas.
Tareas
• Creación de una distribución de CloudFront (p. 547)
• Actualización de los registros para su dominio y subdominio (p. 548)
• (Opcional) Verificación de los archivos de registro (p. 549)
a. En Price Class (Clase de precio), deje la opción Use All Edge Locations (Best Performance) (Usar
todas las ubicaciones de borde [mejor rendimiento]).
b. Seleccione Alternate Domain Names (CNAMEs) (Nombres de dominio alternativos [CNAME])
como el dominio raíz y el subdominio www; en este tutorial, estos son example.com y
www.example.com, respectivamente. Estos valores deben establecerse antes de crear alias
para los registros A que conectan los nombres de dominios específicos a la distribución de
CloudFront.
Important
Antes de realizar este paso, tenga en cuenta los requisitos para el uso de nombres de
dominio alternativos, en concreto la necesidad de tener un certificado SSL/TLS válido.
c. En Default Root Object (Objeto raíz predeterminado), establezca el objeto raíz como
index.html. Esta es la página predeterminada que la distribución de CloudFront devuelve si el
URL que se utilizó para acceder a la distribución no contiene el nombre del archivo. Este valor
debe corresponder al valor del documento de índice que establece en Configuración de un bucket
para alojamiento de sitios web (p. 526).
d. En Logging (Registro), seleccione la opción On (Activado).
e. En Bucket for Logs (Bucket para registros), seleccione el bucket de registro que creó.
f. Para almacenar los registros generados según el tráfico a la distribución de CloudFront en una
carpeta llamada cdn en el bucket de registro, escriba cdn/ en Log Prefix (Prefijo de registro).
g. No cambie los demás valores predeterminados.
7. Seleccione Create Distribution (Crear distribución).
Para ver el estado de la distribución, busque la distribución en la consola y revise la columna Status
(Estado). El estado InProgress indica que la implementación de la distribución no ha finalizado aún.
Una vez que haya implementado la distribución, puede hacer referencia al contenido con el nuevo
nombre del dominio de CloudFront. Registre el valor de Domain Name (Nombre de dominio) que se
muestra en la consola de CloudFront. Lo necesitará en el siguiente paso. En este ejemplo, el valor es
dj4p1rv6mvubz.cloudfront.net.
Para verificar que la distribución de CloudFront funcione correctamente, escriba el nombre del dominio de
la distribución en el navegador web. Si funciona, su sitio web es visible.
Para actualizar los registros A para que se asocien a una distribución de CloudFront
La actualización de los conjuntos de registros se realiza entre 2 y 48 horas. Para ver si los nuevos
registros A funcionan, en un navegador web escriba http://www.example.com. Si el navegador ya no
lo redirige a http://example.com, significa que se aplicaron los nuevos registros A.
Este cambio de conducta se debe a que el tráfico redirigido por el registro A antiguo al bucket de S3 del
subdominio www se redirige según los ajustes realizados en Amazon S3 al dominio raíz. Cuando se haya
aplicado el nuevo registro A, el tráfico redirigido por el nuevo registro A a la distribución de CloudFront no
se redirige al dominio raíz.
Tip
Los navegadores pueden copiar en caché los ajustes de redirección. Si cree que se deberían
haber aplicado los ajustes del nuevo registro A, pero el navegador aún redirige http://
www.example.com a http://example.com, intente borrar el historial de navegador y las
copias en caché y, luego, cierre y vuelva a abrir el navegador. También puede intentar con otro
navegador web.
Con los nuevos registros A vigentes, todos los visitantes que hagan referencia al sitio mediante http://
example.com o http://www.example.com se redirigen a la ubicación de borde de CloudFront más
cercana. De esta manera, los tiempos de descarga serán más rápidos.
Si creó un sitio web como parte de un ejercicio de aprendizaje únicamente, puede eliminar los recursos de
AWS que asignó para dejar de acumular cargos. Para eliminar los recursos, siga con la sección Limpiar los
recursos de ejemplo (p. 549). Después de que haya eliminado los recursos de AWS, el sitio web ya no
estará disponible.
En su bucket, los archivos de registros de Amazon S3 anteriores se ubican en la carpeta root. Los
nuevos archivos de registro, que deben ser registros de CloudFront, se ubican en la carpeta cdn. Amazon
S3 escribe los registros de acceso al sitio web en su bucket de registro cada dos horas. CloudFront
escribe registros en su bucket de registro dentro de las 24 horas en las que se realizaron las solicitudes
correspondientes.
Tareas
• Eliminar la distribución de Amazon CloudFront (p. 549)
• Eliminación de la zona alojada en Route 53 (p. 549)
• Eliminación del bucket de S3 (p. 550)
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).
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.
Configuración de notificaciones de
eventos de Amazon S3
La función de notificaciones de Amazon S3 le permite recibir notificaciones cuando se producen ciertos
eventos en su bucket. Para habilitar las notificaciones, primero debe añadir una configuración de
notificación que identifique los eventos que desea que Amazon S3 publique y los destinos a los que desea
que Amazon S3 envíe las notificaciones de eventos. Debe guardar esta configuración en el subrecurso
notificación (consulte Opciones de configuración de buckets (p. 58)) asociado con un bucket. Amazon S3
proporciona una API para que administre este subrecurso.
Important
Las notificaciones de eventos de Amazon S3 suelen enviar los eventos en cuestión de segundos,
pero a veces pueden tardar un minuto o más. En muy raras ocasiones, se pueden perder eventos.
Si su aplicación requiere una semántica determinada (por ejemplo, asegurarse de que no se
pierdan eventos o de que las operaciones se ejecuten solo una vez), le recomendamos que tenga
en cuenta los eventos perdidos y duplicados al diseñar la aplicación. Puede auditar los eventos
perdidos mediante la API LIST Objects o informes Inventario de Amazon S3 (p. 439). La API LIST
Objects y los informes de inventario de Amazon S3 están sujetos a la consistencia final y podrían
no reflejar los objetos agregados o eliminados recientemente.
Temas
• Información general (p. 551)
• Cómo habilitar las notificaciones de eventos (p. 553)
• Tipos y destinos de las notificaciones de eventos (p. 554)
• Configuración de notificaciones con filtrado de nombre de clave de objeto (p. 556)
• Concesión de permisos para publicar mensajes de notificación de eventos a un destino (p. 560)
• Tutorial de ejemplo 1: Configuración de un bucket para notificaciones (destino de mensaje: tema de
SNS y cola de SQS) (p. 562)
• Tutorial de ejemplo 2: Configuración de un bucket para notificaciones (destino de mensaje: AWS
Lambda) (p. 568)
• Estructura de mensaje de evento (p. 568)
Información general
Actualmente, Amazon S3 puede publicar notificaciones para los siguientes eventos:
• Un evento de creación de objeto nuevo: Amazon S3 admite varias API para crear objetos. Puede
solicitar una notificación cuando solo se utiliza una API específica (p. ej., s3:ObjectCreated:Put) o
puede utilizar un comodín (p. ej., s3:ObjectCreated:*) para solicitar una notificación cuando se crea
un objeto independientemente de la API utilizada.
• Un evento de eliminación de objeto: Amazon S3 admite eliminaciones de objetos con control de
versiones y sin control de versiones. Para obtener información acerca del control de versiones de
objetos, consulte Control de versiones de objetos (p. 115) y Uso del control de versiones (p. 449).
Puede solicitar una notificación cuando un objeto se elimina o un objeto con control de versiones se
elimina de forma permanente con el tipo de evento s3:ObjectRemoved:Delete. O bien, puede
solicitar una notificación cuando se crea un marcador de eliminación para un objeto con control de
versiones con s3:ObjectRemoved:DeleteMarkerCreated. También puede utilizar un comodín
s3:ObjectRemoved:* para solicitar una notificación cada vez que se elimina un objeto. Para obtener
información acerca de la eliminación de objetos con control de versiones, consulte Eliminación de
versiones de objetos (p. 463).
• Eventos de restauración de objeto: Amazon S3 admite la restauración de objetos archivados en la clase
de almacenamiento GLACIER. Puede solicitar recibir notificaciones de la finalización de la restauración
de un objeto mediante s3:ObjectRestore:Completed. Puede utilizar s3:ObjectRestore:Post
para solicitar la notificación del inicio de una restauración.
• Un evento de pérdida de objeto de Almacenamiento de redundancia reducida (RRS): Amazon S3 envía
un mensaje de notificación cuando detecta que se perdió un objeto de la clase de almacenamiento RRS.
Para ver una lista de los tipos de eventos admitidos, consulte Tipos de eventos admitidos (p. 554).
Amazon SNS es un servicio de mensajería push flexible y totalmente administrado. Al utilizar este
servicio, usted puede insertar mensajes en los dispositivos móviles o los servicios distribuidos. Con
Simple Notification Service (SNS, Servicio de notificación simple) puede publicar un mensaje una vez y
enviarlo una o más veces. Un tema de SNS es un punto de acceso al que los destinatarios se pueden
suscribir en forma dinámica para recibir notificaciones de eventos. Para obtener más información acerca
del SNS, consulte la página de detalles del producto Amazon SNS.
• Cola de Amazon Simple Queue Service (Amazon SQS)
Amazon SQS es un servicio de colas de mensajes escalable y totalmente administrado. Puede utilizar
Simple Queue Service (SQS, Servicio de cola simple) para enviar cualquier volumen de datos sin
la necesidad de que otros servicios tengan que estar siempre disponibles. En su configuración de
notificación puede solicitar que Amazon S3 publique eventos en una cola de SQS. En la actualidad, la
cola estándar de SQS solo se permite como destino de notificación de eventos de Amazon S3, mientras
que la cola FIFO de SQS no se permite. Para obtener más información acerca del SQS, consulte la
página de detalles del producto Amazon SQS.
• AWS Lambda
AWS Lambda es un servicio informático que le facilita la creación de aplicaciones que respondan
rápidamente a nueva información. AWS Lambda ejecuta su código en respuesta a eventos como cargas
de una imagen, la actividad in-app, clics en un sitio web o resultados de dispositivos conectados. Puede
utilizar AWS Lambda para ampliar otros servicios de AWS con lógica personalizada o crear su propio
backend que opera con el nivel de seguridad, desempeño y escala de AWS. Con AWS Lambda, puede
crear fácilmente aplicaciones discretas basadas en eventos que se ejecuten solo cuando sea necesario
y aumenten automáticamente de unas pocas solicitudes al día a miles de solicitudes por segundo.
AWS Lambda puede ejecutar un código personalizado en respuesta a eventos de un bucket de Amazon
S3. Usted carga su código personalizado en AWS Lambda y crea lo que se denomina una función
Lambda. Cuando Amazon S3 detecta un evento de un tipo específico (por ejemplo, un evento de objeto
creado) puede publicar el evento en AWS Lambda e invocar su función en Lambda. En respuesta, AWS
Lambda ejecuta su función. Para obtener más información, consulte la página de detalles del producto
AWS Lambda.
Versión de API 2006-03-01
552
Amazon Simple Storage Service Guía del desarrollador
Cómo habilitar las notificaciones de eventos
En las siguientes secciones se ofrecen más detalles acerca de cómo habilitar las notificaciones de eventos
en un bucket. Los subtemas también brindan tutoriales de ejemplo para ayudarlo a explorar la función de
notificaciones.
• Tutorial de ejemplo 1: Configuración de un bucket para notificaciones (destino de mensaje: tema de SNS
y cola de SQS) (p. 562)
• Tutorial de ejemplo 2: Configuración de un bucket para notificaciones (destino de mensaje: AWS
Lambda) (p. 568)
La User Interface (UI, Interfaz de usuario) de la consola le permite establecer una configuración de
notificación en un bucket sin tener que escribir ningún código. Para obtener instrucciones, consulte
¿Cómo puedo habilitar y configurar notificaciones de eventos para un bucket de S3? en la Guía del
usuario de la consola de Amazon Simple Storage Service.
• Mediante programación con los SDK de AWS
Note
Si lo necesita, también puede realizar las llamadas a la API REST de Amazon S3 directamente
desde su código. Sin embargo, esto puede ser engorroso porque debe escribir el código para
autenticar las solicitudes.
Internamente, tanto la consola como los SDK llaman a la API REST de Amazon S3 para administrar los
subrecursos de notificación asociados al bucket. Para la configuración de notificación con los ejemplos
de SDK de AWS, consulte el enlace del tutorial provisto en la sección anterior.
<NotificationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
</NotificationConfiguration>
Para permitir las notificaciones de eventos de determinado tipo, debe reemplazar el XML con la
configuración adecuada que identifique los tipos de eventos que desea que Amazon S3 publique y
el destino donde desea publicar los eventos. Para cada destino, debe añadir la configuración XML
correspondiente. Por ejemplo:
• Publicar mensajes de eventos en una cola de SQS: para configurar una cola de SQS como el destino
de la notificación para uno o más tipos de eventos, añada la QueueConfiguration.
<NotificationConfiguration>
<QueueConfiguration>
<Id>optional-id-string</Id>
<Queue>sqs-queue-arn</Queue>
<Event>event-type</Event>
<Event>event-type</Event>
...
</QueueConfiguration>
...
</NotificationConfiguration>
• Publicar mensajes de eventos en un tema de SNS: para configurar un tema de SNS como el destino
de la notificación para tipos de eventos específicos, añada la TopicConfiguration.
<NotificationConfiguration>
<TopicConfiguration>
<Id>optional-id-string</Id>
<Topic>sns-topic-arn</Topic>
<Event>event-type</Event>
<Event>event-type</Event>
...
</TopicConfiguration>
...
</NotificationConfiguration>
• Invocar la función AWS Lambda y proporcionar un mensaje de evento como argumento: para
configurar una función Lambda como el destino de la notificación para tipos de eventos específicos,
añada la CloudFunctionConfiguration.
<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>optional-id-string</Id>
<Cloudcode>cloud-function-arn</Cloudcode>
<Event>event-type</Event>
<Event>event-type</Event>
...
</CloudFunctionConfiguration>
...
</NotificationConfiguration>
Para eliminar todas las notificaciones configuradas en un bucket, debe guardar un elemento
<NotificationConfiguration/> vacío en el subrecurso notificación.
Cuando Amazon S3 detecta un evento del tipo específico, publica un mensaje con la información del
evento. Para obtener más información, consulte Estructura de mensaje de evento (p. 568).
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
s3:ObjectCreated:CompleteMultipartUpload
No recibirá notificaciones de eventos de operaciones no
efectuadas correctamente.
Destinos admitidos
Amazon S3 puede enviar mensajes de notificación de eventos a los siguientes destinos. Debe especificar
el valor del Amazon Resource Name (ARN, Nombre de recurso de Amazon) de estos destinos en la
configuración de la notificación.
• Publicar mensajes de eventos en un tema de Amazon Simple Notification Service (Amazon SNS)
• Publicar mensajes de eventos en una cola de Amazon Simple Queue Service (Amazon SQS)
Note
Si la cola de destino o el tema tiene habilitado SSE, Amazon S3 necesitará tener acceso a la
clave de KMS asociada para habilitar el cifrado de mensajes.
• Publicar mensajes de eventos en AWS Lambda al invocar una función Lambda y proporcionar el
mensaje de evento como un argumento
Amazon S3 debe recibir permisos para publicar mensajes en un tema de Amazon SNS o una cola de
Amazon SQS. Amazon S3 también debe recibir permiso para invocar una función AWS Lambda en
su nombre. Para obtener información acerca de cómo otorgar estos permisos, consulte Concesión de
permisos para publicar mensajes de notificación de eventos a un destino (p. 560).
Puede establecer configuraciones de notificación que utilicen el filtrado de nombre de clave de objeto
en la consola de Amazon S3 y con las API de Amazon S3 a través de los SDK de AWS o las API REST
directamente. Para obtener información acerca de cómo utilizar la IU de la consola para establecer una
configuración de notificación en un bucket, consulte ¿Cómo puedo habilitar y configurar notificaciones de
eventos para un bucket de S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.
Las configuraciones de notificaciones que utilizan Filter no pueden definir las reglas de filtrado con
prefijos superpuestos, sufijos superpuestos o superposición de prefijo y sufijo. Las siguientes secciones
incluyen ejemplos de configuraciones de notificaciones válidas con filtrado de nombre de clave de objeto y
ejemplos de configuraciones de notificación no válidas debido a la superposición de prefijo/sufijo.
<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>
<NotificationConfiguration>
<QueueConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images/</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-A</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
<QueueConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>logs/</Value>
</FilterRule>
</S3Key>
</Filter>
<Queue>arn:aws:sqs:us-west-2:444455556666:sqs-queue-B</Queue>
<Event>s3:ObjectCreated:Put</Event>
</QueueConfiguration>
</NotificationConfiguration>
La siguiente configuración de notificación tiene varios sufijos no superpuestos. La configuración define que
todas las imágenes .jpg recientemente añadidas al bucket serán procesadas por la función de nube A de
Lambda y todas las imágenes .png recientemente añadidas serán procesadas por la función de nube B.
Los sufijos .png y .jpg no se superponen aunque tengan la misma última letra. Dos sufijos se consideran
superpuestos si una determinada cadena puede finalizar con ambos sufijos. Una cadena no puede finalizar
con .png y .jpg; por lo que los sufijos en la configuración de ejemplo no son sufijos superpuestos.
<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>.jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</Cloudcode>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
<CloudFunctionConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>.png</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</Cloudcode>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
</NotificationConfiguration>
Las configuraciones de notificación que utilizan Filter no pueden definir reglas de filtrado con prefijos
superpuestos para los mismos tipos de eventos, a menos que los prefijos superpuestos se utilicen con
sufijos que no se superponen. La siguiente configuración de ejemplo muestra cómo los objetos creados
con un prefijo común pero sufijos no superpuestos se pueden enviar a diferentes destinos.
<NotificationConfiguration>
<CloudFunctionConfiguration>
<Id>1</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>.jpg</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-A</Cloudcode>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
<CloudFunctionConfiguration>
<Id>2</Id>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>.png</Value>
</FilterRule>
</S3Key>
</Filter>
<Cloudcode>arn:aws:lambda:us-west-2:444455556666:cloud-function-B</Cloudcode>
<Event>s3:ObjectCreated:Put</Event>
</CloudFunctionConfiguration>
</NotificationConfiguration>
los mismos tipos de eventos. (Puede incluir prefijos superpuestos siempre y cuando los sufijos no se
superpongan. Para ver un ejemplo, consulte Configuración de notificaciones con filtrado de nombre de
clave de objeto (p. 556)).
Puede utilizar filtros de nombre de clave de objeto superpuestos con diferentes tipos de eventos. Por
ejemplo, puede crear una configuración de notificación que utilice el prefijo image/ para el tipo de evento
ObjectCreated:Put y el prefijo image/ para el tipo de evento ObjectDeleted:*.
Recibirá un mensaje de error si intenta guardar una configuración de notificación que tiene filtros
de nombre superpuestos no válidos para los mismos tipos de eventos, cuando utiliza la consola de
Amazon S3 de AWS o cuando utiliza la API de Amazon S3. En esta sección se muestran ejemplos de
configuraciones de notificación que no son válidas debido a los filtros de nombre superpuestos.
Se asume que cualquier regla de configuración de notificación existente tiene un prefijo y un sufijo
predeterminados que coinciden con cualquier otro prefijo y sufijo respectivamente. La siguiente
configuración de notificación no es válida ya que tiene prefijos superpuestos, donde el prefijo raíz se
superpone con cualquier otro prefijo. (Lo mismo sucedería si utilizáramos un sufijo en lugar de un prefijo en
este ejemplo. El sufijo raíz se superpone con cualquier otro sufijo).
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-one</Topic>
<Event>s3:ObjectCreated:*</Event>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-notification-two</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>
La siguiente configuración de notificación no es válida dado que incluye sufijos superpuestos. Dos sufijos
se consideran superpuestos si una determinada cadena puede finalizar con ambos sufijos. Una cadena
puede finalizar con jpg y pg, por lo que los sufijos se superponen. (Lo mismo sucede para los prefijos, dos
prefijos se consideran superpuestos si una determinada cadena puede comenzar con ambos prefijos).
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
<Event>s3:ObjectCreated:Put</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>pg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration
La siguiente configuración de notificación no es válida dado que incluye prefijos y sufijos superpuestos.
<NotificationConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-one</Topic>
<Event>s3:ObjectCreated:*</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>prefix</Name>
<Value>images</Value>
</FilterRule>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
<TopicConfiguration>
<Topic>arn:aws:sns:us-west-2:444455556666:sns-topic-two</Topic>
<Event>s3:ObjectCreated:Put</Event>
<Filter>
<S3Key>
<FilterRule>
<Name>suffix</Name>
<Value>jpg</Value>
</FilterRule>
</S3Key>
</Filter>
</TopicConfiguration>
</NotificationConfiguration>
función Lambda para que Amazon S3 tenga permisos para invocar la función en el bucket. Para obtener
más información, consulte ¿Cómo puedo habilitar y configurar notificaciones de eventos para un bucket de
S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.
También puede otorgarle a Amazon S3 permisos de AWS Lambda para invocar su función Lambda. Para
obtener más información, consulte Tutorial: uso de AWS Lambda con Amazon S3 en la AWS Lambda
Developer Guide.
{
"Version": "2008-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"SNS:Publish"
],
"Resource": "arn:aws:sns:REGION:ACCOUNT-ID:TOPICNAME",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
}
]
}
{
"Version": "2008-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "arn:aws:sqs:REGION:ACCOUNT-ID:QUEUENAMEHERE",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
}
]
}
Tenga en cuenta que tanto para las políticas de IAM de Amazon SNS como de Amazon SQS, puede
especificar la condición StringLike en la política, en lugar de la condición ArnLike.
"Condition": {
"StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
Ejemplo de política de claves que se asocia a la clave de KMS asociada si la cola de SQS tiene habilitado
SSE.
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
La política concede a la entidad principal del servicio de Amazon S3 permiso para las acciones específicas
de KMS que son necesarias para cifrar los mensajes que se añaden a la cola.
Para ver un ejemplo de cómo asociar una política a un tema de SNS o una cola de SQS, consulte Tutorial
de ejemplo 1: Configuración de un bucket para notificaciones (destino de mensaje: tema de SNS y cola de
SQS) (p. 562).
Para obtener más información acerca de estos permisos, consulte los siguientes temas:
• Ejemplos de control de acceso de Amazon SNS en la Guía para desarrolladores de Amazon Simple
Notification Service
• Control de acceso mediante AWS Identity and Access Management (IAM) en la Guía para
desarrolladores de Amazon Simple Queue Service
Resumen de tutorial
En este tutorial usted añade una configuración de notificación en un bucket donde le solicita lo siguiente a
Amazon S3:
Puede realizar todos estos pasos con la consola sin escribir ningún código. Además, se brindan ejemplos
de códigos, mediante el uso de los SDK de AWS para Java y .NET para que pueda añadir configuraciones
de notificación mediante programación.
Con la consola de Amazon SNS debe crear un tema de SNS y suscribirse al tema para recibir cualquier
evento que se publique allí. Debe especificar el correo electrónico como protocolo de comunicación.
Después de crear un tema, Amazon SNS enviará un correo electrónico. Debe hacer clic en el enlace del
correo electrónico para confirmar la suscripción al tema.
Debe asociar una política de acceso al tema para otorgarle a Amazon S3 permiso para publicar
mensajes.
2. Cree una cola de Amazon SQS.
Con la consola de Amazon SQS, cree una cola de SQS. Puede acceder a cualquier mensaje que
Amazon S3 envía a la cola mediante programación. Pero para este tutorial, usted verificará los
mensajes de notificación en la consola.
Debe asociar una política de acceso al tema para otorgarle a Amazon S3 permiso para publicar
mensajes.
3. Añada una configuración de notificación a un bucket.
1. Use la consola de Amazon SNS, para crear un tema. Para obtener instrucciones, consulte Creación de
un tema en la Guía para desarrolladores de Amazon Simple Notification Service.
2. Suscríbase al tema. Para este ejercicio, utilice el correo electrónico como el protocolo de
comunicación. Para obtener instrucciones, consulte Suscripción a un tema en la Guía para
desarrolladores de Amazon Simple Notification Service.
Recibirá un correo electrónico donde deberá confirmar su suscripción al tema. Confirme la suscripción.
3. Sustituya la política de acceso asociada al tema por la siguiente política. Debe proporcionar el nombre
de recurso de Amazon (ARN) del tema de SNS y el nombre del bucket para actualizar la política:
{
"Version": "2008-10-17",
"Id": "example-ID",
"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" }
}
}
]
}
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
1. Use la consola de Amazon SQS, para crear una cola. Para obtener instrucciones, consulte
Introducción a Amazon SQS en la Guía para desarrolladores de Amazon Simple Queue Service.
2. Reemplace la política de acceso asociada a la cola con la siguiente política: en la consola de
SQS, seleccione la cola y en la pestaña Permissions (Permisos) haga clic en Edit Policy Document
(Advanced) (Editar documento de política [avanzado]).
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"AWS":"*"
},
"Action": [
"SQS:SendMessage"
],
"Resource": "SQS-queue-ARN",
"Condition": {
"ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }
}
}
]
}
3. (Opcional) Si la cola de Amazon SQS tiene habilitado el cifrado del lado del servidor (SSE), añada
la siguiente política a la clave maestra del cliente (CMK) del AWS Key Management Service
personalizado asociado (AWS KMS). Debe añadir la política a una CMK personalizada, ya que la CMK
administrada por AWS predeterminada de Amazon SQS no se puede modificar. Para obtener más
información acerca del uso de SSE para Amazon SQS con AWS KMS, consulte Protección de datos
con el cifrado en el servidor (SSE) y AWS KMS.
{
"Version": "2012-10-17",
"Id": "example-ID",
"Statement": [
{
"Sid": "example-statement-ID",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey",
"kms:Decrypt"
],
"Resource": "*"
}
]
}
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
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.
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;
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;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();
BucketNotificationConfiguration notificationConfiguration = new
BucketNotificationConfiguration();
bucketName, notificationConfiguration);
s3Client.setBucketNotificationConfiguration(request);
} catch (AmazonServiceException e) {
// The call was transmitted successfully, but Amazon S3 couldn't process
// it, so it returned an error response.
e.printStackTrace();
} catch (SdkClientException e) {
// Amazon S3 couldn't be contacted for a response, or the client
// couldn't parse the response from Amazon S3.
e.printStackTrace();
}
}
}
• 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
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.
• La clave glacierEventData solo es visible de los eventos s3:ObjectRestore:Completed.
• La clave restoreEventData contiene atributos relacionados con la solicitud de restauración.
El siguiente ejemplo muestra la versión 2.1 de la estructura JSON del mensaje de eventos, que es la
versión que actualmente usa Amazon S3.
{
"Records":[
{
"eventVersion":"2.1",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z,
when Amazon S3 finished processing the request,
"eventName":"event-type",
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
"requestParameters":{
"sourceIPAddress":"ip-address-where-request-came-from"
},
"responseElements":{
"x-amz-request-id":"Amazon S3 generated request ID",
"x-amz-id-2":"Amazon S3 host that processed the request"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"ID found in the bucket notification configuration",
"bucket":{
"name":"bucket-name",
"ownerIdentity":{
"principalId":"Amazon-customer-ID-of-the-bucket-owner"
},
"arn":"bucket-ARN"
},
"object":{
"key":"object-key",
"size":object-size,
"eTag":"object eTag",
"versionId":"object version if bucket is versioning-enabled, otherwise
null",
"sequencer": "a string representation of a hexadecimal value used to
determine event sequence,
only used with PUTs and DELETEs"
}
},
"glacierEventData": {
"restoreEventData": {
"lifecycleRestorationExpiryTime": "The time, in ISO-8601 format, for
example, 1970-01-01T00:00:00.000Z, of Restore Expiry",
"lifecycleRestoreStorageClass": "Source storage class for restore"
}
}
}
]
}
El siguiente ejemplo muestra la versión 2.0 de la estructura del mensaje de eventos, que ya no se utiliza en
Amazon S3.
{
"Records":[
{
"eventVersion":"2.0",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":The time, in ISO-8601 format, for example, 1970-01-01T00:00:00.000Z,
when S3 finished processing the request,
"eventName":"event-type",
"userIdentity":{
"principalId":"Amazon-customer-ID-of-the-user-who-caused-the-event"
},
"requestParameters":{
"sourceIPAddress":"ip-address-where-request-came-from"
},
"responseElements":{
"x-amz-request-id":"Amazon S3 generated request ID",
"x-amz-id-2":"Amazon S3 host that processed the request"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"ID found in the bucket notification configuration",
"bucket":{
"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"
}
}
}
]
}
• Mensaje de prueba: cuando configura una notificación de evento en un bucket, Amazon S3 envía el
siguiente mensaje de prueba:
{
"Service":"Amazon S3",
"Event":"s3:TestEvent",
"Time":"2014-10-13T15:57:02.089Z",
"Bucket":"bucketname",
"RequestId":"5582815E1AEA5ADF",
"HostId":"8cLeGAmw098X5cv4Zkwcmo8vvZa3eH3eKxsPzbB9wrR+YstdA6Knx4Ip8EXAMPLE"
}
• Mensaje de ejemplo cuando se crea un objeto con la solicitud PUT: el siguiente mensaje es un ejemplo
de un mensaje que Amazon S3 envía para publicar un evento s3:ObjectCreated:Put:
{
"Records":[
{
"eventVersion":"2.1",
"eventSource":"aws:s3",
"awsRegion":"us-west-2",
"eventTime":"1970-01-01T00:00:00.000Z",
"eventName":"ObjectCreated:Put",
"userIdentity":{
"principalId":"AIDAJDPLRKLG7UEXAMPLE"
},
"requestParameters":{
"sourceIPAddress":"127.0.0.1"
},
"responseElements":{
"x-amz-request-id":"C3D13FE58DE4C810",
"x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/
JRWeUWerMUE5JgHvANOjpD"
},
"s3":{
"s3SchemaVersion":"1.0",
"configurationId":"testConfigRule",
"bucket":{
"name":"mybucket",
"ownerIdentity":{
"principalId":"A3NL1KOZZKExample"
},
"arn":"arn:aws:s3:::mybucket"
},
"object":{
"key":"HappyFace.jpg",
"size":1024,
"eTag":"d41d8cd98f00b204e9800998ecf8427e",
"versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko",
"sequencer":"0055AED6DCD90281E5"
}
}
}
]
}
Replicación
La replicación habilita la copia asincrónica y automática de los objetos entre buckets. Los buckets que
están configurados para replicación de objetos pueden pertenecer a la misma cuenta de o a cuentas
diferentes. Puede copiar objetos entre diferentes regiones de AWS o dentro de la misma región.
Para permitir la replicación de objetos, utilice una configuración de nivel de bucket. Añada la configuración
de replicación al bucket de origen. La configuración mínima, debe proporcionar lo siguiente:
Están disponibles opciones de configuración adicionales. Para obtener más información, consulte
Configuraciones de replicación adicionales (p. 590).
• 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.
• Replicar objetos en diferentes clases de almacenamiento—Puede utilizar la replicación colocando
objetos directamente en Glacier, DEEP ARCHIVE u otra clase de almacenamiento en el bucket de
destino. También puede replicar sus datos en la misma clase de almacenamiento y utilizar las políticas
de ciclo de vida en el bucket de destino para mover objetos a una clase de almacenamiento con menos
actividad conforme adquiere antigüedad.
• Mantener copias de objetos con distintos propietarios: independientemente de quién sea el propietario
del bucket de origen o del objeto de origen, puede indicar a Amazon S3 que cambie la titularidad de
la réplica a la cuenta de AWS que posee el bucket de destino. Esto se conoce como la opción de
invalidación del propietario. Puede usar esta opción para restringir el acceso a las réplicas de objetos.
• Cumplir requisitos de cumplimiento: aunque Amazon S3 almacena sus datos en diversas zonas de
disponibilidad alejadas geográficamente, de forma predeterminada los requisitos de conformidad pueden
exigir que almacene los datos en ubicaciones aún más alejadas. La replicación entre regiones permite
replicar los datos entre regiones de AWS alejadas para cumplir con estos requisitos de conformidad.
• Minimizar latencia: si sus clientes están en dos ubicaciones geográficas, puede minimizar la latencia
en el acceso a los objetos manteniendo copias de los objetos en regiones de AWS que estén
geográficamente más cerca de sus usuarios.
• Aumentar la eficiencia operativa: si tiene clústeres informáticos en dos regiones diferentes de AWS que
analizan el mismo conjunto de objetos, puede elegir mantener copias de objetos en dichas regiones.
• Agregar registros en un solo bucket—Si almacena registros en varios buckets o en varias cuentas,
puede fácilmente replicar registros en un solo bucket en la región. Esto permite un procesamiento más
simple de los registros por parte de una sola cuenta
• Configurar replicación en directo entre las cuentas del desarrollador y de prueba: si usted o sus clientes
tienen cuentas de prueba o de desarrollador que utilizan los mismos datos, puede replicar objetos entre
varias cuentas al mismo tiempo que mantiene metadatos de objetos implementando reglas de SRR.
• Cumplir con las leyes de soberanía de datos: con frecuencia a los clientes se les exige que almacenen
datos en cuentas de AWS separadas al mismo tiempo que es les prohíbe dejar que los datos salgan
de una determinada región. La replicación en la misma región puede ayudarle a hacer una copia de
seguridad de los datos críticos cuando las regulaciones de cumplimiento no permiten que los datos
salgan de su país.
Requisitos de replicación
La replicación requiere lo siguiente:
• El propietario del bucket de origen debe tener habilitadas las regiones de AWS de origen y de destino en
su cuenta. El propietario del bucket de destino debe tener la región de destino habilitada en su cuenta.
Para obtener más información sobre cómo habilitar y deshabilitar una región de AWS, consulte Regiones
y puntos de enlace de AWS en la AWS General Reference.
• Ambos buckets de origen y destino deben tener habilitado el control de versiones.
• Amazon S3 debe tener permisos para replicar objetos en su nombre desde el bucket de origen en el
bucket de destino.
• Si el propietario del bucket de origen no posee el objeto en el bucket, el propietario del objeto debe
conceder al propietario del bucket los permisos READ y READ_ACP con la lista de control de acceso ACL
del objeto. Para obtener más información, consulte Administración de acceso con ACL (p. 418).
• Si el bucket de origen tiene habilitado un bloqueo de objeto de Amazon S3, el bucket de destino debe
tener también el bloqueo de objeto habilitado. Para obtener más información, consulte Bloqueo de
objetos mediante el bloqueo de objetos de Amazon S3 (p. 472).
Para habilitar la replicación en un bucket que tiene habilitado el bloqueo de objetos, póngase en contacto
con AWS Support.
Para obtener más información, consulte Información general de configuración de la replicación (p. 578).
• El propietario del bucket de destino debe otorgar al propietario del bucket de origen permisos para
replicar objetos con una política de bucket. Para obtener más información, consulte Concesión
de permisos cuando los buckets de origen y destino son propiedad de diferentes cuentas de
AWS (p. 589).
¿Qué se replica?
Amazon S3 replica los siguientes elementos:
• Objetos creados después de añadir una configuración de replicación, con las excepciones que se
describen en la próxima sección.
• Objetos no cifrados y objetos cifrados con claves administradas por Amazon S3 (SSE-S3) o claves
administradas por AWS KMS (SSE-KMS), aunque debe habilitar explícitamente la opción para replicar
objetos cifrados con las claves de KMS. La copia replicada del objeto también se cifra con el mismo tipo
de cifrado del lado del servidor que se utilizó para el objeto de origen. Para obtener más información
acerca del cifrado del lado del servidor, consulte Protección de datos con el cifrado del lado del
servidor (p. 275).
• Metadatos de objetos.
• Solo los objetos en el bucket de origen para los que el propietario del bucket tiene permisos para leer
objetos y listas de control de acceso (ACL). Para obtener más información acerca de la propiedad de
recursos, consulte Propiedad de los buckets y objetos de Amazon S3 (p. 313).
• El objeto ACL se actualiza, a menos que ordene a Amazon S3 que cambie la propiedad de la réplica
cuando los buckets de origen y destino no son propiedad de las mismas cuentas. Para obtener
más información, consulte Configuración de replicación adicional: cambiar el propietario de la
réplica (p. 591)).
Amazon S3 puede tardar tiempo en sincronizar las dos ACL. Esto se aplica solo a los objetos creados
luego de añadir una configuración de replicación al bucket.
• Información de retención de bloqueo de objetos Amazon S3, si la hay. Cuando Amazon S3 replica los
objetos que tienen aplicada información de retención, aplica estos mismos controles de retención a
las réplicas, anulando el período de retención predeterminado configurado en el bucket de destino. Si
no tiene controles de retención aplicados a los objetos en el bucket de origen y replica en un bucket
de destino que tiene establecido un período de retención predeterminado, el período de retención
predeterminado del bucket de destino se aplica a las réplicas del objeto. Para obtener más información,
consulte Bloqueo de objetos mediante el bloqueo de objetos de Amazon S3 (p. 472).
• Si realiza una solicitud DELETE sin especificar un ID de versión del objeto, Amazon S3 añade un
marcador de eliminación. Amazon S3 se ocupa del marcador de eliminación de la siguiente manera:
• Si utiliza la última versión de la configuración de replicación (es decir, si especifica el elemento
Filter en una regla de configuración de replicación), Amazon S3 no replica el marcador de
eliminación.
• Si no especifica el elemento Filter, Amazon S3 da por hecho que la configuración de la replicación
es una versión anterior V1. En la versión anterior, Amazon S3 realizaba la replicación de marcadores
de eliminación de manera diferente. Para obtener más información, consulte Compatibilidad con
versiones anteriores (p. 586).
• Si especifica un ID de versión de objeto para eliminar en una solicitud DELETE, Amazon S3 elimina
esa versión del objeto en el bucket de origen. Pero no replica la eliminación en el bucket de destino. En
otras palabras, no elimina la misma versión del objeto del bucket de destino. Esto protege los datos de
eliminaciones malintencionadas.
• Los objetos ya existentes antes de añadir la configuración de replicación al bucket. En otras palabras,
Amazon S3 no replica los objetos retroactivamente.
• Los objetos cifrados siguientes:
• Los objetos creados con cifrado de lado servidor mediante claves de cifrado proporcionadas por los
clientes (SSE-C).
• Los objetos creados con el cifrado del lado del servidor mediante las claves de cifrado administradas
por AWS KMS (SSE-KMS). De forma predeterminada, Amazon S3 no replica los objetos cifrados
con claves de KMS. Sin embargo, puede habilitar explícitamente la replicación de estos objetos en la
configuración de replicación y proporcionar información relevante para que Amazon S3 pueda replicar
estos objetos.
Para obtener más información acerca del cifrado del lado del servidor, consulte Protección de datos con
el cifrado del lado del servidor (p. 275).
• Objetos que se almacenan en clases de almacenamiento GLACIER o DEEP_ARCHIVE. Para obtener
más información acerca del servicio Amazon S3 Glacier, consulte la Guía para desarrolladores de
Amazon S3 Glacier.
Versión de API 2006-03-01
576
Amazon Simple Storage Service Guía del desarrollador
Temas relacionados
• Los objetos del bucket de origen para los que el propietario del bucket no tienen permisos (cuando el
propietario del bucket no es el propietario del objeto). Para obtener información sobre cómo el propietario
de un objeto puede conceder permisos al propietario de un bucket, consulte Concesión de permisos
entre cuentas para cargar objetos al mismo tiempo que se garantiza que el propietario del bucket tenga
el control total (p. 393).
• Actualiza a subrecursos de nivel de bucket. Por ejemplo, si cambia la configuración del ciclo de vida en
una configuración de notificación al bucket de origen, estos cambios no se aplican al bucket de destino.
Esto posibilita tener diferentes configuraciones en los buckets de origen y destino.
• Acciones realizadas por la configuración del ciclo de vida.
Por ejemplo, si la configuración del ciclo de vida está habilitada solo en el bucket de origen, Amazon S3
crea marcadores de eliminación para los objetos que han vencido, pero no replica esos marcadores. Si
desea que se aplique la misma configuración de ciclo de vida a los buckets de origen y destino, habilite
la misma configuración de ciclo de vida en ambos.
Para obtener más información acerca de la configuración del ciclo de vida, consulte Administración del
ciclo de vida de los objetos (p. 127).
Note
Puede replicar objetos desde un bucket de origen en un solo bucket de destino. Después de que
Amazon S3 replica un objeto, este no se puede volver a replicar. Por ejemplo, si cambia el bucket de
destino en una configuración de replicación existente, pero Amazon S3 no replicará de nuevo el objeto.
Otro ejemplo: supongamos que configura una replicación donde el bucket A es el de origen y el bucket B
es el de destino. Ahora, supongamos que añade otra configuración de replicación donde el bucket B es
el de origen y el bucket C es el de destino. En este caso, los objetos en el bucket B que son réplicas de
objetos en el bucket A no se replican en el bucket C.
Temas relacionados
Replicación (p. 573)
• El bucket de destino: el bucket donde desea que Amazon S3 replique los objetos.
• Los objetos que quiera replicar: puede replicar todos los objetos del bucket de origen o un subconjunto.
Usted identifica el subconjunto proporcionando un prefijo de nombre de clave, una o más etiquetas de
objeto, o ambos en la configuración. Por ejemplo, si configura una regla de replicación para replicar solo
objetos con el prefijo de nombre de clave Tax/, Amazon S3 replica objetos con claves como Tax/doc1
o Tax/doc2. Pero no un objeto con la clave Legal/doc3. Si especifica el prefijo y una o más etiquetas,
Amazon S3 replica solo los objetos que tienen un prefijo de clave específico y las etiquetas.
Una réplica tiene los mismos nombres de clave y metadatos (por ejemplo, hora de creación, metadatos
definidos por el usuario e ID de versión) que el objeto original. Amazon S3 cifra todos los datos en tránsito
usando Secure Sockets Layer (SSL).
• Amazon S3 supone que la réplica del objeto sigue siendo titularidad del propietario del objeto de
origen. Por tanto, cuando replica objetos, también replica la lista de control de acceso (ACL) del objeto
correspondiente. Si los buckets de origen y destino pertenecen a dos cuentas diferentes de AWS, puede
configurar la replicación para cambiar el propietario de una réplica en la cuenta de AWS que pertenece
al bucket de destino.
Están disponibles opciones de configuración adicionales. Para obtener más información, consulte
Configuraciones de replicación adicionales (p. 590).
Important
Si cuenta con una política de ciclo de vida para la caducidad de un objeto en el bucket sin
versiones y quiere mantener el mismo comportamiento de eliminación cuando habilite el control
de versiones, debe agregar una política de vencimiento no actual. La política de vencimiento
no actual administrará las eliminaciones de las versiones de objetos no actuales en el bucket
habilitado para el control de versiones. (Un bucket con habilitación de versiones mantiene la
versión actual y cero o más versiones objeto no actuales). Para obtener más información, consulte
How Do I Create a Lifecycle Policy for an S3 Bucket? en la Guía del usuario de la consola de
Amazon Simple Storage Service.
Amazon S3 también proporciona API para que admita la configuración de reglas de replicación. Para
obtener más información, consulte los siguientes temas en la Amazon Simple Storage Service API
Reference:
En lugar de hacer estas llamadas a la API directamente desde su código, puede agregar una configuración
de replicación a un bucket con el SDK de AWS, AWS CLI o la consola de Amazon S3. Lo más
fácil es utilizar la consola. Para ver ejemplos con instrucciones paso a paso, consulte Tutoriales de
replicación (p. 598).
Si no está familiarizado con la configuración de la replicación, le recomendamos que lea las siguientes
secciones antes de explorar los ejemplos y las configuraciones opcionales. Para ejemplos que
proporcionan instrucciones paso a paso para realizar las configuraciones básicas de la replicación,
consulte Información general de la configuración de replicación (p. 579).
Temas
• Información general de la configuración de replicación (p. 579)
• Configuración de permisos para la replicación (p. 587)
<ReplicationConfiguration>
<Role>IAM-role-ARN</Role>
<Rule>
...
</Rule>
<Rule>
...
</Rule>
...
</ReplicationConfiguration>
Amazon S3 no puede replicar objetos sin su permiso. Usted otorga permisos con el rol de IAM que
especifique en la configuración de replicación. Amazon S3 asume el rol de IAM para replicar objetos en
su nombre. Debe conceder primero los permisos necesarios al rol de IAM. Para obtener más información
acerca de la administración de permisos, consulte Configuración de permisos para la replicación (p. 587).
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.
Temas
• Configuración básica de reglas (p. 580)
• Opcional: especificación de un filtro (p. 580)
• Configuraciones de destino adicionales (p. 581)
• Ejemplo de configuraciones de replicación (p. 582)
• Status indica si la regla está habilitada o deshabilitada. Si una regla está deshabilitada, Amazon S3 no
realiza las acciones especificadas en ella.
• Priority indica qué regla tiene prioridad cuando se aplican varias reglas a un objeto.
• Actualmente, los marcadores de eliminación no se replican, por lo que debe establecer
DeleteMarkerReplication en Disabled.
En la configuración de destino, debe proporcionar el nombre del bucket donde desea que Amazon S3
replique los objetos.
...
<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.
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
este código. Usted incluye estos filtros en un elemento principal AND. Amazon S3 realiza la operación
lógica AND para combinar estos filtros. En otras palabras la regla se aplica a un subconjunto de objetos con
un prefijo de clave específico y etiquetas específicas.
<Rule>
...
<Filter>
<And>
<Prefix>key-prefix</Prefix>
<Tag>
<Key>key1</Key>
<Value>value1</Value>
</Tag>
<Tag>
<Key>key2</Key>
<Value>value2</Value>
</Tag>
...
</Filter>
...
</Rule>
...
...
<Destination>
<Bucket>arn:aws:s3:::destination-bucket</Bucket>
</Destination>
...
• Puede especificar la clase de almacenamiento para las réplicas de objetos. De forma predeterminada,
Amazon S3 utiliza la clase de almacenamiento del objeto de origen para crear réplicas de objetos, como
en el ejemplo siguiente.
...
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<StorageClass>storage-class</StorageClass>
</Destination>
...
• Cuando los buckets de origen y destino no pertenecen a la misma cuenta, puede cambiar el propietario
de la réplica en la cuenta de AWS que pertenece al bucket de destino añadiendo el elemento
AccessControlTranslation.
...
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<Account>destination-bucket-owner-account-id</Account>
<AccessControlTranslation>
<Owner>Destination</Owner>
</AccessControlTranslation>
</Destination>
...
Si no añade este elemento a la configuración de replicación, las réplicas pertenecen a la misma cuenta
de AWS a la que pertenece el objeto de origen. Para obtener más información, consulte Configuración
de replicación adicional: cambiar el propietario de la réplica (p. 591).
• Es posible que su bucket de origen contenga objetos creados con cifrado en el servidor mediante
claves almacenadas en AWS KMS. De forma predeterminada, Amazon S3 no replica estos objetos.
Opcionalmente, puede indicar a Amazon S3 que replique estos objetos si primero opta explícitamente
por esta función agregando el elemento SourceSelectionCriteria y luego proporcionando la clave AWS
KMS (para la región de AWS del bucket de destino) que se usará para cifrar réplicas de objetos.
...
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
<Bucket>arn:aws:s3:::dest-bucket-name</Bucket>
<EncryptionConfiguration>
<ReplicaKmsKeyID>AWS KMS key IDs to use for encrypting object replicas</
ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
...
Para obtener más información, consulte Configuración adicional de replicación: replicar objetos creados
con el cifrado en el servidor (SSE) mediante claves de cifrado almacenadas en AWS KMS (p. 593).
Important
Para añadir una configuración de replicación a un bucket, debe tener el permiso iam:PassRole.
Este permiso le permite pasar el rol de IAM que otorga permisos de replicación Amazon S3. Usted
especifica el rol de IAM proporcionando el Nombre de recurso de Amazon (ARN) que se usa
en el elemento Role en el XML de configuración de replicación. Para obtener más información,
consulte Concesión de permisos a un usuario para transferir una función a un servicio de AWS en
la Guía del usuario de IAM.
<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.
<Filter>
<Prefix>Tax/</Prefix>
</Filter>
<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>
</Rule>
</ReplicationConfiguration>
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.
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<And>
<Prefix>Tax/</Prefix>
<Tag>
<Tag>
<Key>tagA</Key>
<Value>valueA</Value>
</Tag>
</Tag>
<Tag>
<Tag>
<Key>tagB</Key>
<Value>valueB</Value>
</Tag>
</Tag>
</And>
</Filter>
<Destination><Bucket>arn:aws:s3:::destinationbucket</Bucket></Destination>
</Rule>
</ReplicationConfiguration>
Puede especificar una clase de almacenamiento para las réplicas de objetos como se indica a
continuación:
<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>
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.
<ReplicationConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Role>arn:aws:iam::account-id:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Status>Enabled</Status>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
</Destination>
...
</Rule>
<Rule>
<Status>Enabled</Status>
<Priority>2</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Project</Prefix>
</Filter>
<Status>Enabled</Status>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
<StorageClass>STANDARD_IA</StorageClass>
</Destination>
...
</Rule>
</ReplicationConfiguration>
En esta configuración, las dos reglas especifican filtros con superposición de prefijos de clave, star/
y starship. Ambas reglas se aplican a objetos con el nombre de clave starship-x. En este caso,
Amazon S3 usará la prioridad de la regla para determinar la regla que se va a aplicar.
<ReplicationConfiguration>
<Role>arn:aws:iam::AcctID:role/role-name</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>star</Prefix>
</Filter>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
</Destination>
</Rule>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>string</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>starship</Prefix>
</Filter>
<Destination>
<Bucket>arn:aws:s3:::destinationbucket</Bucket>
</Destination>
</Rule>
</ReplicationConfiguration>
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.
• 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.
</Rule>
</ReplicationConfiguration>
Para compatibilidad con versiones anteriores, Amazon S3 sigue admitiendo la configuración V1.
• Cuando elimina un objeto de su bucket de origen sin especificar un ID de versión del objeto, Amazon
S3 agrega un marcador de eliminación. Si usa la V1 del XML de configuración de replicación, Amazon
S3 replica los marcadores de eliminación resultantes de las acciones de usuario. En otras palabras, si el
usuario eliminó el objeto, y no si Amazon S3 lo eliminó porque el objeto caducó como parte de la acción
del ciclo de vida. En V2, Amazon S3 no replica marcadores de eliminación. Por tanto, debe establecer el
elemento DeleteMarkerReplication en Disabled.
...
<Rule>
<ID>Rule-1</ID>
<Status>rule-Enabled-or-Disabled</Priority>
<Priority>integer</Status>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Destination>
<Bucket>arn:aws:s3:::bucket-name</Bucket>
</Destination>
</Rule>
...
• Cree un rol de IAM: Amazon S3 necesita permisos para replicar objetos en su nombre. Puede conceder
estos permisos creando un rol de IAM y especificar el rol en la configuración de replicación.
• Cuando los buckets de origen y destino no pertenecen a las mismas cuentas, el propietario del bucket de
destino debe otorgar al propietario del bucket de origen permisos para almacenar las réplicas.
Temas
• Creación de un rol de IAM (p. 587)
• Concesión de permisos cuando los buckets de origen y destino son propiedad de diferentes cuentas
de AWS (p. 589)
En esta sección se explica la política de confianza y la política de permisos mínimos necesarios. Los
tutoriales de ejemplo proporcionan instrucciones paso a paso para crear un rol de IAM. Para obtener más
información, consulte Tutoriales de replicación (p. 598).
• A continuación se muestra una política de confianza donde identifica a Amazon S3 como la entidad
principal del servicio que puede asumir el rol.
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
Para obtener más información sobre los roles de IAM, consulte Roles de IAM en la Guía del usuario de
IAM.
• A continuación se muestra una política de acceso donde usted concede al rol permisos para realizar
tareas de replicación en su nombre. Cuando Amazon S3 asume el rol, adopta los permisos que
especifique en esta política.
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetReplicationConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::source-bucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:GetObjectVersionTagging"
],
"Resource":[
"arn:aws:s3:::source-bucket/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
]
}
Note
Para ver la lista de acciones de Amazon S3, consulte Especificación de permisos en una
política (p. 357).
Important
La cuenta de AWS propietaria del rol de IAM debe tener los permisos para las acciones que
concede al rol de IAM.
Suponga, por ejemplo, que el bucket de origen contiene objetos que pertenecen a otra
cuenta de AWS. El propietario de los objetos debe conceder explícitamente a la cuenta de
AWS propietaria del rol de IAM, los permisos necesarios a través de la ACL del objeto. De lo
contrario, Amazon S3 no puede acceder a los objetos y la replicación de los objetos dará un
error. Para obtener más información acerca de los permisos de ACL, consulte Información
general de las Access Control Lists (ACL, Listas de control de acceso) (p. 419).
Los permisos aquí descritos están relacionados con la configuración de replicación mínima.
Si elige agregar configuraciones de replicación opcionales, debe otorgar permisos adicionales
a Amazon S3. Para obtener más información, consulte Configuraciones de replicación
adicionales (p. 590).
{
"Version":"2008-10-17",
"Id":"PolicyForDestinationBucket",
"Statement":[
{
"Sid":"1",
"Effect":"Allow",
"Principal":{
"AWS":"SourceBucket-AcctID"
},
"Action":[
"s3:ReplicateDelete",
"s3:ReplicateObject"
],
"Resource":"arn:aws:s3:::destinationbucket/*"
},
{
"Sid":"2",
"Effect":"Allow",
"Principal":{
"AWS":"SourceBucket-AcctID"
},
"Action":"s3:List*",
Versión de API 2006-03-01
589
Amazon Simple Storage Service Guía del desarrollador
Configuraciones de replicación adicionales
"Resource":"arn:aws:s3:::destinationbucket"
}
]
}
Para ver un ejemplo, consulte Ejemplo 2: Configuración de la replicación cuando los buckets de origen y
destino son propiedad de cuentas diferentes (p. 608).
• Si el propietario del bucket de origen concede permisos a Amazon S3 para las acciones
s3:GetObjectVersionTagging y s3:ReplicateTags para replicar las etiquetas de los objetos (a
través del rol de IAM), Amazon S3 replicará las etiquetas junto con los objetos. Para obtener información
acerca del rol de IAM, consulte Creación de un rol de IAM (p. 587).
• Si el propietario del bucket de destino no desea replicar las etiquetas, puede añadir la siguiente
instrucción a la política del bucket de destino para denegar el permiso explícitamente para la acción
s3:ReplicateTags:
...
"Statement":[
{
"Effect":"Deny",
"Principal":{
"AWS":"arn:aws:iam::SourceBucket-AcctID:root"
},
"Action":["s3:ReplicateTags"],
"Resource":"arn:aws:s3:::destinationbucket/*"
}
]
...
Temas
• Configuración de replicación adicional: cambiar el propietario de la réplica (p. 591)
• Configuración adicional de replicación: replicar objetos creados con el cifrado en el servidor (SSE)
mediante claves de cifrado almacenadas en AWS KMS (p. 593)
• Añada la opción de invalidación del propietario a la configuración de replicación para indicar a Amazon
S3 que cambie la titularidad de la réplica.
• Conceda a Amazon S3 permisos para cambiar la titularidad de la réplica.
• Añada permiso en la política del bucket de destino para permitir el cambio de titularidad de la réplica.
Esto permite al propietario del bucket de destino aceptar la propiedad de las réplicas de objetos.
Las siguientes secciones describen cómo realizar estas tareas. Para ver un ejemplo práctico con
instrucciones paso a paso, consulte Ejemplo 3: Cambio del propietario de la réplica cuando los buckets de
origen y de destino son propiedad de cuentas diferentes (p. 609).
Para especificar la opción de invalidación del propietario, añada lo siguiente al elemento Destination:
<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.
...
{
"Effect":"Allow",
"Action":[
"s3:ObjectOwnerOverrideToBucketOwner"
],
"Resource":"arn:aws:s3:::destination-bucket/*"
}
...
...
{
"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:
Si añade la invalidación del propietario, Amazon S3 replica solo la versión del objeto, no la ACL.
Además, Amazon S3 no replica cambios subsiguientes a la ACL de objetos de origen. Amazon S3
establece la ACL en la réplica que concede control absoluto al propietario del bucket de destino.
• Al actualizar una configuración de replicación para habilitar o inhabilitar la invalidación del propietario,
sucede lo siguiente.
• Si añade la opción de invalidación del propietario a la configuración de replicación:
Cuando Amazon S3 replica una versión del objeto, descarta la ACL asociada al objeto de origen. En
su lugar, establece la ACL de la réplica de forma que se conceda control completo al propietario del
bucket de destino. No replica los cambios que se realicen posteriormente en la ACL del objeto de
origen. No obstante, este cambio a la ACL no se aplica a las versiones de objetos que se replicaron
antes de configurar la opción de invalidación del propietario. Las actualizaciones de las ACL de
los objetos de origen que se replicaron antes de que se configurara la opción de invalidación
del propietario se seguirán replicando (porque el objeto y sus réplicas siguen teniendo el mismo
propietario).
• Si elimina la opción de invalidación del propietario de la configuración de replicación:
Amazon S3 replica objetos nuevos que aparecen en el bucket de origen y las ACL asociadas al
bucket de destino. Para objetos que se replicaron antes de que eliminar la invalidación del propietario,
Amazon S3 no replica las ACL porque el cambio de titularidad del objeto que realizó Amazon S3
permanece en vigor. Es decir, las ACL aplicadas a la versión del objeto que se replicaban cuando se
estableció la opción de invalidación del propietario siguen sin replicarse.
Para ver un ejemplo con instrucciones paso a paso, consulte Ejemplo 4: Replicación de objetos
cifrados (p. 613). Para obtener información acerca de la configuración de replicación, consulte
Replicación (p. 573).
Temas
• Especificación de información adicional en la configuración de replication (p. 594)
• Concesión de permisos adicionales para el rol de IAM (p. 595)
• Concesión de permisos adicionales para escenarios que afectan a varias cuentas (p. 597)
• Consideraciones de límite de transacciones de AWS KMS (p. 598)
• En la configuración Destination, añada la clave de AWS KMS que quiere que Amazon S3 utilice para
cifrar réplicas de objetos.
• Opte explícitamente por habilitar la replicación de objetos cifrados usando las claves de AWS KMS
agregando el elemento SourceSelectionCriteria.
<ReplicationConfiguration>
<Rule>
...
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
...
<EncryptionConfiguration>
<ReplicaKmsKeyID>AWS KMS key ID for the AWS region of the destination
bucket.</ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
...
</Rule>
</ReplicationConfiguration>
Important
La clave de AWS KMS debe haberse creado en la misma región de AWS que el bucket de
destino.
La clave de AWS KMS debe ser válida. La API de replicación de bucket PUT no comprueba la
validez de las claves de AWS KMS. Si usa una clave no válida, recibe el código de estado 200 OK
en respuesta, pero la replicación genera un error.
En el siguiente ejemplo se muestra un ejemplo de configuración de replicación que incluye los elementos
de configuración opcionales.
<Status>Enabled</Status>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Destination>
<Bucket>arn:aws:s3:::destination-bucket</Bucket>
<EncryptionConfiguration>
<ReplicaKmsKeyID>The AWS KMS key ID for the AWS region of the destination
bucket (S3 uses it to encrypt object replicas).</ReplicaKmsKeyID>
</EncryptionConfiguration>
</Destination>
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
</Rule>
</ReplicationConfiguration>
Esta configuración de replicación tiene una regla. La regla se aplica a los objetos con el prefijo de clave
Tax. Amazon S3 utiliza el ID de clave de AWS KMS para cifrar estas réplicas de objetos.
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*",
]
}
},
"Resource": [
"AWS KMS key IDs (for the AWS region of the destination bucket). S3 uses it to
encrypt object replicas",
]
}
La cuenta de AWS que posea el rol de IAM debe tener permisos para esta acciones de AWS KMS
(kms:Encrypt y kms:Decrypt) para las claves de AWS KMS que se indican en la política. Si las
claves de AWS KMS pertenecen a otra cuenta de AWS, el propietario de las claves debe conceder
estos permisos a la cuenta de AWS que posee el rol de IAM. Para obtener más información sobre cómo
administrar el acceso a estas claves, consulte Uso de políticas de IAM con AWS KMS en la AWS Key
Management Service Developer Guide.
A continuación, se muestra una política de IAM completa que concede los permisos necesarios para
replicar objetos sin cifrar creados con el cifrado del lado del servidor mediante claves de cifrado
administradas por Amazon S3 y claves de cifrado administradas por AWS KMS.
Note
Los objetos creados con cifrado de lado servidor mediante claves de cifrado proporcionadas por
los clientes (SSE-C) no se replican.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetReplicationConfiguration",
"s3:ListBucket"
],
"Resource":[
"arn:aws:s3:::source-bucket"
]
},
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Resource":[
"arn:aws:s3:::source-bucket/key-prefix1*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Resource":"arn:aws:s3:::destination-bucket/key-prefix1*"
},
{
"Action":[
"kms:Decrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.source-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::source-bucket-name/key-prefix1*"
]
}
},
"Resource":[
"List of AWS KMS key IDs used to encrypt source objects."
]
},
{
"Action":[
"kms:Encrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.destination-bucket-region.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::destination-bucket-name/prefix1*"
]
}
},
"Resource":[
"AWS KMS key IDs (for the AWS region of the destination bucket) to use for
encrypting object replicas"
]
}
]
}
Para conceder permiso al propietario del bucket de origen para usar la clave (consola de IAM)
Para conceder permiso al propietario del bucket para usar la clave (CLI de AWS)
• Para obtener información, consulte put-key-policy en la Referencia de comandos de la AWS CLI. Para
obtener información acerca de la API subyacente, consulte PutKeyPolicy en la AWS Key Management
Service API Reference.
Para solicitar un aumento de este límite de velocidad de API de AWS KMS, póngase en contacto con AWS
Support.
Tutoriales de replicación
Los siguientes ejemplos muestran cómo configurar la replicación para casos de uso comunes. Los
ejemplos demuestran la configuración de replicación utilizando la consola de Amazon S3, AWS Command
Line Interface (AWS CLI), y los SDK de AWS (se muestran ejemplos de Java y .NET SDK). Para obtener
más información sobre cómo instalar y configurar la AWS CLI, consulte los siguientes temas en la AWS
Command Line Interface Guía del usuario.
Para obtener información acerca de los SDK de AWS, consulte AWS SDK para Java y AWS SDK
para .NET.
Temas
• Ejemplo 1: Configuración de la replicación cuando los buckets de origen y destino son propiedad de la
misma cuenta (p. 599)
• Ejemplo 2: Configuración de la replicación cuando los buckets de origen y destino son propiedad de
cuentas diferentes (p. 608)
• Ejemplo 3: Cambio del propietario de la réplica cuando los buckets de origen y de destino son
propiedad de cuentas diferentes (p. 609)
• Ejemplo 4: Replicación de objetos cifrados (p. 613)
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).
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).
Note
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.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
{
"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.
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"
}
}
]
}
La cantidad de tiempo que Amazon S3 tarda en replicar un objeto depende del tamaño
del objeto. Para obtener más información sobre cómo ver el estado de la replicación,
consulte Información del estado de replicación (p. 618).
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.
Java
El siguiente ejemplo añade una configuración de replicación a un bucket y luego recupera y verifica la
configuración. Para obtener instrucciones sobre la creación y comprobación de una muestra funcional,
consulte Prueba de ejemplos de código Java de Amazon S3 (p. 706).
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
import com.amazonaws.services.identitymanagement.model.CreateRoleRequest;
import com.amazonaws.services.identitymanagement.model.PutRolePolicyRequest;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.BucketReplicationConfiguration;
import com.amazonaws.services.s3.model.BucketVersioningConfiguration;
import com.amazonaws.services.s3.model.CreateBucketRequest;
import com.amazonaws.services.s3.model.DeleteMarkerReplication;
import com.amazonaws.services.s3.model.DeleteMarkerReplicationStatus;
import com.amazonaws.services.s3.model.ReplicationDestinationConfig;
import com.amazonaws.services.s3.model.ReplicationRule;
import com.amazonaws.services.s3.model.ReplicationRuleStatus;
import com.amazonaws.services.s3.model.SetBucketVersioningConfigurationRequest;
import com.amazonaws.services.s3.model.StorageClass;
import com.amazonaws.services.s3.model.replication.ReplicationFilter;
import com.amazonaws.services.s3.model.replication.ReplicationFilterPredicate;
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;
try {
iamClient.createRole(createRoleRequest);
iamClient.putRolePolicy(putRolePolicyRequest);
}
}
C#
El siguiente código de ejemplo de AWS SDK para .NET añade una configuración de replicación a
un bucket y luego la recupera. Para usar este código, proporcione los nombres de los buckets y el
nombre de recurso de Amazon (ARN) para el rol de IAM. Para obtener instrucciones acerca de cómo
crear y probar una muestra funcional, consulte Ejecución de ejemplos de código .NET de Amazon
S3 (p. 708).
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class CrossRegionReplicationTest
{
private const string sourceBucket = "*** source bucket ***";
// Bucket ARN example - arn:aws:s3:::destinationbucket
private const string destinationBucketArn = "*** destination bucket ARN ***";
private const string roleArn = "*** IAM Role ARN ***";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint sourceBucketRegion =
RegionEndpoint.USWest2;
private static IAmazonS3 s3Client;
public static void Main()
{
s3Client = new AmazonS3Client(sourceBucketRegion);
EnableReplicationAsync().Wait();
}
static async Task EnableReplicationAsync()
{
try
{
ReplicationConfiguration replConfig = new ReplicationConfiguration
{
Role = roleArn,
Rules =
{
new ReplicationRule
{
Prefix = "Tax",
Status = ReplicationRuleStatus.Enabled,
Destination = new ReplicationDestination
{
BucketArn = destinationBucketArn
}
}
}
};
}
}
Para configurar la replicación cuando los buckets de origen y destino son propiedad de cuentas
diferentes de AWS
1. En este ejemplo, crea los bucket de origen y de destino en la dos cuentas de AWS diferentes.
Tiene que tener dos perfiles de credenciales configurados para la CLI de AWS (en este ejemplo,
utilizamos acctA y acctB para los nombres de perfil). Para obtener más información acerca de la
configuración de perfiles de credenciales, consulte Perfiles con nombre en la AWS Command Line
Interface Guía del usuario.
2. Siga las instrucciones paso a paso en Ejemplo 1: Configuración de buckets en la misma
cuenta (p. 599) con los siguientes cambios:
• Para todos los comandos de la AWS CLI relacionados con actividades del bucket de origen (para
crear el bucket de origen, habilitar el control de versiones y crear el rol de IAM), utilice el perfil
acctA. Utilice el perfil acctB para crear el bucket de destino.
• Asegúrese de que la política de permisos especifica los bucket de origen y de destino creados
para este ejemplo.
3. En la consola, añada la siguiente política de bucket al bucket de destino para permitir al propietario
del bucket de origen replicar objetos: Asegúrese de editar la política proporcionando el ID de cuenta
de AWS del propietario del bucket de origen y el nombre del bucket de destino.
{
"Version":"2008-10-17",
"Id":"",
"Statement":[
{
"Sid":"Stmt123",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws:iam::source-bucket-owner-AWS-acct-ID:root"
},
"Action":["s3:ReplicateObject", "s3:ReplicateDelete"],
"Resource":"arn:aws:s3:::destination/*"
}
]
}
Elija el bucket y añada la política de buckets. Para obtener instrucciones, consulte ¿Cómo agrego una
política de bucket en S3? en la Guía del usuario de la consola de Amazon Simple Storage Service.
Parar cambiar la titularidad de la réplica cuando los buckets de origen y de destino son propiedad
de cuentas de AWS diferentes (CLI de AWS)
1. En este ejemplo, crea los buckets de origen y de destino en dos cuentas de AWS diferentes.
Configure la CLI de AWS con dos perfiles con nombre. Este ejemplo usa los nombres de perfil acctA
y acctB respectivamente. Para obtener más información acerca de la configuración de perfiles de
credenciales, consulte Perfiles con nombre en la AWS Command Line Interface Guía del usuario.
Important
Los perfiles utilizados para este ejercicio tienen que tener los permisos necesarios. Por
ejemplo, en la configuración de replicación especifica el rol de IAM que Amazon S3 puede
asumir. Solo puede hacer esto si el perfil que utiliza tiene el permiso iam:PassRole. Si
utiliza credenciales de usuario de administrador para crear un perfil con nombre, puede
realizar todas las tareas. Para obtener más información, consulte Concesión de permisos a
un usuario para transferir un rol a un servicio de AWS en la Guía del usuario de IAM.
Tendrá que asegurarse de que estos permisos tengan los permisos necesarios. Por ejemplo, la
configuración de replicación incluye un rol de IAM que Amazon S3 puede asumir. El perfil con
nombre utilizado para asociar dicha configuración a un bucket solo puede hacerlo si tiene el permiso
iam:PassRole. Si especifica credenciales de usuario de administrador al crear estos perfiles con
nombre, entonces tienen todos los permisos. Para obtener más información, consulte Concesión de
permisos a un usuario para transferir un rol a un servicio de AWS en la Guía del usuario de IAM.
2. Cree el bucket de origen y habilite el control de versiones. En este ejemplo, se crea el bucket de
origen en la región US East (N. Virginia) (us-east-1).
--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.
4. Debe añadir permisos a la política del bucket de destino para permitir el cambio de titularidad de la
réplica.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "<destination_bucket_policy_sid>",
"Principal": {
"AWS": "<src_account>"
},
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete"
],
"Effect": "Allow",
"Resource": [
"arn:<partition>:s3:::<destination_bucket_name>/*"
]
}
]
}
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.
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Resource":[
"arn:aws:s3:::source/*"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetReplicationConfiguration"
],
"Resource":[
"arn:aws:s3:::source"
]
},
{
"Effect":"Allow",
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"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.
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.
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).
--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
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
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Principal":{
"Service":"s3.amazonaws.com"
},
"Action":"sts:AssumeRole"
}
]
}
b. Asocie una política de permisos al rol. Esta política concede permisos para varias acciones de
buckets y objetos de Amazon S3.
Versión de API 2006-03-01
614
Amazon Simple Storage Service Guía del desarrollador
Ejemplo 4: Replicación de objetos cifrados
{
"Version":"2012-10-17",
"Statement":[
{
"Action":[
"s3:ListBucket",
"s3:GetReplicationConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetObjectVersionAcl"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::source",
"arn:aws:s3:::source/*"
]
},
{
"Action":[
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging"
],
"Effect":"Allow",
"Condition":{
"StringLikeIfExists":{
"s3:x-amz-server-side-encryption":[
"aws:kms",
"AES256"
],
"s3:x-amz-server-side-encryption-aws-kms-key-id":[
"AWS KMS key IDs(in ARN format) to use for encrypting object
replicas"
]
}
},
"Resource":"arn:aws:s3:::destination/*"
},
{
"Action":[
"kms:Decrypt"
],
"Effect":"Allow",
"Condition":{
"StringLike":{
"kms:ViaService":"s3.us-east-1.amazonaws.com",
"kms:EncryptionContext:aws:s3:arn":[
"arn:aws:s3:::source/*"
]
}
},
"Resource":[
"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"
]
}
]
}
<ReplicationConfiguration>
<Role>IAM-Role-ARN</Role>
<Rule>
<Status>Enabled</Status>
<Priority>1</Priority>
<DeleteMarkerReplication>
<Status>Disabled</Status>
</DeleteMarkerReplication>
<Filter>
<Prefix>Tax</Prefix>
</Filter>
<Status>Enabled</Status>
<SourceSelectionCriteria>
<SseKmsEncryptedObjects>
<Status>Enabled</Status>
</SseKmsEncryptedObjects>
</SourceSelectionCriteria>
<Destination>
<Bucket>arn:aws:s3:::dest-bucket-name</Bucket>
<EncryptionConfiguration>
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.
6. Compruebe la configuración para verificar que se han replicado los objetos cifrados. En la consola de
Amazon S3:
Por ejemplo, supongamos que en la configuración de replicación, usted especifica el prefijo del objeto
TaxDocs en la configuración de replicación para indicar a Amazon S3 que replique objetos con el prefijo
de nombre de clave TaxDocs. Cualquier objeto que cargue que tenga este prefijo de nombre de clave,
por ejemplo, TaxDocs/document1.pdf, se replicará. Para solicitudes de objetos con este prefijo de
nombre de clave, Amazon S3 devuelve el encabezado x-amz-replication-status con uno de los
siguientes valores para el estado de replicación del objeto: PENDING, COMPLETED o FAILED.
Note
Si la replicación de objetos genera un error después de cargar un objeto, no puede volver a
intentar la replicación. Deberá cargar de nuevo el objeto.
• Cuando solicite un objeto del bucket de destino, si el objeto que solicitó es una réplica que creó Amazon
S3, Amazon S3 devuelve el encabezado x-amz-replication-status con el valor REPLICA.
Puede buscar el estado de replicación de un objeto utilizando la consola, la AWS Command Line Interface
(AWS CLI) o el SDK de AWS.
• Consola: seleccione el objeto y seleccione Properties (Propiedades) para ver las propiedades del objeto
y el estado de replicación.
• AWS CLI: utilice el comando head-object de la AWS CLI para recuperar los metadatos del objeto.
El comando devuelve los metadatos del objeto, incluido el ReplicationStatus como se muestra en el
siguiente ejemplo de respuesta.
{
"AcceptRanges":"bytes",
"ContentType":"image/jpeg",
}
}
• SDK de AWS: los siguientes fragmentos de código obtienen el estado de replicación con AWS SDK for
Java y AWS SDK para .NET, respectivamente.
• AWS SDK for Java
GetObjectMetadataResponse getmetadataResponse =
client.GetObjectMetadata(getmetadataRequest);
Console.WriteLine("Object replication status: {0}",
getmetadataResponse.ReplicationStatus);
Note
Antes de eliminar un objeto del bucket de origen que tiene activada la replicación, revise el estado
de replicación del objeto para asegurarse de que el objeto haya sido replicado.
Si la configuración del ciclo de vida está activada en el bucket de origen, Amazon S3 suspende
las acciones de ciclo de vida hasta que marque el estado de los objetos como COMPLETED o
FAILED.
Temas relacionados
Replicación (p. 573)
• El tiempo que Amazon S3 tarda en replicar un objeto depende del tamaño del objeto. La replicación
puede tardar varias horas para los objetos grandes. Si el objeto que se está replicando es grande, vuelva
a revisar posteriormente para ver si aparece en el bucket de destino. También puede comprobar el
estado de replicación del objeto de origen. Si el estado de replicación de objetos está pendiente, sabe
que Amazon S3 no ha completado la replicación. Si el estado de la replicación de objetos genera un
error, verifique la configuración de replicación definida en el bucket de origen.
Temas relacionados
Replicación (p. 573)
• Control de versiones: para obtener más información, consulte Uso del control de versiones (p. 449).
• Alojamiento en sitio web: para obtener más información, consulte Alojamiento de un sitio web estático en
Amazon S3 (p. 523).
• Acceso al bucket a través de una política de bucket o una lista de control de acceso (ACL): para obtener
más información, consulte Uso de políticas de bucket y usuario (p. 353) y Administración de acceso con
ACL (p. 418).
• Almacenamiento de registros: para obtener más información, Registro de acceso al servidor de Amazon
S3 (p. 674).
• Gestión del ciclo de vida de objetos en un bucket: para obtener más información, consulte
Administración del ciclo de vida de los objetos (p. 127)
Temas
• Configuración de ciclo de vida y réplicas de objetos (p. 621)
• Configuración del control de versión y la replicación (p. 621)
• Configuración de registro y replicación (p. 621)
• CRR y la región de destino (p. 622)
• Interrupción temporal de replicación (p. 622)
• Temas relacionados (p. 622)
Si cuenta con una política de ciclo de vida para la caducidad de un objeto en el bucket sin control de
versiones y quiere mantener el mismo comportamiento de eliminación cuando habilite el control de
versiones, debe agregar una política de vencimiento no actual para administrar las eliminaciones de
versiones de objetos no actuales en el bucket con control de versiones.
La configuración de replicación requiere que el bucket tenga habilitado el control de versiones. Cuando
habilite el control de versiones en un bucket, tenga en cuenta lo siguiente:
• Si dispone de una política de ciclo de vida de expiración de objeto, después de habilitar el control
de versiones, debe añadir una política NonCurrentVersionExpiration para mantener el mismo
comportamiento de eliminación permanente que antes de habilitar el control de versiones.
• Si tiene una política de ciclo de vida de transición, después de habilitar el control de versiones, considere
la posibilidad de añadir la política NonCurrentVersionTransition.
Si los registros de acceso al servidor (Registro de acceso al servidor de Amazon S3 (p. 674)) o registros
de AWS CloudTrail (Registro de llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 647))
están habilitados en el bucket de origen o de destino, Amazon S3 incluye las solicitudes relacionadas con
la replicación en los registros. Por ejemplo, Amazon S3 registra cada objeto que replica.
Si la replicación está habilitada y elimina el rol de IAM que concede a Amazon S3 los permisos necesarios,
la replicación genera un error. Amazon S3 notificará el estado de replicación de los objetos afectados como
Failed.
Temas relacionados
Replicación (p. 573)
Direccionamiento de solicitudes
Temas
• Solicitudes de redireccionamiento en la API REST (p. 623)
• Consideraciones acerca del DNS (p. 627)
Los programas que realizan solicitudes a buckets creados con la API <CreateBucketConfiguration> deben
admitir el redireccionamiento. Además, algunos clientes que no respetan los TTL de DNS podrían producir
problemas.
En esta sección se describe el direccionamiento y algunas cuestiones sobre DNS que se deben tener en
cuenta al usar Amazon S3.
Para utilizar esta característica, debe tener una aplicación que pueda gestionar las respuestas
de redirección de Amazon S3. La única excepción es para las aplicaciones que funcionan
exclusivamente con buckets creados sin <CreateBucketConfiguration>. Para obtener más
información acerca de las restricciones de ubicación, consulte Acceso a un bucket (p. 57).
Para todas las regiones que se lanzaron después del 20 de marzo de 2019, si una solicitud llega
a la ubicación de Amazon S3 incorrecta, Amazon S3 devuelve un error de solicitud errónea HTTP
400.
Para obtener más información sobre cómo habilitar y deshabilitar una región de AWS, consulte
Regiones y puntos de enlace de AWS en la AWS General Reference.
Temas
• Direccionamiento de DNS (p. 623)
• Redireccionamiento de solicitud temporal (p. 624)
• Redireccionamiento de solicitud permanente (p. 626)
• Ejemplos de redireccionamiento de solicitud (p. 626)
Direccionamiento de DNS
El direccionamiento de Domain Name System (DNS, Sistema de nombres de dominio) dirige las solicitudes
a las ubicaciones correctas de Amazon S3. En la figura y el procedimiento siguientes se muestra un
ejemplo de direccionamiento de DNS.
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.
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.
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
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.
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.
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
<soapenv:Body>
<soapenv:Fault>
<Faultcode>soapenv:Client.TemporaryRedirect</Faultcode>
<Faultstring>Please re-send this request to the specified temporary endpoint.
Continue to use the original request endpoint for future requests.</Faultstring>
<Detail>
<Bucket>images</Bucket>
<Endpoint>s3-gztb4pa9sq.amazonaws.com</Endpoint>
</Detail>
</soapenv:Fault>
</soapenv:Body>
• 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.
Por ejemplo, algunas aplicaciones de data lake en Amazon S3 analizan millones o miles de millones
de objetos para consultas que ejecutan petabytes de datos. Estas aplicaciones de data lake logran
velocidades de transferencia de una sola instancia que maximizan el uso de la interfaz de red para su
instancia Amazon EC2, que puede alcanzar hasta los 100 GB/s en una sola instancia. A continuación,
estas aplicaciones agregan rendimiento en varias instancias para obtener varios terabits por segundo.
Otras aplicaciones son sensibles a la latencia, como las aplicaciones de mensajería de las redes sociales.
Estas aplicaciones pueden lograr latencias para objetos pequeños coherentes (y latencias de «first-byte-
out» para objetos más grandes) de entre aproximadamente 100 y 200 milisegundos.
Otros servicios de AWS también pueden ayudar a acelerar el rendimiento para otras arquitecturas de
aplicaciones. Por ejemplo, si desea velocidades de transferencia mayores a través de una conexión HTTP
única o latencias de milisegundos de un solo dígito, use Amazon CloudFront o Amazon ElastiCache para el
almacenamiento en caché con Amazon S3.
De forma adicional, si desea un transporte rápido de los datos a largas distancias entre un cliente y
un bucket de S3, use Aceleración de transferencia de Amazon S3 (p. 76). Transfer Acceleration usa
las ubicaciones de borde distribuidas globalmente en CloudFront para acelerar el transporte de los
datos a través de distancias geográficas. Si su carga de trabajo de Amazon S3 utiliza el cifrado de lado
servidor con AWS Key Management Service (SSE-KMS), consulte Límites de AWS KMS en la Guía para
desarrolladores de AWS Key Management Service para obtener información sobre las velocidades de
solicitudes admitidas para su caso de uso.
En los siguientes temas se describen las directrices y patrones de diseño recomendados a fin de optimizar
el rendimiento para las aplicaciones que usan Amazon S3. Estas instrucciones sustituyen a cualquier
instrucción anterior acerca de la optimización del rendimiento de Amazon S3. Por ejemplo, anteriormente,
las instrucciones de rendimiento de Amazon S3 recomendaban utilizar nombre de prefijos aleatorios
con caracteres de almohadilla para optimizar el rendimiento de las recuperaciones de datos frecuentes.
Ya no tiene que utilizar nombres de prefijo aleatorios para obtener un buen rendimiento; puede usar
nombres secuenciales basados en fecha para los prefijos. Consulte Directrices de rendimiento de Amazon
S3 (p. 629) y Patrones de diseño de rendimiento para Amazon S3 (p. 631) para obtener la información
más reciente sobre la optimización del rendimiento de Amazon S3.
Temas
• Directrices de rendimiento de Amazon S3 (p. 629)
• Patrones de diseño de rendimiento para Amazon S3 (p. 631)
Para obtener el mejor rendimiento para su aplicación en Amazon S3, recomendamos las siguientes
directrices.
Temas
• Medición del rendimiento (p. 629)
• Escalado horizontal de las conexiones de almacenamiento (p. 629)
• Uso de recuperaciones de rango de byte (p. 629)
• Reintento de solicitudes de aplicaciones sensibles a la latencia (p. 630)
• Combinación de Amazon S3 (almacenamiento) y Amazon EC2 (informática) en la misma región de
AWS (p. 630)
• Uso de Amazon S3 Transfer Acceleration para minimizar la latencia generada por la
distancia (p. 630)
• Uso de la versión más reciente de los SDK de AWS (p. 630)
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
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.
Para obtener más información acerca de los costos de las transferencias de datos, consulte Precios de
Amazon S3.
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
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.
Temas
• Uso del almacenamiento en caché para el contenido de acceso frecuente (p. 631)
• Tiempos de espera y reintentos de aplicaciones sensibles a la latencia (p. 632)
• Escalado horizontal y uso en paralelo de solicitudes para lograr un alto rendimiento (p. 632)
• Uso de Amazon S3 para acelerar las transferencias de datos dispares en sentido geográfico (p. 633)
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).
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.
Para las transferencias de alto rendimiento, Amazon S3 aconseja que se usen aplicaciones que a su
vez usen varias conexiones a los datos de GET o PUT en paralelo. Por ejemplo, esto cuenta con el
respaldo del Gestor de transferencias de Amazon S3 en el SDK para Java de AWS. Además, la mayoría
de los otros SDK de AWS proporcionan construcciones similares. Para algunas aplicaciones, puede
lograr conexiones paralelas lanzando varias solicitudes simultáneamente en diferentes subprocesos de
aplicación, o bien en diferentes instancias de aplicación. El mejor enfoque que adoptar depende de su
aplicación y la estructura de los objetos a los que tiene acceso.
Puede usar los SDK de AWS para emitir las solicitudes GET y PUT directamente en lugar de emplear
la administración de las transferencias en el SDK de AWS. Este enfoque le permite ajustar su carga
de trabajo de forma más directa, mientras sigue beneficiándose de la compatibilidad del SDK con los
reintentos y su control de cualquier respuesta HTTP 503 que pueda surgir. Como regla general, al
descargar objetos grandes dentro de una región desde Amazon S3 hasta Amazon EC2, recomendamos
que se realicen solicitudes simultáneas de rangos de byte de un objeto en la granularidad de 8 a 16 MB.
Realice una solicitud simultánea de cada valor comprendido entre 85 y 90 MB/s del rendimiento de red
deseado. Para saturar una tarjeta de interfaz de red (NIC), puede usar unas 15 solicitudes simultáneas a
través de conexiones independientes. Puede escalar de forma ascendente las solicitudes simultáneas a
través de más conexiones para saturar las NIC con mayor rapidez, como NIC de 25 GB/s y de 100 GB/s.
Medir el rendimiento es importante cuando ajusta el número de solicitudes que se van a emitir
simultáneamente. Recomendamos comenzar con una sola solicitud cada vez. Mida el ancho de banda
de red logrado y el uso de otros recursos utilizados por su aplicación durante el procesamiento de los
datos. A partir de ese momento, podrá identificar el recurso de cuello de botella (es decir, el recurso más
usado) y, por tanto, el número de solicitudes con probabilidades de resultar de utilidad. Por ejemplo, si el
procesamiento de una solicitud cada vez se traduce a un uso del 25 % de la CPU, sugiere que se pueden
atender hasta cuatro solicitudes simultáneas. La medición es fundamental y merece la pena confirmar el
uso de recursos a medida que aumenta la velocidad de solicitudes.
Por último, merece la pena prestar atención a DNS y volver a comprobar que las solicitudes se distribuyen
mediante un amplio grupo de direcciones IP de Amazon S3. DNS consulta el ciclo Amazon S3 a través de
una gran lista de puntos de enlace de IP. Sin embargo, el almacenamiento en caché de los solucionadores
o el código de aplicación que vuelve a usar una sola dirección IP no se beneficia de la diversidad de
direcciones y el balanceo de carga que se produce a continuación. Las herramientas de utilidad de red,
como, por ejemplo, la herramienta de línea de comandos netstat, pueden mostrar las direcciones
IP usadas para la comunicación con Amazon S3. Además, proporcionamos directrices acerca de las
configuraciones de DNS que se deben emplear. Para obtener más información acerca de estas directrices,
consulte Consideraciones acerca del DNS (p. 627).
La red de borde también ayuda a acelerar las transferencias de datos tanto dentro como fuera de Amazon
S3. Resulta ideal para las aplicaciones que transfieren datos en o entre continentes, tienen una conexión
a Internet rápida, usan objetos grandes o tienen mucho contenido que cargar. A medida que los datos
llegan a una ubicación de borde, se redirigen a Amazon S3 a través de una ruta de red optimizada. En
general, cuanto más lejos esté de una región de Amazon S3, mayor será la mejora de la velocidad que
puede esperar del uso de Transfer Acceleration.
Puede configurar Transfer Acceleration en buckets nuevos o ya existentes. Puede usar un punto de enlace
de Amazon S3 Transfer Acceleration independiente para utilizar las ubicaciones de borde de AWS. La
mejor forma de probar si Transfer Acceleration contribuye al rendimiento de las solicitudes de los clientes
es usar la herramienta Comparación de velocidad de Aceleración de transferencia de Amazon S3. Las
condiciones y configuraciones de red varían de cuando en cuando y de ubicación a ubicación. Así pues,
solo se le cobrarán las transferencias en las que Amazon S3 Transfer Acceleration pueda mejorar de forma
potencial su rendimiento de carga. Para obtener información acerca del uso de Transfer Acceleration con
diferentes SDK de AWS, consulte Aceleración de transferencia de Amazon S3 Ejemplos (p. 79).
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:
Temas
• Herramientas de monitorización (p. 635)
• Monitorización de métricas con Amazon CloudWatch (p. 636)
• Configuraciones de métricas para buckets (p. 643)
• Registro con Amazon S3 (p. 645)
• Registro de llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 647)
• Uso de AWS CloudTrail para identificar solicitudes de Amazon S3 (p. 655)
Herramientas de monitorización
AWS proporciona varias herramientas que puede utilizar para monitorizar Amazon S3. Puede configurar
algunas de estas herramientas para que monitoricen por usted, pero otras herramientas requieren
intervención manual. Le recomendamos que automatice las tareas de monitorización en la medida de lo
posible.
• Amazon CloudWatch Alarms (Alarmas de Amazon CloudWatch): observe una sola métrica durante
el periodo que especifique y realice una o varias acciones según el valor de la métrica relativo a un
determinado umbral durante varios periodos de tiempo. La acción es una notificación que se envía
a un tema de Amazon Simple Notification Service (Amazon SNS) o a una política de Amazon EC2
Auto Scaling. Las alarmas de CloudWatch no invocan acciones simplemente por tener un estado
determinado. El estado debe haber cambiado y debe mantenerse durante el número de periodos
especificado. Para obtener más información, consulte Monitorización de métricas con Amazon
CloudWatch (p. 636).
• AWS CloudTrail Log Monitoring (Monitorización de registros de &CTlong;): compartir archivos de
registro entre cuentas, monitorizar archivos de registro de CloudTrail en tiempo real mediante su envío
a CloudWatch Logs, escribir aplicaciones de procesamiento de registros en Java y validar que sus
archivos de registro no hayan cambiado después de que CloudTrail los entregue. Para obtener más
información, consulte Registro de llamadas a la API de Amazon S3 mediante AWS CloudTrail (p. 647).
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.
Para saber cómo activar la obtención de estas métricas, consulte Configuraciones de métricas para
buckets (p. 643).
Cuando están habilitadas, se informa de las métricas de solicitudes para todas las operaciones con
objetos. De forma predeterminada, estas métricas de 1 minuto están disponibles en el nivel del bucket
de Amazon S3. También puede definir un filtro para las métricas recopiladas utilizando un prefijo
compartido o una etiqueta de objeto. Esto le permite crear distintos filtros de métricas para aplicaciones
empresariales, organizaciones internas o flujos de trabajo o específicos.
Todas las estadísticas de CloudWatch se retienen durante un periodo de 15 meses, lo que le permite
tener acceso a información histórica y obtener una mejor perspectiva sobre el rendimiento de su aplicación
o servicio web. Para obtener más información, consulte ¿Qué es Amazon CloudWatch? en la Guía del
usuario de Amazon CloudWatch.
Dimensiones y métricas
A continuación aparece una lista de las dimensiones y métricas de almacenamiento que envía Amazon S3
a CloudWatch.
Métrica Descripción
Unidades: bytes
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.
Métrica Descripción
Filtros de tipos de almacenamiento válidos: AllStorageTypes (consulte la
dimensión StorageType)
Unidades: recuento
Métrica Descripción
Unidades: recuento
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
PutRequests Número de solicitudes HTTP PUT realizadas para los objetos de un bucket de
Amazon S3.
Unidades: recuento
Unidades: recuento
Unidades: recuento
Métrica Descripción
Estadísticas válidas: Sum
Unidades: recuento
Unidades: recuento
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.
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.
Unidades: recuento
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.
Métrica Descripción
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
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.
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.
Dimensión Descripción
BucketName Esta dimensión filtra únicamente los datos solicitados para el bucket
identificado.
Dimensión Descripción
Dimensión Descripción
almacenamiento para el nombre del objeto y otros metadatos. Por
este almacenamiento adicional se aplican las tarifas ESTÁNDAR.
• DeepArchiveStagingStorage: el número de bytes
utilizados para partes de objetos Multipart antes de completar
la solicitud CompleteMultipartUpload en objetos en la clase de
almacenamiento DEEP_ARCHIVE.
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.
{
"Datapoints": [
{
"Timestamp": "2016-10-19T00:00:00Z",
"Average": 1025328.0,
"Unit": "Bytes"
}
],
"Label": "BucketSizeBytes"
}
Para ver una lista de métricas válidas almacenadas en su cuenta de AWS con la CLI de AWS
Recursos relacionados
• Amazon CloudWatch Logs API Reference
• Guía del usuario de Amazon CloudWatch
• Acción list-metrics en la AWS CLI Command Reference.
• Acción get-metric-statistics en la AWS CLI Command Reference.
• Configuraciones de métricas para buckets (p. 643).
Si desea obtener las métricas de solicitudes de CloudWatch para los objetos de un bucket, debe crear
una configuración de métricas para el bucket. También puede definir un filtro para las métricas recopiladas
utilizando un prefijo compartido o una etiqueta de objeto. Esto le permite crear distintos filtros de métricas
para aplicaciones empresariales, organizaciones internas o flujos de trabajo o específicos.
Para obtener más información sobre las métricas de CloudWatch disponibles y las diferencias entre
las métricas de almacenamiento y de solicitudes, consulte Monitorización de métricas con Amazon
CloudWatch (p. 636).
• Las métricas de solicitudes admiten el filtrado por prefijos, pero las métricas de almacenamiento no.
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.
• 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.
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.
{
"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:
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.
Notas:
1. CloudTrail no envía registros para las solicitudes que no superan la autenticación (en las que las
credenciales proporcionadas no son válidas). Sin embargo, sí incluye los registros de las solicitudes
que no superan el proceso de autorización (AccessDenied) y las solicitudes realizadas por usuarios
anónimos.
2. El propietario del bucket de S3 recibe registros de CloudTrail únicamente si la cuenta también
es propietaria del objeto de la solicitud o tiene acceso completo a dicho objeto. Para obtener
más información, consulte Acciones en el nivel de objeto en escenarios que afectan a varias
cuentas (p. 651).
Para obtener más información sobre CloudTrail, incluido cómo configurarlo y habilitarlo, consulte la AWS
CloudTrail User Guide.
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
eventos recopilados en los registros de CloudTrail. Para obtener más información, consulte los siguientes
temas:
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:
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).
En las tablas de esta sección se enumeran las acciones en el nivel de bucket de Amazon S3 compatibles
con el registro por parte de CloudTrail.
Acciones en el nivel de bucket de Amazon S3 objetivo del seguimiento del registro de CloudTrail
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.
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:
CloudTrail no registra los nombres de las claves eliminadas mediante la operación Delete
Multiple Objects (Eliminar varios objetos).
Los ejemplos presuponen que los registros de CloudTrail están configurados correctamente.
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:
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.
La solicitud obtiene los registros junto con la información del correo electrónico. Sin embargo, el propietario
del objeto (si puede recibir registros, como en el ejemplo 1) obtiene el registro de CloudTrail que informa
del evento. Aun así, el propietario del bucket no obtiene la información sobre la configuración de ACL,
específicamente el correo electrónico del receptor del permiso y el permiso en sí. La única información
que se comunica al propietario del bucket en el registro es que la cuenta B realizó una llamada a la API de
ACL.
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.
ListAllMyBuckets ListBuckets
CreateBucket CreateBucket
DeleteBucket DeleteBucket
GetBucketAccessControlPolicy GetBucketAcl
SetBucketAccessControlPolicy PutBucketAcl
GetBucketLoggingStatus GetBucketLogging
SetBucketLoggingStatus PutBucketLogging
También puede utilizar registros de CloudTrail junto con CloudWatch para Amazon S3. La integración de
CloudTrail con los registros de CloudWatch Logs entrega la actividad de la API en el nivel de bucket de S3
capturada por CloudTrail a un flujo de registros de CloudWatch en el grupo de registros de CloudWatch
que especifique. Puede crear alarmas de CloudWatch para monitorizar actividades específicas de la API
y recibir notificaciones por correo electrónico cuando ocurres las actividades de la API en cuestión. Para
obtener más información sobre las alarmas de CloudWatch para monitorizar actividades específicas de la
API, consulte la AWS CloudTrail User Guide. Para obtener más información sobre el uso de CloudWatch
con Amazon S3, consulte Monitorización de métricas con Amazon CloudWatch (p. 636).
El siguiente ejemplo muestra una entrada de registro de CloudTrail que ilustra las acciones GET Service,
PUT Bucket acl y GET Bucket versioning.
{
"Records": [
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:18:19Z",
"eventSource": "s3.amazonaws.com",
"eventName": "ListBuckets",
"awsRegion": "us-west-2",
"sourceIPAddress": "127.0.0.1",
"userAgent": "[]",
"requestParameters": {
"host": [
"s3.us-west-2.amazonaws.com"
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV2",
"AuthenticationMethod": "QueryString"
},
"requestID": "47B8E8D397DCE7A6",
"eventID": "cdc4b7ed-e171-4cef-975a-ad829d4123e8",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
},
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:22:33Z",
"eventSource": "s3.amazonaws.com",
"eventName": "PutBucketAcl",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"bucketName": "",
"AccessControlPolicy": {
"AccessControlList": {
"Grant": {
"Grantee": {
"xsi:type": "CanonicalUser",
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"ID":
"d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example"
},
"Permission": "FULL_CONTROL"
}
},
"xmlns": "http://s3.amazonaws.com/doc/2006-03-01/",
"Owner": {
"ID": "d25639fbe9c19cd30a4c0f43fbf00e2d3f96400a9aa8dabfbbebe1906Example"
}
}
"host": [
"s3-us-west-2.amazonaws.com"
],
"acl": [
""
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"AuthenticationMethod": "AuthHeader"
},
"requestID": "BD8798EACDD16751",
"eventID": "607b9532-1423-41c7-b048-ec2641693c47",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
},
{
"eventVersion": "1.03",
"userIdentity": {
"type": "IAMUser",
"principalId": "111122223333",
"arn": "arn:aws:iam::111122223333:user/myUserName",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "myUserName"
},
"eventTime": "2019-02-01T03:26:37Z",
"eventSource": "s3.amazonaws.com",
"eventName": "GetBucketVersioning",
"awsRegion": "us-west-2",
"sourceIPAddress": "",
"userAgent": "[]",
"requestParameters": {
"host": [
"s3.us-west-2.amazonaws.com"
],
"bucketName": "myawsbucket",
"versioning": [
""
]
},
"responseElements": null,
"additionalEventData": {
"SignatureVersion": "SigV4",
"CipherSuite": "ECDHE-RSA-AES128-SHA",
"AuthenticationMethod": "AuthHeader",
},
"requestID": "07D681279BD94AED",
"eventID": "f2b287f3-0df1-4961-a2f4-c4bdfed47657",
"eventType": "AwsApiCall",
"recipientAccountId": "111122223333"
}
]
}
Recursos relacionados
• AWS CloudTrail User Guide
• Referencia de eventos de CloudTrail
• Uso de AWS CloudTrail para identificar solicitudes de Amazon S3 (p. 655)
Temas
• Cómo captura CloudTrail las solicitudes realizadas a Amazon S3 (p. 655)
• Cómo habilitar el registro de eventos de CloudTrail para los buckets y los objetos de S3 (p. 655)
• Identificación de las solicitudes realizadas a Amazon S3 en un registro de CloudTrail (p. 656)
• Uso de AWS CloudTrail para identificar solicitudes de Signature Version 2 en Amazon S3 (p. 658)
• Uso de AWS CloudTrail para identificar el acceso a objetos de Amazon S3 (p. 660)
• Recursos relacionados (p. 655)
Para obtener información sobre las llamadas a la API de Amazon S3 capturadas por CloudTrail, consulte
Información de Amazon S3 en CloudTrail (p. 647).
¿Cómo 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.
s3://myawsexamplebucket/AWSLogs/111122223333/CloudTrail/us-east-2/2019/04/14
Con los registros de eventos de CloudTrail, ahora puede crear una base de datos y una tabla de Athena
para consultarlos como se indica a continuación:
4. Utilice la consulta siguiente para crear una tabla para todos los eventos de CloudTrail en el bucket.
Asegúrese de cambiar el nombre del bucket de <CloudTrail_myawsexamplebucket> por el
nombre de su bucket. También proporcione el AWS_account_ID de CloudTrail que se utiliza en el
bucket.
)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://<myawsexamplebucket>/AWSLogs/<111122223333>/';
Le recomendamos que utilice CloudTrail para determinar si alguno de sus flujos de trabajo utiliza el
proceso de firma de Signature Version 2. Actualice las bibliotecas y el código para que utilicen Signature
Version 4 con el fin de evitar que su negocio se vea afectado.
Para obtener más información, consulte Announcement: AWS CloudTrail for Amazon S3 adds new fields
for enhanced security auditing en los foros de debate de AWS.
Note
Los eventos de CloudTrail para Amazon S3 incluyen la versión de firma en los detalles de
la solicitud bajo el nombre de clave "additionalEventData". Para encontrar la versión
de la firma de las solicitudes realizadas para los objetos en Amazon S3 como GET, PUT y
DELETE, debe habilitar los eventos de datos de CloudTrail porque están deshabilitados de forma
predeterminada.
AWS CloudTrail es el método preferido para identificar solicitudes de Signature Version 2, pero si utiliza
los registros de acceso al servidor de Amazon S3, consulte Uso de los registros de acceso de Amazon S3
para identificar solicitudes de Signature Version 2 (p. 695)
FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
LIMIT 10;
Example — Seleccionar todos los solicitantes que están enviando tráfico Signature Version 2
Para ello, cree una tabla nueva con particiones como se indica a continuación.
apiVersion STRING,
readOnly STRING,
recipientAccountId STRING,
serviceEventDetails STRING,
sharedEventID STRING,
vpcEndpointId STRING
)
PARTITIONED BY (region string, year string, month string, day string)
ROW FORMAT SERDE 'com.amazon.emr.hive.serde.CloudTrailSerde'
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://myawsexamplebucket/AWSLogs/111122223333/';
A continuación, cree cada una de las particiones. No se pueden obtener resultados de fechas que no se
han creado.
A continuación, puede realizar la solicitud basándose en estas particiones y no necesita cargar el bucket
completo.
SELECT useridentity.arn,
Count(requestid) AS RequestCount
FROM s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table_partitioned
WHERE eventsource='s3.amazonaws.com'
AND json_extract_scalar(additionalEventData, '$.SignatureVersion')='SigV2'
AND region='us-east-1'
AND year='2019'
AND month='02'
AND day='19'
Group by useridentity.arn
El ejemplo siguiente muestra cómo obtener todas las solicitudes de objeto PUT para Amazon S3 desde el
registro de eventos de AWS CloudTrail.
Example — Seleccionar todos los eventos que tienen solicitudes de acceso a objetos PUT e
imprimir solo EventTime, EventSource, SourceIP, UserAgent, BucketName, Object y UserARN
SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
requestParameters.bucketName as bucketName,
requestParameters.key as object,
userIdentity.arn as userArn
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE
eventName = ‘PutObject'
AND eventTime BETWEEN "2019-07-05T00:00:00Z" and "2019-07-06T00:00:00Z"
Example — Seleccionar todos los eventos que tienen solicitudes de acceso a objetos GET e
imprimir solo EventTime, EventSource, SourceIP, UserAgent, BucketName, Object y UserARN
SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
requestParameters.bucketName as bucketName,
requestParameters.key as object,
userIdentity.arn as userArn
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE
eventName = ‘GetObject'
AND eventTime BETWEEN "2019-07-05T00:00:00Z" and "2019-07-06T00:00:00Z"
SELECT
eventTime,
eventName,
eventSource,
sourceIpAddress,
userAgent,
requestParameters.bucketName as bucketName,
userIdentity.arn as userArn,
userIdentity.principalId
FROM
s3_cloudtrail_events_db.cloudtrail_myawsexamplebucket_table
WHERE
userIdentity.principalId='ANONYMOUS_PRINCIPAL'
AND eventTime BETWEEN "2019-07-05T00:00:00Z" and "2019-07-06T00:00:00Z"
Note
• Estos ejemplos de consultas pueden servir también para monitorizar la seguridad. Puede
revisar los resultados de las llamadas a las operaciones PutObject o GetObject desde
solicitantes/direcciones IP inesperados o no autorizados con el fin de identificar cualquier
solicitud anónima que se realice a los buckets.
• Esta consulta solo recupera información de la hora a la que se habilitó el registro.
Si utiliza los registros de acceso al servidor de Amazon S3, consulte Uso de registros de acceso de
Amazon S3 para identificar solicitudes de acceso a objetos (p. 695).
Recursos relacionados
• AWS CloudTrail User Guide
• Referencia de eventos de CloudTrail
BitTorrent es un protocolo abierto de punto a punto para la distribución de archivos. Puede utilizar el
protocolo BitTorrent para recuperar cualquier objeto públicamente accesible en Amazon S3. En esta
sección se describe por qué se recomienda utilizar BitTorrent para distribuir sus datos fuera de Amazon S3
y cómo hacerlo.
Amazon S3 admite el protocolo BitTorrent para que los desarrolladores puedan ahorrar costos al distribuir
contenido a gran escala. Amazon S3 es útil para el almacenamiento simple y de confianza de cualquier
dato. El mecanismo de distribución predeterminado para los datos de Amazon S3 es a través de la
descarga al cliente/servidor. En la distribución al cliente/servidor, el objeto completo se transfiere de punto
a punto desde Amazon S3 a todos los usuarios autorizados que solicitan ese objeto. Si bien la entrega
al cliente/servidor es adecuada para una amplia variedad de casos de uso, no es óptima para todos. En
concreto, los costos de la distribución al cliente/servidor aumentan linealmente a media que aumenta
la cantidad de usuarios que descargan objetos. Esto puede hacer que sea costoso distribuir objetos
populares.
BitTorrent aborda este problema al reclutar a cada uno de los clientes que descargan el objeto como
distribuidores: cada cliente descarga algunas partes del objeto de Amazon S3 y otras de otros clientes,
al mismo tiempo que se cargan simultáneamente partes del mismo objeto a otros “pares” interesados.
El beneficio para los editores es que para los archivos populares grandes, la cantidad de datos que se
suministran realmente mediante Amazon S3 puede ser considerablemente menor que si se suministrara
a los mismos clientes mediante la descarga al cliente/servidor. La transferencia de una menor cantidad de
datos redunda en costos más bajos para el editor del objeto.
Note
• Amazon S3 no es compatible con el protocolo BitTorrent en las regiones de AWS en las que se
ha lanzado después del 30 de mayo de 2016.
• Puede obtener un torrente solo para objetos con un tamaño inferior a 5 GB.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
El ahorro en la transferencia de datos que se consigue mediante el uso de BitTorrent puede variar
ampliamente en función de la popularidad del objeto. Los objetos menos populares requieren un uso
más intensivo del "propagador" para servir a los clientes y, por tanto, la diferencia entre los costos de
distribución de BitTorrent y los costos de distribución cliente/servidor podría ser mínima para dichos
objetos. En particular, si en un determinado momento solo hay un cliente descargando un objeto
específico, el costo de la entrega por BitTorrent será el mismo que con una descarga directa.
El punto de arranque de una descarga por BitTorrent es un archivo .torrent. Este pequeño archivo describe
a los clientes de BitTorrent tanto qué datos se deben descargar como dónde empezar a encontrar esos
datos. Un archivo .torrent representa una pequeña fracción del tamaño del objeto real que se ha de
descargar. Cuando suministre a su aplicación cliente de BitTorrent el archivo .torrent generado por Amazon
S3, esta debería empezar a descargar inmediatamente desde Amazon S3 y desde los clientes homólogos
(peers) de BitTorrent.
La recuperación de un archivo .torrent para cualquier objeto públicamente disponible es fácil. Solo tiene
que agregar un parámetro de cadena de consulta "?torrent" al final de la solicitud REST GET para el
objeto. La autenticación no es necesaria. Cuando tenga instalado un cliente de BitTorrent, la descarga de
un objeto mediante BitTorrent podría ser tan sencilla como abrir esta URL en su navegador web.
No hay ningún mecanismo para obtener el .torrent para un objeto de Amazon S3 con la API SOAP.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Example
En este ejemplo se recupera el archivo Torrent para el objeto "Nelson" en el bucket "quotes".
Sample Request
Sample Response
HTTP/1.1 200 OK
x-amz-request-id: 7CD745EBB7AB5ED9
Para dirigir a sus clientes a los objetos disponibles en BitTorrent puede brindarles directamente el
archivo .torrent o publicar un enlace en el URL ?torrent de su objeto. Un punto importante a tener en
cuenta es que el archivo .torrent que describe un objeto de Amazon S3 se genera a petición la primera
vez que se solicita (mediante el recurso REST de ?torrent). Generar el archivo .torrent para un objeto
requiere de tiempo; este tiempo es proporcional al tamaño de ese objeto. Para los objetos grandes, este
tiempo puede ser considerable. Por lo tanto, antes de publicar un enlace de ?torrent, le sugerimos que
primero lo solicite usted mismo. Amazon S3 puede demorar varios minutos para responder esta primera
solicitud mientras genera el archivo .torrent. A menos que actualice el objeto en cuestión, las solicitudes
posteriores para .torrent serán rápidas. Si sigue este procedimientos antes de distribuir un enlace ?torrent,
podrá garantizar una experiencia de descarga de BitTorrent uniforme para sus clientes.
Para dejar de distribuir un archivo con BitTorrent, simplemente elimine el acceso anónimo a él. Para esto,
puede eliminar el archivo de Amazon S3 o modificar su política de control de acceso para prohibir lecturas
anónimas. Después de hacer esto, Amazon S3 ya no actuará como “sembrador” en la red BitTorrent para
su archivo y ya no procesará el archivo .torrent a través de la Application Programming Interface (API,
Interfaz de programación de aplicaciones) de REST de ?torrent. Sin embargo, después de que se publica
un .torrent para su archivo, es posible que esta acción no detenga las descargas públicas de su objeto que
se realizan exclusivamente con la red de punto a punto de BitTorrent.
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Para 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.
Respuesta de error
Temas
• Código de error (p. 667)
• Mensaje de error (p. 667)
• Más detalles (p. 667)
Cuando se genera un error en una solicitud de Amazon S3, el cliente recibe una respuesta de error.
El formato exacto de la respuesta de error es específico de la API: por ejemplo, la respuesta de error
de REST difiere de la respuesta de error de SOAP. Sin embargo, todas las respuestas de error tienen
elementos en común.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Código de error
El código de error es una cadena que identifica de forma exclusiva una condición de error. Está diseñado
para que los programas que detectan y administran errores por tipo puedan leerlo y comprenderlo. Muchos
códigos de error son comunes entre las API de SOAP y REST, pero algunos son específicos de la API. Por
ejemplo, NoSuchKey es universal, pero UnexpectedContent se puede producir únicamente en respuesta a
una solicitud REST no válida. En todos los casos, los códigos de falla de SOAP incluyen un prefijo, como
se indica en la tabla de códigos de error, por lo que un error de NoSuchKey se devuelve efectivamente en
SOAP como Client.NoSuchKey.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Mensaje de error
El mensaje de error contiene una descripción genérica de la condición de error en inglés. Está destinado a
un público humano. Los programas simples muestran el mensaje directamente al usuario final si se detecta
una condición de error que no sabe cómo controlar o no le interesa hacerlo. Los programas sofisticados
con un control de errores más exhaustivo y una internacionalización adecuada tienen más probabilidades
de ignorar el mensaje de error.
Más detalles
Muchas respuestas de error contienen datos estructurados adicionales diseñados para ser leídos y
comprendidos por un desarrollador que diagnostica errores de programación. Por ejemplo, si envía un
encabezado Content-MD5 con una solicitud PUT de REST que no coincide con el resumen calculado en
el servidor, recibe el error BadDigest. La respuesta de error también incluye como elementos de detalle el
resumen que calculamos y el resumen que usted nos anticipó. Durante el desarrollo, puede utilizar esta
información para diagnosticar el error. En producción, un programa con buen comportamiento puede incluir
esta información en el registro de error.
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.
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.
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/.
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Amazon S3 brinda un conjunto de códigos de error que se utilizan en la API de SOAP y en la de REST.
La API de SOAP devuelve códigos de error estándares de Amazon S3. La API de REST está diseñada
para tener el aspecto de un servidor HTTP estándar e interactuar con clientes HTTP existentes (p. ej.,
navegadores, bibliotecas de clientes HTTP, servidores proxy, cachés, etc.). Para asegurarnos de que los
clientes HTTP controlen los errores correctamente, a cada error de Amazon S3 le asignamos un código de
estado HTTP.
Los códigos de estado HTTP son menos costosos que los códigos de error de Amazon S3 e incluyen
menos información sobre el error. Por ejemplo, los errores NoSuchKey y NoSuchBucket de Amazon S3
corresponden al código de estado HTTP 404 Not Found.
Si bien los códigos de estado HTTP contienen menos información sobre el error, los clientes que
comprenden el HTTP pero no la API de Amazon S3, por lo general pueden controlar los errores
correctamente.
Por lo tanto, al controlar errores o informar errores de Amazon S3 a los usuarios finales, utilice el código de
error de Amazon S3 en lugar del código de estado HTTP, ya que contiene más información sobre el error.
Además, al depurar su aplicación, también debe consultar el elemento legible <Details> de la respuesta de
error de XML.
Temas
• Solución de problemas de Amazon S3 por síntoma (p. 670)
• Obtención de ID de solicitudes de Amazon S3 para AWS Support (p. 671)
• Temas relacionados (p. 673)
Síntomas
• Aumentos significativos en las respuestas HTTP 503 a solicitudes de Amazon S3 para buckets con
control de versiones habilitado (p. 670)
• Comportamiento inesperado al acceder a los buckets configurados con CORS (p. 671)
Para determinar qué objetos de S3 tienen millones de versiones, utilice la herramienta de inventario de
Amazon S3. La herramienta de inventario genera un informe que brinda una lista de archivo sin formato de
los objetos de un bucket. Para obtener más información, consulte Inventario de Amazon S3 (p. 439).
El equipo de Amazon S3 insta a los clientes a investigar las aplicaciones que sobrescriben repetidamente
el mismo objeto de S3 y pueden llegar a generar millones de versiones de ese objeto, para determinar si la
aplicación funciona según lo previsto. Si tiene un caso de uso que requiere millones de versiones para uno
o más objetos de S3, contáctese con el equipo de AWS Support en AWS Support para analizar su caso de
uso y permitir que lo ayudemos a determinar la solución óptima para el escenario de su caso de uso.
Después de recuperar estos registros, copie y conserve esos dos valores porque los necesitará para
contactar con AWS Support. Para obtener más información acerca de cómo contactarse con AWS Support,
consulte Contáctenos.
Temas
• Utilización de HTTP para obtener ID de solicitudes (p. 671)
• Utilización de un navegador web para obtener ID de solicitudes (p. 671)
• Utilización de los SDK de AWS para obtener ID de solicitudes (p. 672)
• Uso de AWS CLI para obtener ID de solicitudes (p. 673)
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.
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.
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
Example
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.
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í.
• 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.
• 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.
Temas relacionados
Para ver otros temas de solución de problemas y soporte, consulte lo siguiente:
• Solución de problemas del uso compartido de recursos entre orígenes (CORS) (p. 172)
• Control de errores de REST y SOAP (p. 666)
• Documentación de AWS Support
Para obtener información acerca de la solución de problemas en relación con herramientas de terceros,
consulte la sección sobre la obtención de ID de solicitud de Amazon S3 en los foros para desarrolladores
de AWS.
Temas
• Cómo habilitar el registro de acceso al servidor (p. 674)
• Formato de clave de objeto de registro (p. 676)
• ¿Cómo se envían los registros? (p. 676)
• Envío de archivos de registro de servidor según el mejor esfuerzo (p. 676)
• Los cambios del estado de los registros del bucket se aplican con el tiempo (p. 677)
• Habilitación del registro con la consola (p. 677)
• Habilitación de registros mediante programación (p. 677)
• Formato de registro de acceso al servidor de Amazon S3 (p. 680)
• Eliminación de archivos de registro de Amazon S3 (p. 689)
• Uso de registros de acceso de Amazon S3 para identificar solicitudes (p. 690)
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.
• 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.
Note
• Amazon S3 solo permite conceder permiso para enviar registros de acceso a través de la ACL
del bucket, no a través de la política del bucket.
• La inclusión de condiciones deny en una política de bucket puede impedir que Amazon S3
envíe registros de acceso.
• El cifrado de bucket predeterminado en el bucket de destino solo se puede usar si se selecciona
AES256 (SSE-S3). No se admite el cifrado SSE-KMS.
• El bloqueo de objetos de Amazon S3 no se puede habilitar en el bucket de destino del registro.
• El nombre del bucket de destino donde desea que Amazon S3 guarde los registros de acceso como
objetos. Puede enviar los registros a cualquier bucket de su propiedad que se encuentre en la misma
región que el bucket de origen, incluido el propio bucket de origen.
Le recomendamos guardar los registros de acceso en otro bucket para que pueda administrar los
registros fácilmente. Si decide guardar los registros de acceso en el bucket de origen, le recomendamos
que especifique un prefijo para todas las claves de objeto de registro de manera que los nombres de
objeto comiencen por una cadena común y pueda identificar más fácilmente los objetos de registro.
Cuando los buckets de origen y destino son el mismo, se crean registros adicionales para los registros
que se escriben en el bucket. Este comportamiento podría no ser ideal para su caso de uso ya que
podría dar lugar a un pequeño aumento en su factura de almacenamiento. Además, los registros
adicionales sobre registros podrían hacer que resulte más difícil encontrar el registro que busca.
Note
Tanto los buckets de origen como los de destino deben ser propiedad de la misma cuenta de
AWS y los buckets deben estar en la misma región.
• (Opcional) Un prefijo para que Amazon S3 lo asigne a todas las claves de objeto de registro. El prefijo le
permite localizar con facilidad los objetos de registro.
Por ejemplo, si especifica el valor de prefijo logs/, cada objeto de registro que Amazon S3 crea
empieza con el prefijo logs/ en su clave, como en este ejemplo:
logs/2013-11-01-21-32-16-E568B2907131C0C0
El prefijo de clave puede ser útil cuando elimina los registros. Por ejemplo, puede establecer una regla
de configuración de ciclo de vida para que Amazon S3 elimine los objetos con un prefijo de clave
específico. Para obtener más información, consulte Eliminación de archivos de registro de Amazon
S3 (p. 689).
• (Opcional) Permisos para que otros puedan obtener acceso a los registros generados. De forma
predeterminada, el propietario del bucket siempre tiene acceso completo a los objetos de registro. Usted
puede, de forma opcional, conceder acceso a otros usuarios.
Para obtener más información acerca de cómo habilitar el registro de acceso al servidor,
consulte Habilitación del registro con la consola (p. 677) y Habilitación de registros mediante
programación (p. 677).
Versión de API 2006-03-01
675
Amazon Simple Storage Service Guía del desarrollador
Formato de clave de objeto de registro
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.
Amazon S3 utiliza una cuenta de envío de archivos de registro especial, llamada grupo Envío de archivos
de registro, para escribir registros de acceso. Estos escritos están sujetos a las restricciones de control
de acceso habituales. Debe otorgarle al grupo Envío de archivos de registro permiso de escritura en el
bucket de destino añadiendo una entrada de concesión en la Access Control List (ACL, Lista de control de
acceso) del bucket. Si utiliza la consola de Amazon S3 para habilitar los registros en un bucket, la consola
habilita los registros en el bucket de origen y actualiza la ACL en el bucket de destino para conceder
permisos de escritura al grupo Envío de archivos de registro.
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.
Cuando habilita los registros en un bucket, la consola habilita los registros en el bucket de origen y añade
una concesión en la lista de control de acceso (ACL) del bucket de destino que otorga permiso de escritura
al grupo Envío de archivos de registro.
Para obtener información acerca de cómo habilitar registros mediante programación, consulte Habilitación
de registros mediante programación (p. 677).
Para obtener información acerca del formato de la entrada de registro, incluida la lista de campos y sus
descripciones, consulte Formato de registro de acceso al servidor de Amazon S3 (p. 680).
Temas
• Habilitación del registro (p. 677)
• Concesión de permisos de WRITE y READ_ACP al grupo Envío de archivos de registro (p. 678)
• Ejemplo: AWS SDK para .NET (p. 678)
• Recursos relacionados (p. 680)
<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.
http://acs.amazonaws.com/groups/s3/LogDelivery
Para conceder permisos de WRITE y READ_ACP, debe añadir las siguientes concesiones. Para obtener
más información sobre las ACL, consulte Administración de acceso con ACL (p. 418).
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>WRITE</Permission>
</Grant>
<Grant>
<Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI>
</Grantee>
<Permission>READ_ACP</Permission>
</Grant>
Para ver ejemplos acerca de cómo añadir concesiones de ACL mediante programación con los SDK de
AWS, consulte Administración de ACL con AWS SDK for Java (p. 425) y Administración de ACL con AWS
SDK para .NET (p. 428).
programación (p. 677). Para obtener instrucciones acerca de cómo crear y probar una muestra funcional,
consulte Ejecución de ejemplos de código .NET de Amazon S3 (p. 708).
Example
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;
namespace Amazon.DocSamples.S3
{
class ServerAccesLoggingTest
{
private const string bucketName = "*** bucket name for which to enable logging
***";
private const string targetBucketName = "*** bucket name where you want access logs
stored ***";
private const string logObjectKeyPrefix = "Logs";
// Specify your bucket region (an example region is shown).
private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
BucketName = targetBucketName
};
await client.PutACLAsync(setACLRequest);
}
// Send request.
var putBucketLoggingRequest = new PutBucketLoggingRequest
{
BucketName = bucketName,
LoggingConfig = loggingConfig
};
await client.PutBucketLoggingAsync(putBucketLoggingRequest);
}
}
}
Recursos relacionados
• Registro de acceso al servidor de Amazon S3 (p. 674)
• AWS::S3::Bucket en la Guía del usuario de AWS CloudFormation
Temas
• Registros adicionales para operaciones de copia (p. 685)
• Información de registro de acceso personalizada (p. 689)
• Consideraciones sobre programación para el formato de registro de acceso al servidor
extensible (p. 689)
Los archivos de registro de acceso al servidor constan de una secuencia de entradas de registro
delimitadas por saltos de línea. Cada entrada de registro representa una solicitud y consta de campos
delimitados por espacios. El siguiente es un registro de ejemplo que consta de cinco entradas de registro.
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE
REST.GET.VERSIONING - "GET /awsexamplebucket?versioning HTTP/1.1" 200 - 113 - 7 - "-"
"S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/
VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket.s3.amazonaws.com
TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
awsexamplebucket [06/Feb/2019:00:00:38 +0000] 192.0.2.3
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE
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.
El ID de usuario canónico del propietario del bucket de origen. El ID de usuario canónico es otra
forma del ID de cuenta de AWS. Para obtener más información acerca del ID de usuario canónico,
consulte Identificadores de cuenta de AWS. Para obtener información acerca de cómo encontrar el ID
de usuario canónico de su cuenta, consulte Buscar el ID de usuario canónico de su cuenta.
Ejemplo de entrada
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be
Bucket
El nombre del bucket para el que se procesó la solicitud. Si el sistema recibe un solicitud incorrecta y
no puede determinar el bucket, la solicitud no aparecerá en ningún registro de acceso al servidor.
Ejemplo de entrada
awsexamplebucket
Time
La hora en la que se recibió la solicitud; estas fechas y horas se muestran según la hora universal
coordinada (UTC). El formato, con la terminología strftime(), es el siguiente: [%d/%b/%Y:%H:%M:
%S %z]
Ejemplo de entrada
[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
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
Ejemplo de entrada
REST.PUT.OBJECT
Key
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
Estado HTTP
Ejemplo de entrada
200
Código de 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
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
Remitente
El valor del encabezado de Referencia de HTTP, si lo hay. Los agentes de usuario de HTTP (por
ejemplo, los navegadores) por lo general configuran este encabezado en la URL de la página
enlazada o adjunta cuando realizan una solicitud.
Ejemplo de entrada
"http://www.amazon.com/webservices"
Agente de usuario
Ejemplo de entrada
"curl/7.15.1"
ID de versión
Ejemplo de entrada
3HL4kqtJvjVBH40Nrjfkd
ID de host
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
Ejemplo de entrada
AuthHeader
Encabezado de host
Ejemplo de entrada
s3-us-west-2.amazonaws.com
Versión de TLS
Versión de Transport Layer Security (TLS) negociada por el cliente. Puede ser uno de los siguientes
valores: TLSv1, TLSv1.1, TLSv1.2; o - si no se utilizó TLS.
Ejemplo de entrada
TLSv1.2
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
Ejemplo de entrada
awsexamplebucket
Time
La hora en la que se recibió la solicitud; estas fechas y horas se muestran según la hora universal
coordinada (UTC). El formato, con la terminología strftime(), es el siguiente: [%d/%B/%Y:%H:%M:
%S %z]
Ejemplo de entrada
[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
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
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 /awsexamplebucket/photos/2019/08/puppy.jpg?x-foo=bar"
Estado HTTP
Ejemplo de entrada
200
Código de error
El Código de error (p. 667) de Amazon S3 de la parte GET de la operación de copia o “-” si no se
produce ningún error.
Ejemplo de entrada
NoSuchBucket
Bytes enviados
El número de bytes de respuestas enviados, sin incluir la sobrecarga del protocolo HTTP o “-” en caso
de ser cero.
Ejemplo de entrada
2662992
Tamaño de objeto
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
Remitente
El valor del encabezado de Referencia de HTTP, si lo hay. Los agentes de usuario de HTTP (por
ejemplo, los navegadores) por lo general configuran este encabezado en la URL de la página
enlazada o adjunta cuando realizan una solicitud.
Ejemplo de entrada
"http://www.amazon.com/webservices"
Agente de usuario
Ejemplo de entrada
"curl/7.15.1"
ID de versión
Ejemplo de entrada
3HL4kqtJvjVBH40Nrjfkd
ID de host
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
Ejemplo de entrada
AuthHeader
Encabezado de host
Ejemplo de entrada
s3-us-west-2.amazonaws.com
Versión de TLS
Versión de Transport Layer Security (TLS) negociada por el cliente. Puede ser uno de los siguientes
valores: TLSv1, TLSv1.1, TLSv1.2; o - si no se utilizó TLS.
Ejemplo de entrada
TLSv1.2
Puede definir una configuración de ciclo de vida para un subconjunto de objetos del bucket de S3
mediante un prefijo compartido (es decir, objetos cuyos nombres comienzan por una cadena común). Si
especificó un prefijo en su configuración de registro de acceso al servidor, puede establecer una regla de
configuración de ciclo de vida para eliminar los objetos de registro que tienen ese prefijo. Por ejemplo,
si sus objetos de registro tienen el prefijo logs/, puede establecer una regla de configuración de ciclo
de vida para eliminar todos los objetos del bucket que tengan el prefijo /logs después de un periodo de
tiempo especificado. Para obtener más información acerca de la configuración del ciclo de vida, consulte
Administración del ciclo de vida de los objetos (p. 127).
Recursos relacionados
Registro de acceso al servidor de Amazon S3 (p. 674)
• Recomendamos que utilice los eventos de datos de AWS CloudTrail en lugar de los registros
de acceso de Amazon S3. Es más sencillo configurar los eventos de datos de CloudTrail y
contienen más información. Para obtener más información, consulte Uso de AWS CloudTrail
para identificar solicitudes de Amazon S3 (p. 655).
• En función del número de solicitudes de acceso que obtenga, es posible que necesite más
recursos o más tiempo para analizar sus registros.
Temas
• Habilitación de registros de acceso de Amazon S3 para solicitudes (p. 690)
• Consulta de registros de acceso de Amazon S3 para solicitudes (p. 692)
• Uso de los registros de acceso de Amazon S3 para identificar solicitudes de Signature Version 2
(p. 695)
• Uso de registros de acceso de Amazon S3 para identificar solicitudes de acceso a objetos (p. 695)
• Recursos relacionados (p. 696)
Example — Habilitar los registros de acceso con cinco buckets en dos regiones
Para este ejemplo, suponga que tiene los cinco buckets siguientes:
• 1-awsexamplebucket-us-east-1
• 2-awsexamplebucket-us-east-1
• 3-awsexamplebucket-us-east-1
• 1-awsexamplebucket-us-west-2
• 2-awsexamplebucket-us-west-2
• awsexamplebucket-logs-us-east-1
• awsexamplebucket-logs-us-west-2
2. A continuación, habilite los registros de acceso de Amazon S3 como se indica a continuación:
{
"LoggingEnabled": {
"TargetBucket": "awsexamplebucket-logs",
"TargetPrefix": "awsexamplebucket/",
"TargetGrants": [
{
"Grantee": {
"Type": "AmazonCustomerByEmail",
"EmailAddress": "user@example.com"
},
Versión de API 2006-03-01
691
Amazon Simple Storage Service Guía del desarrollador
Consulta de registros de acceso
de Amazon S3 para solicitudes
"Permission": "FULL_CONTROL"
}
]
}
}
Note
loggingBucket='awsexamplebucket-logs'
region='us-west-2'
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.
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
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.
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 *
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');
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
vida para eliminar periódicamente los archivos de registro. Esto reduce la cantidad de datos que
Athena analiza para cada consulta.
• Recomendamos que utilice los eventos de datos de AWS CloudTrail en lugar de los registros
de acceso de Amazon S3. Es más sencillo configurar los eventos de datos de CloudTrail y
contienen más información. Para obtener más información, consulte Uso de AWS CloudTrail
para identificar solicitudes de Signature Version 2 en Amazon S3 (p. 658).
Example — Mostrar todos los solicitantes que están enviando tráfico Signature Version 2
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
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
FROM s3_access_logs_db
WHERE Operation='REST.GET.OBJECT' AND
parse_datetime(RequestDateTime,'dd/MMM/yyyy:HH:mm:ss Z')
BETWEEN parse_datetime('2019-07-01:00:42:42','yyyy-MM-dd:HH:mm:ss')
AND
parse_datetime('2019-07-02:00:42:42','yyyy-MM-dd:HH:mm:ss')
La siguiente consulta de Amazon Athena de ejemplo muestra cómo obtener todas las solicitudes anónimas
realizadas a los buckets de S3 desde el registro de acceso al servidor.
Example — Mostrar todos los solicitantes anónimos que están realizando solicitudes a un bucket
en un determinado periodo
Note
Recursos relacionados
• Formato de registro de acceso al servidor de Amazon S3 (p. 680)
• Consulta de los logs de servicio de AWS
En esta sección se brinda información general sobre el uso de los SDK de AWS para desarrollar
aplicaciones de Amazon S3. En esta sección también se describe cómo probar los ejemplos de código de
SDK de AWS provistos en esta guía.
Temas
• Especificación de Signature Version en la autenticación de solicitudes (p. 698)
• Configuración de la CLI de AWS (p. 704)
• Uso del AWS SDK for Java. (p. 705)
• Uso del AWS SDK para .NET (p. 706)
• Uso del AWS SDK para PHP y ejecución de ejemplos de PHP (p. 708)
• Uso de la versión 3 de AWS SDK parar Ruby (p. 709)
• Uso del AWS SDK for Python (Boto) (p. 710)
• Uso de los AWS Mobile SDK para iOS y Android (p. 710)
• Uso de la biblioteca de JavaScript de AWS Amplify (p. 711)
Además de los SDK de AWS, los exploradores de AWS están disponibles para Visual Studio y el
Integrated Development Environment (IDE, Entorno de desarrollo integrado) de Eclipse para Java. En este
caso, los SDK y los exploradores están disponibles en paquetes como conjuntos de herramientas de AWS.
Además, puede usar la interfaz de línea de comandos (AWS CLI) de AWS para administrar buckets y
objetos de Amazon S3.
AWS Toolkit for Eclipse 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 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.
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.
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.
System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERT
"true");
-Dcom.amazonaws.services.s3.enableV4
<?php
$client = S3Client::factory([
'region' => 'YOUR-REGION',
'version' => 'latest',
'signature' => 'v4'
]);
<?php
$s3 = new Aws\S3\S3Client([
'version' => '2006-03-01',
'region' => 'YOUR-REGION',
'signature_version' => 'v4'
]);
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;
<appSettings>
<add key="AWS.S3.UseSignatureVersion4" value="true" />
</appSettings>
En esta sección, se incluyen algunas respuestas a preguntas comunes sobre el final del servicio de
soporte de Signature Version 2.
El proceso de firma Signature Version 2 o Signature Version 4 se utiliza para autenticar las solicitudes de
API de Amazon S3. La firma de solicitudes permite que Amazon S3 pueda identificar quién está enviando
la solicitud y ayuda a proteger las solicitudes frente a agentes malintencionados.
Para obtener más información sobre la firma de las solicitudes de AWS, consulte Firma de solicitudes de la
API de AWS en la AWS General Reference.
En 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.
En lugar de utilizar una clave de acceso secreta, Signature Version 4 usa una clave de firma, lo que mejora
la seguridad. En la actualidad, Signature Version 4 puede utilizarse en todas las regiones de AWS, mientas
que Signature Version 2 solamente se admite en las regiones en las que se lanzó antes de enero de 2014.
Esta actualización nos permite proporcionar una experiencia más uniforme en todas las regiones.
¿Cómo sé si estoy utilizando Signature Version 4 y qué actualizaciones tengo que hacer?
Normalmente, la versión de Signature que se utiliza para firmar las solicitudes viene determinada por la
herramienta o el SDK del lado del cliente. De forma predeterminada, las últimas versiones de los SDK
de AWS utilizan Signature Version 4. En el caso del software de terceros, póngase en contacto con el
equipo de soporte del software correspondiente para confirmar la versión que necesita. Si envía llamadas
REST directas a Amazon S3, debe modificar la aplicación para que utilice el proceso de firma Signature
Version 4.
Para obtener información sobre la versión de los SDK de AWS que debe usarse al pasar a Signature
Version 4, consulte Transición de Signature Version 2 a Signature Version 4 (p. 701).
Para obtener más información sobre el uso de Signature Version 4 con la API REST de Amazon S3,
consulte el artículo sobre la autenticación de solicitudes (AWS Signature Version 4) en la Amazon Simple
Storage Service API Reference.
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?
Si utiliza una URL prefirmada que necesita su firma durante más de siete días, no tiene que hacer nada
por el momento. Podrá seguir usando AWS Signature Version 2 para firmar y autenticar la URL prefirmada.
Seguiremos investigando y le proporcionaremos más detalles sobre la migración a Signature Version 4 con
direcciones URL prefirmadas.
Más información
• Para obtener más información sobre el uso de Signature Version 4, consulte Firma de solicitudes de la
API AWS.
• Consulte la lista de cambios entre Signature Version 2 y Signature Version 4 en Cambios de Signature
Version 4.
• Consulte la publicación acerca de cómo AWS Signature Version 4 va a sustituir a AWS Signature
Version 2 en la firma de solicitudes de API de Amazon S3 en los foros de AWS.
• Si tiene algún problema o alguna duda, póngase en contacto con AWS Support.
Para obtener más información sobre el uso de Signature Version 4 con la API REST de Amazon S3,
consulte el artículo sobre la autenticación de solicitudes (AWS Signature Version 4) en la Amazon Simple
Storage Service API Reference.
En la tabla siguiente, se muestran los SDK con la versión mínima necesaria para utilizar Signature
Version 4 (SigV4).
Si utiliza direcciones URL prefirmadas con los SDK de AWS Java, JavaScript (Node.js) o Python (Boto/
CLI), debe especificar la región de AWS apropiada y configurar Signature Version 4 en el cliente. Para
obtener información acerca de la configuración de SigV4 en el cliente, consulte Especificación de
Signature Version en la autenticación de solicitudes (p. 698).
Herramientas de AWS para Windows PowerShell o bien Herramientas de AWS; para PowerShell Core
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.
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.
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:
[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.
Temas
• La organización de API de Java (p. 706)
• Prueba de ejemplos de código Java de Amazon S3 (p. 706)
El AWS SDK for Java le brinda la opción de utilizar una API de alto nivel o de bajo nivel.
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.
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.
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.
• 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.
Temas
• La organización de la API de .NET (p. 707)
• Ejecución de ejemplos de código .NET de Amazon S3 (p. 708)
El AWS SDK para .NET le brinda la opción de utilizar una API de alto nivel o de bajo nivel.
Las API de bajo nivel corresponden a las operaciones REST de Amazon S3 subyacentes, como
crear, actualizar y eliminar operaciones que se aplican a buckets y objetos. Cuando se cargan objetos
grandes con la API de carga multiparte de bajo nivel (consulte Carga de objetos con la API de carga
multiparte (p. 186)), se dispone de un mayor control. Por ejemplo, permite detener y reanudar cargas
multiparte, variar los tamaños de las partes durante la carga, o comenzar cargas cuando no se conoce
de antemano el tamaño de los datos. Si no tiene estos requisitos, utilice la API de alto nivel para cargar
objetos.
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.
• Amazon.S3.Transfer: proporciona la API de alto nivel para cargar sus datos en partes.
Brinda métodos que corresponden a la API de carga multiparte REST de Amazon S3 (consulte Uso de la
API de REST para carga multiparte (p. 215)).
• Amazon.S3.Model: proporciona las clases de API de bajo nivel para crear respuestas de procesos
y solicitudes. Por ejemplo, proporciona las clases InitiateMultipartUploadRequest y
InitiateMultipartUploadResponse que puede utilizar al iniciar una carga multiparte, y las clases
UploadPartRequest y UploadPartResponse para cargar partes.
• Amazon.S3.Encryption: proporciona AmazonS3EncryptionClient.
• Amazon.S3.Util: proporciona diversas clases de utilidad como AmazonS3Util y
BucketRegionDetector.
Para obtener más información acerca de la API de AWS SDK para .NET, consulte la sección de referencia
de la API de AWS SDK para .NET versión 3.
El SDK está disponible en AWS SDK para PHP, que también tiene instrucciones para la instalación y la
introducción al SDK.
La configuración para utilizar AWS SDK para PHP depende de su entorno y de cómo desea ejecutar su
aplicación. Para configurar su entorno y ejecutar los ejemplos de esta documentación, consulte la Guía de
introducción de AWS SDK para PHP.
Temas
• Niveles de AWS SDK para PHP (p. 708)
• Ejecución de ejemplos de PHP (p. 709)
• Recursos relacionados (p. 709)
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
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.
Recursos relacionados
• AWS SDK para PHP para Amazon S3
• Documentación sobre AWS SDK para PHP
• AWS SDK para PHP API para Amazon S3
• 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.
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.
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.
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:
Los AWS Mobile SDK proporcionan acceso sencillo a Amazon S3 y a muchos otros servicios de AWS.
Para empezar a utilizar los AWS Mobile SDK, consulte Introducción a los AWS Mobile SDK.
Más información
Uso de la biblioteca de JavaScript de AWS Amplify (p. 711)
Para empezar a utilizar la biblioteca de JavaScript de AWS Amplify, elija uno de los siguientes enlaces:
Para obtener más información acerca de AWS Amplify, consulte AWS Amplify en GitHub.
Más información
Uso de los AWS Mobile SDK para iOS y Android (p. 710)
Apéndices
Este apéndice de la Guía para desarrolladores de Amazon Simple Storage Service incluye las siguientes
secciones.
Temas
• Apéndice A: uso de la API SOAP (p. 712)
• Apéndice B: Autenticación de solicitudes (AWS Signature Versión 2) (p. 715)
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Esta sección contiene información específica sobre la API SOAP de Amazon S3.
Note
Las solicitudes SOAP, tanto autenticadas como anónimas, deben enviarse a Amazon S3 con SSL.
Amazon S3 devuelve un error si envía una solicitud SOAP por HTTP.
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Puede usar SOAP 1.1 en HTTP para interactuar con Amazon S3. El WSDL de Amazon S3, que
describes la API de Amazon S3 en una forma legible electrónicamente, está disponible en: http://
doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl. El esquema de Amazon S3 está disponible en http://
doc.s3.amazonaws.com/2006-03-01/AmazonS3.xsd.
La mayoría de los usuarios utilizan el conjunto de herramientas de SOAP adaptado para su lenguaje y
entorno de desarrollo para interactuar con Amazon S3. Los diferentes conjuntos de herramientas disponen
la API de Amazon S3 de diferentes maneras. Consulte la documentación de su conjunto de herramientas
específico para comprender cómo usarlo. En esta sección se ilustran las operaciones de SOAP de Amazon
S3 de forma independiente del conjunto de herramientas y se exhiben las solicitudes y respuestas XML tal
como aparecen "en la ruta".
Elementos comunes
Puede incluir los siguientes elementos relacionados a autorización con cualquier solicitud de SOAP:
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Cada solicitud no anónima debe contener información de autenticación para establecer la identidad de
la solicitud principal que hace la solicitud. En SOAP, la información de autenticación se coloca en los
siguientes elementos de la solicitud SOAP:
Por ejemplo, en la siguiente solicitud de ejemplo CreateBucket, el elemento de firma debe contener el
resumen HMAC-SHA1 del valor "AmazonS3CreateBucket2009-01-01T12:00:00.000Z":
Example
<CreateBucket xmlns="http://doc.s3.amazonaws.com/2006-03-01">
<Bucket>quotes</Bucket>
<Acl>private</Acl>
<AWSAccessKeyId>AKIAIOSFODNN7EXAMPLE</AWSAccessKeyId>
<Timestamp>2009-01-01T12:00:00.000Z</Timestamp>
<Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</CreateBucket>
Note
Las solicitudes SOAP, tanto autenticadas como anónimas, deben enviarse a Amazon S3 con SSL.
Amazon S3 devuelve un error si envía una solicitud SOAP por HTTP.
Important
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
A continuación presentamos una solicitud que escribe datos en un objeto, hace que el objeto sea legible
desde principales anónimos y proporciona al usuario especificado derechos FULL_CONTROL sobre el
bucket (la mayoría de desarrolladores querrán concederse a sí mismos un acceso FULL_CONTROL a su
propio bucket).
Example
A continuación aparece una solicitud que escribe datos en un objeto y hace que el objeto sea legible desde
principales anónimos.
Sample Request
<PutObjectInline xmlns="http://doc.s3.amazonaws.com/2006-03-01">
<Bucket>quotes</Bucket>
<Key>Nelson</Key>
<Metadata>
<Name>Content-Type</Name>
<Value>text/plain</Value>
</Metadata>
<Data>aGEtaGE=</Data>
<ContentLength>5</ContentLength>
<AccessControlList>
<Grant>
<Grantee xsi:type="CanonicalUser">
<ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
<DisplayName>chriscustomer</DisplayName>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
<Grant>
<Grantee xsi:type="Group">
<URI>http://acs.amazonaws.com/groups/global/AllUsers<URI>
</Grantee>
<Permission>READ</Permission>
</Grant>
</AccessControlList>
<AWSAccessKeyId>AKIAIOSFODNN7EXAMPLE</AWSAccessKeyId>
<Timestamp>2009-03-01T12:00:00.183Z</Timestamp>
<Signature>Iuyz3d3P0aTou39dzbqaEXAMPLE=</Signature>
</PutObjectInline>
Sample Response
<PutObjectInlineResponse xmlns="http://s3.amazonaws.com/doc/2006-03-01">
<PutObjectInlineResponse>
<ETag>"828ef3fdfa96f00ad9f27c383fc9ac7f"</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.
En esa sección, se explica cómo se autentican solicitudes con AWS Signature Version 2.
Signature Version 2 se va a desactivar (esta característica quedará obsoleta). Amazon S3 solo
aceptará solicitudes de API que estén firmadas con Signature Version 4. Para obtener más
información, consulte AWS Signature Version 2 se va a desactivar (esta característica quedará
obsoleta) para Amazon S3 (p. 700)
Signature Version 4 es compatible con todas las regiones de AWS y es la única versión que
puede utilizarse en las regiones nuevas. Para obtener más información, consulte el tema sobre
autenticación de solicitudes (AWS Signature Version 4) en la Amazon Simple Storage Service API
Reference.
Amazon S3 le ofrece la posibilidad de identificar qué versión de la API de firma se utilizó para
firmar una solicitud. Es importante que identifique si alguno de sus flujos de trabajo está utilizando
la firma de Signature Version 2 y que los actualice para que utilicen Signature Version 4 con el fin
de evitar que su negocio resulte afectado.
• Si utiliza los registros de eventos de CloudTrail (opción recomendada), consulte Uso de AWS
CloudTrail para identificar solicitudes de Signature Version 2 en Amazon S3 (p. 658) para saber
cómo buscar e identificar dichas solicitudes.
• Si utiliza los registros de acceso del servidor de Amazon S3, consulte Uso de los registros de
acceso de Amazon S3 para identificar solicitudes de Signature Version 2 (p. 695).
Temas
• Autenticación de solicitudes con la API de REST (p. 715)
• Firma y autenticación de solicitudes REST (p. 717)
• Cargas basadas en el navegador con POST (AWS Signature Version 2) (p. 728)
Elementos de la solicitud
• ID de clave de acceso de AWS: cada solicitud debe incluir el ID de clave de acceso de la identidad que
utiliza para enviar su solicitud.
• Firma: cada solicitud debe incluir una firma de solicitud válida, o la solicitud es rechazada.
Una firma de solicitud se calcula a través de su clave de acceso secreta, que es un secreto compartido
que solo conocen usted y AWS.
• Marca temporal: cada solicitud debe incluir la fecha y la hora en que se creó la solicitud, representadas
como una cadena en Universal Time Coordinated (UTC, Hora universal coordinada).
• Fecha: cada solicitud debe incluir la marca temporal de la solicitud.
Según la acción de la API que utiliza, puede proporcionar una hora y una fecha de vencimiento para
la solicitud, en lugar o además de la marca temporal. Consulte el tema de autenticación para la acción
particular para determinar lo que requiere.
A continuación se indican los pasos generales para autenticar solicitudes en Amazon S3. Se asume que
usted cuenta con las credenciales de seguridad, el ID de clave de acceso y la clave de acceso secreta
necesarios.
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.
Note
El contenido de esta sección no se aplica al método HTTP POST. Para obtener más información,
consulte Cargas basadas en el navegador con POST (AWS Signature Version 2) (p. 728).
La API REST de Amazon S3 usa un esquema HTTP personalizado basado en un HMAC (Hash Message
Authentication Code) con clave para la autenticación. Para autenticar una solicitud, primero ha de
concatenar los elementos seleccionados en la solicitud para formar una cadena. A continuación, use su
clave de acceso secreta de AWS para calcular el HMAC de dicha cadena. Este proceso se denomina
informalmente "firmar la solicitud", y al resultado del algoritmo HMAC se le llama la firma, ya que simula las
propiedades de seguridad de una firma real. Por último, tendrá que agregar esta firma como parámetro de
la solicitud empleando la sintaxis descrita en esta sección.
Cuando el sistema recibe una solicitud autenticada, toma la clave de acceso secreta de AWS que usted
afirma tener y la usa del mismo modo para computar una firma para el mensaje recibido. A continuación,
compara la firma calculada con la firma que presenta el solicitante. Si ambas firmas coinciden, el sistema
concluye que el solicitante debe de tener acceso a la clave de acceso secreta de AWS y, por tanto, actúa
con la autoridad del principal para el que se emitió la clave. Si las dos firmas no coinciden, la solicitud se
abandona y el sistema responde con un mensaje de error.
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:
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.
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.
Proceso de lanzamiento
2 Si la solicitud especifica un bucket con el encabezado del host HTTP (estilo de alojamiento virtual),
adjunte el nombre del bucket precedido por un "/" (por ejemplo, "/nombredelbucket"). Para
las solicitudes con estilo de ruta y las solicitudes que no se dirigen a un bucket, no haga nada.
Para obtener más información acerca de las solicitudes de estilo de alojamiento virtual, consulte
Alojamiento virtual de buckets (p. 46).
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 que no se dirija a un bucket, como GET Service, adjunte "/".
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.
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.
Proceso de CanonicalizedAmzHeaders
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.
La limitación de validación con la fecha de solicitud solo se aplica a las solicitudes autenticadas
en las que no se use la autenticación por cadena de consulta. Para obtener más información,
consulte Alternativa de autenticación por cadena de consulta para solicitudes (p. 726).
Algunas bibliotecas de cliente HTTP no permiten configurar el encabezado Date para una solicitud.
Si encuentra problemas al incluir el valor del encabezado "Date" en los encabezados canonicalizados,
puede establecer la marca temporal de la solicitud mediante un encabezado "x-amz-date". El valor del
encabezado x-amz-date debe encontrarse en uno de los formatos RFC 2616 (http://www.ietf.org/rfc/
rfc2616.txt). Cuando hay un encabezado x-amz-date presente en una solicitud, el sistema ignorará
cualquier encabezado Date al computarla firma de la misma. Por tanto, si incluye el encabezado x-amz-
date, use la cadena vacía para Date al construir el StringToSign. Consulte la siguiente sección para
ver un ejemplo.
Ejemplos de autenticación
Los ejemplos de esta sección emplean las credenciales (no funcionales) de la siguiente tabla.
Parámetro Valor
AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Object GET
En este ejemplo se obtiene un objeto del bucket johnsmith.
Solicitud StringToSign
Solicitud StringToSign
Authorization: AWS /johnsmith/photos/puppy.jpg
AKIAIOSFODNN7EXAMPLE:
bWq2s1WEIj+Ydj0vQ697zp+IXMU=
Tenga en cuenta que el CanonicalizedResource incluye el nombre del bucket, pero la URI de la solicitud
HTTP no. (El encabezado del host especifica el bucket).
Object PUT
En este ejemplo se introduce un objeto en el bucket johnsmith.
Solicitud StringToSign
List
En este ejemplo se enumeran los contenidos del bucket johnsmith.
Solicitud StringToSign
Fetch
En este ejemplo se obtiene el subrecurso de la política de control de acceso para el bucket "johnsmith".
Solicitud StringToSign
Solicitud StringToSign
Date: Tue, 27 Mar 2007 19:44:46 +0000 \n
Tue, 27 Mar 2007 19:44:46
Authorization: AWS AKIAIOSFODNN7EXAMPLE: +0000\n
c2WLPFtWHVgbEmeEG93a4cG37dM= /johnsmith/?acl
Ahora, tenga en cuenta cómo el parámetro de la cadena de consulta del subrecurso está incluido en el
CanonicalizedResource.
Delete
En este ejemplo se elimina un objeto del bucket "johnsmith" con la alternativa de estilo de ruta y el
encabezado Date.
Solicitud StringToSign
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
Solicitud StringToSign
ilyl83RwaSoYIEdixDQcA4OnAnc=
Tenga en cuenta cómo los encabezados "x-amz-" se ordenan, se les recortan los espacios en blanco o
se convierten en minúscula. Tenga en cuenta también que se han agrupado varios encabezados con el
mismo nombre utilizando comas para separar valores.
Tenga en cuenta que solo los encabezados de entidades HTTP Content-Type y Content-MD5
aparecen en el StringToSign. El resto de encabezados de entidades Content-* no aparecen.
Además, tenga en cuenta que el CanonicalizedResource incluye el nombre del bucket, pero el URI de
la solicitud HTTP no lo incluye. (El encabezado del host especifica el bucket).
Solicitud StringToSign
Unicode Keys
Solicitud StringToSign
Note
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.
Para ver ejemplos de cómo usar los SDK de AWS para generar URL prefirmadas, consulte
Compartir un objeto con otros (p. 179).
GET /photos/puppy.jpg
?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Expires=1141889120&Signature=vjbyPxybdZaNmGa
%2ByT272YEAiv4%3D HTTP/1.1
Host: johnsmith.s3.amazonaws.com
Date: Mon, 26 Mar 2007 19:37:58 +0000
El método de autenticación de solicitudes con cadena de consulta no requiere ningún encabezado HTTP
especial. Los elementos de autenticación necesarios se especifican como parámetros de la cadena de
consulta:
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.
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
Solicitud StringToSign
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.
Las firmas de solicitudes HMAC deben tener codificación Base64. La codificación Base64 convierte la
firma en una cadena ASCII sencilla que se puede adjuntar a la solicitud. Los caracteres que podrían
aparecer en la cadena de firma, como más (+), barra inclinada (/) e igual (=) deben estar codificados si se
usan en un URI. Por ejemplo, si el código de autenticación incluye un signo más (+), codifíquelo como %2B
en la solicitud. Las barras inclinadas se codifican como %2F, y los signos de igual, como %3D.
Para ver más ejemplos de codificación en Base64, consulte los Ejemplos de autenticación (p. 722) de
Amazon S3.
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.
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.
Note
POST no admite la autenticación por query string.
Cuando se comunica con Amazon S3, por lo general utiliza la API de REST o SOAP para realizar
operaciones como PUT, GET, DELETE, y otras. Con POST, los usuarios cargan datos directamente en
Amazon S3 a través de sus navegadores, que no pueden procesar la API SOAP ni crear una solicitud PUT
de REST.
Note
La compatibilidad con SOAP en HTTP está en desuso, pero aún se encuentra disponible
con HTTPS. Las nuevas características de Amazon S3 no serán compatibles con SOAP.
Recomendamos que use bien REST API o bien los SDK de AWS.
Para que los usuarios puedan cargar contenido en Amazon S3 con sus navegadores, debe utilizar
los formularios HTML. Los formularios HTML constan de una declaración de formulario y campos de
formulario. Cada declaración de formulario incluye información de alto nivel acerca de la solicitud. Los
campos de formulario incluyen información detallada acerca de la solicitud, así como la política que se
utiliza para autenticarla y asegurar que cumpla con las condiciones que usted especifica.
Note
Los datos y límites del formulario (sin incluir los contenidos del archivo) no pueden exceder los
20 KB.
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
La acción especifica el URL que procesa la solicitud, que debe establecerse en el URL del bucket. Por
ejemplo, si el nombre de su bucket es “johnsmith”, el URL es “http://johnsmith.s3.amazonaws.com/”.
Note
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
enctype="multipart/form-data">
Tipo: String
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.
Construcción de la política
Temas
• Expiration (p. 733)
• Condiciones (p. 734)
• Coincidencia de condiciones (p. 735)
• Secuencia de escape de caracteres (p. 735)
La política es un documento JSON con codificación UTF-8 y Base64 que especifica las condiciones que
debe cumplir la solicitud, y se utiliza para autenticar el contenido. Según cómo diseñe sus documentos de
política, puede utilizarlos por carga, por usuario, para todas las cargas o de acuerdo con otros diseños que
se ajusten a sus necesidades.
Note
{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"acl": "public-read" },
{"bucket": "johnsmith" },
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,
Condiciones
Las condiciones en el documento de política validan los contenidos del objeto cargado. Cada campo de
formulario que especifica en el formulario (salvo AWSAccessKeyId, firma, archivo, política y nombres de
archivos que tienen un prefijo x-ignore-) se debe incluir en la lista de condiciones.
Note
Si tiene varios campos con el mismo nombre, los valores deben estar separados por comas. Por
ejemplo, si tiene dos campos denominados “x-amz-meta-tag” y el primero tiene el valor “Ninja” y el
segundo tiene el valor “Stallman”, configurará el documento de política como Ninja,Stallman.
Todas las variables en el formulario se expanden antes de que la política se valide. Por lo tanto,
se deben realizar todas las coincidencias de condiciones con respecto a los campos expandidos.
Por ejemplo, si configuró el campo de clave en user/betty/${filename}, su política
puede ser [ "starts-with", "$key", "user/betty/" ]. No escriba [ "starts-
with", "$key", "user/betty/${filename}" ]. Para obtener más información, consulte
Coincidencia de condiciones (p. 735).
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:
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:
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:
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:
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
Paso Descripción
3 Firme la política con su clave de acceso secreta mediante el uso del algoritmo HMAC
SHA-1.
Para obtener información general acerca de la autenticación, consulte la sección sobre el uso de la
autenticación de acceso.
Redireccionamiento
En esta sección se describe cómo administrar los direccionamientos.
Redireccionamiento general
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.
Note
La autenticación de solicitud que se analiza en esta sección se basa en AWS Signature Version 2,
un protocolo para autenticar solicitudes de API entrantes para los servicios de AWS.
Amazon S3 ahora admite Signature Version 4, un protocolo para autenticar solicitudes de API
entrantes en servicios de AWS, en todas las regiones de AWS. En este momento, las regiones de
AWS creadas antes del 30 de enero de 2014 seguirán admitiendo el protocolo anterior, Signature
Version 2. Cualquier región nueva después del 30 de enero de 2014 solo admitirá Signature
Version 4, y por lo tanto, todas las solicitudes de esas regiones se deben realizar con Signature
Version 4. Para obtener más información, consulte la sección de ejemplos: carga basada en
navegador con HTTP POST (con AWS Signature Version 4) en la Amazon Simple Storage
Service API Reference.
Carga de archivo
En este ejemplo se muestra el proceso completo para crear una política y un formulario que se puede
utilizar para cargar un archivo adjunto.
{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "johnsmith"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "http://johnsmith.s3.amazonaws.com/
successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}
eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiA
Con su credenciales, cree una firma, por ejemplo 0RavWzkygo6QX9caELEqKi9kDbU= es la firma para el
documento de política anterior.
El siguiente formulario admite una solicitud POST al bucket johnsmith.net que utiliza esta política.
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...
<form action="http://johnsmith.s3.amazonaws.com/" method="post" enctype="multipart/form-
data">
Key to upload: <input type="input" name="key" value="user/eric/" /><br />
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="success_action_redirect" value="http://
johnsmith.s3.amazonaws.com/successful_upload.html" />
Content-Type: <input type="input" name="Content-Type" value="image/jpeg" /><br />
<input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />
Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="AWSAccessKeyId" value="AKIAIOSFODNN7EXAMPLE" />
<input type="hidden" name="Policy" value="POLICY" />
<input type="hidden" name="Signature" value="SIGNATURE" />
File: <input type="file" name="file" /> <br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
...
</html>
Solicitud de muestra
Esta solicitud asume que la imagen cargada tiene una tamaño de 117 108 bytes; los datos de la imagen no
se incluyen.
POST / HTTP/1.1
Host: johnsmith.s3.amazonaws.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115
Firefox/2.0.0.10
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=9431149156168
Content-Length: 118698
--9431149156168
Content-Disposition: form-data; name="key"
user/eric/MyPicture.jpg
--9431149156168
Content-Disposition: form-data; name="acl"
public-read
--9431149156168
Content-Disposition: form-data; name="success_action_redirect"
http://johnsmith.s3.amazonaws.com/successful_upload.html
--9431149156168
Content-Disposition: form-data; name="Content-Type"
image/jpeg
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-uuid"
14365123651274
--9431149156168
Content-Disposition: form-data; name="x-amz-meta-tag"
Some,Tag,For,Picture
--9431149156168
Content-Disposition: form-data; name="AWSAccessKeyId"
AKIAIOSFODNN7EXAMPLE
--9431149156168
Content-Disposition: form-data; name="Policy"
eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXRpb25zIjogWwogICAgeyJidWNrZXQiOiA
--9431149156168
Content-Disposition: form-data; name="Signature"
0RavWzkygo6QX9caELEqKi9kDbU=
--9431149156168
Content-Disposition: form-data; name="file"; filename="MyFilename.jpg"
Content-Type: image/jpeg
...file content...
--9431149156168
Content-Disposition: form-data; name="submit"
Upload to Amazon S3
--9431149156168--
Respuesta de ejemplo
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.
La siguiente política admite cargas de área de texto a Amazon S3 para el bucket johnsmith.
{ "expiration": "2007-12-01T12:00:00.000Z",
"conditions": [
{"bucket": "johnsmith"},
["starts-with", "$key", "user/eric/"],
{"acl": "public-read"},
{"success_action_redirect": "http://johnsmith.s3.amazonaws.com/new_post.html"},
["eq", "$Content-Type", "text/html"],
{"x-amz-meta-uuid": "14365123651274"},
["starts-with", "$x-amz-meta-tag", ""]
]
}
eyAiZXhwaXJhdGlvbiI6ICIyMDA3LTEyLTAxVDEyOjAwOjAwLjAwMFoiLAogICJjb25kaXR
pb25zIjogWwogICAgeyJidWNrZXQiOiAiam9obnNtaXRoIn0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiRrZXkiLCAidXNlci9lcmljLy
LAogICAgeyJhY2wiOiAicHVibGljLXJlYWQifSwKICAgIHsic3VjY2Vzc19hY3Rpb25fcmVkaXJlY3QiOiAiaHR0cDovL2pvaG5zbWl
C5zMy5hbWF6b25hd3MuY29tL25ld19wb3N0Lmh0bWwifSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJ0ZXh0L2h0bWwiXSwK
CAgIHsieC1hbXotbWV0YS11dWlkIjogIjE0MzY1MTIzNjUxMjc0In0sCiAgICBbInN0YXJ0cy13aXRoIiwgIiR4LWFtei1tZXRhLXRh
IsICIiXQogIF0KfQo=
Con sus credenciales, cree una firma. Por ejemplo, qA7FWXKq6VvU68lI9KdveT1cWgF= es la firma para
el documento de política anterior.
El siguiente formulario admite una solicitud POST al bucket johnsmith.net que utiliza esta política.
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...
</textarea><br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
...
</html>
Solicitud de muestra
Esta solicitud asume que la imagen cargada tiene una tamaño de 117 108 bytes; los datos de la imagen no
se incluyen.
POST / HTTP/1.1
Host: johnsmith.s3.amazonaws.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.10) Gecko/20071115
Firefox/2.0.0.10
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=178521717625888
Content-Length: 118635
-178521717625888
Content-Disposition: form-data; name="key"
ser/eric/NewEntry.html
--178521717625888
Content-Disposition: form-data; name="acl"
public-read
--178521717625888
Content-Disposition: form-data; name="success_action_redirect"
http://johnsmith.s3.amazonaws.com/new_post.html
--178521717625888
Content-Disposition: form-data; name="Content-Type"
text/html
--178521717625888
Content-Disposition: form-data; name="x-amz-meta-uuid"
14365123651274
--178521717625888
Content-Disposition: form-data; name="x-amz-meta-tag"
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"
Upload to Amazon S3
--178521717625888--
Respuesta de ejemplo
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.
Algunas versiones de Adobe Flash Player no controlan debidamente las respuestas HTTP que tienen
un cuerpo vacío. Para configurar POST de manera que devuelva una respuesta que no tenga un cuerpo
vacío, establezca el campo success_action_status en 201. Amazon S3 devolverá un documento
XML con un código de estado 201. Para obtener información acerca del contenido del documento XML,
consulte POST Object. Para obtener información acerca de los campos del formulario, consulte Campos
de formulario HTML (p. 730).
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.
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.
Condiciones de uso Información detallada acerca del uso de los derechos de autor
y las marcas comerciales en Amazon.com y otros temas.
Temas
• Comando SELECT (p. 745)
• Tipos de datos (p. 752)
• Operadores (p. 753)
• Palabras clave reservadas (p. 754)
• Funciones SQL (p. 758)
Comando SELECT
Select de Amazon S3 y Select de Glacier solo admiten el comando SQL de SELECT. Las siguientes
cláusulas del estándar ANSI son compatibles con SELECT:
• SELECT list
• Cláusula FROM
• Cláusula WHERE
• Cláusula LIMIT (solo Select de Amazon S3)
Note
Actualmente, las consultas de Select de Amazon S3 y Select de Glacier no admiten subconsultas
ni combinaciones.
Lista SELECT
La lista SELECT asigna un nombre a las columnas, funciones y expresiones que desea que devuelva la
consulta. La lista representa el resultado de la consulta.
SELECT *
SELECT projection [ AS column_alias | column_alias ] [, ...]
El primer formato con el signo * (asterisco) devuelve todas las filas que superan la cláusula WHERE, tal y
como están. El segundo formato crea una fila con una proyección de las expresiones escalares de salida
definidas por el usuario para cada columna.
Cláusula FROM
Select de Amazon S3 y Select Glacier admiten los siguientes formatos de la cláusula FROM:
FROM table_name
FROM table_name alias
FROM table_name AS alias
Donde table_name es un S3Object (para Select de Amazon S3) o un ARCHIVE o un OBJECT (para
Select de Glacier) que hace referencia al archivo que se está consultando. Los usuarios acostumbrados a
las bases de datos relacionales tradicionales pueden hacerse a la idea de que se trata de un esquema de
base de datos que contiene varias vistas de una tabla.
Siguiendo el código SQL estándar, la cláusula FROM crea filas que se filtran en la cláusula WHERE y se
proyectan en la lista SELECT.
Para objetos JSON almacenados en Amazon S3 Select, también puede usar las siguientes formas de la
cláusula FROM:
FROM S3Object[*].path
FROM S3Object[*].path alias
FROM S3Object[*].path AS alias
Con esta forma de la cláusula FROM, puede seleccionar de matrices u objetos dentro de un objeto JSON.
Puede especificar path, usando una de las formas siguientes:
Note
Example
Ejemplos:
Ejemplo 1
{
"Rules": [
{"id":"id-1"},
{},
{"id":"id-2"},
{}
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:
{"id":"id-1"},
{"id":"id-2"}
Ejemplo 2
Este ejemplo muestra resultados utilizando el conjunto de datos y las consultas siguientes:
{
"created": "936864000",
"dir_name": "important_docs",
"files": [
{
"name": "."
},
{
"name": ".."
},
{
"name": ".aws"
},
{
"name": "downloads"
}
],
"owner": "AWS S3"
},
{
"created": "936864000",
"dir_name": "other_docs",
"files": [
{
"name": "."
},
{
"name": ".."
},
{
"name": "my stuff"
},
{
"name": "backup"
}
],
"owner": "User"
}
{
"dir_name": "important_docs",
"files": [
{
"name": "."
},
{
"name": ".."
},
{
"name": ".aws"
},
{
"name": "downloads"
}
]
},
{
"dir_name": "other_docs",
"files": [
{
"name": "."
},
{
"name": ".."
},
{
"name": "my stuff"
},
{
"name": "backup"
}
]
}
"dir_name": "important_docs",
"owner": "AWS S3"
},
{
"dir_name": "other_docs",
"owner": "User"
}
Cláusula WHERE
La cláusula WHERE utiliza esta sintaxis:
WHERE condition
La cláusula WHERE filtra las filas en función de una condición. Una condición es una expresión que tiene un
resultado booleano. En el resultado, solamente se devuelven las filas en las que la condición es TRUE.
LIMIT number
La cláusula LIMIT limita el número de registros que debe devolver la consulta basándose en number.
Note
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.
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:
Ejemplo 1
{"name":"Susan Smith"}
Ejemplo 2
{"project_name":"project1"}
Los ejemplos siguientes son: 1) objetos de 1) Amazon S3 o Glacier en formato CSV con los encabezados
de columna especificados y con FileHeaderInfo establecido en "Use" (Uso) para la solicitud de
consulta; o 2) objetos de Amazon S3 en formato JSON con los atributos especificados.
• La expresión siguiente devuelve los valores del objeto (sin comillas: sin distinción entre mayúsculas y
minúsculas):
• La expresión siguiente da como resultado un error 400 MissingHeaderName (comillas: distinción entre
mayúsculas y minúsculas):
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):
• 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):
Para obtener la lista completa de las palabras clave reservadas, consulte Palabras clave
reservadas (p. 754).
El ejemplo siguiente es: 1) un objeto de Amazon S3 o Glacier en formato CSV con los encabezados de
columna especificados y con FileHeaderInfo establecido en "Use" (Uso) para la solicitud de consulta; o
2) un objeto Amazon S3 en formato JSON con los atributos especificados.
Ejemplo: el objeto que se consulta tiene el encabezado o el atributo denominado "CAST", que es una
palabra clave reservada.
• La expresión siguiente devuelve los valores del objeto correctamente (comillas: utilizar el encabezado o
el atributo definido por el usuario):
• La expresión siguiente da como resultado un error de análisis 400 (sin comillas: conflicto con una
palabra clave reservada):
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
Tipos de datos
Select de Amazon S3 y Select de Glacier admiten varios tipos de datos primitivos.
Para obtener más información sobre la función CAST, consulte CAST (p. 760).
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).
Operadores
Select de Amazon S3 y Select de Glacier son compatibles con los siguientes operadores.
Operadores lógicos
• AND
• NOT
• OR
Operadores de comparación
• <
• >
• <=
• >=
• =
• <>
• !=
• BETWEEN
• IN – Por ejemplo: IN ('a', 'b', 'c')
Operadores matemáticos
Se admiten los operadores de suma, resta, multiplicación, división y módulo.
• +
• -
• *
• %
*, /, % izquierda multiplicación,
división, módulo
IN pertenencia a un
conjunto
BETWEEN limitación de
intervalos
LIKE coincidencia
de patrones de
cadena
= derecha igualdad,
asignación
absolute
action
add
all
allocate
alter
and
any
are
as
asc
assertion
at
authorization
avg
bag
begin
between
bit
bit_length
blob
bool
boolean
both
by
cascade
cascaded
case
cast
catalog
char
char_length
character
character_length
check
clob
close
coalesce
collate
collation
column
commit
connect
connection
constraint
constraints
continue
convert
corresponding
count
create
cross
current
current_date
current_time
current_timestamp
current_user
cursor
date
day
deallocate
dec
decimal
declare
default
deferrable
deferred
delete
desc
describe
descriptor
diagnostics
disconnect
distinct
domain
double
drop
else
end
end-exec
escape
except
exception
exec
execute
exists
external
extract
false
fetch
first
float
for
foreign
found
from
full
get
global
go
goto
grant
group
having
hour
identity
immediate
in
indicator
initially
inner
input
insensitive
insert
int
integer
intersect
interval
into
is
isolation
join
key
language
last
leading
left
level
like
limit
list
local
lower
match
max
min
minute
missing
module
month
names
national
natural
nchar
next
no
not
null
nullif
numeric
octet_length
of
on
only
open
option
or
order
outer
output
overlaps
pad
partial
pivot
position
precision
prepare
preserve
primary
prior
privileges
procedure
public
read
real
references
relative
restrict
revoke
right
rollback
rows
schema
scroll
second
section
select
session
session_user
set
sexp
size
smallint
some
space
sql
sqlcode
sqlerror
sqlstate
string
struct
substring
sum
symbol
system_user
table
temporary
then
time
timestamp
timezone_hour
timezone_minute
to
trailing
transaction
translate
translation
trim
true
tuple
union
unique
unknown
unpivot
update
upper
usage
user
using
value
values
varchar
varying
view
when
whenever
where
with
work
write
year
zone
Funciones SQL
Select de Amazon S3 y Select de Glacier admiten varias funciones SQL.
Temas
• Funciones de agregación (solo Amazon S3 Select) (p. 758)
• Funciones condicionales (p. 759)
• Funciones de conversión (p. 760)
• Funciones Date (p. 761)
• Funciones de cadena (p. 767)
COUNT - INT
Funciones condicionales
Select de Amazon S3 y Select de Glacier admiten las siguientes funciones condicionales.
Temas
• COALESCE (p. 759)
• NULLIF (p. 760)
COALESCE
Evalúa los argumentos por orden y devuelve el primero que no sea desconocido, es decir, el primero no
nulo o que no falta. Esta función no propaga los argumentos nulos o que faltan.
Sintaxis
Parámetros
expresió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
Parámetros
expression1, expression2
Ejemplos
NULLIF(1, 1) -- null
NULLIF(1, 2) -- 1
NULLIF(1.0, 1) -- null
NULLIF(1, '1') -- 1
NULLIF([1], [1]) -- null
NULLIF(1, NULL) -- 1
NULLIF(NULL, 1) -- null
NULLIF(null, null) -- null
NULLIF(missing, null) -- null
NULLIF(missing, missing) -- null
Funciones de conversión
Select de Amazon S3 y Select de Glacier admiten las siguientes funciones de conversión.
Temas
• CAST (p. 760)
CAST
La función CAST convierte una entidad (por ejemplo, una expresión que da como resultado un único valor)
de un tipo a otro.
Sintaxis
Parámetros
expresión
Combinación de uno o varios valores, operadores o funciones SQL que dan como resultado un valor.
data_type
Tipo de datos de destino (por ejemplo, INT) al que se va a convertir la expresión. Para obtener una
lista de los tipos de datos admitidos, consulte Tipos de datos (p. 752).
Ejemplos
CAST('2007-04-05T14:30Z' AS TIMESTAMP)
CAST(0.456 AS FLOAT)
Funciones Date
Select de Amazon S3 y Select de Glacier admiten las siguientes funciones de fecha.
Temas
• DATE_ADD (p. 761)
• DATE_DIFF (p. 762)
• EXTRACT (p. 763)
• TO_STRING (p. 763)
• TO_TIMESTAMP (p. 766)
• UTCNOW (p. 766)
DATE_ADD
Dados una parte de fecha, una cantidad y una marca temporal, devuelve una marca temporal actualizada
alterando la parte de fecha por la cantidad especificada.
Sintaxis
Parámetros
date_part
Especifica qué parte de la fecha se debe modificar. Puede ser una de las siguientes:
• año
• mes
• día
• hora
• minuto
• segundos
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
Ejemplos
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
Parámetros
date_part
Especifica qué parte de las marcas temporales se debe comparar. Para ver la definición de
date_part, consulte DATE_ADD (p. 761).
timestamp1
Ejemplos
EXTRACT
Dadas una parte de fecha y una marca temporal, devuelve el valor de la parte de fecha de la marca
temporal.
Sintaxis
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
Ejemplos
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
Parámetros
timestamp
time_format_pattern
yy 69 Año en 2 dígitos
a AM AM o PM
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)
… … …
n 60000000 Nanosegundo
X +07 or Z Desplazamiento
en horas
o "Z" si el
desplazamiento
es 0
x 7 Desplazamiento
en horas
Ejemplos
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
Ejemplos
TO_TIMESTAMP('2007T') -- `2007T`
TO_TIMESTAMP('2007-02-23T12:14:33.079-08:00') -- `2007-02-23T12:14:33.079-08:00`
UTCNOW
Devuelve: la fecha y hora actual en UTC como una marca temporal.
Sintaxis
UTCNOW()
Parámetros
ninguno
Ejemplos
UTCNOW() -- 2017-10-13T16:02:11.123Z
Funciones de cadena
Select de Amazon S3 y Select de Glacier admiten las siguientes funciones de cadena.
Temas
• CHAR_LENGTH, CHARACTER_LENGTH (p. 767)
• LOWER (p. 767)
• SUBSTRING (p. 768)
• TRIM (p. 768)
• UPPER (p. 769)
CHAR_LENGTH, CHARACTER_LENGTH
Cuenta el número de caracteres de la cadena especificada.
Note
Sintaxis
CHAR_LENGTH ( string )
Parámetros
string
Ejemplos
CHAR_LENGTH('') -- 0
CHAR_LENGTH('abcdefg') -- 7
LOWER
Dada una cadena, convierte todos los caracteres en mayúscula a minúscula. Los caracteres que no estén
en mayúscula permanecen igual.
Sintaxis
LOWER ( string )
Parámetros
string
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
Sintaxis
Parámetros
string
Ejemplos
SUBSTRING("123456789", 0) -- "123456789"
SUBSTRING("123456789", 1) -- "123456789"
SUBSTRING("123456789", 2) -- "23456789"
SUBSTRING("123456789", -4) -- "123456789"
SUBSTRING("123456789", 0, 999) -- "123456789"
SUBSTRING("123456789", 1, 5) -- "12345"
TRIM
Elimina los caracteres anteriores o posteriores de una cadena. De forma predeterminada, el carácter que
se elimina es ' '.
Sintaxis
Parámetros
string
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
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
Ejemplos
UPPER('AbCdEfG!@#$') -- 'ABCDEFG!@#$'
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.
operaciones por lotes de Amazon Puede utilizar las operaciones April 30, 2019
S3 (p. 770) por lotes de Amazon S3 para
realizar operaciones por lotes
a gran escala en objetos de
Amazon S3. Las operaciones
por lotes de Amazon S3 pueden
ejecutar la misma operación
en las listas de objetos que se
especifiquen. Un solo trabajo
puede realizar la operación
especificada en miles de millones
de objetos que contiene exabytes
de datos. Para obtener más
información, consulte Realización
de operaciones por lotes.
Región Asia Pacífico (Hong Amazon S3 ya está disponible April 24, 2019
Kong) (p. 770) en la región Asia Pacífico
(Hong Kong). Para obtener
más información acerca de
las regiones y los puntos de
enlace de Amazon S3, consulte
Regiones y puntos de enlace en
la AWS General Reference.
Nueva clase de almacenamiento Amazon S3 ahora ofrece una March 27, 2019
de archivado (p. 770) nueva clase de almacenamiento
de archivado, DEEP_ARCHIVE,
para el almacenamiento
de objetos a los que se
obtiene acceso con poca
frecuencia. Para obtener más
información, consulte Clases de
almacenamiento.
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.
Ahora Amazon S3 Además de informar sobre los bytes reales, estas métricas de 30 de abril
informa sobre las clases almacenamiento contienen bytes de sobrecarga por objeto de 2018
de almacenamiento para las clases de almacenamiento pertinentes (ONEZONE_IA,
GLACIER y STANDARD_IA y GLACIER):
ONEZONE_IA a
las métricas de • Para los objetos de clase de almacenamiento ONEZONE_IA
almacenamiento de y STANDARD_IA, Amazon S3 notifica los objetos de menos
Amazon CloudWatch de 128 KB como si fueran de 128 KB. Para obtener más
Logs. información, consulte Clases de almacenamiento de Amazon
S3 (p. 110).
• Para los objetos de clase de almacenamiento GLACIER,
las métricas de almacenamiento notifican las siguientes
sobrecargas:
• Una sobrecarga por objeto de 32 KB, cargada en el precio
de clase de almacenamiento GLACIER.
• Una sobrecarga por objeto de 8 KB, cargada en el precio
de clase de almacenamiento STANDARD.
Nueva clase de Amazon S3 ahora ofrece una nueva clase de almacenamiento, 4 de abril
almacenamiento ONEZONE_IA (IA quiere decir acceso poco frecuente) para el de 2018
almacenamiento de objetos. Para obtener más información,
consulte Clases de almacenamiento de Amazon S3 (p. 110).
Compatibilidad con los Amazon S3 admite ahora el formato Apache optimized row 17 de
archivos de inventario de columnar (ORC) además del formato de archivo de valores noviembre
Amazon S3 con formato separados con comas (CSV) para los archivos de salida del de 2017
ORC inventario. Además, ahora puede consultar el inventario de
Amazon S3 mediante SQL estándar utilizando Amazon Athena,
Amazon Redshift Spectrum y otras herramientas como, por
ejemplo, Presto, Apache Hive y Apache Spark. Para obtener
más información, consulte Inventario de Amazon S3 (p. 439).
Región EE.UU Este Amazon S3 ya está disponible en la región EE.UU. Este (Ohio). 17 de
(Ohio) Para obtener más información acerca de las regiones y los octubre de
puntos de enlace de Amazon S3, consulte Regiones y puntos 2016
de enlace en la AWS General Reference.
Compatibilidad con IPv6 Amazon S3 ahora es compatible con Internet Protocol version 6 6 de
para Aceleración de (IPv6) para Aceleración de transferencia de Amazon S3. Puede octubre de
transferencia de Amazon conectar con Amazon S3 por IPv6 usando la nueva doble 2016
S3 pila para el punto de conexión de Transfer Acceleration. Para
obtener más información, consulte Introducción a Aceleración
de transferencia de Amazon S3 (p. 77).
Compatibilidad con IPv6 Amazon S3 ya admite Internet Protocol version 6 (IPv6). Puede 11 de
obtener acceso a Amazon S3 por IPv6 utilizando puntos de agosto de
enlace de doble pila. Para obtener más información, consulte 2016
Realización de solicitudes a Amazon S3 mediante IPv6 (p. 12).
Región Asia Pacífico Amazon S3 ya está disponible en la región Asia Pacífico 27 de junio
(Mumbai) (Mumbai). Para obtener más información acerca de las de 2016
regiones y los puntos de enlace de Amazon S3, consulte
Regiones y puntos de enlace en la AWS General Reference.
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.
Nueva clave de Ahora, las políticas de IAM admiten una clave de condición 14 de
condición y cambio en la s3:x-amz-storage-class de Amazon S3. Para obtener diciembre
carga multiparte más información, consulte Especificación de las condiciones de de 2015
una política (p. 363).
Aumento del límite de Amazon S3 ahora admite aumentos en los límites de buckets. 4 de agosto
buckets Por defecto, los clientes pueden crear hasta 100 buckets en su de 2015
cuenta de AWS. Los clientes que necesiten buckets adicionales
pueden aumentar el límite solicitando un aumento en el
límite de servicio. Para obtener información acerca de cómo
aumentar el límite de su bucket, visite Límites de los servicios
de AWS en la Referencia general de AWS. Para obtener
más información, consulte Creación de un bucket (p. 55) y
Restricciones y limitaciones de los buckets (p. 60).
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).
Cifrado en el servidor Cifrado del lado del servidor con AWS Key Management 12 de
con claves de cifrado Service (AWS KMS) noviembre
proporcionadas por el de 2014
cliente Amazon S3 ahora admite el cifrado de los datos en el servidor
con AWS Key Management Service. Esta característica le
permite administrar la clave de sobre mediante AWS KMS y
Amazon S3 llama a AWS KMS para obtener acceso a la clave
de sobre con los permisos que establezca.
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.
Compatibilidad de ciclo Antes de esta versión, la configuración del ciclo de vida solo 20 de mayo
de vida para el control se permitía en los buckets no habilitados para el control de 2014
de versiones. de versiones. Ahora puede configurar el ciclo de vida
tanto en buckets sin control de versiones como en buckets
habilitados para el control de versiones. Para obtener más
información, consulte Administración del ciclo de vida de los
objetos (p. 127).
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 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.
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
Ampliación de la API de Antes de esta versión, la API de Amazon S3 permitía la copia 21 de junio
carga multiparte para de objetos con un tamaño de hasta 5 GB. Para habilitar la copia de 2011
habilitar la copia de de objetos mayores que 5 GB, ahora Amazon S3 amplía la API
objetos de hasta 5 TB de carga multiparte con una nueva operación, Upload Part
(Copy). Puede usar esta operación de carga multiparte para
copiar objetos con un tamaño de hasta 5 TB. Para obtener más
información, consulte Copia de objetos (p. 219).
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.
Compatibilidad con La API REST de GET Object ahora permite cambiar los 14 de
encabezados de encabezados de respuesta de la solicitud GET Object de REST enero de
respuesta en la API en cada caso. Es decir, puede alterar los metadatos del objeto 2011
en la respuesta sin alterar el objeto en sí. Para obtener más
información, consulte Obtención de objetos (p. 173).
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.
Sintaxis estilo ruta Ahora, Amazon S3 admite la sintaxis estilo ruta para cualquier 9 de junio
disponibles en todas las bucket en la región clásica de EE.UU., o si el bucket está en de 2010
regiones la misma región que el punto de conexión de la solicitud. Para
obtener más información, consulte Alojamiento virtual (p. 46).
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).
AWS SDK para .NET Ahora, AWS proporciona bibliotecas, código de muestra, 11 de
tutoriales y otros recursos para los desarrolladores de software noviembre
que prefieren crear aplicaciones usando operaciones de la de 2009
API específicas del lenguaje .NET en lugar de REST o SOAP.
Estas bibliotecas proporcionan funciones básicas (que no se
incluyen en las API REST o SOAP), como la autenticación de
solicitudes, los reintentos de solicitudes y la administración de
errores para que se pueda comenzar más fácilmente. Para
obtener más información sobre las bibliotecas y recursos
específicos a lenguajes, consulte Uso de los SDK, la CLI y los
exploradores de AWS (p. 697).
AWS Glossary
For the latest AWS terminology, see the AWS Glossary in the AWS General Reference.