Цель этого проекта — предоставить пользователям пространство под корзинами AWS S3 (общие корзины S3 с «папкой» для каждого пользователя) с веб-интерфейсом для загрузки, просмотра, скачивания и удаления файлов.
Этот PoC был выполнен между asamo7 и davidayalas.
Функции:
Можно настроить «пользователей» и «администраторов».
Пользователь добавляет свое имя пользователя (адрес электронной почты из ответа Saml) к каждому ключу (загрузка, просмотр, удаление...). Администратор может видеть все, что находится в сегменте или папке. См. разрешения.csv.
Пользователь может загружать папки (перетаскиванием), и структура воссоздается в S3.
Можно скачивать файлы (не каталоги)
Папки можно удалять (включены не пустые)
Пользователь может создать папку
Установите бессерверную платформу: https://www.serverless.com/framework/docs/getting-started/.
Настройте учетные данные AWS: https://www.serverless.com/framework/docs/providers/aws/cli-reference/config-credentials/
Обновите «serviceName» своим собственным в setup.demo.json.
Запустите файл first-deploy.sh (предоставьте ему права на выполнение)
$ chmod +x first-deploy.sh && sh first-deploy.sh
Он изменит некоторые файлы, чтобы все заработало. Перейдите на https://samltest.id/upload.php и загрузите вручную docs/sp-metadata.xml.
Запустите свой сервер и попробуйте
$ npm run serve --prefix=frontend
Установите все зависимости
$ 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
Обновите «serviceName» своим собственным в setup.demo.json.
Основные переменные env для SAML (ваши собственные, поскольку демо-версия настроена):
Создать дистрибутив внешнего интерфейса
$ cd frontend
$ npm run build
Развернуть демо-версию
$ 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
Обновите sp-metadata.xml с помощью:
Загрузите этот файл на https://samltest.id/upload.php.
Загрузка: эта лямбда генерирует подпись для действительных загрузок.
Просмотр: эта лямбда извлекает объекты по пути.
Удалить: эта лямбда рекурсивно удаляет все объекты на пути.
Загрузка: эта лямбда генерирует заранее назначенные URL-адреса для объектов, которые можно безопасно загрузить.
Вход: в данном случае SAML основан на создании токена JWT.
Настройка по умолчанию указывает на samltest.id. Метаданные для samltest.id генерируются с помощью https://www.samltool.com/sp_metadata.php:
В «Конечной точке службы потребления атрибутов (HTTP-POST)» вам необходимо указать конечную точку API:
https://${api gateway id}.execute-api.${region}.amazonaws.com/${stage}/login/callback
В «entityID» обновите своего эмитента (то же самое в переменной среды для обработчика входа в serverless.yml)
Пользовательский авторизатор: проверяет токен JWT и добавляет дополнительные разрешения из CSV.
Новый интерфейс основан на Vue. Затем следуйте инструкциям «Начало работы»
Создайте файл «frontend/src/assets/js/endpoint.js» со следующим содержимым, заменив значения на соответствующие.
const endpoint = {
get ( ) {
return 'https://${your api id}/${your stage}/' ;
}
} ;
export default endpoint ;
Или вы можете сгенерировать его из вывода информации 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