Configuración de un método de Amazon API Gateway como proveedor de identidad personalizado - 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.

Configuración de un método de Amazon API Gateway como proveedor de identidad personalizado

En este tutorial se muestra cómo configurar un método de Amazon API Gateway y utilizarlo como proveedor de identidad personalizado para cargar archivos en un AWS Transfer Family servidor. En este tutorial solo se utiliza la plantilla de pila básica y otras funciones básicas como ejemplo.

Requisitos previos

Antes de crear los recursos de Transfer Family en CloudFormation, cree su almacenamiento y su rol de usuario.

Cómo especificar el almacenamiento y crear un rol de usuario
  1. Según el almacenamiento que utilice, consulte la siguiente documentación:

  2. Para crear un rol de usuario, consulte Creación de una política y un rol de IAM

Introduzca los detalles de su almacenamiento y su rol de usuario al crear su pila CloudFormation en la siguiente sección.

Paso 1: Crear una CloudFormation pila

Para crear una AWS CloudFormation pila a partir de la plantilla proporcionada
  1. Abre la CloudFormation consola en https://console.aws.amazon.com/cloudformation.

  2. Seleccione Crear pila y seleccione Con recursos nuevos (estándar).

  3. En el panel Requisitos previos: preparar plantilla, elija Elegir una plantilla existente.

  4. Copie este enlace, plantilla de pila básica, y péguelo en el campo URL de Amazon S3.

  5. Haga clic en Next (Siguiente).

  6. Especifique los parámetros, incluido un nombre para la pila. Asegúrese de hacer lo siguiente:

    • Sustituya los valores predeterminados por UserNamey UserPassword.

    • Para UserHomeDirectoryello, introduzca los detalles del almacenamiento (ya sea un bucket de Amazon S3 o un sistema de archivos Amazon EFS) que creó anteriormente.

    • Sustituya la función UserRoleArnde usuario predeterminada por la que creó anteriormente. El rol AWS Identity and Access Management (IAM) debe tener los permisos adecuados. Para ver una política de bucket y de rol de IAM de ejemplo, consulte Paso 6: limitación del acceso al bucket.

    • Si desea autenticarse con una clave pública en lugar de una contraseña, introduzca la clave pública en el campo UserPublicKey1. La primera vez que se conecta al servidor mediante SFTP, proporciona la clave privada en lugar de una contraseña.

  7. Seleccione Siguiente y, a continuación, vuelva a seleccionar Siguiente en la página Configurar opciones de pila.

  8. Revise los detalles de la pila que esté creando y, a continuación, seleccione Crear pila.

    nota

    En la parte inferior de la página, en Capacidades, debe reconocer que CloudFormation podría crear recursos de IAM.

Paso 2: verificación de la configuración del método API Gateway para su servidor

nota

Para mejorar la seguridad, puede configurar un firewall de aplicaciones web. AWS WAF es un firewall de aplicaciones web que permite monitorizar las solicitudes HTTP y HTTPS que se reenvían a una Amazon API Gateway. Para obtener más información, consulte Agregue un cortafuegos de aplicaciones web.

No habilite el almacenamiento en caché de API Gateway

No habilites el almacenamiento en caché para tu método API Gateway cuando lo utilices como proveedor de identidad personalizado para Transfer Family. El almacenamiento en caché es inapropiado e inválido para las solicitudes de autenticación porque:

  • Cada solicitud de autenticación es única y requiere una respuesta en tiempo real, no una respuesta en caché

  • El almacenamiento en caché no ofrece ningún beneficio, ya que Transfer Family nunca envía solicitudes duplicadas o repetidas a la API Gateway.

  • Al habilitar el almacenamiento en caché, la API Gateway responderá con datos no coincidentes, lo que provocará que las respuestas a las solicitudes de autenticación no sean válidas

Comprobación de la configuración del método API Gateway para su servidor e implementación
  1. Abra la consola de API Gateway en https://console.aws.amazon.com/apigateway/.

  2. Elija la API de plantilla básica Transfer Custom Identity Provider que generó la CloudFormation plantilla.

  3. En el panel Recursos, seleccione GET y, a continuación, Solicitud de método.

  4. Para Acciones, elija Implementar API. Para la Etapa de implementación, elija prod y, a continuación, elija Implementar.

    Una vez que el método API Gateway se haya implementado correctamente, consulte su rendimiento en la sección Stage Editor.

    nota

    Copie la dirección URL de invocación que aparece en la parte superior de la página. Lo necesitará para el siguiente paso.

Paso 3: visualización de los detalles del servidor de Transfer Family

Al utilizar la plantilla para crear una CloudFormation pila, se crea automáticamente un servidor Transfer Family.

Visualización de los detalles del servidor de Transfer Family
  1. Abre la CloudFormation consola en https://console.aws.amazon.com/cloudformation.

  2. Elija la pila que ha creado.

  3. Elija la pestaña Recursos.

    Pantalla que muestra la lista de recursos creados durante la creación de la CloudFormation pila, con los detalles del servidor Transfer Family resaltados.

    El ARN del servidor se muestra en la columna ID física de la TransferServerfila. El ID del servidor está contenido en el ARN, por ejemplo, s-11112222333344445.

  4. Abra la AWS Transfer Family consola en y https://console.aws.amazon.com/transfer/, en la página Servidores, elija el nuevo servidor.

    El ID del servidor coincide con el ID que se muestra para el TransferServerrecurso en CloudFormation.

Paso 4: comprobación de que el usuario puede conectarse al servidor

