Le but de ce projet est de fournir un espace aux utilisateurs sous des buckets AWS S3 (buckets S3 partagés avec un « dossier » pour chaque utilisateur), avec une interface web pour charger, parcourir, télécharger et supprimer des fichiers.
Ce PoC a été réalisé entre asamo7 et davidayalas.
Caractéristiques:
Il est possible de configurer les "utilisateurs" et les "administrateurs".
Un utilisateur ajoute son nom d'utilisateur (e-mail de réponse saml) à chaque clé (téléchargement, navigation, suppression...). Un administrateur peut tout voir sous un compartiment ou un dossier. Voir permissions.csv.
Un utilisateur peut télécharger des dossiers (glisser-déposer) et la structure est recréée dans S3
Les fichiers peuvent être téléchargés (pas les répertoires)
Les dossiers peuvent être supprimés (inclus non vides)
Un utilisateur peut créer un dossier
Installez le framework sans serveur : https://www.serverless.com/framework/docs/getting-started/
Configurez les informations d'identification AWS : https://www.serverless.com/framework/docs/providers/aws/cli-reference/config-credentials/
Mettez à jour "serviceName" avec le vôtre dans setup.demo.json
Exécutez first-deploy.sh (donnez-lui les autorisations exécutables)
$ chmod +x first-deploy.sh && sh first-deploy.sh
Il modifiera certains fichiers afin que tout fonctionne. Accédez à https://samltest.id/upload.php et téléchargez manuellement docs/sp-metadata.xml.
Exécutez votre serveur et essayez
$ npm run serve --prefix=frontend
Installer toutes les dépendances
$ 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
Mettez à jour "serviceName" avec le vôtre dans setup.demo.json
Variables d'environnement de base pour SAML (les vôtres, car la démo est configurée) :
Générer une distribution frontend
$ cd frontend
$ npm run build
Déployer une démo
$ 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
Mettez à jour votre sp-metadata.xml avec :
Téléchargez ce fichier sur https://samltest.id/upload.php
Upload : ce lambda génère la signature pour les téléchargements valides.
Navigation : ce lambda récupère les objets dans un chemin
Supprimer : ce lambda supprime récursivement tous les objets d'un chemin
Téléchargement : ce lambda génère des URL présignées pour les objets à télécharger en toute sécurité
Connexion : dans ce cas, basé sur SAML pour générer un jeton JWT.
La configuration par défaut pointe vers samltest.id. Les métadonnées pour samltest.id sont générées avec https://www.samltool.com/sp_metadata.php :
Dans « Attribute Consume Service Endpoint (HTTP-POST) », vous devez mettre votre point de terminaison API :
https://${api gateway id}.execute-api.${region}.amazonaws.com/${stage}/login/callback
Dans "entityID", mettez à jour votre émetteur (identique dans la variable d'environnement pour le gestionnaire de connexion dans serverless.yml)
Autorisateur personnalisé : valide le jeton JWT et ajoute des autorisations supplémentaires à partir du CSV
La nouvelle interface est basée sur Vue. Suivez ensuite le guide de démarrage
Créez le fichier "frontend/src/assets/js/endpoint.js" avec le contenu suivant en remplaçant les valeurs par les valeurs appropriées
const endpoint = {
get ( ) {
return 'https://${your api id}/${your stage}/' ;
}
} ;
export default endpoint ;
Ou vous pouvez le générer à partir de la sortie d'informations 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