

# Controlar el acceso a un bucket con las políticas de usuario
<a name="walkthrough1"></a>

En este tutorial se explica cómo funcionan los permisos del usuario con Amazon S3. En este ejemplo, puede crear un bucket con carpetas. A continuación, cree usuarios de IAM AWS Identity and Access Management en la Cuenta de AWS y conceda a estos usuarios permisos progresivos en el bucket de Amazon S3 y sus carpetas. 

**Topics**
+ [Conceptos básicos de buckets y carpetas](#walkthrough-background1)
+ [Resumen del tutorial](#walkthrough-scenario)
+ [Prepararse para el tutorial](#walkthrough-what-you-need)
+ [Paso 1: Crear un bucket](#walkthrough1-create-bucket)
+ [Paso 2: Crear usuarios y un grupo de IAM](#walkthrough1-add-users)
+ [Paso 3: Comprobar que los usuarios de IAM no tengan permisos](#walkthrough1-verify-no-user-permissions)
+ [Paso 4: Conceder permisos en el nivel de grupo](#walkthrough-group-policy)
+ [Paso 5: Conceder permisos específicos al usuario Alice de IAM](#walkthrough-grant-user1-permissions)
+ [Paso 6: Conceder permisos específicos al usuario Bob de IAM](#walkthrough1-grant-permissions-step5)
+ [Paso 7: Proteger la carpeta privada](#walkthrough-secure-private-folder-explicit-deny)
+ [Paso 8: Limpiar](#walkthrough-cleanup)
+ [Recursos relacionados](#RelatedResources-walkthrough1)

## Conceptos básicos de buckets y carpetas
<a name="walkthrough-background1"></a>

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.

La consola muestra que un bucket denominado `companybucket` tiene tres carpetas: `Private`, `Development` y `Finance`, y un objeto, `s3-dg.pdf`. La consola utiliza los nombres de objeto (claves) para crear una jerarquía lógica con carpetas y subcarpetas. Considere los siguientes ejemplos:
+ Al crear la carpeta `Development`, la consola crea un objeto con la clave `Development/`. Tenga en cuenta el delimitador final (`/`).
+ Al cargar un objeto denominado `Projects1.xls` en la carpeta `Development`, la consola carga el objeto y le asigna la clave `Development/Projects1.xls`. 

  En la clave, `Development` es el [prefijo](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#keyprefix) y `/` es el delimitador. La API de Amazon S3 admite prefijos y delimitadores en sus operaciones. Por ejemplo, puede obtener una lista de todos los objetos de un bucket con un prefijo y delimitador específicos. En la consola, al abrir la carpeta `Development`, la consola muestra los objetos de esa carpeta. En el siguiente ejemplo, la carpeta `Development` contiene un objeto. 

  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 claves de objeto para inferir una jerarquía lógica. Amazon S3 no tiene una jerarquía física. Amazon S3 solo tiene buckets que contienen objetos en una estructura de archivos plana. 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. 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 del tutorial
<a name="walkthrough-scenario"></a>

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.

**nota**  
En el tutorial, se utiliza `companybucket` como el nombre del bucket, Alice y Bob como los usuarios de IAM y `Consultants` como el nombre del grupo. Dado que Amazon S3 requiere que los nombres de los buckets sean exclusivos a nivel global, debe crear un nombre de bucket para reemplazar el existente.

## Prepararse para el tutorial
<a name="walkthrough-what-you-need"></a>

 En este ejemplo, utilizará las credenciales de su Cuenta de AWS para crear usuarios de IAM. Al principio, estos usuarios no tienen permisos. Conceda permisos a estos usuarios de forma gradual para realizar acciones específicas de Amazon S3. Para probar estos permisos, inicie sesión en la consola con las credenciales de cada usuario. A medida que concede los permisos de forma progresiva como propietario de la Cuenta de AWS y prueba los permisos como usuario de IAM, tendrá que iniciar y cerrar sesión con diferentes credenciales en cada ocasión. Puede realizar estas pruebas con un navegador, pero el proceso se agilizará si utiliza dos navegadores distintos. Utilice un navegador para conectarse a la Consola de administración de AWS con las credenciales de la Cuenta de AWS y otro navegador para conectarse con las credenciales del usuario de IAM. 

 Para iniciar sesión en la Consola de administración de AWS con las credenciales de la Cuenta de AWS, vaya a [https://console.aws.amazon.com/](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 activada para IAM. Como propietario de la cuenta, puede proporcionar este enlace a los usuarios. 

Para obtener más información acerca de IAM, consulte [Inicio de sesión en la Consola de administración de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/console.html) en la *Guía del usuario de IAM*.

### Para proporcionar un enlace de inicio de sesión para usuarios de IAM
<a name="walkthrough-sign-in-user-credentials"></a>

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

1. En el panel de **Navigation (Navegación)**, elija **IAM Dashboard** (Panel de IAM).

1. Anote la URL en **IAM users sign in link: (Enlace de inicio de sesión de usuarios de IAM:)**. Proporcionará este enlace a los usuarios de IAM para que inicien sesión en la consola con el nombre de usuario y contraseña de IAM.

## Paso 1: Crear un bucket
<a name="walkthrough1-create-bucket"></a>

En este paso, inicie sesión en la consola de Amazon S3 con las credenciales de la Cuenta de AWS, cree un bucket, agregue las carpetas al bucket y cargue uno o dos documentos de ejemplo en cada carpeta. 

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

1. Cree un bucket. 

   Para obtener instrucciones paso a paso, consulte [Creación de un bucket de uso general](create-bucket-overview.md).

1. Cargue un documento en el bucket.

   Para este ejercicio, supongamos que tiene el documento `s3-dg.pdf` en el nivel raíz de este bucket. Si carga un documento diferente, sustituya el nombre de archivo por `s3-dg.pdf`.

1. Añada las tres carpetas denominadas `Private`, `Finance` y `Development` al bucket.

   Para obtener instrucciones paso a paso para crear una carpeta, consulte [Organización de objetos en la consola de Amazon S3 con carpetas](using-folders.md)> en la *Guía del usuario de la consola de Amazon Simple Storage Service*.

1. 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 [Carga de objetos](upload-objects.md). 

## Paso 2: Crear usuarios y un grupo de IAM
<a name="walkthrough1-add-users"></a>

Ahora, utilice la [consola de IAM](https://console.aws.amazon.com/iam/) para agregar dos usuarios de IAM, Alice y Bob, a su Cuenta de AWS. Para obtener instrucciones paso a paso, consulte [Creación de un usuario de IAM en su Cuenta de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) en la *Guía del usuario de IAM*. 

Cree también un grupo administrativo denominado `Consultants`. A continuación, agregue los usuarios al grupo. Para obtener instrucciones paso a paso, consulte [Creación de un grupo de usuarios de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups_create.html). 

**aviso**  
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. Primero 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 sobre cómo crear un nuevo usuario de IAM, consulte [Creación de un usuario de IAM en la Cuenta de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) en la *Guía del usuario de IAM*. Cuando cree los usuarios para esta explicación, seleccione **Acceso a la Consola de administración de AWS** y desmarque [Acceso programático](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys).

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](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html) en la *guía del usuario de IAM*.



## Paso 3: Comprobar que los usuarios de IAM no tengan permisos
<a name="walkthrough1-verify-no-user-permissions"></a>

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](#walkthrough-sign-in-user-credentials)), inicie sesión en la Consola de administración de AWS con cualquiera de las credenciales de usuario de IAM.

1. Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3](https://console.aws.amazon.com/s3/).

    Verifiq‎ue el mensaje de la consola en el que se que indica que el acceso está denegado. 

Ahora, puede comenzar a conceder permisos de forma gradual a los usuarios. En primer lugar, asocie una política de grupo que conceda los permisos que ambos usuarios deben tener. 

## Paso 4: Conceder permisos en el nivel de grupo
<a name="walkthrough-group-policy"></a>

Quiere que los usuarios puedan realizar las siguientes acciones:
+ Mostrar todos los buckets que pertenecen a la cuenta principal. Para ello, Bob y Alice deben tener permiso para ejecutar la acción `s3:ListAllMyBuckets`.
+ Mostrar los elementos, las carpetas y los objetos del bucket `companybucket` en el nivel raíz. Para ello, Bob y Alice deben tener permiso para ejecutar la acción `s3:ListBucket` en el bucket `companybucket`.

En primer lugar, cree una política que conceda estos permisos y, a continuación, asóciela al grupo `Consultants`. 

### Paso 4.1: Conceder permiso para mostrar todos los buckets
<a name="walkthrough1-grant-permissions-step1"></a>

En este paso, creará una política administrada que conceda a los usuarios los permisos mínimos para que puedan mostrar todos los buckets que pertenecen a la cuenta principal. A continuación, asociará la política al grupo `Consultants`. Cuando adjunta la política administrada a un usuario o grupo, permite al usuario o grupo obtener una lista de buckets que pertenecen a la principal Cuenta de AWS.

1. Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).
**nota**  
Dado que concederá permisos al usuario, inicie sesión con las credenciales de su Cuenta de AWS, no como usuario de IAM.

1. Cree la política administrada.

   1. En el panel de navegación de la izquierda, elija **Políticas** y, a continuación, seleccione **Crear política**.

   1. Seleccione la pestaña **JSON**.

   1. Copie la siguiente política de acceso y péguela en el campo de texto de la política.

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "AllowGroupToSeeBucketListInTheConsole",
            "Action": ["s3:ListAllMyBuckets"],
            "Effect": "Allow",
            "Resource": ["arn:aws:s3:::*"]
          }
        ]
      }
      ```

------

      Una política es un documento JSON. En el documento, `Statement` es una matriz de objetos, cada uno describe un permiso con una recopilación de pares nombre-valor. La política anterior describe un permiso específico. El elemento `Action` especifica el tipo de acceso. En la política, `s3:ListAllMyBuckets` es una acción predeterminada de Amazon S3. Esta acción abarca la operación GET Service de Amazon S3, que devuelve una lista de todos los buckets que pertenecen al remitente autenticado. El valor del elemento `Effect` determina si se concede o deniega un permiso específico.

   1. Elija **Review Policy (Revisar la política)**. En la página siguiente, introduzca `AllowGroupToSeeBucketListInTheConsole` en el campo **Name (Nombre)** y, a continuación, seleccione **Create policy (Crear política)**.
**nota**  
La entrada **Summary (Resumen)** muestra un mensaje que indica que la política no concede ningún permiso. Para este tutorial, puede hacer caso omiso de este mensaje.

1. Asocie la política administrada `AllowGroupToSeeBucketListInTheConsole` que creó para el grupo `Consultants`.

   Para obtener instrucciones paso a paso acerca de cómo asociar una política administrada, consulte [Agregación y eliminación de permisos de identidad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#attach-managed-policy-console) 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. 

1. Pruebe el permiso.

   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](#walkthrough-sign-in-user-credentials)), inicie sesión en la consola con cualquiera de las credenciales del usuario de IAM.

   1. Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3](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: Permitir que los usuarios puedan mostrar el contenido en el nivel raíz de un bucket
<a name="walkthrough1-grant-permissions-step2"></a>

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.

**nota**  
En este ejemplo se utiliza `companybucket` a título ilustrativo. Debe utilizar el nombre del bucket que creó.

Para comprender qué solicitud envía la consola a Amazon S3 cuando elige el nombre de un bucket, la respuesta que devuelve Amazon S3 y la forma en que la consola interpreta la respuesta, examine el flujo de forma más detenida.

Al elegir el nombre de un bucket, la consola envía la solicitud [GET Bucket (List Objects)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) a Amazon S3. Esta solicitud incluye los siguientes parámetros:
+ El parámetro `prefix` con una cadena vacía como valor. 
+ El parámetro `delimiter` con `/` como valor. 

A continuación, se muestra un ejemplo de solicitud.

```
GET ?prefix=&delimiter=/ HTTP/1.1 
Host: companybucket.s3.amazonaws.com
Date: Wed, 01 Aug  2012 12:00:00 GMT
Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=
```

Amazon S3 devuelve una respuesta que incluye el siguiente elemento `<ListBucketResult/>`:

```
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Name>companybucket</Name>
  <Prefix></Prefix>
  <Delimiter>/</Delimiter>
   ...
  <Contents>
    <Key>s3-dg.pdf</Key>
    ...
  </Contents>
  <CommonPrefixes>
    <Prefix>Development/</Prefix>
  </CommonPrefixes>
  <CommonPrefixes>
    <Prefix>Finance/</Prefix>
  </CommonPrefixes>
  <CommonPrefixes>
    <Prefix>Private/</Prefix>
  </CommonPrefixes>
</ListBucketResult>
```

La clave del objeto `s3-dg.pdf` no contiene el delimitador `/` y Amazon S3 devuelve la clave en el elemento `<Contents>`. Sin embargo, todas las demás claves de nuestro 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)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html) a Amazon S3 con los parámetros `prefix` y `delimiter` establecidos en los siguientes valores:
+ El parámetro `prefix` con el valor `Development/`.
+ El parámetro `delimiter` con el valor “`/`”. 

Como respuesta, Amazon S3 devuelve las claves de objeto que comienzan con el prefijo especificado. 

```
<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <Name>companybucket</Name>
  <Prefix>Development</Prefix>
  <Delimiter>/</Delimiter>
   ...
  <Contents>
    <Key>Project1.xls</Key>
    ...
  </Contents>
  <Contents>
    <Key>Project2.xls</Key>
    ...
  </Contents> 
</ListBucketResult>
```

La consola muestra las claves de objeto.

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 envía primero la solicitud [GET Bucket location](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETlocation.html) para buscar la Región de AWS donde se encuentra el bucket. A continuación, la consola utiliza el punto de conexión específico de la región del bucket para enviar la solicitud [GET Bucket (List Objects)](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html). Como resultado, si los usuarios utilizan la consola, debe concederles permiso para ejecutar la acción `s3:GetBucketLocation`, tal como se muestra en la siguiente instrucción de política.

```
{
   "Sid": "RequiredByS3Console",
   "Action": ["s3:GetBucketLocation"],
   "Effect": "Allow",
   "Resource": ["arn:aws:s3:::*"]
}
```

**Para permitir a los usuarios mostrar el contenido del bucket en el nivel raíz**

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

   Utilice las credenciales de su Cuenta de AWS, no las de usuario de IAM, para iniciar sesión en la consola.

1. 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](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html) en la *Guía de 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. 

------
#### [ JSON ]

****  

   ```
   {
     "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":["/"]
                              }
                      }
        }
     ] 
   }
   ```

------

1. Pruebe los permisos actualizados.

   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](#walkthrough-sign-in-user-credentials)), inicie sesión en la Consola de administración de AWS. 

      Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3](https://console.aws.amazon.com/s3/).

   1. Elija el bucket que creó y la consola mostrará los elementos del bucket en el nivel raíz. Si elige cualquiera de las carpetas del bucket, no podrá ver el contenido de la carpeta, ya que aún no ha concedido esos permisos.

Esta prueba se realiza correctamente cuando los usuarios utilizan la consola de Amazon S3. Cuando elija un bucket en la consola, la implementación de la consola envía una solicitud que incluye el parámetro `prefix`con una cadena vacía como valor y el parámetro `delimiter` con “`/`” como valor.

### Paso 4.3: Resumen de la política de grupo
<a name="walkthrough-group-policy-summary"></a>

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 mínimos:
+ Mostrar todos los buckets que pertenecen a la cuenta principal.
+ Ver los elementos del bucket `companybucket` en el nivel raíz. 

Sin embargo, los usuarios aún no pueden hacer demasiado. A continuación, conceda permisos específicos del usuario de la siguiente manera:
+ Permita a Alice obtener y colocar objetos en la carpeta `Development`.
+ Permita a Bob obtener y colocar objetos en la carpeta `Finance`.

Para permisos específicos del usuario, asocie una política al usuario específico, no al grupo. En la siguiente sección, conceda permiso a Alice para trabajar en la carpeta `Development`. Puede repetir los pasos para conceder un permiso similar a Bob para trabajar en la carpeta `Finance`.

## Paso 5: Conceder permisos específicos al usuario Alice de IAM
<a name="walkthrough-grant-user1-permissions"></a>

Ahora debe conceder permisos adicionales a Alice para que pueda ver el contenido de la carpeta `Development` y obtener y colocar objetos en esa carpeta.

### Paso 5.1: Conceder permiso al usuario Alice de IAM para mostrar el contenido de la carpeta Development (Desarrollo)
<a name="walkthrough-grant-user1-permissions-listbucket"></a>

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 e insertadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html) en la *Guía del usuario de IAM*.

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

   Utilice las credenciales de su Cuenta de AWS, no las de usuario de IAM, para iniciar sesión en la consola.

1. Cree una política insertada para conceder permiso al usuario Alice para mostrar el contenido de la carpeta `Development`.

   1. En el panel de navegación de la izquierda, elija **Users (Usuarios)**.

   1. Elija el nombre de usuario **Alice**.

   1. En la página de detalles del usuario, elija la pestaña **Permissions (Permisos)** y, a continuación, seleccione **Add inline policy (Añadir política insertada)**.

   1. Seleccione la pestaña **JSON**.

   1. Copie la siguiente política y péguela en el campo de texto de la política.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	   
          "Statement": [
          {
            "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
            "Action": ["s3:ListBucket"],
            "Effect": "Allow",
            "Resource": ["arn:aws:s3:::companybucket"],
            "Condition": { "StringLike": {"s3:prefix": ["Development/*"] }
             }
          }
        ]
      }
      ```

------

   1. 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)**.

1. Pruebe el cambio en los permisos de Alice:

   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](#walkthrough-sign-in-user-credentials)), inicie sesión en la Consola de administración de AWS. 

   1. Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3](https://console.aws.amazon.com/s3/).

   1. 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: Conceder permisos al usuario Alice de IAM para obtener y colocar objetos en la carpeta Development (Desarrollo)
<a name="walkthrough-grant-user1-permissions-get-put-object"></a>

Para que Alice pueda obtener y colocar objetos en la carpeta `Development`, necesitará permiso para ejecutar las acciones `s3:GetObject` y `s3:PutObject`. Las siguientes instrucciones de política conceden estos permisos, siempre que la solicitud incluya el parámetro `prefix` con un valor de `Development/`.

```
{
    "Sid":"AllowUserToReadWriteObjectData",
    "Action":["s3:GetObject", "s3:PutObject"],
    "Effect":"Allow",
    "Resource":["arn:aws:s3:::companybucket/Development/*"]
 }
```



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

   Utilice las credenciales de su Cuenta de AWS, no las de usuario de IAM, para iniciar sesión en la consola.

1. Edite la política insertada que creó en el paso anterior. 

   1. En el panel de navegación de la izquierda, elija **Usuarios**.

   1. Elija el nombre de usuario Alice.

   1. En la página de detalles del usuario, elija la pestaña **Permisos** y expanda la sección **Políticas insertadas**.

   1. Seleccione **Editar política** junto al nombre de la política que creó en el paso anterior.

   1. Copie la siguiente política y péguela en el campo de texto de la política para sustituir la política existente.

------
#### [ JSON ]

****  

      ```
      {
           "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/*"]
            }
         ]
      }
      ```

------

1. Pruebe la política actualizada:

   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](#walkthrough-sign-in-user-credentials)), inicie sesión en la Consola de administración de AWS. 

   1. Abra la consola de Amazon S3 en [https://console.aws.amazon.com/s3](https://console.aws.amazon.com/s3/).

   1. En la consola de Amazon S3, compruebe que Alice pueda añadir y descargar un objeto en la carpeta `Development`. 

### Paso 5.3: Denegar permisos de forma explícita al usuario Alice de IAM para que no obtenga acceso a ninguna otra carpeta del bucket
<a name="walkthrough-grant-user1-explicit-deny-other-access"></a>

El usuario Alice ahora puede mostrar el contenido del bucket `companybucket` en el nivel raíz. También puede obtener y colocar objetos en la carpeta `Development`. Si realmente desea ajustar los permisos de acceso, puede denegar de forma explícita el acceso a Alice a cualquier otra carpeta del bucket. Si existe alguna otra política (política de bucket o ACL) que conceda acceso a Alice a otra carpeta del bucket, esta denegación explícita anula estos permisos. 

Puede añadir la siguiente instrucción a la política del usuario Alice que requiere que todas las solicitudes que Alice envía a Amazon S3 incluyan el parámetro `prefix`, cuyo valor puede ser `Development/*` o una cadena vacía. 



```
{
   "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
   "Action": ["s3:ListBucket"],
   "Effect": "Deny",
   "Resource": ["arn:aws:s3:::companybucket"],
   "Condition":{  "StringNotLike": {"s3:prefix":["Development/*",""] },
                  "Null"         : {"s3:prefix":false }
    }
}
```

Existen dos expresiones condicionales en el bloque `Condition`. El resultado de estas expresiones condicionales se combina con el uso de la operación lógica `AND`. Si ambas condiciones son válidas, el resultado de la condición combinada se considera válido. Dado que el `Effect` en esta política es `Deny`, cuando la `Condition` se considera válida, los usuarios no pueden realizar la `Action` especificada.
+ La expresión condicional `Null` asegura que las solicitudes de Alice incluyan el parámetro `prefix`. 

  El parámetro `prefix` requiere acceso de tipo carpeta. Si envía una solicitud sin el parámetro `prefix`, Amazon S3 devuelve todas las claves de objeto. 

  Si la solicitud incluye el parámetro `prefix` con un valor nulo, la expresión se considera válida y, por lo tanto, el parámetro `Condition` también se considera válido. Debe permitir una cadena vacía como valor del parámetro `prefix`. Recuerde que permitir una cadena nula permite a Alice recuperar los 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: Permitir que los usuarios puedan mostrar el contenido en el nivel raíz de un bucket](#walkthrough1-grant-permissions-step2). 
+ 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.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
         "Action":["s3:ListBucket"],
         "Effect":"Allow",
         "Resource":["arn:aws:s3:::companybucket"],
         "Condition":{
            "StringLike":{"s3:prefix":["Development/*"]
            }
         }
      },
      {
        "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", 
        "Action":["s3:GetObject", "s3:PutObject"],
        "Effect":"Allow",
        "Resource":["arn:aws:s3:::companybucket/Development/*"]
      },
      {
         "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
         "Action": ["s3:ListBucket"],
         "Effect": "Deny",
         "Resource": ["arn:aws:s3:::companybucket"],
         "Condition":{  "StringNotLike": {"s3:prefix":["Development/*",""] },
                        "Null"         : {"s3:prefix":false }
          }
      }
   ]
}
```

------

## Paso 6: Conceder permisos específicos al usuario Bob de IAM
<a name="walkthrough1-grant-permissions-step5"></a>

Ahora desea conceder permiso a Bob para trabajar en la carpeta `Finance`. Siga los pasos realizados anteriormente para conceder permisos a Alice, pero sustituya la carpeta `Development` por la carpeta `Finance`. Para obtener instrucciones paso a paso, consulte [Paso 5: Conceder permisos específicos al usuario Alice de IAM](#walkthrough-grant-user1-permissions). 

## Paso 7: Proteger la carpeta privada
<a name="walkthrough-secure-private-folder-explicit-deny"></a>

En este ejemplo, tiene solo dos usuarios. Concedió todos los permisos mínimos requeridos en el nivel de grupo y los permisos en el nivel de usuario solo cuando realmente se requerían permisos en el nivel de usuario individual. Este enfoque ayuda a reducir el esfuerzo para administrar los permisos. A medida que el número de usuarios aumenta, administrar los permisos puede ser complicado. Por ejemplo, no quiere que ninguno de los usuarios de este ejemplo obtenga acceso al contenido de la carpeta `Private`. ¿Cómo asegurarse de no conceder permisos accidentalmente al usuario a la carpeta `Private`? Añada una política que deniegue explícitamente el acceso a la carpeta. Una denegación explícita anula cualquier otro permiso. 

Para asegurarse de que la carpeta `Private` sea privada, puede añadir estas dos instrucciones de denegación a la política de grupo:
+ Añada la siguiente instrucción para denegar explícitamente cualquier acción sobre los recursos de la carpeta `Private` (`companybucket/Private/*`).

  ```
  {
    "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
    "Action": ["s3:*"],
    "Effect": "Deny",
    "Resource":["arn:aws:s3:::companybucket/Private/*"]
  }
  ```
+ Además, deniegue el permiso para mostrar la acción de los objetos cuando la solicitud especifica el prefijo `Private/`. Si Bob o Alice abren la carpeta `Private` en la consola, esta política hace que Amazon S3 devuelva una respuesta de error.

  ```
  {
    "Sid": "DenyListBucketOnPrivateFolder",
    "Action": ["s3:ListBucket"],
    "Effect": "Deny",
    "Resource": ["arn:aws:s3:::*"],
    "Condition":{
        "StringLike":{"s3:prefix":["Private/"]}
     }
  }
  ```

Sustituya la política del grupo `Consultants` por una política actualizada que incluya las instrucciones de denegación anteriores. Después de aplicar la política actualizada, ninguno de los usuarios del grupo puede obtener acceso a la carpeta `Private` de su bucket. 

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

   Utilice las credenciales de su Cuenta de AWS, no las de usuario de IAM, para iniciar sesión en la consola.

1. 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 del bucket. 

   Para obtener instrucciones, consulte [Edición de políticas administradas por el cliente](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html#edit-managed-policy-console) 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. 

------
#### [ JSON ]

****  

   ```
   {
     "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: Limpiar
<a name="walkthrough-cleanup"></a>

Para realizar una limpieza, abra la [consola de IAM](https://console.aws.amazon.com/iam/) y elimine los usuarios Alice y Bob. Para obtener instrucciones paso a paso, consulte [Eliminación de un usuario de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_manage.html#id_users_deleting) 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
<a name="RelatedResources-walkthrough1"></a>
+ [Administración de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html) en la *guía del usuario de IAM*