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.
Implemente el aislamiento de inquilinos de SaaS para Amazon S3 mediante una máquina expendedora de AWS Lambda fichas
Tabby Ward, Thomas Davis y Sravan Periyathambi, Amazon Web Services
Resumen
Las aplicaciones SaaS multiusuario deben implementar sistemas para garantizar que se mantenga el aislamiento de los usuarios. Cuando almacenas datos de inquilinos en el mismo AWS recurso (por ejemplo, cuando varios inquilinos almacenan datos en el mismo depósito de Amazon Simple Storage Service (Amazon S3), debes asegurarte de que no se pueda producir el acceso entre inquilinos. Las máquinas expendedoras de fichas (TVMs) son una forma de aislar los datos de los inquilinos. Estas máquinas proporcionan un mecanismo para obtener tokens y, al mismo tiempo, simplifican la complejidad inherente a la creación de dichos tokens. Los desarrolladores pueden usar una TVM sin tener un conocimiento detallado de cómo la máquina produce los tokens.
Este patrón implementa una TVM mediante el uso de. AWS Lambda La TVM genera un token con credenciales del servicio de token de seguridad (STS) temporales que limitan el acceso a los datos de un único usuario de SaaS en un bucket de S3.
TVMs, y el código que se proporciona con este patrón, se suelen utilizar con afirmaciones derivadas de los JSON Web Tokens (JWTs) para asociar las solicitudes de AWS recursos a una política orientada a los inquilinos AWS Identity and Access Management (IAM). Puede usar el código de este patrón como base para implementar una aplicación SaaS que genere credenciales STS temporales y limitadas en función de las afirmaciones proporcionadas en un token JWT.
Requisitos previos y limitaciones
Requisitos previos
Un activo. Cuenta de AWS
AWS Command Line Interface (AWS CLI) versión 1.19.0 o posterior, instalada y configurada en macOS, Linux o Windows. Como alternativa, puede utilizar la AWS CLI versión 2.1 o posterior.
Limitaciones
Este código se ejecuta en Java y, actualmente, no es compatible con otros lenguajes de programación.
La aplicación de ejemplo no incluye compatibilidad AWS entre regiones ni con la recuperación ante desastres (DR).
Este patrón demuestra cómo puede proporcionar acceso limitado a los usuarios una TVM de Lambda para una aplicación SaaS. Este patrón no está diseñado para usarse en entornos de producción sin pruebas de seguridad adicionales como parte de su aplicación o caso de uso específicos.
Arquitectura
Pila de tecnología de destino
AWS Lambda
Amazon S3
IAM
AWS Security Token Service (AWS STS)
Arquitectura de destino

Herramientas
Servicios de AWS
AWS Command Line Interface (AWS CLI) es una herramienta de código abierto que te ayuda a interactuar Servicios de AWS mediante comandos en tu shell de línea de comandos.
AWS Identity and Access Management (IAM) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
AWS Lambda es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
AWS Security Token Service (AWS STS) le ayuda a solicitar credenciales temporales con privilegios limitados para los usuarios.
Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento de objetos basado en la nube que le ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
Código
El código fuente de este patrón está disponible como archivo adjunto, e incluye los siguientes archivos:
s3UploadSample.jarproporciona el código fuente de una función de Lambda que carga un documento JSON en un bucket de S3.tvm-layer.zipproporciona una biblioteca Java reutilizable que suministra un token (credenciales temporales de STS) para que la función de Lambda acceda al bucket de S3 y cargue el documento JSON.token-vending-machine-sample-app.zipproporciona el código fuente usado para crear estos artefactos y las instrucciones de compilación.
Para usar el código de muestra, siga las instrucciones de la siguiente sección.
Epics
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Determine los valores de las variables. | La implementación de este patrón incluye varios nombres de variables que deben usarse de manera coherente. Determine los valores a usar para cada variable y proporcione cada valor cuando se le solicite en los siguientes pasos.
| Administrador de la nube |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Cree un bucket de S3 para la aplicación de ejemplo. | Usa el siguiente AWS CLI comando para crear un bucket de S3. Proporcione el
La aplicación de ejemplo de Lambda carga archivos JSON en este bucket. | Administrador de la nube |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Crear un rol de TVM. | Utilice uno de los siguientes AWS CLI comandos para crear un rol de IAM. Proporcione el Para los intérprete de comandos para macOS o Linux:
En la línea de comandos de Windows:
La aplicación de ejemplo de Lambda asume este rol cuando se invoca la aplicación. La capacidad de asumir el rol de aplicación con una política específica otorga al código permisos más amplios para acceder al bucket de S3. | Administrador de la nube |
Cree una política de rol de TVM en línea. | Utilice uno de los siguientes AWS CLI comandos para crear una política de IAM. Proporcione los Para los intérprete de comandos para macOS o Linux:
En la línea de comandos de Windows:
Esta política está asociada al rol de TVM. Proporciona la capacidad de asumir el rol de aplicación que otorga permisos más amplios para acceder al bucket de S3. | Administrador de la nube |
Adjunte la política de Lambda gestionada. | Utilice el siguiente AWS CLI comando para adjuntar la política de
En la línea de comandos de Windows:
Esta política gestionada se adjunta a la función TVM para permitir que Lambda envíe registros a Amazon. CloudWatch | Administrador de la nube |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Crear el rol de la aplicación. | Utilice uno de los siguientes AWS CLI comandos para crear un rol de IAM. Proporcione los Para los intérprete de comandos para macOS o Linux:
En la línea de comandos de Windows:
La aplicación de ejemplo de Lambda asume esta función con una política específica para obtener acceso basado en usuario a un bucket de S3. | Administrador de la nube |
Cree una política de rol de aplicación en línea. | Utilice uno de los siguientes AWS CLI comandos para crear una política de IAM. Proporcione los Para los intérprete de comandos para macOS o Linux:
En la línea de comandos de Windows:
Esta política está asociada al rol de la aplicación. Proporciona un acceso amplio a los objetos del bucket de S3. Cuando la aplicación de ejemplo asume el rol, estos permisos se asignan a un usuario específico con la política de TVM generada de forma dinámica. | Administrador de la nube |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Descargue los archivos fuente compilados. | Descargue los archivos | Administrador de la nube |
Cree la capa de Lambda. | Utilice el siguiente AWS CLI comando para crear una capa Lambda, que haga que Lambda pueda acceder a la TVM. notaSi no ejecuta este comando desde la ubicación en la que lo descargó
En la línea de comandos de Windows:
Este comando crea una capa de Lambda que contiene la biblioteca TVM reutilizable. | Administrador de la nube, desarrollador de aplicaciones |
Crear la función de Lambda. | Utilice el siguiente AWS CLI comando para crear una función Lambda. Proporcione los notaSi no ejecuta este comando desde la ubicación en la que lo descargó
En la línea de comandos de Windows:
Este comando crea una función de Lambda con el código de la aplicación de ejemplo y la capa de TVM adjunta. También establece dos variables de entorno: | Administrador de la nube, desarrollador de aplicaciones |
| Tarea | Descripción | Habilidades requeridas |
|---|---|---|
Invoque la aplicación de ejemplo de Lambda. | Utilice uno de los siguientes AWS CLI comandos para iniciar la aplicación de ejemplo de Lambda con la carga útil esperada. Proporcione los Para intérprete de comandos macOS y Linux:
En la línea de comandos de Windows:
Este comando llama a la función de Lambda y devuelve el resultado en un documento notaSi se cambia el | Administrador de la nube, desarrollador de aplicaciones |
Acceda al bucket de S3 para ver los objetos creados. | Navegue hasta el bucket de S3 ( | Administrador de la nube |
Vea los registros de la aplicación de muestra en CloudWatch Logs. | Vea los registros que están asociados a la función Lambda nombrada La funcionalidad de TVM se proporciona en una capa de Lambda. Así, es posible adjuntarla a otras funciones de Lambda usadas por una aplicación sin tener que replicar el código. Para ver un ejemplo de la política generada dinámicamente, consulte la sección de Información adicional. | Administrador de la nube |
Recursos relacionados
Aislar a los usuarios con políticas de IAM generadas dinámicamente
(publicación del blog) Aplicación de políticas de aislamiento generadas dinámicamente en entornos SaaS
(entrada del blog)
Información adicional
El siguiente registro muestra la política generada dinámicamente producida por el código TVM en este patrón. En esta captura de pantalla, el <sample-app-bucket-name> es DOC-EXAMPLE-BUCKET y el <sample-tenant-name> estest-tenant-1. Las credenciales de STS emitidas por esta política limitada no pueden realizar ninguna acción en los objetos del bucket de S3, excepto en aquellos objetos asociados al prefijo de clave de objeto test-tenant-1.

Conexiones
Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip