이 프로젝트의 목표는 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/
setup.demo.json에서 "serviceName"을 직접 업데이트하세요.
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
setup.demo.json에서 "serviceName"을 직접 업데이트하세요.
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 info 출력에서 생성할 수 있습니다.
$ 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