

# Organizar, describir y trabajar con los objetos
<a name="organizing-objects"></a>

En Amazon S3, puede utilizar prefijos para organizar el almacenamiento. Un prefijo es una agrupación lógica de los objetos en un bucket. El valor de prefijo es similar a un nombre de directorio que permite almacenar datos parecidos en el mismo directorio de un bucket. Cuando carga objetos mediante programación, puede usar prefijos para organizar los datos.

En la consola de Amazon S3, los prefijos se denominan carpetas. Puede ver todos los objetos y carpetas en la consola de S3 si se dirige al bucket. También puede ver información sobre cada objeto, incluidas las propiedades del objeto.

Para obtener más información sobre cómo describir y organizar sus datos en Amazon S3, consulte los siguientes temas.

**Topics**
+ [Organizar objetos con prefijos](using-prefixes.md)
+ [Descripción de claves de objeto mediante programación](ListingKeysUsingAPIs.md)
+ [Organización de objetos en la consola de Amazon S3 con carpetas](using-folders.md)
+ [Visualización de propiedades de objeto en la consola de Amazon S3](view-object-properties.md)
+ [Categorización de los objetos mediante etiquetas](object-tagging.md)

# Organizar objetos con prefijos
<a name="using-prefixes"></a>

Puede utilizar prefijos para organizar los datos que almacena en los buckets de Amazon S3. Un prefijo es una cadena de caracteres al principio del nombre de la clave de objeto. Los prefijos pueden tener cualquier longitud, dentro de la longitud máxima permitida para los nombres de la clave de objeto (1024 bytes). Puede considerar los prefijos como una forma de organizar los datos similar a los directorios. No obstante, los prefijos no son directorios.

La búsqueda por prefijos limita los resultados solo a aquellas claves que comiencen con el prefijo especificado. El delimitador hace que una operación de lista acumule todas las claves que comparten un prefijo común en un solo resultado de lista de resumen. 

El objetivo de los parámetros de prefijo y delimitador es ayudarle a organizar sus claves jerárquicamente y explorarlas. Para hacerlo, escoja un delimitador para su bucket, como una barra inclinada (/), que no esté presente en ninguno de sus nombres de clave esperados. Puede usar otro carácter como delimitador. No hay nada especial en el carácter de la barra inclinada (/), pero es un delimitador de prefijos muy común. 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 usar la barra inclinada (/) como delimitador. En el siguiente ejemplo se usa la barra inclinada (/) como delimitador:
+ Europa/Francia/Nueva Aquitania/Burdeos
+ Norteamérica/Canadá/Quebec/Montreal
+ Norteamérica/EE. UU./Washington/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. Si utiliza `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 zonas de EE. UU., establezca `Delimiter='/'` y `Prefix='North America/USA/'`. Para enumerar todas las provincias de Canadá para las que tenga datos, establezca `Delimiter='/'` y `Prefix='North America/Canada/'`.

Para obtener más información sobre delimitadores, prefijos y carpetas anidadas, consulte [Diferencia entre los prefijos y las carpetas anidadas](https://repost.aws/knowledge-center/s3-prefix-nested-folders-difference).

## Descripción de objetos con prefijos y delimitadores
<a name="prefixes-list-example"></a>

Si emite una solicitud de lista con un delimitador, puede 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 (*amzn-s3-demo-bucket*) 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 barra (`/`). 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 solo 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**  

```
 1. <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
 2.   <Name>amzn-s3-demo-bucket</Name>
 3.   <Prefix></Prefix>
 4.   <Marker></Marker>
 5.   <MaxKeys>1000</MaxKeys>
 6.   <Delimiter>/</Delimiter>
 7.   <IsTruncated>false</IsTruncated>
 8.   <Contents>
 9.     <Key>sample.jpg</Key>
