

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Creación de una política de sesión para un bucket de Amazon S3
<a name="users-policies-session"></a>

Una *política de sesión* es una política AWS Identity and Access Management (IAM) que restringe a los usuarios a determinadas partes de un bucket de Amazon S3. Esto se consigue evaluando el acceso en tiempo real.

**nota**  
 Las políticas de sesión solo se utilizan con Amazon S3. En el caso de Amazon EFS, se utilizan los permisos de archivos POSIX para limitar el acceso. 

Puede usar una política de sesión cuando sea necesario proporcionar a un grupo de usuarios el mismo acceso a una parte determinada del bucket de Amazon S3. Por ejemplo, puede que un grupo de usuarios solo requiera acceso al directorio `home`. Ese grupo de usuarios comparte el mismo rol de IAM.

**nota**  
 La longitud máxima de una ruta es 2048 caracteres. Para obtener más información, consulte el [Parámetro de solicitud de política](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#API_CreateUser_RequestSyntax) correspondiente a la acción de `CreateUser` en la *Referencia de la API*. 

Para crear una política de sesión, utilice las variables siguientes en su política de IAM:
+ `${transfer:HomeBucket}`
+ `${transfer:HomeDirectory}`
+ `${transfer:HomeFolder}`
+ `${transfer:UserName}`

**importante**  
No puede usar las variables anteriores en Políticas administradas. Tampoco puede utilizarlas como variables de política en una definición de roles de IAM. Puede crear estas variables en una política de IAM y especificarlas directamente al configurar el usuario. Tampoco puede utilizar la variable `${aws:Username}` en esta política de sesión. Esta variable hace referencia a un nombre de usuario de IAM, no al nombre de usuario que AWS Transfer Family necesita.

## Ejemplo de política de sesión
<a name="example-session-policy"></a>

El código siguiente muestra un ejemplo de política de sesión.

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
          "Sid": "AllowListingOfUserFolder",
          "Action": [
              "s3:ListBucket"
          ],
          "Effect": "Allow",
          "Resource": [
              "arn:aws:s3:::${transfer:HomeBucket}"
          ],
          "Condition": {
              "StringLike": {
                  "s3:prefix": [
                      "${transfer:HomeFolder}/*",
                      "${transfer:HomeFolder}"
                  ]
              }
          }
      },
      {
          "Sid": "HomeDirObjectAccess",
          "Effect": "Allow",
          "Action": [
              "s3:PutObject",
              "s3:GetObject",
              "s3:DeleteObjectVersion",
              "s3:DeleteObject",
              "s3:GetObjectVersion",
              "s3:GetObjectACL",
              "s3:PutObjectACL"
          ],
          "Resource": "arn:aws:s3:::${transfer:HomeDirectory}/*"
       }
  ]
}
```

**nota**  
En el ejemplo de política anterior se supone que los directorios principales de los usuarios están configurados para incluir una barra al final, lo que significa que se trata de un directorio. Si, por el contrario, establece el `HomeDirectory` de un usuario sin la barra final, debe incluirlo como parte de su política.

En el ejemplo anterior de política, anote el uso de los parámetros de la política `transfer:HomeFolder`, `transfer:HomeBucket` y `transfer:HomeDirectory`. Estos parámetros se establecen para el `HomeDirectory` que está configurado para el usuario, tal y como se describe en [HomeDirectory](https://docs.aws.amazon.com/transfer/latest/APIReference/API_CreateUser.html#TransferFamily-CreateUser-request-HomeDirectory)y[Implementación de su método de API Gateway](authentication-api-gateway.md#authentication-api-method). Estos parámetros tienen las siguientes definiciones:
+ El parámetro `transfer:HomeBucket` se sustituye por el primer componente de `HomeDirectory`.
+ El parámetro `transfer:HomeFolder` se sustituye por las partes restantes del parámetro `HomeDirectory`.
+ Se ha eliminado la barra inclinada inicial (`/`) del parámetro `transfer:HomeDirectory` para que pueda usarse como parte de un nombre de recurso de Amazon (ARN) de S3 en una declaración de `Resource`.

**nota**  
 Si utiliza directorios lógicos, es decir, el `homeDirectoryType` del usuario es `LOGICAL`, estos parámetros de política (`HomeBucket`, `HomeDirectory` y `HomeFolder`) no son compatibles. 

Por ejemplo, supongamos que el parámetro `HomeDirectory` que está configurado para el usuario de Transfer Family es `/home/bob/amazon/stuff/`.
+ `transfer:HomeBucket` toma el valor de `/home`.
+ `transfer:HomeFolder` toma el valor de `/bob/amazon/stuff/`.
+ `transfer:HomeDirectory` se convierte en `home/bob/amazon/stuff/`.

El primer `"Sid"` permite al usuario enumerar todos los directorios a partir de `/home/bob/amazon/stuff/`.

El segundo `"Sid"` limita los accesos del usuario `put` y `get` a la misma ruta, `/home/bob/amazon/stuff/`.

Al aplicar la política anterior, cuando un usuario inicia sesión solo tiene acceso a los objetos de su directorio de inicio. En el momento de la conexión, AWS Transfer Family reemplaza estas variables por los valores adecuados para el usuario. Esto facilita la aplicación de los mismos documentos de política a múltiples usuarios. Este método reduce el trabajo de administración de roles y políticas de IAM para el acceso de los usuarios al bucket de Amazon S3.

También puede utilizar una política de sesión para personalizar el acceso de cada usuario en función de los requisitos de su negocio. Para obtener más información, consulte [los permisos para AssumeRole AssumeRoleWith SAML y AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_assumerole.html) la Guía del *usuario de IAM*.

**nota**  
AWS Transfer Family almacena el JSON de la política, en lugar del nombre de recurso de Amazon (ARN) de la política. Por lo tanto, cuando cambias la política en la consola de IAM, tienes que volver a la AWS Transfer Family consola y actualizar a tus usuarios con el contenido más reciente de la política. Puede actualizar el usuario en la pestaña **Información de la política** en la sección **Configuración de usuario**.  
Si utiliza la AWS CLI, puede utilizar el siguiente comando para actualizar la política.  

```
aws transfer update-user --server-id server --user-name user --policy \
   "$(aws iam get-policy-version --policy-arn policy --version-id version --output json)"
