Uso de directorios lógicos para simplificar las estructuras de directorios de Transfer Family - AWS Transfer Family

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.

Uso de directorios lógicos para simplificar las estructuras de directorios de Transfer Family

Para simplificar la estructura de directorios AWS Transfer Family del servidor, puede utilizar directorios lógicos. Con los directorios lógicos, puede crear una estructura de directorio virtual que utilice nombres fáciles de utilizar para los usuarios cuando se conecten al bucket de Amazon S3 o al sistema de archivos de Amazon EFS. Al utilizar directorios lógicos, puede evitar revelar a sus usuarios finales las rutas de directorio absolutas, los nombres de los buckets de Amazon S3 y los nombres de los sistemas de archivos EFS.

nota

Debe usar políticas de sesión para que los usuarios finales solo puedan realizar las operaciones que usted les permita realizar.

Debe utilizar directorios lógicos para crear un directorio virtual fácil de usar para sus usuarios finales y eliminar los nombres de los segmentos. Las asignaciones de directorios lógicos solo permiten a los usuarios acceder a sus rutas lógicas y subdirectorios designados, y prohíben las rutas relativas que atraviesan las raíces lógicas.

Transfer Family valida todas las rutas que puedan incluir elementos relativos y bloquea activamente estas rutas para que no se resuelvan antes de pasarlas a Amazon S3; esto evita que los usuarios vayan más allá de sus asignaciones lógicas.

Si bien Transfer Family impide que los usuarios finales accedan a directorios fuera de su directorio lógico, le recomendamos que también utilice funciones o políticas de sesión únicas para aplicar los privilegios mínimos a nivel de almacenamiento.

Puede utilizar los directorios lógicos para establecer el directorio raíz del usuario en la ubicación que desee dentro de la jerarquía de almacenamiento mediante la realización de lo que se conoce como operación chroot. En este modo, los usuarios no pueden navegar a un directorio fuera del directorio de inicio o raíz que haya configurado para ellos.

Por ejemplo, aunque a un usuario de Amazon S3 se le ha limitado el acceso únicamente a /mybucket/home/${transfer:UserName}, algunos clientes permiten a los usuarios recorrer una carpeta hasta /mybucket/home. En esta situación, el usuario vuelve a acceder al directorio de inicio deseado solo después de cerrar sesión y volver a iniciar sesión en el servidor de Transfer Family. Realizar una operación chroot puede evitar que se produzca esta situación.

Puede crear su propia estructura de directorio en buckets y prefijos. Esta característica resulta útil si tiene un flujo de trabajo que espera una estructura de directorios específica que no pueda replicar mediante prefijos de bucket. También puede vincular a varias ubicaciones no contiguas dentro de Amazon S3, de forma similar a la creación de un enlace simbólico en un sistema de archivos de Linux en el que la ruta del directorio hace referencia a una ubicación diferente del sistema de archivos.

Asignaciones lógicas de archivos de directorios

El tipo HomeDirectoryMapEntry de datos ahora incluye un Type parámetro. Antes de que existiera este parámetro, podría haber creado una asignación de directorios lógica en la que el destino fuera un archivo. Si ha creado anteriormente alguno de estos tipos de asignaciones de directorios lógicas, debe definirlo de forma explícita o estas asignaciones no funcionarán correctamente en el futuro. Type FILE

Una forma de hacerlo consiste en llamar a la UpdateUser API y establecer la t Type FILE para la asignación existente.

Reglas para el uso de directorios lógicos

Antes de crear las asignaciones de directorio lógico, debe comprender las siguientes reglas:

  • Si Entry es "/", solo puede tener una asignación, ya que no se permite la superposición de rutas.

  • Los directorios lógicos admiten mapeos de hasta 2,1 MB (para los usuarios gestionados por el servicio, este límite es de 2000 entradas). Es decir, la estructura de datos que contiene las asignaciones tiene un tamaño máximo de 2,1 MB. Si tiene muchos mapeos, puede calcular el tamaño de los mapeos de la siguiente manera:

    1. Escribe un mapeo típico en el formato{"Entry":"/entry-path","Target":"/target-path"}, donde entry-path y target-path son los valores reales que utilizarás.

    2. Cuente los caracteres de esa cadena y, a continuación, añada uno (1).

    3. Multiplique ese número por el número aproximado de mapeos que tiene para su servidor.

    Si el número estimado en el paso 3 es inferior a 2,1 MB, las asignaciones se encuentran dentro del límite aceptable.

  • Los destinos pueden usar la variable ${transfer:UserName} si la ruta del bucket o del sistema de archivos se ha parametrizado en función del nombre de usuario.

  • Los destinos pueden ser rutas en distintos depósitos o sistemas de archivos, pero debe asegurarse de que la función asignada AWS Identity and Access Management (IAM) (el Role parámetro de la respuesta) proporcione acceso a esos depósitos o sistemas de archivos.

  • No especifiques el HomeDirectory parámetro, ya que este valor viene implícito en los Entry Target pares cuando usas el LOGICAL valor del parámetro. HomeDirectoryType

  • Los objetivos deben empezar con un carácter de barra diagonal (/), pero no deben utilizarse barras diagonales finales (/) al especificar el. Target Por ejemplo, /DOC-EXAMPLE-BUCKET/images es aceptable, pero no DOC-EXAMPLE-BUCKET/images lo es. /DOC-EXAMPLE-BUCKET/images/

  • Amazon S3 es un almacén de objetos, lo que significa que las carpetas son un concepto virtual y no existe una jerarquía de directorios real. Si su aplicación ejecuta una stat operación desde un cliente, todo se clasifica como un archivo cuando utiliza Amazon S3 como almacenamiento. Este comportamiento se describe en Organizar objetos en la consola de Amazon S3 mediante carpetas de la Guía del usuario de Amazon Simple Storage Service. Si su aplicación requiere que se muestre stat con precisión si algo es un archivo o una carpeta, puede utilizar Amazon Elastic File System (Amazon EFS) como opción de almacenamiento para los servidores de Transfer Family.

  • Si especifica valores de directorio lógicos para su usuario, el parámetro que utilice depende del tipo de usuario:

    • Para los usuarios administrados por el servicio, introduzca los valores del directorio lógico en HomeDirectoryMappings.

    • Para los usuarios de proveedores de identidad personalizados, proporcione los valores del directorio lógico enHomeDirectoryDetails.

