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 Amazon API Gateway para integrar su proveedor de identidad
En este tema se describe cómo utilizar una AWS Lambda función para respaldar un método API Gateway. Use esta opción si necesita integrar su proveedor de identidad o si desea utilizarla para aprovechar sus capacidades AWS WAF para el bloqueo geográfico o las solicitudes de limitación de velocidad. RESTful API
Limitaciones si utilizas una API pasarela para integrar tu proveedor de identidad
-
Esta configuración no admite dominios personalizados.
-
Esta configuración no admite una API puerta de enlace privadaURL.
Si necesita alguna de estas opciones, puede usar Lambda como proveedor de identidades, sin API Gateway. Para obtener más información, consulte Se utiliza AWS Lambda para integrar su proveedor de identidad.
Autenticación mediante un método Gateway API
Puedes crear un método API Gateway para usarlo como proveedor de identidad para Transfer Family. Este enfoque proporciona una forma muy segura de crear y proporcionarAPIs. Con API Gateway, puede crear un HTTPS punto final para que todas las API llamadas entrantes se transmitan con mayor seguridad. Para obtener más información sobre el servicio API Gateway, consulte la Guía para desarrolladores de API Gateway.
APIGateway ofrece un método de autorización denominadoAWS_IAM
, que proporciona la misma autenticación basada en AWS Identity and Access Management (IAM) que la que se AWS utiliza internamente. Si habilitas la autenticación conAWS_IAM
, solo las personas que llamen con permisos explícitos para llamar a an API podrán acceder a ese API método API Gateway.
Para usar tu método API Gateway como proveedor de identidad personalizado para Transfer Family, habilita IAM tu método API Gateway. Como parte de este proceso, usted proporciona un IAM rol con permisos para que Transfer Family use su puerta de enlace.
nota
Para mejorar la seguridad, puedes configurar un firewall de aplicaciones web. AWS WAF es un firewall de aplicaciones web que le permite supervisar las HTTPS solicitudes HTTP y las solicitudes que se reenvían a Amazon API Gateway. Para obtener más información, consulte Agregue un cortafuegos de aplicaciones web.
Para usar tu método API Gateway para la autenticación personalizada con Transfer Family
-
Crea una AWS CloudFormation pila. Para ello:
nota
Las plantillas de la pila se han actualizado para utilizar contraseñas BASE64 codificadas: para obtener más información, consulteMejoras en las plantillas AWS CloudFormation.
-
Abre la AWS CloudFormation consola en https://console.aws.amazon.com/cloudformation.
-
Siga las instrucciones para implementar una AWS CloudFormation pila a partir de una plantilla existente en Seleccionar una plantilla de pila en la Guía del AWS CloudFormation usuario.
-
Usa una de las siguientes plantillas básicas para crear un método API Gateway AWS Lambda con respaldo para usarlo como proveedor de identidad personalizado en Transfer Family.
-
De forma predeterminada, el método API Gateway se utiliza como proveedor de identidad personalizado para autenticar a un único usuario en un único servidor mediante una clave o contraseña codificada SSH (Secure Shell). Tras la implementación, puede modificar el código de la función de Lambda para hacer algo diferente.
-
AWS Secrets Manager plantilla de pila
De forma predeterminada, el método API Gateway se autentica con una entrada de este formato
aws/transfer/
en Secrets Manager. Además, el secreto debe contener los pares clave-valor de todas las propiedades de usuario devueltas a Transfer Family. Tras la implementación, puede modificar el código de la función de Lambda para hacer algo diferente. Para obtener más información, consulte la entrada del blog Habilitar la autenticación por contraseña para su AWS Transfer Family uso AWS Secrets Managerserver-id
/username
. -
Tu método API Gateway se integra con Okta como proveedor de identidad personalizado en Transfer Family. Para obtener más información, consulte la publicación de blog sobre el Uso de Okta como proveedor de identidad con AWS Transfer Family
.
-
Implementar una de estas pilas es la forma más sencilla de integrar un proveedor de identidades personalizado en el flujo de trabajo de Transfer Family. Cada pila utiliza la función Lambda para respaldar su API método basado en API Gateway. A continuación, puedes usar tu API método como proveedor de identidad personalizado en Transfer Family. De forma predeterminada, la función de Lambda autentica a un único usuario llamado
myuser
con una contraseña deMySuperSecretPassword
. Tras la implementación, puede editar estas credenciales o actualizar el código de la función de Lambda para hacer algo diferente.importante
Le recomendamos que edite las credenciales de usuario y contraseña predeterminadas.
Una vez desplegada la pila, puede ver sus detalles en la pestaña Salidas de la CloudFormation consola. Estos detalles incluyen el nombre de recurso de Amazon ARN de la pila (ARN), la IAM función que creó la pila y la URL de tu nueva puerta de enlace.
nota
Si utilizas la opción de proveedor de identidad personalizado para habilitar la autenticación basada en contraseñas para tus usuarios y habilitas el registro de solicitudes y respuestas que proporciona API Gateway, API Gateway registrará las contraseñas de tus usuarios en tus Amazon Logs. CloudWatch No recomendamos utilizar este modo de inicio en entornos de producción. Para obtener más información, consulte Configurar el CloudWatch API registro en API Gateway en la Guía para desarrolladores de APIGateway.
-
-
Compruebe la configuración del método API Gateway para su servidor. Para ello:
-
Abra la consola API Gateway en https://console.aws.amazon.com/apigateway/
. -
Elija la plantilla básica de Transfer Custom Identity Provider API que generó la AWS CloudFormation plantilla. Puede que tengas que seleccionar tu región para ver las pasarelas.
-
En el panel Recursos, elija GET. La siguiente captura de pantalla muestra la configuración correcta del método.
En este punto, la API puerta de enlace está lista para su implementación.
-
-
En 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, consulta su rendimiento en Etapas > Detalles de la etapa, como se muestra en la siguiente captura de pantalla.
nota
Copia la URL dirección de invocación que aparece en la parte superior de la pantalla. Puede que la necesites para el siguiente paso.
-
Abre la AWS Transfer Family consola en. https://console.aws.amazon.com/transfer/
-
Se debería haber creado una Transfer Family para ti cuando creaste la pila. Si no es así, configure el servidor siguiendo estos pasos.
Seleccione Crear servidor para abrir la página Crear servidor. En Elige un proveedor de identidad, selecciona Personalizado y, a continuación, selecciona Usar Amazon API Gateway para conectarte con tu proveedor de identidad, como se muestra en la siguiente captura de pantalla.
-
En el cuadro de URL texto Provide an Amazon API Gateway, pegue la URL dirección de invocación del punto de enlace de API Gateway que creó en el paso 3 de este procedimiento.
-
En Función, elija la IAM función que creó la AWS CloudFormation plantilla. Esta función permite a Transfer Family invocar su método de API puerta de enlace.
La función de invocación contiene el nombre de la AWS CloudFormation pila que seleccionó para la pila que creó en el paso 1. Tiene el formato siguiente:
.CloudFormation-stack-name
-TransferIdentityProviderRole-ABC123DEF456GHI
-
Rellene las casillas restantes y, a continuación, seleccione Crear servidor. Para obtener más información sobre los pasos restantes para crear un servidor, consulte Configurar un punto SFTP finalFTPS, o un FTP servidor.
Implementar tu método API Gateway
Para crear un proveedor de identidad personalizado para Transfer Family, el método API Gateway debe implementar un único método que tenga una ruta de recursos de/servers/
. Los serverId
/users/username
/config
valores username
y provienen de la ruta del RESTful recurso. Además, añada serverId
sourceIp
y protocol
como parámetros de cadena de URL consulta en la solicitud de método, como se muestra en la imagen siguiente.
nota
El nombre de usuario debe tener un mínimo de 3 y un máximo de 100 caracteres. El nombre de usuario puede contener los siguientes caracteres: a-z, A-Z, 0-9, guion bajo (_) y guion (-), punto (.), y el signo de arroba (@). Sin embargo, el nombre de usuario no puede comenzar por un guion (-), un punto (.), ni una arroba (@).
Si Transfer Family intenta autenticar una contraseña en nombre de un usuario, el servicio proporciona un campo de encabezado Password:
. En ausencia de un encabezado de Password:
, Transfer Family intenta la autenticación con clave pública para autenticar al usuario.
Si utiliza un proveedor de identidad para autenticar y autorizar a los usuarios finales, además de validar sus credenciales, puede permitir o denegar las solicitudes de acceso en función de las direcciones IP de los clientes utilizados por los usuarios finales. Puede usar esta función para asegurarse de que solo se pueda acceder a los datos almacenados en sus buckets de S3 o en su sistema de EFS archivos de Amazon a través de los protocolos compatibles desde las direcciones IP que haya especificado como confiables. Para habilitar esta característica, debe incluir sourceIp
en la cadena de consulta.
Si tiene varios protocolos habilitados para su servidor y desea proporcionar acceso con el mismo nombre de usuario a través de varios protocolos, puede hacerlo siempre que las credenciales específicas de cada protocolo estén configuradas en su proveedor de identidad. Para habilitar esta función, debe incluir el
valor en la ruta del RESTful recurso.protocol
El método API Gateway siempre debe devolver HTTP el código de estado200
. Cualquier otro código de HTTP estado significa que se ha producido un error al acceder alAPI.
Ejemplo de respuesta de Amazon S3
El cuerpo de la respuesta de ejemplo es un JSON documento del siguiente formulario para Amazon S3.
{ "Role": "IAM role with configured S3 permissions", "PublicKeys": [ "ssh-rsa
public-key1
", "ssh-rsapublic-key2
" ], "Policy": "STS Assume role session policy", "HomeDirectory": "/bucketName
/path
/to
/home
/directory
" }
nota
La política se escapa en JSON forma de cadena. Por ejemplo:
"Policy": "{ \"Version\": \"2012-10-17\", \"Statement\": [ {\"Condition\": {\"StringLike\": {\"s3:prefix\": [\"user/*\", \"user/\"]}}, \"Resource\": \"arn:aws:s3:::
bucket
\", \"Action\": \"s3:ListBucket\", \"Effect\": \"Allow\", \"Sid\": \"ListHomeDir\"}, {\"Resource\": \"arn:aws:s3:::*\", \"Action\": [\"s3:PutObject\", \"s3:GetObject\", \"s3:DeleteObjectVersion\", \"s3:DeleteObject\", \"s3:GetObjectVersion\", \"s3:GetObjectACL\", \"s3:PutObjectACL\"], \"Effect\": \"Allow\", \"Sid\": \"HomeDirObjectAccess\"}] }"
El siguiente ejemplo de respuesta muestra que un usuario tiene un tipo de directorio de inicio lógico.
{ "Role": "arn:aws:iam::
123456789012
:role/transfer-access-role-s3
", "HomeDirectoryType":"LOGICAL", "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/MY-HOME-BUCKET
\"}]", "PublicKeys":[""] }
EFSEjemplo de respuesta de Amazon
El cuerpo de la respuesta de ejemplo es un JSON documento del siguiente formulario para AmazonEFS.
{ "Role": "
IAM role with configured EFS permissions
", "PublicKeys": [ "ssh-rsapublic-key1
", "ssh-rsapublic-key2
" ], "PosixProfile": { "Uid": "POSIX user ID
", "Gid": "POSIX group ID
", "SecondaryGids": [Optional list of secondary Group IDs
], }, "HomeDirectory": "/fs-id
/path
/to
/home
/directory
" }
El campo Role
indica que la autenticación ha tenido éxito. Al realizar la autenticación con contraseña (cuando se proporciona un Password:
encabezado), no es necesario que proporcione claves SSH públicas. Si un usuario no se puede autenticar, por ejemplo, si la contraseña es incorrecta, su método debería devolver una respuesta de Role
sin configurar. Un ejemplo de esta respuesta es un JSON objeto vacío.
El siguiente ejemplo de respuesta muestra un usuario que tiene un tipo de directorio de inicio lógico.
{ "Role": "arn:aws:iam::
123456789012
:role/transfer-access-role-efs
", "HomeDirectoryType": "LOGICAL", "HomeDirectoryDetails":"[{\"Entry\":\"/\",\"Target\":\"/faa1a123
\"}]", "PublicKeys":[""], "PosixProfile":{"Uid":65534
,"Gid":65534
} }
Puede incluir políticas de usuario en la función Lambda en JSON formato. Para obtener más información acerca de la configuración de usuario en Transfer Family, consulte Administrar los controles de acceso.
Función de Lambda por defecto
Para implementar diferentes estrategias de autenticación, edite la función de Lambda que utiliza su puerta de enlace. Para ayudarle a satisfacer las necesidades de su aplicación, puede utilizar las siguientes funciones de Lambda de ejemplo en Node.js. Para obtener más información acerca de Lambda, consulte la Guía para desarrolladores de AWS Lambda o Crear funciones de Lambda con Node.js.
El siguiente ejemplo de función de Lambda toma el nombre de usuario, la contraseña (si está realizando la autenticación con contraseña), el identificador del servidor, el protocolo y la dirección IP del cliente. Puede usar una combinación de estas entradas para buscar su proveedor de identidad y determinar si se debe aceptar el inicio de sesión.
nota
Si tiene varios protocolos habilitados para su servidor y desea proporcionar acceso con el mismo nombre de usuario a través de varios protocolos, puede hacerlo siempre que las credenciales específicas del protocolo se hayan configurado en su proveedor de identidad.
Para el Protocolo de transferencia de archivos (FTP), se recomienda mantener credenciales independientes del Protocolo de transferencia de archivos (SSH) de Secure Shell (SFTP) y del Protocolo de transferencia de archivos over SSL (FTPS). Recomendamos mantener las credenciales separadas FTP porque, a diferencia de SFTP yFTPS, las FTP transmite en texto claro. Al aislar FTP las credenciales SFTP oFTPS, si FTP las credenciales están compartidas o expuestas, sus cargas de trabajo se utilizan SFTP o FTPS permanecen seguras.
Este rol de ejemplo devuelve el rol y los detalles del directorio de inicio lógico, junto con las claves públicas (si realiza la autenticación de clave pública).
Al crear usuarios administrados por el servicio, se establece su directorio de inicio, ya sea lógico o físico. Del mismo modo, necesitamos que los resultados de la función de Lambda transmitan la estructura de directorios física o lógica deseada por el usuario. Los parámetros que establezca dependerán del valor de HomeDirectoryTypecampo.
-
HomeDirectoryType
establecido enPATH
: elHomeDirectory
campo debe ser un prefijo absoluto de bucket de Amazon S3 o una ruta EFS absoluta de Amazon visible para los usuarios. -
HomeDirectoryType
establecido comoLOGICAL
: no defina un campoHomeDirectory
. En su lugar, configuramos unHomeDirectoryDetails
campo que proporciona las asignaciones de entrada/destino deseadas, similares a los valores descritos en HomeDirectoryDetailsparámetro para usuarios gestionados por el servicio.
Las funciones de ejemplo se muestran en Ejemplo de función de Lambda.
Función Lambda para usar con AWS Secrets Manager
Para AWS Secrets Manager utilizarla como proveedor de identidad, puede trabajar con la función Lambda de la plantilla de ejemplo AWS CloudFormation . La función de Lambda consulta el servicio Secrets Manager con sus credenciales y, si se ejecuta correctamente, devuelve un secreto designado. Para obtener más información acerca de Secrets Manager, consulte la Guía del usuario de AWS Secrets Manager.
Para descargar una AWS CloudFormation plantilla de ejemplo que utilice esta función Lambda, vaya al bucket de Amazon S3 proporcionado por
Mejoras en las plantillas AWS CloudFormation
Se han realizado mejoras en la interfaz de API Gateway en las CloudFormation plantillas publicadas. Las plantillas ahora utilizan contraseñas BASE64 codificadas con el API Gateway. Sus despliegues actuales siguen funcionando sin esta mejora, pero no permiten contraseñas con caracteres distintos del conjunto básico de ASCII caracteres estadounidenses.
Los cambios en la plantilla que permiten esta capacidad son los siguientes:
-
El
GetUserConfigRequest AWS::ApiGateway::Method
recurso debe tener esteRequestTemplates
código (la línea en cursiva es la línea actualizada)RequestTemplates: application/json: | { "username": "$util.urlDecode($input.params('username'))", "password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")", "protocol": "$input.params('protocol')", "serverId": "$input.params('serverId')", "sourceIp": "$input.params('sourceIp')" }
-
El
RequestParameters
campo correspondiente alGetUserConfig
recurso debe cambiar para poder utilizar elPasswordBase64
encabezado (la línea en cursiva es la línea actualizada):RequestParameters: method.request.header.PasswordBase64: false method.request.querystring.protocol: false method.request.querystring.sourceIp: false
Para comprobar si la plantilla de tu pila es la más reciente
Abre la AWS CloudFormation consola en https://console.aws.amazon.com/cloudformation.
De la lista de pilas, elige la tuya.
En el panel de detalles, selecciona la pestaña Plantilla.
-
Busque lo siguiente:
Busca
RequestTemplates
y asegúrate de tener esta línea:"password": "$util.escapeJavaScript($util.base64Decode($input.params('PasswordBase64'))).replaceAll("\\'","'")",
Busca
RequestParameters
y asegúrate de tener esta línea:method.request.header.PasswordBase64: false
Si no ves las líneas actualizadas, edita tu pila. Para obtener más información sobre cómo actualizar la AWS CloudFormation pila, consulta Modificación de una plantilla de pila en la AWS CloudFormation Guía del usuario.