```

## Sustituciones anidadas de las políticas de sesión
<a name="nested-variable-behavior"></a>

Las sustituciones anidadas no se realizan en las políticas de sesión de Transfer Family. Las políticas de sesión pueden usar variables anidadas, como. `${transfer:HomeDirectory}` Cuando se procesa la política, es posible que la variable externa (por ejemplo,`${transfer:HomeDirectory}`) se sustituya por un valor que contenga otra variable (por ejemplo, \$1`amzn-s3-demo-bucket:/$(transfer:UserName}`). Sin embargo, la variable anidada ya no se sustituye por el nombre de usuario real (por ejemplo, **johndoe**).

Esto significa que, al crear políticas de sesión para Transfer Family, debe tener en cuenta este comportamiento y asegurarse de que la estructura de políticas y el uso de variables estén diseñados en consecuencia. Es posible que las variables anidadas no se resuelvan como se esperaba y que la política no conceda los permisos previstos. Es importante probar y validar minuciosamente las políticas de sesión para garantizar que funcionan según lo esperado. Este comportamiento es una consideración clave a la hora de implementar el control de acceso y los permisos para su entorno de Transfer Family.

Una solución a este problema es utilizar el nombre real del bucket de Amazon S3 en la política de sesión. Así, por ejemplo, en lugar de especificarlo `${transfer:HomeDirectory}` en su política de sesión, utilice lo siguiente, donde amzn-s3-demo-bucket es su bucket real:. `${amzn-s3-demo-bucket/transfer:UserName}`