Comprobación de que el usuario puede conectarse al servidor, mediante la consola Transfer Family
  1. Abra la AWS Transfer Family consola en https://console.aws.amazon.com/transfer/.

  2. En la página Servidores, elija su nuevo servidor, elija Acciones y, a continuación, elija Probar.

  3. Introduzca el texto de sus credenciales de inicio de sesión en el campo Nombre de usuario y en el campo Contraseña. Estos son los valores que estableció al implementar la CloudFormation pila.

  4. Para Protocolo de servidor, seleccione SFTP y, para IP de origen, introduzca127.0.0.1.

  5. Seleccione Probar

    Si la autenticación del usuario se realiza correctamente, la prueba devuelve una respuesta StatusCode: 200 HTML y un objeto JSON que contiene los detalles de los roles y los permisos del usuario. Por ejemplo:

    { "Response": "{\"Role\": \"arn:aws:iam::123456789012:role/my-user-role\",\"HomeDirectory\": \"/${transfer:HomeBucket}/\"}", "StatusCode": 200, "Message": "", "Url": "https://1a2b3c4d5e.execute-api.us-east-2.amazonaws.com/prod/servers/s-1234abcd5678efgh0/users/myuser/config" }

    Si la prueba falla, agrega una de las políticas AWS administradas por API Gateway al rol que estás usando para tu API.

Paso 5: prueba de la conexión SFTP y la transferencia de archivos

Prueba de la conexión SFTP
  1. En Linux o macOS, abra un terminal de comandos.

  2. Ingrese uno de los siguientes comandos en función de si utiliza una contraseña o un par de claves para la autenticación.

    • Si utiliza una contraseña, introduzca este comando:

      sftp -o PubkeyAuthentication=no myuser@server-ID.server.transfer.region-code.amazonaws.com

      Escriba la contraseña cuando se le solicite.

    • Si utiliza un par de claves, introduzca este comando:

      sftp -i private-key-file myuser@server-ID.server.transfer.region-code.amazonaws.com

    nota

    Para estos comandos sftp, inserte el código de la Región de AWS donde está ubicado su servidor de Transfer Family. Por ejemplo, si su servidor está en el este de EE. UU. (Ohio), introduzcaus-east-2.

  3. Cuando aparezca sftp>, asegúrese de que puede cargar (put), descargar (get) y ver directorios y archivos (pwd y ls).

Paso 6: limitación del acceso al bucket

Puede limitar quién accede a un bucket específico de Amazon S3. En el siguiente ejemplo, se muestran los ajustes que se deben utilizar en la CloudFormation pila y en la política que se seleccione para el usuario.

En este ejemplo, configuramos los siguientes parámetros para la CloudFormation pila:

  • CreateServer: true

  • UserHomeDirectory: /amzn-s3-demo-bucket1

  • UserName: myuser

  • UserPassword: MySuperSecretPassword

    importante

    Este es un ejemplo de contraseña. Al configurar el método API Gateway, asegúrese de introducir una contraseña segura.

  • UserPublicKey1: your-public-key

  • UserRoleArn: arn:aws:iam::role-id:role/myuser-api-gateway-role

El UserPublicKey1 es una clave pública que ha generado como parte de un public/private key pair.

role-id es exclusivo del rol de usuario que cree. La política asociada a myuser-api-gateway-role es la siguiente:

{ "Version":"2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObjectAcl", "s3:GetObject", "s3:DeleteObjectVersion", "s3:DeleteObject", "s3:PutObjectAcl", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }

Para conectarse al servidor mediante SFTP, ingrese uno de los comandos siguientes en la ventana.

  • Si utiliza una contraseña para autenticarse, ejecute el siguiente comando:

    sftp -o PubkeyAuthentication=no myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

    Escriba la contraseña cuando se le solicite.

  • Si utiliza un par de claves para autenticarse, ejecute el siguiente comando:

    sftp -i private-key-file myuser@transfer-server-ID.server.transfer.region-id.amazonaws.com

nota

Para estos sftp comandos, utilice el ID de Región de AWS la ubicación del servidor Transfer Family. Por ejemplo, si su servidor está en el este de EE. UU. (Ohio), utilice us-east-2.

Cuando sftp aparezca la línea de comandos, accederá a su directorio de inicio, que podrá ver ejecutando el comando pwd. Por ejemplo:

sftp> pwd Remote working directory: /amzn-s3-demo-bucket1

El usuario no puede ver ningún directorio situado por encima del directorio de inicio. Por ejemplo:

sftp> pwd Remote working directory: /amzn-s3-demo-bucket1 sftp> cd .. sftp> ls Couldn't read directory: Permission denied

Actualice Lambda si utiliza Amazon EFS

Si seleccionó Amazon EFS como la opción de almacenamiento para su servidor de Transfer Family, tendrá que editar la función de lambda de su pila.

Para añadir un perfil Posix a la función Lambda
  1. Abra la consola Lambda en. https://console.aws.amazon.com/lambda/

  2. Elija la función de Lambda que ha creado. La función Lambda tiene el formato stack-name- GetUserConfigLambda - lambda-identifier, donde stack-name es el nombre de la CloudFormation pila y lambda-identifier es el identificador de la función.

  3. En la pestaña Código, seleccione index.js para ver el código de la función.

  4. En response, añada la siguiente línea entre Policy y HomeDirectory:

    PosixProfile: {"Uid": uid-value, "Gid": gid-value},

    Donde uid-value y gid-value son números enteros, 0 o mayores, que representan el ID de usuario y el ID de grupo, respectivamente.

    Por ejemplo, después de agregar el perfil Posix, el campo de respuesta podría tener el siguiente aspecto:

    response = { Role: 'arn:aws:iam::123456789012:role/api-gateway-transfer-efs-role', // The user will be authenticated if and only if the Role field is not blank Policy: '', // Optional JSON blob to further restrict this user's permissions PosixProfile: {"Gid": 65534, "Uid": 65534}, HomeDirectory: '/fs-fab2c234' // Not required, defaults to '/' };