10.     <LastModified>2011-07-24T19:39:30.000Z</LastModified>
11.     <ETag>&quot;d1a7fb5eab1c16cb4f7cf341cf188c3d&quot;</ETag>
12.     <Size>6</Size>
13.     <Owner>
14.       <ID>75cc57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a</ID>
15.     </Owner>
16.     <StorageClass>STANDARD</StorageClass>
17.   </Contents>
18.   <CommonPrefixes>
19.     <Prefix>photos/</Prefix>
20.   </CommonPrefixes>
21. </ListBucketResult>
```

Para obtener más información sobre cómo describir claves de objeto mediante programación, consulte [Descripción de claves de objeto mediante programación](ListingKeysUsingAPIs.md).

# Descripción de claves de objeto mediante programación
<a name="ListingKeysUsingAPIs"></a>

En Amazon S3, las claves se pueden describir por prefijo. Puede elegir un prefijo común para los nombres de claves relacionadas y marcar estas claves con un carácter especial que delimite la jerarquía. A continuación, puede utilizar la operación de lista para seleccionar y examinar las claves jerárquicamente. La operación es similar a cómo se almacenan los archivos en directorios de un sistema de archivos. 

Amazon S3 expone una operación de lista que le permite enumerar las claves que contiene un bucket. Las claves se seleccionan para la lista por bucket y prefijo. Por ejemplo, considere un bucket llamado “`dictionary`” que contiene 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. 

**nota**  
 Las API de SOAP para Amazon S3 no están disponibles para nuevos clientes y se acercan al fin de la vida útil (EOL) el 31 de agosto de 2025. Le recomendamos que utilice la API REST o 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 si pone 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 la descripción, consulte [Organizar objetos con prefijos](using-prefixes.md). 

**API de REST**  
Si su aplicación lo requiere, puede enviar solicitudes REST directamente. Puede enviar una solicitud GET para devolver algunos o todos los objetos de un bucket, o puede usar criterios de selección para devolver un subconjunto de los objetos en un bucket. Para obtener más información, consulte [Bucket GET (List Objects) versión 2](https://docs.aws.amazon.com/AmazonS3/latest/API/v2-RESTBucketGET.html) en la *Referencia de API de Amazon Simple Storage Service*.

**Eficacia de implementación de listas**  
El rendimiento de la lista no se ve afectado sustancialmente por el número total de claves en el bucket. Tampoco se ve afectado por la presencia o ausencia de los argumentos `prefix`, `marker`, `maxkeys` o `delimiter`. 

**Iteración en resultados de varias páginas**  
Dado que los buckets pueden contener un número virtualmente ilimitado de claves, los resultados completos de una consulta de lista pueden ser extremadamente grandes. Para administrar conjuntos de resultados grandes, la API de Amazon S3 admite la paginación, de modo que los divide en varias respuestas. Cada respuesta de lista de claves devuelve una página con hasta 1000 claves y un indicador que identifica si la respuesta está incompleta. Enviará una serie de solicitudes de listas de claves hasta que haya recibido todas las claves. AWS Las bibliotecas de encapsulamiento de los SDK facilitan la misma paginación. 

## Ejemplos
<a name="ListingKeysUsingAPIs_examples"></a>

Cuando publique todos los objetos de su bucket, tenga en cuenta que debe tener el permiso `s3:ListBucket`.

------
#### [ CLI ]

**list-objects**  
En el siguiente ejemplo se utiliza el comando `list-objects` para mostrar los nombres de todos los objetos del bucket especificado:  

```
aws s3api list-objects --bucket text-content --query 'Contents[].{Key: Key, Size: Size}'
```
En el ejemplo se utiliza el argumento `--query` para filtrar la salida de `list-objects` hasta el valor de la clave y el tamaño de cada objeto  
Para obtener más información sobre los objetos, consulte [Trabajo con objetos en Amazon S3](uploading-downloading-objects.md).  
+  Para obtener detalles de la API, consulte [ListObjects](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/list-objects.html) en la *Referencia de comandos de AWS CLI*. 

**ls**  
El siguiente comando enumera todos los objetos y prefijos de un bucket mediante el comando `ls`.  
Para utilizar este comando de ejemplo, sustituya **amzn-s3-demo-bucket** con el nombre de su bucket.  

```
$ aws s3 ls s3://amzn-s3-demo-bucket
```
+  Para obtener más información sobre el comando de alto nivel `ls`, consulte [Enumerar buckets y objetos](https://docs.aws.amazon.com/cli/latest/userguide/cli-services-s3-commands.html#using-s3-commands-listing-buckets) en *Guía del usuario de AWS Command Line Interface*. 

------
#### [ PowerShell ]

**Herramientas para PowerShell V4**  
**Ejemplo 1: este comando recupera la información sobre todos los elementos del bucket “test-files".**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket
```
**Ejemplo 2: este comando recupera la información sobre el elemento “sample.txt” del bucket “test-files".**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -Key sample.txt
```
**Ejemplo 3: este comando recupera la información sobre todos los elementos con el prefijo “sample” del bucket “test-files".**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -KeyPrefix sample
```
+  Para obtener información sobre la API, consulte [ListObjects](https://docs.aws.amazon.com/powershell/v4/reference) en la *Referencia de Cmdlet de Herramientas de AWS para PowerShell (V4)*. 

**Herramientas para PowerShell V5**  
**Ejemplo 1: este comando recupera la información sobre todos los elementos del bucket “test-files".**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket
```
**Ejemplo 2: este comando recupera la información sobre el elemento “sample.txt” del bucket “test-files".**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -Key sample.txt
```
**Ejemplo 3: este comando recupera la información sobre todos los elementos con el prefijo “sample” del bucket “test-files".**  

```
Get-S3Object -BucketName amzn-s3-demo-bucket -KeyPrefix sample
```
+  Para obtener información sobre la API, consulte [ListObjects](https://docs.aws.amazon.com/powershell/v5/reference) en la *Referencia de Cmdlet de Herramientas de AWS para PowerShell (V5)*. 

------

# Organización de objetos en la consola de Amazon S3 con carpetas
<a name="using-folders"></a>

En los buckets de uso general de Amazon S3, los objetos son los principales recursos y los objetos se almacenan en buckets. Los buckets de uso general de Amazon S3 tienen una estructura sin formato en lugar de una jerarquía como la que vería en un sistema de archivos. Sin embargo, para la simplicidad organizativa, la consola de Amazon S3 admite el concepto de *carpetas* como medio para agrupar objetos. La consola lo hace utilizando un *prefijo* de nombre compartido para los objetos agrupados. En otras palabras, los objetos agrupados tienen nombres que comienzan por una cadena común. Esta cadena común, o prefijo compartido, es el nombre de la carpeta. Los nombres de objetos también se denominan *nombres de clave*.

Por ejemplo, puede crear una carpeta en un bucket de uso general en la consola denominada `photos` y almacenar un objeto denominado `myphoto.jpg` en ella. El objeto luego se guarda con el nombre de clave `photos/myphoto.jpg`, donde el prefijo es `photos/`.

A continuación se incluyen dos ejemplos más: 
+ Si tiene tres objetos en el bucket de uso general, `logs/date1.txt`, `logs/date2.txt` y `logs/date3.txt`, la consola mostrará una carpeta con el nombre `logs`. Si abre la carpeta en la consola, verá tres objetos: `date1.txt`, `date2.txt` y `date3.txt`.
+ Si tiene un objeto llamado `photos/2017/example.jpg`, la consola muestra una carpeta denominada `photos` que contiene la carpeta `2017`. La carpeta `2017` contiene el objeto `example.jpg`.

Puede tener carpetas dentro de carpetas, pero no buckets dentro de buckets. Puede cargar y copiar objetos directamente en una carpeta. Puede crear, eliminar y hacer públicas las carpetas, pero no les puede cambiar el nombre. Los objetos se pueden copiar de una carpeta a otra. 

**importante**  
Cuando crea una carpeta en la consola de Amazon S3, S3 crea un objeto de cero bytes. Esta clave de objeto se establece en el nombre de carpeta que proporcionó más un carácter de barra diagonal (`/`) final. Por ejemplo, en la consola de Amazon S3, si crea una carpeta denominada `photos` en el bucket, la consola de Amazon S3 crea un objeto de cero bytes con la clave `photos/`. La consola crea este objeto para admitir la idea de carpetas.   
Además, cualquier objeto preexistente que en el nombre tenga un carácter de barra diagonal (`/`) al final aparece como una carpeta en la consola de Amazon S3. Por ejemplo, un objeto con el nombre de clave `examplekeyname/` aparece como una carpeta en la consola de Amazon S3 y no como un objeto. De lo contrario, se comporta como cualquier otro objeto y se puede ver y manipular a través de la API de REST, la AWS Command Line Interface (AWS CLI), los SDK de AWS o la API de REST. Tampoco se puede cargar un objeto que tiene un nombre de clave con un carácter de barra diagonal (`/`) final mediante la consola de Amazon S3. No obstante, puede cargar objetos cuyo nombre contenga una barra diagonal (`/`) final mediante la AWS Command Line Interface (AWS CLI), los SDK de AWS o la API de REST.   
Además, la consola de Amazon S3 no muestra el contenido ni los metadatos de los objetos de carpeta como lo hace con otros objetos. Cuando utiliza la consola para copiar un objeto cuyo nombre contiene una barra diagonal (`/`) final, se crea una nueva carpeta en la ubicación de destino, pero no se copian los datos ni los metadatos del objeto. Además, una barra diagonal (`/`) en los nombres de clave de objeto puede requerir un procesamiento especial. Para obtener más información, consulte [Denominación de objetos de Amazon S3](object-keys.md).

Para crear carpetas en buckets de directorio, cargue una carpeta. Para obtener más información, consulte [Carga de objetos en un bucket de directorio](directory-buckets-objects-upload.md).

**Topics**
+ [Creación de una carpeta](#create-folder)
+ [Hacer públicas las carpetas](#public-folders)
+ [Calcular tamaño de carpeta](#calculate-folder)
+ [Eliminación de carpetas](#delete-folders)

## Creación de una carpeta
<a name="create-folder"></a>

En esta sección se describe cómo utilizar la consola de Amazon S3 para crear una carpeta.

**importante**  
Si la política de buckets impide cargar objetos en este bucket sin etiquetas, metadatos ni listas de control de acceso (ACL), no podrá crear una carpeta mediante el procedimiento siguiente. En lugar de eso, cargue una carpeta vacía y especifique las siguientes opciones en la configuración de carga.

**Para crear una carpeta**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets de uso general**.

1. En la lista de buckets, seleccione el nombre del bucket donde desea crear una carpeta.

1. En la pestaña **Objetos**, elija **Crear carpeta**.

1. Escriba un nombre para la carpeta (por ejemplo: )., **favorite-pics**). 
**nota**  
Los nombres de carpeta están sujetos a ciertas limitaciones y directrices, y se consideran parte del nombre de clave de objeto de un objeto, que está limitado a 1024 bytes. Para obtener más información, consulte [Denominación de objetos de Amazon S3](object-keys.md).

1. (Opcional) Si la política de buckets requiere que los objetos se cifren con una clave de cifrado específica, en **Cifrado del servidor**, debe elegir **Especificar una clave de cifrado** y especificar la misma clave de cifrado cuando cree una carpeta. De lo contrario, se producirá un error durante la creación de la carpeta.

1. Elija **Crear carpeta**.

## Hacer públicas las carpetas
<a name="public-folders"></a>

Le recomendamos bloquear todo el acceso público a sus carpetas de Amazon S3 y buckets a menos que requiera específicamente una carpeta o bucket público. Al hacer pública una carpeta, cualquier persona en Internet puede ver todos los objetos que están agrupados en dicha carpeta. 

En la consola de Amazon S3, puede hacer pública una carpeta. También puede hacer pública una carpeta creando una política de bucket que limite el acceso  a los datos mediante prefijo. Para obtener más información, consulte [Administración de identidades y accesos para Amazon S3](security-iam.md). 

**aviso**  
Después de hacer una carpeta pública en la consola de Amazon S3, no puede volver a hacerla privada. En lugar de ello, debe definir permisos en cada objeto individual en la carpeta pública para que los objetos no tengan acceso público. Para obtener más información, consulte [Configuración de la ACL](managing-acls.md).

**Topics**
+ [Creación de una carpeta](#create-folder)
+ [Hacer públicas las carpetas](#public-folders)
+ [Calcular tamaño de carpeta](#calculate-folder)
+ [Eliminación de carpetas](#delete-folders)

## Calcular tamaño de carpeta
<a name="calculate-folder"></a>

En esta sección se describe cómo utilizar la consola de Amazon S3 para calcular el tamaño de una carpeta.

**Para calcular el tamaño de una carpeta**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets de uso general**.

1. En la lista **Buckets de uso general**, elija el nombre del bucket en el que se almacena la carpeta.

1. En la lista **Objetos**, active la casilla de verificación situada junto al nombre de la carpeta.

1. Elija **Acciones** y, a continuación, elija **Calcular el tamaño total**.

**nota**  
Cuando salga de la página, la información de la carpeta (incluido el tamaño total) deja de estar disponible. Deberá calcular de nuevo el tamaño total si quiere volver a verlo. 

**importante**  
Cuando utiliza la acción **Calcular el tamaño total** en objetos o carpetas específicos de su bucket, Amazon S3 calcula el número total de objetos y el tamaño total de almacenamiento. Sin embargo, las cargas multiparte incompletas o en curso y las versiones anteriores o no actuales no se calculan en función del número total de objetos ni del tamaño total. Esta acción calcula solo el número total de objetos y el tamaño total de la versión actual o más reciente de cada objeto almacenado en el bucket.  
Por ejemplo, si hay dos versiones de un objeto en su bucket, la calculadora de almacenamiento de Amazon S3 las cuenta como un solo objeto. Como resultado, el número total de objetos que se calcula en la consola de Amazon S3 puede diferir de la métrica de **Recuento de objetos** que se muestra en Lente de almacenamiento de S3 y del número comunicado por la métrica de Amazon CloudWatch, `NumberOfObjects`. Del mismo modo, el tamaño total del almacenamiento también puede diferir de la métrica de **Almacenamiento total** que se muestra en S3 Storage Lens y de la métrica de `BucketSizeBytes` que se muestra en CloudWatch.

## Eliminación de carpetas
<a name="delete-folders"></a>

En esta sección se explica cómo utilizar la consola de Amazon S3 para eliminar carpetas de un bucket de S3. 

Para obtener información sobre las características y precios de Amazon S3, consulte [Amazon S3](https://aws.amazon.com/s3/).



**Para eliminar carpetas de un bucket de S3**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets de uso general**.

1. En la lista **Buckets de uso general**, seleccione el nombre del bucket cuyas carpetas desea eliminar.

1. En la lista **Objetos**, active la casilla de verificación situada junto a las carpetas y objetos que desea eliminar.

1. Elija **Eliminar**.

1. En la página **Eliminar objetos**, compruebe que aparezcan los nombres de las carpetas que seleccionó para eliminar en **Objetos especificados**.

1. En el cuadro **Eliminar objetos**, escriba **delete** y elija **Eliminar objetos**.

**aviso**  
Esta acción elimina todos los objetos especificados. Al eliminar carpetas, espere a que finalice la acción de eliminación antes de agregar nuevos objetos a la carpeta. De lo contrario, es posible que también se eliminen objetos nuevos.

# Visualización de propiedades de objeto en la consola de Amazon S3
<a name="view-object-properties"></a>

Puede utilizar la consola de Amazon S3 para ver las propiedades de un objeto, incluida la clase de almacenamiento, la configuración de cifrado, las etiquetas y los metadatos.

**Para ver las propiedades de un objeto:**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets de uso general** o **Buckets de directorio**.

1. En la lista de buckets, seleccione el nombre del bucket que contiene el objeto.

1. En la lista **Objetos**, elija el nombre del objeto para el que desea ver las propiedades.

   Se abrirá la **Información general sobre el objeto**. Puede desplazarse hacia abajo para ver las propiedades del objeto.

1. En la página **Información general sobre el objeto**, puede configurar las siguientes propiedades para el objeto.
**nota**  
Si cambia las propiedades de **clase de almacenamiento**, ** cifrado**o **metadatos**, se crea un nuevo objeto para reemplazar el antiguo. Si el control de versiones de S3 está activado, se crea una nueva versión del objeto y el objeto existente se convierte en una versión anterior. El rol que cambia la propiedad también se convierte en el propietario del nuevo objeto o (versión del objeto).
Si cambia las propiedades de **Clase de almacenamiento**, **Cifrado** o **Metadatos** de un objeto que tiene etiquetas definidas por el usuario, debe tener el permiso `s3:GetObjectTagging`. Si va a cambiar estas propiedades de un objeto que no tiene etiquetas definidas por el usuario pero que tiene un tamaño superior a 16 MB, también debe tener el permiso `s3:GetObjectTagging`.  
Si la política de bucket de destino deniega la acción `s3:GetObjectTagging`, estas propiedades del objeto se actualizarán, pero las etiquetas definidas por el usuario se eliminarán del objeto y aparecerá un error. 

   1. **Storage class** (Clase de almacenamiento): todos los objetos de Amazon S3 tienen una clase de almacenamiento asociada. La clase de almacenamiento que quiera usar dependerá de la frecuencia con la que obtenga acceso al objeto. La clase de almacenamiento predeterminada para objetos de S3 en los buckets de uso general es STANDARD. La clase de almacenamiento predeterminada para los objetos de S3 en los buckets de directorio es S3 Express One Zone. Puede seleccionar qué clase de almacenamiento usar al cargar un objeto. Para obtener más información acerca de las clases de almacenamiento, consulte [Descripción y administración de clases de almacenamiento de Amazon S3](storage-class-intro.md).

      Para cambiar la clase de almacenamiento tras cargar un objeto en un bucket de uso general, seleccione **Clase de almacenamiento**. Seleccione la clase de almacenamiento que desee y haga clic en **Guardar**.
**nota**  
La clase de almacenamiento de los objetos en un bucket de directorio no se puede cambiar.

   1. **Configuración de cifrado del lado del servidor**: puede utilizar el cifrado del lado del servidor para cifrar los objetos de S3. Para obtener más información, consulte [Especificación del cifrado del lado del servidor con AWS KMS (SSE-KMS)](specifying-kms-encryption.md) o [Especificación del cifrado del servidor con claves administradas por Amazon S3 (SSE-S3)](specifying-s3-encryption.md). 

   1. **Metadata** (Metadatos): cada objeto de Amazon S3 tiene un conjunto de pares nombre-valor que representan sus metadatos. Para obtener información sobre cómo agregar metadatos a un objeto de S3, consulte [Edición de metadatos de objeto en la consola de Amazon S3](add-object-metadata.md).

   1. **Etiquetas**: puede clasificar el almacenamiento si agrega etiquetas a un objeto de S3 en un bucket de uso general. Para obtener más información, consulte [Categorización de los objetos mediante etiquetas](object-tagging.md).

   1. **Retención y retención legal de bloqueo de objetos**: puede evitar que se elimine un objeto en un bucket de uso general. Para obtener más información, consulte [Bloqueo de objetos mediante Bloqueo de objetos](object-lock.md).

# Categorización de los objetos mediante etiquetas
<a name="object-tagging"></a>

Utilice el etiquetado de objetos para categorizar el almacenamiento. Cada etiqueta es un par clave-valor.

Puede agregar etiquetas a nuevos objetos al cargarlos o agregarlas a objetos existentes. 
+ 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. Las etiquetas de objetos de Amazon S3 se representan internamente en UTF-16. Tenga en cuenta que en UTF-16, los caracteres ocupan 1 o 2 posiciones de caracteres.
+ La clave y los valores distinguen entre mayúsculas y minúsculas.
+ Para obtener más información sobre las restricciones en las etiquetas, consulte [Restricciones de las etiquetas definidas por el usuario](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/custom-tags.html#allocation-tag-restrictions) en la *Guía del usuario de Administración de facturación y costos de AWS*. Para obtener información sobre las restricciones básicas de las etiquetas, consulte [Restricciones de etiquetas](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#tag-restrictions) en la *Guía del usuario de Amazon EC2*.

**Ejemplos**  
Considere los siguientes ejemplos de etiquetado:

**Example Información sanitaria protegida (PHI)**  
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  

```
Classification=PHI
```

**Example Archivos de proyecto**  
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
```

**Example Múltiples etiquetas**  
Puede agregar varias etiquetas a un objeto, como se muestra a continuación.  

```
Project=x
Classification=confidential
```

**Prefijos y etiquetas de nombre de clave**  
Los prefijos de nombre de clave de objeto también le permiten clasificar el almacenamiento. Sin embargo, la categorización basada en prefijos es unidimensional. Considere los siguientes nombres de claves de objeto:

```
photos/photo1.jpg
project/projectx/document.pdf
project/projecty/document2.pdf
```

Estos nombres de claves tienen los prefijos `photos/`, `project/projectx/` y `project/projecty/`. Estos prefijos habilitan la categorización monodimensional. Es decir, todo lo que tenga un mismo prefijo es una categoría. Por ejemplo, el prefijo `project/projectx` identifica a todos los documentos relacionados con project x.

Con el etiquetado, ahora tendrá otra dimensión. Si quiere que la foto 1 esté en la categoría project x, puede etiquetar el objeto correspondientemente.

**Beneficios adicionales**  
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 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.

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

**Agregar conjuntos de etiquetas de objetos a varios objetos de Amazon S3 con una sola solicitud.**  
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 S3. Proporcione a Operaciones por lotes de S3 una lista de objetos en los que operar. Operaciones por lotes de S3 llama a la operación de la API respectiva para realizar la operación especificada. Un solo trabajo de operaciones por lotes puede realizar la operación especificada en miles de millones de objetos con exabytes de datos. 

Operaciones por lotes de S3 realiza un seguimiento del avance, envía notificaciones y guarda un informe de finalización de todas las acciones, por lo que proporciona una experiencia sin servidor, auditable, completamente administrada. Puede emplear Operaciones por lotes de S3 a través de la consola de Amazon S3, AWS CLI, los SDK de AWS o la API de REST. Para obtener más información, consulte [Conceptos básicos de Operaciones por lotes de S3](batch-ops.md#batch-ops-basics).

Para obtener más información acerca de las etiquetas de objeto, consulte [Administrar etiquetas de objetos](tagging-managing.md).

## Operaciones de la API relacionadas con el etiquetado de objetos
<a name="tagging-apis"></a>

Amazon S3 admite las siguientes operaciones de la API específicas al etiquetado de objetos:

**Operaciones de la API para objetos**
+  [PUT Object tagging](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUTtagging.html): 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.
**nota**  
 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](https://d0.awsstatic.com/whitepapers/aws_pricing_overview.pdf).  
La solicitud [DELETE Object tagging](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETEtagging.html) es la preferida porque consigue el mismo resultado sin incurrir en cargos. 
+  [GET Object tagging](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETtagging.html): 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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETEtagging.html): elimina el conjunto de etiquetas asociadas con un objeto. 

**Otras operaciones de la API que admiten etiquetado**
+  [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) e [Initiate Multipart Upload](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html): puede especificar etiquetas al crear los objetos. Las etiquetas se especifican con el encabezado de solicitud `x-amz-tagging`. 
+  [GET Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html): 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](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGETtagging.html).
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html): puede especificar las etiquetas en su solicitud POST. 

  Siempre que las etiquetas de su solicitud no excedan el límite de tamaño de 8 Kb para los encabezados de solicitud, puede usar la API `PUT Object `para crear objetos con etiquetas. Si las etiquetas que especifique superan el límite de tamaño del encabezado, puede usar este método POST, en el que incluiría las etiquetas en el cuerpo. 

   [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html): puede especificar el `x-amz-tagging-directive` en su solicitud para dar la instrucción a Amazon S3 de que copie (comportamiento predeterminado) las etiquetas o sustituya por un nuevo conjunto de etiquetas facilitadas en la solicitud. 

Tenga en cuenta lo siguiente:
+ El etiquetado de objetos S3 es muy consistente. Para obtener más información, consulte [Modelo de consistencia de datos de Amazon S3](Welcome.md#ConsistencyModel). 

## Configuraciones adicionales
<a name="tagging-other-configs"></a>

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

### Etiquetar objetos y administrar el ciclo de vida
<a name="tagging-and-lifecycle"></a>

En la configuración del ciclo de vida del bucket, puede especificar un filtro para seleccionar un subconjunto de objetos al que se aplica la regla. Puede especificar un filtro en función de los prefijos de nombres de clave, etiquetas de objetos o ambos. 

Supongamos que almacena fotos (en formato bruto y terminado) en su bucket de Amazon S3. Puede etiquetar estos objetos como se muestra a continuación. 

```
phototype=raw
or
phototype=finished
```

Podría plantearse archivar las fotos en bruto en Amazon 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](object-lifecycle-mgmt.md). 

### Etiquetar y replicar objetos
<a name="tagging-and-replication"></a>

Si configura la replicación en un bucket, Amazon S3 replica las etiquetas, siempre que conceda permisos a Amazon S3 para leer las etiquetas. Para obtener más información, consulte [Descripción general de la configuración de la replicación en directo](replication-how-setup.md).

### Notificaciones de eventos de etiquetado de objetos
<a name="tagging-and-event-notifications"></a>

Puede configurar una notificación de evento de Amazon S3 para recibir un aviso cuando se agrega o elimina una etiqueta de un objeto. El tipo de evento `s3:ObjectTagging:Put` le notifica cuando una etiqueta es PUT en un objeto o cuando se actualiza una etiqueta existente. El tipo de evento `s3:ObjectTagging:Delete` le notifica cuando se quita una etiqueta de un objeto. Para obtener más información, consulte [Habilitación de notificaciones de eventos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-enable-disable-notification-intro.html).

Para obtener más información sobre el etiquetado de objetos, vea los siguientes temas:

**Topics**
+ [Operaciones de la API relacionadas con el etiquetado de objetos](#tagging-apis)
+ [Configuraciones adicionales](#tagging-other-configs)
+ [Etiquetado y políticas de control de acceso](tagging-and-policies.md)
+ [Administrar etiquetas de objetos](tagging-managing.md)

# Etiquetado y políticas de control de acceso
<a name="tagging-and-policies"></a>

También puede usar políticas de permisos (políticas de bucket y usuario) para administrar los permisos relacionados con el etiquetado de objetos. Para ver acciones de políticas, consulte los siguientes temas: 
+  [Operaciones con objetos](security_iam_service-with-iam.md#using-with-s3-actions-related-to-objects) 
+  [Operaciones con buckets](security_iam_service-with-iam.md#using-with-s3-actions-related-to-buckets)

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 una etiqueta de objeto existente tiene una clave y un valor específicos para la etiqueta. 
**nota**  
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 [Ejemplos de políticas de bucket que utilizan claves de condición](amazon-s3-policy-keys.md). Las siguientes políticas de permisos ilustran cómo el etiquetado de objetos facilita una administración de permisos de acceso pormenorizada.

**Example 1: Permitir a un usuario leer solo los objetos que tienen una clave y valor de etiqueta específicos**  
La siguiente política de permisos limita al usuario a leer solo los objetos que tengan la clave y el valor de la etiqueta `environment: production`. Esta política usa la clave de condición `s3:ExistingObjectTag` para especificar la clave y el valor de etiqueta.    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
  {
    "Principal": {
      "AWS": [
        "arn:aws:iam::111122223333:role/JohnDoe"
      ]
    },
    "Effect": "Allow",
    "Action": ["s3:GetObject", "s3:GetObjectVersion"],
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
    "Condition": {
      "StringEquals": 
        {"s3:ExistingObjectTag/environment": "production"}
    }
  }
  ]
}
```

**Example 2: Restringir las claves de etiqueta de objetos que los usuarios pueden agregar**  
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 usa la clave de condición `s3:RequestObjectTagKeys` para especificar las claves de etiqueta permitidas, como `Owner` o `CreationDate`. Para obtener más información, consulte [Creación de una condición que pruebe valores de varias claves](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_multi-value-conditions.html) en la *Guía para usuarios de IAM*.  
La política garantiza que cada clave de etiqueta especificada en la solicitud sea una clave de etiqueta autorizada. El calificador `ForAnyValue` de la condición garantiza que al menos una de las claves especificadas estará presente en la solicitud.    
****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
            "arn:aws:iam::111122223333:role/JohnDoe"
         ]
       },
 "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"ForAnyValue:StringEquals": {"s3:RequestObjectTagKeys": [
            "Owner",
            "CreationDate"
          ]
        }
      }
    }
  ]
}
```

**Example 3: Requerir una clave y un valor de etiqueta específica al permitir a los usuarios agregar etiquetas de objetos**  
La política de ejemplo siguiente concede un permiso de 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 clave de etiqueta específica (como `Project`) con el valor establecido en `X`.    
****  

```
{
   "Version":"2012-10-17",		 	 	 
  "Statement": [
    {"Principal":{"AWS":[
       "arn:aws:iam::111122223333:user/JohnDoe"
         ]
       },
      "Effect": "Allow",
      "Action": [
        "s3:PutObjectTagging"
      ],
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket/*"
      ],
      "Condition": {"StringEquals": {"s3:RequestObjectTag/Project": "X"
        }
      }
    }
  ]
}
```



# Administrar etiquetas de objetos
<a name="tagging-managing"></a>

En esta sección, se explica cómo puede administrar etiquetas de objetos con los SDK de AWS para Java y .NET, o la consola de Amazon S3.

El etiquetado de objetos le permite categorizar el almacenamiento en los buckets de uso general. Cada etiqueta es un par clave-valor que se ajusta a las reglas siguientes:
+ 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. Las etiquetas de objetos de Amazon S3 se representan internamente en UTF-16. Tenga en cuenta que en UTF-16, los caracteres ocupan 1 o 2 posiciones de caracteres.
+ La clave y los valores distinguen entre mayúsculas y minúsculas. 

Para obtener más información acerca de las etiquetas de objeto, consulte [Categorización de los objetos mediante etiquetas](object-tagging.md). Para obtener más información sobre las restricciones de las etiquetas, consulte [Restricciones de las etiquetas definidas por el usuario](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/allocation-tag-restrictions.html) en la *Guía del usuario de Administración de facturación y costos de AWS*. 

## Uso de la consola de S3
<a name="add-object-tags"></a>

**Para añadir etiquetas a un objeto**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. En el panel de navegación izquierdo, elija **Buckets de uso general**.

1. En la lista de buckets, seleccione el nombre del bucket que contiene el objeto.

1. Seleccione la casilla de verificación situada a la izquierda de los nombres de los objetos que desea cambiar.

1. En el menú **Actions (Acciones)**, elija **Edit (Editar)**.

1. Revise los objetos mencionados y elija **Add tags (Agregar etiquetas)**.

1. Cada etiqueta de objeto es un par clave-valor. Introduzca la información pertinente en **Key (Clave)** y **Value (Valor)**. Para agregar otra etiqueta, elija **Add Tag (Añadir etiqueta)**. 

   Puede introducir hasta 10 etiquetas para un objeto.

1. Elija **Save changes**.

   Amazon S3 agrega las etiquetas a los objetos especificados.

Para obtener más información, consulte [Visualización de propiedades de objeto en la consola de Amazon S3](view-object-properties.md) y [Carga de objetos](upload-objects.md) en esta guía. 

## Uso de la SDKs AWS
<a name="tagging-manage-sdk"></a>

------
#### [ Java ]

Para administrar etiquetas de objetos mediante el AWS SDK para Java, puede establecer etiquetas para un nuevo objeto y recuperar o reemplazar etiquetas de un objeto ya existente. Para obtener más información acerca de cómo etiquetar objetos, consulte [Categorización de los objetos mediante etiquetas](object-tagging.md).

Cargue un objeto en un bucket y configure las etiquetas con un S3Client. Para ver ejemplos, consulte [Cargar un objeto en un bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_PutObject_section.html) en la *Referencia de la API de Amazon S3*.

------
#### [ .NET ]

En la siguiente muestra se indica cómo utilizar el AWS SDK para .NET para establecer las etiquetas para un nuevo objeto y recuperar o reemplazar las etiquetas de un objeto ya existente. Para obtener más información acerca de cómo etiquetar objetos, consulte [Categorización de los objetos mediante etiquetas](object-tagging.md). 

Para obtener información acerca de cómo configurar y ejecutar ejemplos de código, consulte [Introducción al SDK de AWS para .NET](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) en la *Guía para desarrolladores del SDK de AWS para .NET*. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    public class ObjectTagsTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string keyName = "*** key name for the new object ***";
        private const string filePath = @"*** file path ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            PutObjectWithTagsTestAsync().Wait();
        }

        static async Task PutObjectWithTagsTestAsync()
        {
            try
            {
                // 1. Put an object with tags.
                var putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    FilePath = filePath,
                    TagSet = new List<Tag>{
                        new Tag { Key = "Keyx1", Value = "Value1"},
                        new Tag { Key = "Keyx2", Value = "Value2" }
                    }
                };

                PutObjectResponse response = await client.PutObjectAsync(putRequest);
                // 2. Retrieve the object's tags.
                GetObjectTaggingRequest getTagsRequest = new GetObjectTaggingRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };

                GetObjectTaggingResponse objectTags = await client.GetObjectTaggingAsync(getTagsRequest);
                for (int i = 0; i < objectTags.Tagging.Count; i++)
                    Console.WriteLine("Key: {0}, Value: {1}", objectTags.Tagging[i].Key, objectTags.Tagging[i].Value);


                // 3. Replace the tagset.

                Tagging newTagSet = new Tagging();
                newTagSet.TagSet = new List<Tag>{
                    new Tag { Key = "Key3", Value = "Value3"},
                    new Tag { Key = "Key4", Value = "Value4" }
                };


                PutObjectTaggingRequest putObjTagsRequest = new PutObjectTaggingRequest()
                {
                    BucketName = bucketName,
                    Key = keyName,
                    Tagging = newTagSet
                };
                PutObjectTaggingResponse response2 = await client.PutObjectTaggingAsync(putObjTagsRequest);

                // 4. Retrieve the object's tags.
                GetObjectTaggingRequest getTagsRequest2 = new GetObjectTaggingRequest();
                getTagsRequest2.BucketName = bucketName;
                getTagsRequest2.Key = keyName;
                GetObjectTaggingResponse objectTags2 = await client.GetObjectTaggingAsync(getTagsRequest2);
                for (int i = 0; i < objectTags2.Tagging.Count; i++)
                    Console.WriteLine("Key: {0}, Value: {1}", objectTags2.Tagging[i].Key, objectTags2.Tagging[i].Value);

            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine(
                        "Error encountered ***. Message:'{0}' when writing an object"
                        , e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine(
                    "Encountered an error. Message:'{0}' when writing an object"
                    , e.Message);
            }
        }
    }
}
```

------