importante

A menos que elija optimizar el rendimiento de sus directorios de Amazon S3 (al crear o actualizar un servidor), el directorio raíz debe existir al inicio. En el caso de Amazon S3, esto significa que ya debe haber creado un objeto de cero bytes que termine con una barra diagonal (/) para crear la carpeta raíz. Evitar este problema es una razón para considerar la optimización del rendimiento de Amazon S3.

Implementar directorios lógicos y chroot

Para utilizar las características chroot y los directorios lógicos, debe hacer lo siguiente:

Active los directorios lógicos para cada usuario. Para ello, defina el parámetro HomeDirectoryType a LOGICAL cuando cree o actualice el usuario.

"HomeDirectoryType": "LOGICAL"

chroot

Para chroot, cree una estructura de directorios que consista en un único Entry y un par Target para cada usuario. La carpeta raíz es el punto Entry y Target es la ubicación del bucket o sistema de archivos a la que se realiza la asignación.

Example for Amazon S3
[{"Entry": "/", "Target": "/mybucket/jane"}]
Example for Amazon EFS
[{"Entry": "/", "Target": "/fs-faa1a123/jane"}]

Puede utilizar una ruta absoluta, como en el ejemplo anterior, o puede usar una sustitución dinámica del nombre de usuario por ${transfer:UserName}, como en el ejemplo siguiente.

[{"Entry": "/", "Target": "/mybucket/${transfer:UserName}"}]

En el ejemplo anterior, el usuario está bloqueado en su directorio raíz y no puede ascender en la jerarquía.

Estructura de directorio virtual

Para una estructura de directorios virtuales, puede crear varios pares Entry Target, con destinos en cualquier lugar de los buckets S3 o sistemas de archivos EFS, incluso en varios buckets o sistemas de archivos, siempre que la asignación de roles de IAM del usuario tenga permisos para acceder a ellos.

En el siguiente ejemplo de estructura virtual, cuando el usuario inicia sesión en AWS SFTP, se encuentra en el directorio raíz con los subdirectorios/pics, /doc/reporting, y. /anotherpath/subpath/financials

nota

A menos que elija optimizar el rendimiento de sus directorios de Amazon S3 (al crear o actualizar un servidor), el usuario o el administrador deberán crear los directorios si aún no existen. Evitar este problema es una razón para considerar la optimización del rendimiento de Amazon S3.

En el caso de Amazon EFS, aún necesita que el administrador cree las asignaciones lógicas del / directorio.

[ {"Entry": "/pics", "Target": "/bucket1/pics"}, {"Entry": "/doc", "Target": "/bucket1/anotherpath/docs"}, {"Entry": "/reporting", "Target": "/reportingbucket/Q1"}, {"Entry": "/anotherpath/subpath/financials", "Target": "/reportingbucket/financials"}]

nota

Solo puede cargar archivos en las carpetas específicas que se asignen. Esto significa que, en el ejemplo anterior, no puede subirlos a los directorios /anotherpath o anotherpath/subpath, únicamente a anotherpath/subpath/financials. Tampoco puede asignar esas rutas directamente, ya que no se permite la superposición de rutas.

Por ejemplo, supongamos que realiza las siguientes asignaciones:

{ "Entry": "/pics", "Target": "/mybucket/pics" }, { "Entry": "/doc", "Target": "/mybucket/mydocs" }, { "Entry": "/temp", "Target": "/mybucket" }

Solo puede cargar archivos en esos buckets. Cuando se conecta por primera vez a través de sftp, iniciará en el directorio raíz, /. Si intenta cargar un archivo en ese directorio, la carga no se realizará correctamente. Los siguientes comandos muestran una secuencia de ejemplo:

