Cómo configurar AWS Transfer Family con Amazon EFS por SFTP

AWS Transfer Family permite que clientes SFTP transfieran archivos a Amazon EFS sin que tengas que operar un servidor SFTP propio. Para habilitarlo, configura un endpoint y un usuario de Transfer Family, concede al rol del usuario acceso a EFS y asigna un perfil POSIX con permisos sobre la carpeta. El servidor y EFS deben estar en la misma región; pueden estar en cuentas distintas si la política de EFS concede acceso al rol.

La guía configura un usuario administrado por Transfer Family que inicia sesión con una clave SSH y accede a una carpeta de EFS. También explica cuándo usar un endpoint público o alojado en una VPC, cómo probar una carga y cómo eliminar los cargos del endpoint después de una prueba. La documentación oficial de EFS y Transfer Family cubre los requisitos de integración y el acceso entre cuentas.

Antes de empezar

Necesitas un sistema de archivos EFS en la región donde crearás el servidor, permisos de IAM para crear el rol y sus políticas, administrar Transfer Family y pasar el rol al servicio (iam:PassRole), y acceso a una instancia Linux que pueda montar EFS para crear la carpeta del usuario. En tu computadora instala AWS CLI v2 y OpenSSH con los comandos sftp y ssh-keygen. Configura un perfil o sesión de AWS con credenciales válidas y la región que usarás en todos los comandos; puedes comprobar el perfil activo con aws configure list y la cuenta con aws sts get-caller-identity --region us-east-1. Reemplaza us-east-1 por la región del servidor; si usas un perfil con nombre, agrega --profile NOMBRE a cada comando de AWS CLI.

La guía de AWS CLI en español ayuda con la instalación inicial; para instalar la versión actual, sigue las instrucciones oficiales para AWS CLI v2.

Qué controla cada permiso

La integración tiene varias capas que cumplen funciones distintas:

EFS y Transfer Family pueden estar en cuentas distintas, pero no en regiones distintas. Para el caso entre cuentas, agrega una política de sistema de archivos EFS no pública que permita al rol de usuario de Transfer Family usar ClientMount y, si debe cargar archivos, ClientWrite. AWS detalla este requisito y un ejemplo de política.

Transfer Family puede usar EFS con SFTP, FTPS o FTP. El endpoint y el proveedor de identidad también limitan qué protocolos puedes habilitar: un endpoint PUBLIC admite SFTP; los endpoints alojados en una VPC permiten otras combinaciones. El proveedor de identidad administrado por Transfer Family es compatible con SFTP. Consulta la matriz de protocolos y endpoints si necesitas FTPS o FTP. FTP transmite datos sin cifrar; para archivos sensibles usa SFTP o FTPS.

1. Prepara EFS y el directorio del usuario

Elige un sistema de archivos EFS en la misma región del servidor. Para un primer despliegue, mantener ambos recursos en la misma cuenta simplifica la política; el acceso entre cuentas también está soportado si habilitas la política de EFS descrita arriba.

Antes de crear el usuario, crea su carpeta y asígnale el mismo UID y GID que usarás en Transfer Family. Este ejemplo supone que un administrador ya montó EFS en una instancia Linux bajo /mnt/efs:

sudo mkdir -p /mnt/efs/transferFam/acme
sudo chown 1001:1001 /mnt/efs/transferFam/acme
sudo chmod 750 /mnt/efs/transferFam/acme

En este ejemplo, el propietario 1001:1001 puede leer, escribir y recorrer la carpeta. Ajusta el propietario y el modo si varios usuarios compartirán archivos. El directorio de inicio debe existir y permitir lectura y escritura; si no, el usuario puede autenticarse y aun así recibir “No such file or directory” al listar su carpeta.

Si quieres comparar opciones de almacenamiento antes de preparar la estructura, esta sesión de AWS Girls Perú sobre EFS, FSx y AWS Backup explica cómo encajan esos servicios para datos compartidos y respaldos.

Para montar EFS desde esa instancia administrativa, configura un mount target y permite NFS por TCP 2049 desde el grupo de seguridad de la instancia al grupo del mount target. Esa conexión sirve para que la instancia monte EFS y prepare directorios. Los clientes SFTP se conectan al endpoint de Transfer Family, no a un mount target de EFS.

Transfer Family accede a EFS por la red interna de AWS. Ese tráfico no atraviesa Internet y no requiere un endpoint de AWS PrivateLink para mantenerlo privado. El endpoint público o de VPC controla la conexión entre el cliente y Transfer Family; no es una ruta de red que debas abrir desde el servidor hacia EFS. Consulta la respuesta oficial sobre la conexión de Transfer Family con EFS.

2. Crea el servidor y elige su endpoint

En la consola de AWS, abre AWS Transfer Family → Servers → Create server y selecciona:

  1. Protocol: SFTP.
  2. Identity provider: Service managed, para que Transfer Family guarde el usuario y la clave pública.
  3. Domain: Amazon EFS.
  4. Endpoint: elige Public si los clientes deben conectarse por Internet y solo necesitas SFTP. El endpoint público no admite una lista de IP de origen y sus direcciones IP pueden cambiar.

