¿Cómo puedo usar una API respaldada por Lambda como proveedor de identidad personalizado para mi servidor de Transfer Family sin usar CloudFormation?

9 minutos de lectura
0

Quiero utilizar una API de Amazon API Gateway respaldada por AWS Lambda como proveedor de identidad personalizado para mi servidor de AWS Transfer Family. Sin embargo, no quiero usar una de las plantillas de pila de AWS CloudFormation para mi configuración. O bien, quiero personalizar mi configuración. ¿Cómo puedo configurar un proveedor de identidades personalizado de esta manera?

Breve descripción

Puede optar por configurar manualmente una API de API Gateway respaldada por Lambda como proveedor de identidad personalizado para su servidor de Transfer Family, en lugar de utilizar una de las plantillas de pila de CloudFormation. Para ello, puede configurar directamente una función de Lambda y una API de API Gateway con su servidor.

Por ejemplo, para configurar la misma configuración que la plantilla de pila básica, siga estos pasos:

1.    Cree un rol de AWS Identity and Access Management (IAM) para el rol de ejecución de Lambda.

2.    Cree la función de Lambda.

3.    (Opcional) Cree un rol de IAM para el rol de registro de API Gateway.

4.    Configure una API de API Gateway como proveedor de identidad.

5.    Cree roles de IAM para el servidor de Transfer Family y los usuarios del servidor.

6.    Cree el servidor de Transfer Family.

7.    Configure su almacén de credenciales.

Resolución

Importante: Esta configuración es un ejemplo de cómo configurar su proveedor de identidades personalizado sin utilizar una plantilla de pila de CloudFormation. Debe modificar los pasos de configuración en función de sus necesidades específicas para el proveedor de identidades personalizado.

Cree un rol de IAM para el rol de ejecución de Lambda

1.    Utilice la consola de IAM para crear el rol de ejecución. Nota: Para esta configuración, solo necesita los permisos de ejecución básicos. Sin embargo, asegúrese de personalizar los permisos para su caso de uso.

2.    Modifique la política de confianza del rol para añadir la siguiente instrucción:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Crear la función de Lambda

Siga los pasos para crear una función de Lambda con la consola. Asegúrese de configurar lo siguiente:

1.    Para el Rol de ejecución, seleccione la función de ejecución de Lambda que ha creado.

2.    Para el Código de función, puede utilizar la función de Lambda predeterminada para la autenticación. O bien, puede utilizar una función personalizada.

(Opcional) Cree un rol de IAM para el rol de registro de API Gateway

Puede usar los Registros de Amazon CloudWatch como ayuda para depurar errores con su API de REST. Para crear un rol de registro, siga estos pasos:

1.    Cree un rol de IAM para API Gateway y adjunte la política gestionada AmazonAPIGatewayPushToCloudWatchLogs al rol.

2.    Modifique la política de confianza del rol para añadir la siguiente instrucción:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Configure una API de API Gateway como proveedor de identidad

1.    Abra la consola de API Gateway.

2.    En el panel de navegación, seleccione API.

3.    Seleccione Crear API.

4.    En Elegir un tipo de API, vaya a API de REST y, a continuación, seleccione Generar. A continuación, introduzca lo siguiente: En Elegir el protocolo, seleccione REST. En Crear nueva API, seleccione Nueva API. En Nombre de la API, introduzca un nombre de la API. En Tipo de punto de conexión, seleccione Regional.

Nota: No genere su API a partir de la opción privada de la API de REST.

5.    Seleccione Crear API.

6.    En el panel de navegación, seleccione Modelos. A continuación, seleccione Crear.

7.    En Nombre del modelo, introduzca UserConfigResponseModel.

8.    En Tipo de contenido, introduzca application/json.

9.    En Esquema del modelo, introduzca lo siguiente:

{"$schema":"http://json-schema.org/draft-04/schema#","title":"UserUserConfig","type":"object","properties":{"Role":{"type":"string"},"Policy":{"type":"string"},"HomeDirectory":{"type":"string"},"PublicKeys":{"type":"array","items":{"type":"string"}}}}

10.    Seleccione Crear modelo. 11.    En el panel de navegación, seleccione Recursos.

12.    Amplíe Acciones y, a continuación, seleccione Crear recurso.

13.    Cree un recurso para sus servidores de Transfer Family. En Nombre del recurso, introduzca Servers. En Ruta del recurso, introduzca servers.

14.    Cree un recurso para el ID del servidor. En Nombre del recurso, introduzca ServerID. En Ruta del recurso, introduzca {serverId}.

15.    Cree un recurso para los usuarios de su servidor. En Nombre del recurso, introduzca Users. En Ruta del recurso, introduzca users.

16.    Cree un recurso para los nombres de usuario. En Nombre del recurso, introduzca Username. En Ruta del recurso, introduzca {username}.

17.    Cree un recurso para las configuraciones de usuario. En Nombre del recurso, introduzca GetUserConfig. En Ruta del recurso, introduzca config.

18.    Expanda Acciones y, a continuación, seleccione Crear método.

19.    En la lista desplegable, seleccione GET. A continuación, seleccione el icono de verificación situado junto a GET para crear el método.

20.    Para GET - Setup, introduzca lo siguiente: En Tipo de integración, seleccione Función de Lambda. En Región de Lambda, seleccione la región de AWS en la que se encuentre su función de Lambda. En Función de Lambda, seleccione la función que ha creado.

21.    Seleccione Guardar.