sftp> pwd Remote working directory: / sftp> put file Uploading file to /file remote open("/file"): No such file or directory

Para subirlo a cualquier directory/sub-directory, debe asignar de forma explícita la ruta a sub-directory.

Para obtener más información sobre la configuración de los directorios lógicos y chroot para sus usuarios, incluida una AWS CloudFormation plantilla que pueda descargar y usar, consulte Simplifique la estructura de AWS SFTP con directorios chroot y lógicos en el blog de almacenamiento. AWS

Ejemplo de configuración de directorios lógicos

En este ejemplo, creamos un usuario y asignamos dos directorios lógicos. El siguiente comando crea un nuevo usuario (para un servidor de Transfer Family existente) con directorios lógicos pics y doc.

aws transfer create-user --user-name marymajor-logical --server-id s-11112222333344445 --role arn:aws:iam::1234abcd5678:role/marymajor-role --home-directory-type LOGICAL \ --home-directory-mappings "[{\"Entry\":\"/pics\", \"Target\":\"/DOC-EXAMPLE-BUCKET1/pics\"}, {\"Entry\":\"/doc\", \"Target\":\"/DOC-EXAMPLE-BUCKET2/test/mydocs\"}]" \ --ssh-public-key-body file://~/.ssh/id_rsa.pub

Si marymajor es un usuario existente y su tipo de directorio de inicio es PATH, puede cambiarlo a LOGICAL con un comando similar al anterior.

aws transfer update-user --user-name marymajor-logical \ --server-id s-11112222333344445 --role arn:aws:iam::1234abcd5678:role/marymajor-role \ --home-directory-type LOGICAL --home-directory-mappings "[{\"Entry\":\"/pics\", \"Target\":\"/DOC-EXAMPLE-BUCKET1/pics\"}, \ {\"Entry\":\"/doc\", \"Target\":\"/DOC-EXAMPLE-BUCKET2/test/mydocs\"}]"

Tenga en cuenta lo siguiente:

  • Si los directorios /DOC-EXAMPLE-BUCKET1/pics y /DOC-EXAMPLE-BUCKET2/test/mydocs aún no existen, el usuario (o un administrador) debe crearlos.

  • Cuando marymajor se conecta al servidor y ejecuta el comando ls -l, ve lo siguiente:

    drwxr--r-- 1 - - 0 Mar 17 15:42 doc drwxr--r-- 1 - - 0 Mar 17 16:04 pics
  • marymajor no puede crear ningún archivo o directorio en este nivel. Sin embargo, dentro de pics y doc, puede añadir subdirectorios.

  • Los archivos que añade a pics y doc se añaden a las rutas de Amazon S3 /DOC-EXAMPLE-BUCKET1/pics y /DOC-EXAMPLE-BUCKET2/test/mydocs, respectivamente.

  • En este ejemplo, especificamos dos buckets diferentes para ilustrar esa posibilidad. Sin embargo, puede usar el mismo bucket para varios o todos los directorios lógicos que especifique para el usuario.

Configuración de directorios lógicos para Amazon EFS

Si su servidor de Transfer Family utiliza Amazon EFS, el directorio de inicio del usuario debe crearse con acceso de lectura y escritura para que el usuario pueda trabajar en su directorio de inicio lógico. El usuario no puede crear este directorio por sí mismo, ya que carecería de permisos para mkdir en su directorio de inicio lógico.

Si el directorio de inicio del usuario no existe y este ejecuta un comando ls, el sistema responde de la siguiente manera:

sftp> ls remote readdir ("/"): No such file or directory

Un usuario con acceso administrativo al directorio de inicio debe crear el directorio de inicio lógico del usuario.

Respuesta personalizada AWS Lambda

Puede utilizar directorios lógicos con una función de Lambda que se conecte al proveedor de identidad personalizado. Para ello, en la función de Lambda, especifique HomeDirectoryType como LOGICAL, y añada los valores Entry y Target para el parámetro HomeDirectoryDetails. Por ejemplo:

HomeDirectoryType: "LOGICAL" HomeDirectoryDetails: "[{\"Entry\": \"/\", \"Target\": \"/DOC-EXAMPLE-BUCKET/theRealFolder"}]"

El siguiente código es un ejemplo de una respuesta correcta de una llamada de autenticación de Lambda personalizada.

aws transfer test-identity-provider --server-id s-1234567890abcdef0 --user-name myuser { "Url": "https://a1b2c3d4e5.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234567890abcdef0/users/myuser/config", "Message": "", "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/bob-usa-role\",\"HomeDirectoryType\": \"LOGICAL\",\"HomeDirectoryDetails\": \"[{\\\"Entry\\\":\\\"/myhome\\\",\\\"Target\\\":\\\"/DOC-EXAMPLE-BUCKET/theRealFolder\\\"}]\",\"PublicKeys\": \"[ssh-rsa myrsapubkey]\"}", "StatusCode": 200 }
nota

La línea "Url": se devuelve solo si utiliza un método de puerta de enlace API como proveedor de identidad personalizado.