El objetivo de este proyecto es proporcionar un espacio para los usuarios en los depósitos S3 de AWS (depósitos S3 compartidos con una "carpeta" para cada usuario), con una interfaz web para cargar, explorar, descargar y eliminar archivos.
Esta prueba de concepto se realizó entre asamo7 y davidayalas.
Características:
Es posible configurar "usuarios" y "administradores".
Un usuario agrega su nombre de usuario (correo electrónico de la respuesta saml) a cada clave (carga, navegación, eliminación...). Un administrador puede ver todo lo que se encuentra en un depósito o una carpeta. Consulte permisos.csv.
Un usuario puede cargar carpetas (arrastrar y soltar) y la estructura se recrea en S3
Se pueden descargar archivos (no directorios)
Las carpetas se pueden eliminar (incluidas, no vacías)
Un usuario puede crear una carpeta.
Instale el marco sin servidor: https://www.serverless.com/framework/docs/getting-started/
Configure las credenciales de AWS: https://www.serverless.com/framework/docs/providers/aws/cli-reference/config-credentials/
Actualice "serviceName" con el suyo propio en setup.demo.json
Ejecute first-deploy.sh (déle permisos ejecutables)
$ chmod +x first-deploy.sh && sh first-deploy.sh
Modificará algunos archivos para que todo funcione. Vaya a https://samltest.id/upload.php y cargue manualmente docs/sp-metadata.xml.
Ejecute su servidor y pruebe
$ npm run serve --prefix=frontend
Instalar todas las dependencias
$ npm install serverless-s3-sync
$ npm --prefix ./backend/custom-auth install ./backend/custom-auth
$ npm --prefix ./backend/login install ./backend/login
$ npm --prefix ./frontend install ./frontend
Actualice "serviceName" con el suyo propio en setup.demo.json
Variables de entorno básicas para SAML (las suyas, porque la demostración está configurada):
Generar distribución frontend
$ cd frontend
$ npm run build
Implementar demostración
$ sls deploy
$ sls info | grep GET -m 1 | awk -F[/:] '{printf "const endpoint={get(){return '''https://"$4"/demo/''';}};export default endpoint;"}' > frontend/src/assets/js/endpoint.js
$ sls s3sync
Actualice su sp-metadata.xml con:
Sube este archivo a https://samltest.id/upload.php
Subir: esta lambda genera la firma para cargas válidas.
Navegación: esta lambda recupera los objetos en una ruta
Eliminar: esta lambda elimina recursivamente todos los objetos en una ruta
Descargar: esta lambda genera URL prefirmadas para que los objetos se descarguen de forma segura
Iniciar sesión: en este caso basado en SAML para generar un token JWT.
La configuración predeterminada apunta a samltest.id. Los metadatos para samltest.id se generan con https://www.samltool.com/sp_metadata.php:
En "Punto final de servicio de consumo de atributos (HTTP-POST)", debe colocar el punto final de su API:
https://${api gateway id}.execute-api.${region}.amazonaws.com/${stage}/login/callback
En "entityID", actualice su emisor (lo mismo en la variable de entorno para el controlador de inicio de sesión en serverless.yml)
Autorizador personalizado: valida el token JWT y agrega permisos adicionales desde CSV
La nueva interfaz está basada en Vue. Luego siga las instrucciones de cómo empezar.
Cree el archivo "frontend/src/assets/js/endpoint.js" con el siguiente contenido reemplazando los valores con los apropiados
const endpoint = {
get ( ) {
return 'https://${your api id}/${your stage}/' ;
}
} ;
export default endpoint ;
O puedes generarlo a partir de la salida de información de sls:
$ sls info | grep GET -m 1 | awk -F[/:] '{printf "const endpoint={get(){return '''https://"$4"/demo/''';}};export default endpoint;"}' > frontend/src/assets/js/endpoint.js