Si necesitas un origen de IP filtrable o direcciones IP estáticas, usa un endpoint alojado en una VPC con acceso Internet facing y configura sus grupos de seguridad para admitir el tráfico SFTP de los clientes autorizados. Para clientes dentro de la VPC, una VPN o Direct Connect, elige acceso Internal. Un endpoint interno no es accesible desde Internet.

El grupo de seguridad del endpoint de VPC controla el ingreso del cliente a Transfer Family; para SFTP permite TCP 22 desde los rangos de clientes que correspondan. No agregues una regla NFS a ese grupo para el uso de EFS. La guía de endpoints explica el acceso interno y el acceso por Internet.

3. Crea un rol de IAM para el usuario

Crea un rol de IAM para Transfer Family, con transfer.amazonaws.com como entidad de confianza, y adjunta una política limitada al sistema de archivos que utilizará este usuario. Para reducir el alcance del rol, limita la relación de confianza a tu cuenta y, cuando sea posible, al servidor específico. El siguiente ejemplo de confianza es para la cuenta y el servidor de muestra:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "Service": "transfer.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "aws:SourceAccount": "ACCOUNT_ID"
      },
      "ArnLike": {
        "aws:SourceArn":
          "arn:aws:transfer:REGION:ACCOUNT_ID:user/SERVER_ID/*"
      }
    }
  }]
}

En esta relación de confianza, reemplaza REGION, ACCOUNT_ID y SERVER_ID por los valores del servidor que usarás. ACCOUNT_ID debe ser la misma cuenta en aws:SourceAccount, el ARN del servidor y el ARN del rol de usuario; REGION y SERVER_ID también deben corresponder a ese servidor. La condición limita qué servidor puede asumir el rol.

Adjunta una política de identidad como esta. Sustituye el ID de cuenta, la región y el ID de EFS por los tuyos:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "elasticfilesystem:ClientMount",
      "elasticfilesystem:ClientWrite"
    ],
    "Resource":
      "arn:aws:elasticfilesystem:REGION:ACCOUNT_ID:file-system/FS_ID"
  }]
}

ClientMount habilita el acceso al sistema de archivos y ClientWrite habilita las escrituras. No agregues ClientRootAccess a un rol de usuario normal. En una configuración entre cuentas, el rol también necesita el permiso correspondiente en la política del sistema de archivos EFS. AWS documenta los roles y permisos de Transfer Family.

El rol del usuario no es el rol de logging del servidor. El primero autoriza el acceso a EFS. La consola habilita registros estructurados JSON en CloudWatch al crear servidores; si configuras un rol de logging —por ejemplo, para registrar eventos de workflows—, ese rol tiene el propósito separado de escribir registros. Consulta cómo funciona el logging de Transfer Family.

4. Crea el usuario y mapea su carpeta

Genera un par de claves SSH en la computadora del usuario:

ssh-keygen -t ed25519 -f ./acme-transfer -C acme-ingreso

Guarda acme-transfer como clave privada. Solo subirás acme-transfer.pub, la clave pública. Protege la clave privada y no la copies a AWS.

El modo lógico presenta la carpeta física como / al usuario y lo limita a ese directorio. El valor de Target debe incluir el ID de EFS y la ruta física. En este ejemplo, el usuario POSIX 1001:1001 corresponde al propietario de la carpeta que preparaste:

aws transfer create-user \
  --server-id s-0123456789abcdef0 \
  --user-name acme-ingreso \
  --role arn:aws:iam::123456789012:role/TransferEfsUser \
  --home-directory-type LOGICAL \
  --home-directory / \
  --home-directory-mappings \
    '[{"Entry":"/","Target":"/fs-0123456789abcdef0/transferFam/acme"}]' \
  --posix-profile '{"Uid":1001,"Gid":1001}' \
  --ssh-public-key-body file://./acme-transfer.pub \
  --region us-east-1

Reemplaza el ID del servidor, el rol, el ID de EFS y la región por los valores reales. La carpeta de Target debe existir antes de que el usuario inicie sesión. Para usuarios de un proveedor de identidad personalizado, configura ese proveedor para devolver el rol, la ruta de inicio y un PosixProfile de EFS; create-user sirve para servidores con proveedor de identidad administrado por Transfer Family.

También puedes definir el inicio como una ruta física con HomeDirectoryType=PATH. En ambos casos la ruta EFS comienza con /fs-ID/. Con LOGICAL, HomeDirectory debe corresponder a un valor Entry, por ejemplo /; no debe contener el Target. Lee las reglas de directorios lógicos antes de publicar varias carpetas virtuales.

Para agregar una segunda clave a un usuario administrado existente, usa el comando oficial import-ssh-public-key:

aws transfer import-ssh-public-key \
  --server-id s-0123456789abcdef0 \
  --user-name acme-ingreso \
  --ssh-public-key-body file://./acme-transfer-next.pub \
  --region us-east-1

Transfer Family acepta claves RSA, ECDSA y ED25519 en formato de clave pública SSH. Si usas un proveedor de identidad distinto del administrado por Transfer Family, administra las claves en ese proveedor. Referencias: create-user e import-ssh-public-key.

5. Prueba una transferencia

En el equipo cliente, crea un archivo pequeño en el directorio desde el que abrirás la conexión; por ejemplo: printf 'prueba SFTP EFS\n' > prueba.txt.

Obtén el hostname en los detalles del servidor. Desde una computadora con acceso a ese endpoint, conéctate con la clave privada:

sftp -i ./acme-transfer \
  acme-ingreso@s-0123456789abcdef0.server.transfer.us-east-1.amazonaws.com

En el prompt de SFTP, comprueba el directorio, carga el archivo y descárgalo con un nombre local distinto:

sftp> pwd
sftp> put ./prueba.txt
sftp> ls
sftp> get prueba.txt prueba-descargada.txt
sftp> exit

La sesión debe mostrar la ruta lógica / y el archivo que cargaste. Después de salir de SFTP, compara los dos archivos locales con cmp ./prueba.txt ./prueba-descargada.txt (o una herramienta equivalente en tu sistema). Como cada nombre es distinto, conservas el original para verificar el contenido. Este flujo prueba autenticación, alcance de red, rol IAM, ruta y permisos POSIX juntos.

Errores habituales

La guía de resolución de problemas de EFS en Transfer Family documenta estos errores y sus causas.

Rendimiento y costos

Transfer Family es un servicio administrado: no hay una instancia de servidor cuya CPU o memoria tengas que dimensionar. Si una transferencia es lenta, revisa la red entre cliente y endpoint, el cliente y los archivos, los registros del servidor y el modo de rendimiento/throughput de EFS. El acceso mediante Transfer Family cuenta como uso de EFS y también consume sus créditos de ráfaga cuando corresponde; consulta los modos de rendimiento y métricas de EFS.

El costo puede incluir protocolos habilitados en el endpoint, volumen de datos transferidos, almacenamiento y operaciones de EFS, además de registros y otros servicios que hayas añadido. Los importes dependen de la región y del uso; usa la página de precios de Transfer Family y la calculadora vinculada allí para estimar tu caso.

Detener un servidor para dejarlo fuera de línea no detiene los cargos del servicio. Para dejar de acumular cargos por los protocolos del endpoint, elimina el servidor:

aws transfer delete-server \
  --server-id s-0123456789abcdef0 \
  --region us-east-1

Eliminar el servidor elimina sus usuarios, pero el sistema EFS y sus archivos son recursos separados. Si ya no necesitas el EFS de prueba, revisa primero si otros recursos dependen de él y conserva los datos que quieras mantener. AWS explica la eliminación de servidores y aclara que el servidor detenido sigue facturándose en la guía para editar sus detalles.

Recursos y comunidad en español

Estas grabaciones y comunidades ayudan a seguir aprendiendo sobre transferencia de archivos y almacenamiento compartido:

Para conversar sobre redes y conectividad de AWS, consulta el AWS User Group Networking Colombia. También puedes buscar un grupo cercano en el directorio de comunidades AWS en Latinoamérica.

En la agenda publicada al revisar esta guía aparecen dos encuentros útiles: el AWS Community Day Paraguay, gratuito y presencial el 17 de octubre de 2026 en San Lorenzo, organizado por el AWS User Group Paraguay, con charlas y laboratorios; y Amazon VPC Essentials: Fundamentos de Networking, virtual el 21 de octubre de 2026, de 18:00 a 20:00 GMT-5, presentado por un AWS Student Builder Group de Bogotá. Confirma cupos, horario y modalidad con cada organizador; puedes revisar más fechas en la agenda de eventos AWS.

Para revisar el principio de mínimo privilegio, reglas de red y evidencias de seguridad antes de abrir el endpoint a usuarios externos, consulta el checklist de seguridad en AWS.

Preguntas frecuentes

¿EFS y Transfer Family tienen que estar en la misma cuenta?

No. Sí tienen que estar en la misma región. Para acceder a un sistema de archivos de otra cuenta, concede acceso al rol de Transfer Family en la política de EFS y evita una política de sistema de archivos pública.

¿El rol IAM y el UID/GID son la misma autorización?

No. IAM permite a Transfer Family usar el sistema de archivos; EFS aplica los UID/GID y los permisos POSIX de cada directorio y archivo para decidir si la operación del usuario puede continuar.

¿El cliente SFTP necesita conectarse a un mount target de EFS?

No. El cliente se conecta al endpoint de Transfer Family. La conexión administrada entre Transfer Family y EFS permanece en la red interna de AWS. Un mount target y una regla NFS TCP 2049 se necesitan para una instancia que monte EFS directamente, por ejemplo para preparar carpetas.

¿Puedo usar un EFS Access Point para cada usuario?

No para esta integración. Configura la identidad POSIX mediante PosixProfile de Transfer Family y protege cada carpeta con sus propietarios y permisos POSIX.

¿Qué ocurre con los archivos si elimino el servidor?

Eliminar el servidor elimina los usuarios de Transfer Family, no el sistema de archivos EFS. Los archivos permanecen en EFS y debes administrarlos por separado.