En la Parte 1 de esta serie, mostramos cómo resolver una URL prefirmada de Amazon SageMaker Studio desde una red corporativa utilizando los puntos finales de la VPC privada de Amazon sin atravesar Internet. En esta publicación, nos basamos en la solución anterior para demostrar cómo crear una puerta de enlace de API privada utilizando Amazon API Gateway como una interfaz de proxy para generar y acceder a direcciones URL de Amazon SageMaker prefirmadas. Además, añadimos una barrera de seguridad adicional para garantizar que las URL prefirmadas solo se generen y accedan para el usuario final autenticado dentro de la red corporativa.
descripción general de la solución
El siguiente diagrama ilustra la arquitectura de la solución.
El proceso incluye los siguientes pasos:
- Primero, configure un usuario en el grupo de usuarios de Amazon Cognito con el nombre que coincida con su perfil de usuario de Studio y registre Studio como un cliente de aplicación en el grupo de usuarios.
- El usuario se conecta a su proveedor de identidad corporativa (IdP) y se autentica en el grupo de usuarios de Amazon Cognito para acceder a Studio.
- Amazon Cognito devuelve un token al usuario que autoriza el acceso a la aplicación Studio.
- El usuario llama
createStudioPresignedUrl
API en API Gateway junto con un token en el encabezado. - API Gateway llama a un autorizador de AWS Lambda personalizado y valida el token.
- Si el token es válido, Amazon Cognito devuelve una política de concesión de acceso a API Gateway con el ID de perfil de usuario de Studio.
- API Gateway llama al
createStudioPresignedUrl
Función Lambda para crear la URL de Studio prefirmada. - Que
createStudioPresignedUrl
La función crea una URL prefirmada mediante el punto final de la VPC de la API de SageMaker y vuelve a la persona que llama. - El usuario accede a la URL prefirmada desde su red corporativa, que se resuelve a través del punto final de la VPC de Studio.
- La política de AWS Identity and Access Management (IAM) de la característica garantiza que la creación y el acceso de URL prefirmados se produzcan a través de los puntos de enlace de la VPC.
Las siguientes secciones lo guían a través de la implementación, configuración y validación de la solución de API API Gateway privada para crear y resolver una URL de Studio prefirmada desde una red corporativa utilizando puntos finales de VPC.
- Proporcionar la solución
- Configurar el usuario de Amazon Cognito
- Autenticación de la API privada para la URL prefirmada mediante un token web JSON
- Configurar el servidor DNS corporativo para acceder a la API privada
- Pruebe la API API Gateway privada con una URL prefirmada de la red corporativa
- Política de autenticación de Lambda para direcciones URL prefirmadas
- Limpiar
Proporcionar la solución
Puede implementar la solución mediante la Consola de administración de AWS o el Modelo de aplicación sin servidor de AWS (AWS SAM).
Para implementar la solución a través de la consola, inicie la siguiente plantilla de AWS CloudFormation en su cuenta eligiendo Pila de inicio. La pila de CloudFormation tarda unos 10 minutos en completarse.
Para implementar la solución con AWS SAM, puede encontrar el código más reciente en el repositorio de GitHub aws-samples, donde también puede contribuir con código de muestra. Los siguientes comandos muestran cómo implementar la solución mediante la CLI de AWS SAM. Si aún no está instalado, instale la CLI de AWS SAM.
- Clone el repositorio en https://github.com/aws-samples/secure-sagemaker-studio-presigned-url.
- Después de clonar el repositorio, navegue hasta la fuente y ejecute el siguiente código:
Configurar el usuario de Amazon Cognito
Siga estos pasos para configurar su usuario de Amazon Cognito:
- Cree un usuario de Amazon Cognito con el mismo nombre que un perfil de usuario de SageMaker:
- Establecer la contraseña de usuario:
- Obtenga un token de acceso:
Autenticación de la API privada para la URL prefirmada mediante un token web JSON
Cuando proporcionó una API privada para crear una URL prefirmada de SageMaker, agregó una medida de seguridad para restringir el acceso a la URL prefirmada a cualquier persona ajena a la red corporativa y al punto final de la VPC. Sin embargo, sin implementar otro control de API privado dentro de la red corporativa, cualquier usuario interno dentro de la red corporativa podría pasar parámetros de perfil de usuario de SageMaker no autenticados y acceder a cualquier aplicación de SageMaker.
Para mitigar este problema, proponemos pasar un token web JSON (JWT) para la persona autenticada que llama a API Gateway y validar ese token con un autorizador JWT. Hay varias opciones para implementar un autorizador de Private API Gateway, ya sea con un autorizador de Lambda personalizado o con Amazon Cognito.
Un autorizador de Lambda personalizado le permite insertar un nombre de perfil de usuario de SageMaker en la política devuelta. Esto evita que los usuarios dentro de la red corporativa envíen cualquier nombre de perfil de usuario de SageMaker para crear una URL prefirmada que no tienen permiso para crear. Usamos Amazon Cognito para generar nuestros tokens y un autorizador Lambda personalizado para validar y devolver la política adecuada. Para obtener más información, consulte Creación de una autorización detallada mediante Amazon Cognito, API Gateway e IAM. El autorizador de Lambda utiliza el nombre de usuario de Amazon Cognito como nombre de perfil de usuario.
Si no puede usar Amazon Cognito, puede desarrollar una aplicación personalizada para autenticar y pasar tokens de usuario final al autorizador de Lambda. Para obtener más información, consulte Uso de autorizadores Lambda de API Gateway.
Configurar el servidor DNS corporativo para acceder a la API privada
Siga los pasos a continuación para configurar su servidor DNS corporativo:
- En la consola de Amazon Elastic Compute Cloud (Amazon EC2), seleccione su instancia DNSA EC2 local y conéctese mediante Systems Manager Session Manager.
- Agregue una entrada de zona en el
/etc/named.conf
Archivo para resolver los nombres DNS de API Gateway a través de su resolución de entrada de Amazon Route 53, como se muestra en el siguiente código: - Reinicie el servicio nombrado con el siguiente comando:
Valide la solicitud de una URL prefirmada desde la API privada de API Gateway para usuarios autorizados
En un escenario del mundo real, implementaría una interfaz de front-end que pasa los encabezados de autorización apropiados para los recursos autenticados y autorizados, ya sea utilizando una solución personalizada o aprovechando AWS Amplify. Para acortar esta publicación de blog, los siguientes pasos usan Postman para validar rápidamente que la solución que brindamos en realidad restringe que un usuario interno solicite la URL prefirmada a menos que tenga permiso para hacerlo.
Siga estos pasos para validar la solución con Postman:
- Instale Postman en la instancia de WINAPP EC2. Ver instrucciones aquí
- Abra Postman y agregue el token de acceso al suyo
Authorization
encabezados: - Cambie la URL de API Gateway para acceder a ella desde su instancia EC2 interna:
- Agregue el punto de enlace de la VPC a su URL de API Gateway:
- añade el
Host
Encabezado con un valor de su API Gateway URL: - cambiar el primero
EMPLOYEE_ID
a su nombre de usuario de Amazon Cognito y de perfil de usuario de SageMaker. Asegúrese de obtener una URL prefirmada autorizada. - Entonces cambia esos
EMPLOYEE_ID
a un usuario que no sea de su propiedad y asegúrese de obtener un error de acceso.
- En la consola de Amazon EC2, seleccione su instancia WINAPP local y conéctese usando su cliente RDP.
- Abra un navegador Chrome y vaya a su URL prefirmada autorizada para iniciar Studio.
Studio se inicia desde el punto de enlace de la VPC con la dirección remota como IP del punto de enlace de la VPC de Studio.
Si se accede a la URL prefirmada fuera de la red corporativa, la resolución falla porque la condición de la política de IAM para la URL prefirmada fuerza la creación y el acceso desde un punto de enlace de la VPC.
Política de autenticación de Lambda para direcciones URL prefirmadas
La solución anterior creó la siguiente política de autenticación para Lambda, que generó una URL prefirmada para acceder a SageMaker Studio.
Conclusión
En esta publicación, demostramos cómo acceder a Studio desde una red corporativa utilizando puntos finales privados de Amazon VPC a través de una puerta de enlace de API privada, impidiendo el acceso a URL prefirmadas fuera de la red corporativa y usando la puerta de enlace de API con un autorizador JWT Amazon Cognito y delegados seguros de Lambda personalizados.
¡Pruebe esta solución y experimente integrándola con el portal de su empresa y deje sus comentarios en los comentarios!
Sobre los autores
Aries Vital es arquitecto de soluciones de aprendizaje automático en AWS. Tiene más de 20 años de experiencia en el diseño y la creación de aplicaciones distribuidas, híbridas y en la nube. Le apasiona crear soluciones seguras y escalables de AI/ML y Big Data para ayudar a los clientes empresariales con su adopción y optimización de la nube y mejorar sus resultados comerciales. En su tiempo libre disfruta del tenis, la fotografía y las películas de acción.
jonathan nguyen es consultor sénior de seguridad del equipo de entrega compartida en AWS. Su experiencia es en seguridad de AWS con un enfoque en detección de amenazas y respuesta a incidentes. Hoy, ayuda a los clientes empresariales a desarrollar una estrategia integral de seguridad de AWS, implementar soluciones de seguridad a escala y educar a los clientes sobre las mejores prácticas de seguridad de AWS.
chris childer es Arquitecto de Infraestructura en la Nube en Servicios Profesionales en AWS. Trabaja con clientes de AWS para diseñar y automatizar su infraestructura en la nube y mejorar su adopción de la cultura y los procesos de DevOps.