22.    Seleccione Solicitud de método. A continuación, introduzca lo siguiente: En Autorización, seleccione AWS\ _IAM. En Encabezados de solicitudes HTTP, seleccione Agregar encabezado. A continuación, introduzca Contraseña como nombre de encabezado. En Parámetros de cadena de consulta URL, seleccione Agregar cadena de consulta. A continuación, introduzca protocolo como nombre de cadena de consulta. Vuelva a seleccionar Agregar cadena de consulta y, a continuación, introduzca sourceIp como otro nombre de cadena de consulta.

23.    En la barra de navegación del método GET, seleccione Ejecución de método para volver a la página GET: Ejecución de método.

24.    Seleccione Solicitud de integración. A continuación, expanda Plantillas de asignación.

25.    En Paso directo del cuerpo de la solicitud, seleccione Cuando ninguna plantilla coincida con el encabezado del tipo de contenido de la solicitud.

26.    En Tipo de contenido, introduzca application/json. Seleccione el icono de marca de verificación para confirmar.

27.    Para la plantilla, introduzca lo siguiente:

{ "username": "$input.params('username')", "password": "$util.escapeJavaScript($input.params('Password')).replaceAll("\\'","'")", "serverId": "$input.params('serverId')", "protocol": "$input.params('protocol')","sourceIp": "$input.params('sourceIp')" }

28.    Seleccione Guardar. 29.    En la barra de navegación del método GET, seleccione Ejecución de método para volver a la página GET: Ejecución de método.

30.    Seleccione Respuesta de integración. Confirme que no haya plantillas de asignación y que el cuerpo de la respuesta se haya pasado directamente a la respuesta del método.

31.    En la barra de navegación del método GET, seleccione Ejecución de método para volver a la página GET: Ejecución de método.

32.    Seleccione Método de respuesta. A continuación, expanda 200.

33.    En Cuerpo de respuesta para 200, edite el valor Modelos y, a continuación, seleccione el UserConfigResponseModel que ha creado entre los pasos 7 y 10. Seleccione el icono de marca de verificación para confirmar.

34.    En el panel de navegación de Recursos, seleccione GET, elija Acciones y, a continuación, seleccione Desplegar la API. Introduzca lo siguiente: En Etapa de despliegue, seleccione [Nueva etapa]. En Nombre de etapa, introduzca un nombre para la etapa.

35.    Seleccione Desplegar.

36.    En el panel de navegación, seleccione Etapas. A continuación, seleccione Crear e introduzca lo siguiente: En Nombre de etapa, introduzca prod. En Despliegue, seleccione el despliegue que ha creado como una nueva etapa.

37.    Seleccione Crear.

Cree roles de IAM para el servidor de Transfer Family y los usuarios del servidor

1.    Cree un rol de IAM para el servidor de Transfer Family que conceda permisos para invocar la API que ha creado, similar a la siguiente:

{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Action": [
              "execute-api:Invoke"
          ],
          "Resource": "arn:aws:execute-api:{Region}:{AWS-Account-ID}:{API-Gateway-id}/{stage}/GET/*",
          "Effect": "Allow"
      },
      {
          "Action": [
              "apigateway:GET"
          ],
          "Resource": "*",
          "Effect": "Allow"
      }
  ]
}

2.Modifique la política de confianza del rol para añadir la siguiente instrucción:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "transfer.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3.     Cree un rol de IAM para los usuarios del servidor Transfer Family que otorgue acceso al bucket de Amazon Simple Storage Service (Amazon S3). A continuación, modifique la política de confianza del rol para añadir la instrucción del paso 2.

4.    Cree un rol de IAM para el servidor Transfer Family que envíe registros a CloudWatch. A continuación, modifique la política de confianza del rol para añadir la instrucción del paso 2.

Crear el servidor de Transfer Family

Siga los pasos para crear un servidor de Transfer Family. Asegúrese de configurar lo siguiente:

1.    En Tipo de proveedor de identidad, seleccione Personalizado. A continuación, en Proveedor personalizado, introduzca la API que ha creado.

2.    En Rol de invocación, seleccione el rol de IAM que otorga permisos al servidor para invocar la API que ha creado.

3.    En Rol de registro, seleccione el rol de IAM para el servidor que envía los registros a CloudWatch.

Configurar su almacén de credenciales

Debe configurar su almacén de credenciales para la configuración del usuario. Para obtener más información sobre la configuración de un almacén de credenciales, consulte Función de Lambda predeterminada y Habilitar la autenticación con contraseña para AWS Transfer para SFTP mediante AWS Secrets Manager.

Como mínimo, debe configurar los siguientes campos para que los usuarios puedan realizar acciones en el bucket de Amazon S3:

  • Nombre de usuario
  • Contraseña
  • Directorio principal
  • Rol

Nota: El rol es el nombre de recurso de Amazon (ARN) del rol de IAM que ha creado para conceder a los usuarios del servidor acceso al bucket de Amazon S3.

Probar y solucionar problemas de la configuración

Puede probar la configuración de las siguientes maneras:

Si tiene problemas con la configuración, puede solucionarlos de las siguientes maneras:

  • Compruebe la respuesta del proveedor de identidades de la prueba. Si el código de estado no es 200, es posible que haya problemas con la configuración de la API.
  • Confirme que los roles de IAM que ha creado tienen los permisos y las relaciones de confianza correctos.
  • Esta configuración activa el registro, y puede revisar los registros de ejecución de Lambda, los registros de API Gateway y los registros de Transfer Family para identificar los problemas.
  • Si la configuración del proveedor de identidades personalizado que necesita coincide con una de las pilas de CloudFormation disponibles, puede intentar desplegar la plantilla de CloudFormation y compararla con su configuración para identificar problemas.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años