O objetivo deste projeto é fornecer um espaço para usuários em buckets AWS S3 (buckets S3 compartilhados com uma "pasta" para cada usuário), com uma interface web para fazer upload, navegar, baixar e remover arquivos.
Este PoC foi feito entre asamo7 e davidayalas.
Características:
É possível configurar "usuários" e "administradores".
Um usuário adiciona seu nome de usuário (e-mail da resposta saml) a cada chave (upload, navegação, exclusão...). Um administrador pode ver tudo em um balde ou pasta. Consulte permissões.csv.
Um usuário pode fazer upload de pastas (arrastar e soltar) e a estrutura é recriada no S3
Os arquivos podem ser baixados (não diretórios)
As pastas podem ser excluídas (incluídas, não vazias)
Um usuário pode criar uma pasta
Instale a estrutura sem servidor: https://www.serverless.com/framework/docs/getting-started/
Configure as credenciais da AWS: https://www.serverless.com/framework/docs/providers/aws/cli-reference/config-credentials/
Atualize "serviceName" com o seu próprio em setup.demo.json
Execute first-deploy.sh (conceda permissões executáveis)
$ chmod +x first-deploy.sh && sh first-deploy.sh
Ele modificará alguns arquivos para que tudo funcione. Vá para https://samltest.id/upload.php e carregue manualmente docs/sp-metadata.xml.
Execute seu servidor e tente
$ npm run serve --prefix=frontend
Instale todas as dependências
$ 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
Atualize "serviceName" com o seu próprio em setup.demo.json
Variáveis ambientais básicas para SAML (suas, porque a demonstração está configurada):
Gerar distribuição de front-end
$ cd frontend
$ npm run build
Implantar demonstração
$ 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
Atualize seu sp-metadata.xml com:
Faça upload deste arquivo para https://samltest.id/upload.php
Upload: este lambda gera a assinatura para uploads válidos.
Navegação: este lambda recupera os objetos em um caminho
Excluir: este lambda exclui recursivamente todos os objetos em um caminho
Download: este lambda gera URLs predefinidos para objetos a serem baixados com segurança
Login: neste caso baseado em SAML para gerar um token JWT.
A configuração padrão aponta para samltest.id. Os metadados para samltest.id são gerados com https://www.samltool.com/sp_metadata.php:
Em "Attribute Consume Service Endpoint (HTTP-POST)" você deve colocar seu endpoint da API:
https://${api gateway id}.execute-api.${region}.amazonaws.com/${stage}/login/callback
Em "entityID" atualize seu emissor (o mesmo na variável de ambiente para o manipulador de login em serverless.yml)
Autorizador personalizado: valida o token JWT e adiciona permissões extras de CSV
O novo frontend é baseado em Vue. Então siga os primeiros passos
Crie o arquivo "frontend/src/assets/js/endpoint.js" com o seguinte conteúdo substituindo os valores por aproppiate
const endpoint = {
get ( ) {
return 'https://${your api id}/${your stage}/' ;
}
} ;
export default endpoint ;
Ou você pode gerá-lo a partir da saída de informações do 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