├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── nightly-workflow.yml ├── .gitignore ├── .viperlightignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── NOTICE ├── README.md ├── SECURITY.md ├── deployment ├── build-s3-dist.sh ├── efs-file-manager-auth.yaml ├── efs-file-manager-web.yaml ├── run-unit-tests.sh └── simple-file-manager-for-amazon-efs.yaml ├── docs └── assets │ ├── diagrams │ ├── simple_file_manager_auth_simple.xml │ ├── simple_file_manager_detailed.xml │ └── simple_file_manager_simple.xml │ └── images │ ├── launch-stack.png │ ├── sfm_logo.png │ ├── sfm_logo.svg │ ├── simple_file_manager_auth_flow.png │ ├── simple_file_manager_auth_simple.png │ ├── simple_file_manager_detailed.png │ ├── simple_file_manager_detailed_numbered.png │ └── simple_file_manager_simple.png ├── sonar-project.properties ├── source ├── api │ ├── .chalice │ │ └── config.json │ ├── .idea │ │ ├── api.iml │ │ ├── encodings.xml │ │ ├── inspectionProfiles │ │ │ └── Project_Default.xml │ │ ├── misc.xml │ │ ├── modules.xml │ │ └── workspace.xml │ ├── app.py │ ├── chalicelib │ │ ├── efs_lambda.py │ │ └── file-manager-ap-lambda.template │ ├── external_resources.json │ └── requirements.txt ├── helper │ └── website_helper.py └── web │ ├── babel.config.js │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ ├── index.html │ └── runtimeConfig.json │ ├── src │ ├── App.vue │ ├── common │ │ ├── file-events.js │ │ ├── mixins.js │ │ └── utils.js │ ├── components │ │ ├── download.vue │ │ ├── filesystems.vue │ │ ├── makedir.vue │ │ ├── navbar.vue │ │ └── upload.vue │ ├── main.js │ ├── router.js │ └── routes │ │ ├── Admin.vue │ │ ├── Configure.vue │ │ ├── Details.vue │ │ ├── Filesystem.vue │ │ ├── Home.vue │ │ └── Login.vue │ └── vue.config.js └── test ├── e2e ├── conftest.py ├── requirements.txt ├── run_e2e.sh └── test_complete_app.py └── unit ├── api ├── conftest.py ├── service_responses.py └── test_app.py ├── manager ├── conftest.py └── test_efs_lambda.py ├── requirements.txt └── run_unit.sh /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior. 15 | 16 | **Expected behavior** 17 | A clear and concise description of what you expected to happen. 18 | 19 | **Please complete the following information about the solution:** 20 | - [ ] Version: [e.g. v1.0.4] 21 | 22 | To get the version of the solution, you can look at the description of the created CloudFormation stack. If the description does not contain the version information, you can look at the mappings section of the template: 23 | 24 | ```yaml 25 | Mappings: 26 | SourceCode: 27 | General: 28 | S3Bucket: "solutions" 29 | KeyPrefix: "simple-file-manager-for-amazon-efs/v1.0.4" 30 | ``` 31 | 32 | - [ ] Region: [e.g. us-east-1] 33 | - [ ] Was the solution modified from the version published on this repository? 34 | - [ ] If the answer to the previous question was yes, are the changes available on GitHub? 35 | - [ ] Have you checked your [service quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html) for the sevices this solution uses? 36 | - [ ] Were there any errors in the CloudWatch Logs? 37 | 38 | **Screenshots** 39 | If applicable, add screenshots to help explain your problem (please **DO NOT include sensitive information**). 40 | 41 | **Additional context** 42 | Add any other context about the problem here. 43 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this solution 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the feature you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | *Issue #, if available:* 2 | 3 | *Description of changes:* 4 | 5 | By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. 6 | -------------------------------------------------------------------------------- /.github/workflows/nightly-workflow.yml: -------------------------------------------------------------------------------- 1 | name: scheduled-workflow 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build-us-west-2: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Check out development branch 11 | uses: actions/checkout@v2.3.4 12 | with: 13 | ref: development 14 | 15 | - name: Initialize AWS credentials 16 | uses: aws-actions/configure-aws-credentials@v1 17 | with: 18 | aws-access-key-id: ${{ secrets.BUILD_AWS_ACCESS_KEY_ID }} 19 | aws-secret-access-key: ${{ secrets.BUILD_AWS_SECRET_ACCESS_KEY }} 20 | aws-region: us-west-2 21 | 22 | - name: Generate short sha 23 | run: | 24 | echo "SHORT_SHA=`git rev-parse --short HEAD`" >> $GITHUB_ENV 25 | - name: Run build script 26 | run: | 27 | cd deployment 28 | SFM_STACK_NAME=sfm-dev 29 | REGION=us-west-2 30 | VERSION=$SHORT_SHA 31 | DIST_OUTPUT_BUCKET=sfm-dev 32 | TEMPLATE_OUTPUT_BUCKET=sfm-dev-us-west-2 33 | ./build-s3-dist.sh --template-bucket $TEMPLATE_OUTPUT_BUCKET --code-bucket $DIST_OUTPUT_BUCKET --version $VERSION --region $REGION 34 | aws cloudformation deploy --stack-name $SFM_STACK_NAME --region $REGION --template-file global-s3-assets/simple-file-manager-for-amazon-efs.template --s3-bucket $DIST_OUTPUT_BUCKET-$REGION --s3-prefix efs_file_manager/$VERSION --parameter-overrides AdminEmail=${{ secrets.TEST_ADMIN_EMAIL }} --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND --force-upload 35 | - name: Build Failed 36 | if: ${{ failure() }} 37 | uses: nashmaniac/create-issue-action@v1.1 38 | with: 39 | title: Nightly build failed 40 | token: ${{secrets.GITHUB_TOKEN}} 41 | assignees: brandold 42 | labels: bug 43 | body: Nightly build failed for commit ${{github.sha}} 44 | 45 | 46 | test-us-west-2: 47 | needs: build-us-west-2 48 | runs-on: ubuntu-latest 49 | env: 50 | SFM_REGION: 'us-west-2' 51 | SFM_STACK_NAME: sfm-dev 52 | steps: 53 | - name: Check out development branch 54 | uses: actions/checkout@v2.3.4 55 | with: 56 | ref: development 57 | - name: Initialize build AWS credentials 58 | uses: aws-actions/configure-aws-credentials@v1 59 | with: 60 | aws-access-key-id: ${{ secrets.BUILD_AWS_ACCESS_KEY_ID }} 61 | aws-secret-access-key: ${{ secrets.BUILD_AWS_SECRET_ACCESS_KEY }} 62 | aws-region: us-west-2 63 | - name: Generate short sha 64 | run: | 65 | echo "SHORT_SHA=`git rev-parse --short HEAD`" >> $GITHUB_ENV 66 | - name: Run cfn_nag 67 | uses: stelligent/cfn_nag@master 68 | continue-on-error: true 69 | with: 70 | input_path: deployment 71 | - name: Setup Chromedriver 72 | uses: nanasess/setup-chromedriver@master 73 | - name: Get user pool id 74 | run: | 75 | echo "USER_POOL_ID=`aws cloudformation describe-stacks --query 'Stacks[?starts_with(StackName, \`sfm-dev-EFSFileAuthentication\`)].Outputs[1].OutputValue' --output text`" >> $GITHUB_ENV 76 | - name: Reset SFM user password 77 | run: | 78 | aws cognito-idp admin-set-user-password --user-pool-id $USER_POOL_ID --username ${{ secrets.TEST_ADMIN_EMAIL }} --password ${{ secrets.TEST_ADMIN_PASSWORD }} --permanent 79 | - name: Get SFM endpoint 80 | run: | 81 | echo "SFM_ENDPOINT=`aws cloudformation describe-stacks --query 'Stacks[?starts_with(StackName, \`sfm-dev-EFSFileWebApplication\`)].Outputs[0].OutputValue' --output text`" >> $GITHUB_ENV 82 | - name: Set admin creds 83 | run: | 84 | echo SFM_USERNAME=${{ secrets.TEST_ADMIN_EMAIL }} >> $GITHUB_ENV 85 | echo SFM_PASSWORD=${{ secrets.TEST_ADMIN_PASSWORD }} >> $GITHUB_ENV 86 | - name: Set media path and file name 87 | run: | 88 | echo TEST_MEDIA_PATH=$GITHUB_WORKSPACE/test/e2e/ >> $GITHUB_ENV 89 | echo TEST_FILE_NAME=run_e2e.sh >> $GITHUB_ENV 90 | - name: Set filesystem id 91 | run: | 92 | echo FILESYSTEM_ID=${{ secrets.TEST_FILESYSEM_ID }} >> $GITHUB_ENV 93 | - name: Run E2E tests 94 | run: | 95 | cd $GITHUB_WORKSPACE 96 | cd test/e2e 97 | ./run_e2e.sh 98 | - name: Test Failed 99 | if: ${{ failure() }} 100 | uses: nashmaniac/create-issue-action@v1.1 101 | with: 102 | title: Nightly test for failed 103 | token: ${{secrets.GITHUB_TOKEN}} 104 | assignees: brandold 105 | labels: bug 106 | body: Nightly test failed for commit ${{github.sha}} 107 | - name: Delete stack 108 | run: | 109 | aws cloudformation delete-stack --stack-name $SFM_STACK_NAME 110 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # compiled output 2 | **/dist 3 | **/global-s3-assets 4 | **/regional-s3-assets 5 | **/open-source 6 | **/.zip 7 | **/tmp 8 | **/out-tsc 9 | **/.chalice/deployments 10 | **/source/helper/webapp-manifest.json 11 | 12 | # dependencies 13 | **/node_modules 14 | 15 | # e2e 16 | **/e2e/*.js 17 | **/e2e/*.map 18 | 19 | # misc 20 | **/npm-debug.log 21 | **/testem.log 22 | **/.vscode/settings.json 23 | **/__pycache__ 24 | # System Files 25 | **/.DS_Store 26 | **/.vscode 27 | **/.idea 28 | 29 | -------------------------------------------------------------------------------- /.viperlightignore: -------------------------------------------------------------------------------- 1 | ^dist/ 2 | CODE_OF_CONDUCT.md:4 3 | SECURITY.md:10 4 | CONTRIBUTING.md:50 5 | .github/workflows/nightly-workflow.yml:19 6 | .github/workflows/nightly-workflow.yml:18 7 | deployment/.idea/workspace.xml:73 8 | docs/assets/images/sfm_logo.svg:3 9 | source/api/.idea/workspace.xml:109 10 | deployment/efs-file-manager-auth.yaml:158 11 | deployment/efs-file-manager-auth.yaml:171 12 | deployment/simple-file-manager-for-amazon-efs.yaml:74 13 | deployment/simple-file-manager-for-amazon-efs.yaml:59 14 | deployment/simple-file-manager-for-amazon-efs.yaml:84 15 | deployment/simple-file-manager-for-amazon-efs.yaml:69 16 | test/ 17 | Config 18 | 19 | [node-npmoutdated] 20 | @aws-amplify/api=4.0.64 21 | @aws-amplify/core=4.7.15 22 | aws-amplify=4.3.46 23 | vue-router=3.6.5 24 | eslint=7.32.0 25 | eslint-plugin-vue=7.20.0 26 | webpack-subresource-integrity=1.5.2 -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [1.5.16] - 2025-06-09 9 | ### Security 10 | 11 | - Bump `http-proxy-middleware` to `2.0.9` to resolve CVE [CVE-2025-32996](https://avd.aquasec.com/nvd/2025/cve-2025-32996/) 12 | - Added `webpack-dev-server` override to mitigate [CVE-2025-30359](https://avd.aquasec.com/nvd/2025/cve-2025-30359/) & [CVE-2025-30360](https://avd.aquasec.com/nvd/2025/cve-2025-30360/) 13 | 14 | ### Removed 15 | 16 | - `aws-sdk` due to no direct usage and upcoming v2 end of support. 17 | 18 | ## [1.5.15] - 2025-04-09 19 | 20 | ### Security 21 | 22 | - Bump child dependencies 23 | 24 | ## [1.5.14] - 2025-03-14 25 | 26 | ### Security 27 | 28 | - Upgrade axios to `1.8.2` to resolve CVE [CVE-2025-27152](https://avd.aquasec.com/nvd/2025/cve-2025-27152/) 29 | 30 | ## [1.5.13] - 2025-02-06 31 | 32 | ### Security 33 | 34 | - Bump nanoid to `3.3.8` to resolve CVE [CVE-2024-55565](https://github.com/advisories/GHSA-mwcw-c2x4-8c55) 35 | - Bump path-to-regexp to`0.1.12` to resolve CVE [CVE-2024-52798](https://github.com/advisories/GHSA-rhx6-c78j-4q9w) 36 | - Override vue dependencies to `3.4.34` to resolve CVE [CVE-2024-9506](https://github.com/advisories/GHSA-5j4c-8p2g-v4jx) 37 | 38 | ## [1.5.12] - 2024-11-19 39 | 40 | ### Security 41 | 42 | - Bump cross-spawn to `7.0.6` to resolve [CVE-2024-9506](https://github.com/advisories/GHSA-5j4c-8p2g-v4jx) 43 | 44 | ### Fixed 45 | 46 | - If a filesystem's stack changes from CREATE_COMPLETE to UPDATE_COMPLETE it no longer lists as managed [#229](https://github.com/aws-solutions/simple-file-manager-for-amazon-efs/issues/229) 47 | 48 | ## [1.5.11] - 2024-10-29 49 | 50 | ### Security 51 | 52 | - Bump http-proxy-middleware to `2.0.7` to resolve [CVE-2024-21536](https://github.com/advisories/GHSA-c7qv-q95q-8v27) 53 | - Bump cookie to `0.7.0` to resolve CVE [CVE-2024-47764](https://github.com/advisories/GHSA-pxg6-pf52-xh8x) 54 | 55 | ## [1.5.10] - 2024-09-20 56 | 57 | ### Security 58 | 59 | - Bump webpack to `5.94.0` to resolve [CVE-2024-43788](https://github.com/advisories/GHSA-4vvj-4cpr-p986) 60 | - Bump serve-static to `1.16.2` to resolve CVE with send [CVE-2024-43799](https://github.com/advisories/GHSA-m6fv-jmcg-4jfg) 61 | - Bump path-to-regexp to `0.1.10` to resolve [CVE-2024-45296](https://github.com/advisories/GHSA-9wv6-86v2-598j) 62 | - Bump micromatch to `4.0.8` to resolve [CVE-2024-4067](https://github.com/advisories/GHSA-952p-6rrq-rcjv) 63 | - Remove usage of `bootstrap-vue` (EOL) and migrate `bootstrap v4` (EOL) to `bootstrap v5` to resolve [CVE-2024-6531](https://nvd.nist.gov/vuln/detail/CVE-2024-6531) 64 | - Adds Security.md file to provide guidance around reporting security vulnerabilities. 65 | 66 | ## [1.5.9] - 2024-08-02 67 | 68 | ### Security 69 | 70 | - Bump `fast-xml-parser` to `4.4.1` to resolve [CVE-2024-41818](https://nvd.nist.gov/vuln/detail/CVE-2024-41818) 71 | - Update to Vue 3 compat build and replace `vue-template-compiler` with `@vue/compiler-sfc` to resolve [CVE-2024-6783](https://nvd.nist.gov/vuln/detail/CVE-2024-6783) 72 | 73 | ### Removed 74 | 75 | - Unused `vue-stepper-component` and `vue2-dropzone` dependencies 76 | 77 | ## [1.5.8] - 2024-06-23 78 | 79 | ### Security 80 | 81 | - Bump `braces` to `3.0.3` to resolve [CVE-2024-4068](https://nvd.nist.gov/vuln/detail/CVE-2024-4068) 82 | - Bump `ws` to resolve [CVE-2024-37890](https://nvd.nist.gov/vuln/detail/CVE-2024-37890) 83 | 84 | ## [1.5.7] - 2024-05-30 85 | 86 | ### Fixed 87 | 88 | - Updated API Handler Python runtime to 3.11 due to Python 3.8 Lambda runtime deprecation 89 | 90 | ### Changed 91 | 92 | - Updated spoke template descriptions to include suffix 93 | 94 | ## [1.5.6] - 2024-04-09 95 | 96 | ### Fixed 97 | 98 | - Updated axios sub-dependency to use v0.28.0 to resolve security vulnerabilities: 99 | - [CVE-2023-45857](https://nvd.nist.gov/vuln/detail/CVE-2023-45857) 100 | - [CVE-2024-28849](https://nvd.nist.gov/vuln/detail/CVE-2024-28849) 101 | - [CVE-2023-26159](https://nvd.nist.gov/vuln/detail/CVE-2023-26159) 102 | 103 | - Re-generated package-lock to resolve security vulnerabilities: 104 | - [CVE-2024-29180](https://nvd.nist.gov/vuln/detail/CVE-2024-29180) 105 | - [CVE-2023-42282](https://nvd.nist.gov/vuln/detail/CVE-2023-42282) 106 | - [CVE-2024-29041](https://nvd.nist.gov/vuln/detail/CVE-2024-29041) 107 | 108 | ## [1.5.5] - 2023-10-20 109 | 110 | ### Fixed 111 | 112 | - Updated crypto.js dependency to fix security vulnerabilities [CVE-2023-46233](https://nvd.nist.gov/vuln/detail/CVE-2023-46233) 113 | - Updated react-dev-tools dependency to fix security vulnerabilities [CVE-2023-5654](https://nvd.nist.gov/vuln/detail/CVE-2023-5654) 114 | - Update urllib3 dependency to v1.26.18 115 | 116 | ## [1.5.4] - 2023-10-20 117 | 118 | ### Fixed 119 | 120 | - Fixing Security Vulnerabilities 121 | 122 | ## [1.5.3] - 2023-09-20 123 | 124 | ### Fixed 125 | 126 | - Merge Website Bucket policy statements to prevent deployment failures on policy creation slowdowns 127 | - Remove uneeded exit in Unit test script 128 | - Added downline dependencies to NOTICE.txt 129 | 130 | ### Security 131 | 132 | - Upgrade Node version to 18 133 | - Upgrade Python runtime to 3.11 134 | - Update NPM packages to fix vulnerabilities 135 | 136 | ## [1.5.2] - 2023-05-19 137 | 138 | ### Fixed 139 | 140 | - elasticfilesystem:TagResource permission added to Manager Lambda 141 | - Urllib3 downgraded to < v2 142 | 143 | ## [1.5.1] - 2023-04-13 144 | 145 | ### Security 146 | 147 | - Enable versioning/encryption on logging bucket 148 | 149 | ### Fixed 150 | 151 | - Enable Amazon S3 ACLs on logging bucket 152 | - Include package-lock.json to prevent incompatibilities with future package versions 153 | 154 | ## [1.5.0] - 2022-10-17 155 | 156 | ### Added 157 | 158 | - Paginated response for list filesystems that allows greater than 10 EFS filesystems to be displayed 159 | - AppRegistry Integration 160 | - File manager lambda creation now checks for valid security group rules 161 | 162 | ### Changed 163 | 164 | - Code refactoring to reduce cognitive complexity 165 | - Buildspec upgrades 166 | - Unit tests to 80% overall coverage 167 | 168 | ### Added 169 | 170 | - Misc documentation 171 | 172 | ## [1.4.1] - 2022-08-24 173 | 174 | ### Changed 175 | 176 | - Python version bump to handle 3.6 EOL 177 | 178 | ## [1.4.0] - 2021-07-08 179 | 180 | ### Changed 181 | 182 | - Code refactoring to support pylint 183 | - cfn-lint / bandit code cleanup 184 | 185 | ### Fixed 186 | 187 | - General bug fixes 188 | 189 | ### Added 190 | 191 | - Misc documentation 192 | 193 | ## [1.3.0] - 2021-06-01 194 | 195 | ### Added 196 | 197 | - Add delete functionality for SFM created resources #115 198 | - Diagrams from previous update 199 | - Detailed architecture diagram #1 200 | - Simplified architecture diagram #1 201 | - Security sequence diagram #1 202 | 203 | ### Security 204 | 205 | - IAM permissions scoped down #114 206 | 207 | ## [1.2.0] - 2021-05-26 208 | 209 | ### Added 210 | 211 | - Fix rollback issue when file manager lambda is not created successfully #67 212 | - Allow upload modal to be closed if upload fails #79 213 | - Check if file exists before attempting upload #77 214 | 215 | ### Changed 216 | 217 | - Generate pop up for deleting files instead of an alert #66 218 | - Added Nightly Tests 219 | 220 | ### Security 221 | 222 | - IAM permissions scoped down for CloudFormation templates. #61 223 | - CFN Nag changes for Lambdas deployed into a VPC #63 224 | - Changes so uses a minimum of CloudFront TLS 1.2 #62 225 | - EFS-File-Manager.yaml IAM update to use iam:passedtoservice condition key #81 226 | 227 | ### Fixed 228 | 229 | - FS lambda fails to launch due to SG constraint #75 230 | 231 | ### Added 232 | 233 | - Diagrams from previous update 234 | - Detailed architecture diagram #1 235 | - Simplified architecture diagram #1 236 | - Security sequence diagram #1 237 | 238 | ## [1.1.0] - 2021-04-26 239 | 240 | ### Added 241 | 242 | - File manager creation now accepts a custom UID, GID, and Path #22 243 | - File manager lambda automatically attaches to all available mount targets #9 244 | - Added the filesystem name to the filesystems table #41 245 | 246 | ### Changed 247 | 248 | - Render a message saying no filesystems found when there are no EFS filesystems in the account instead of an empty table #46 249 | - Added a creating state to indicate that the file manager lambda is still being created #42 250 | - User agent string is being sent to identify the application #52 251 | - /download and /upload moved underneath the /objects path #45 252 | 253 | ### Security 254 | 255 | N/A 256 | 257 | ### Fixed 258 | 259 | - Removed the sign up option on login page which was producing an error #44 260 | 261 | ### Added 262 | 263 | - Detailed architecture diagram #1 264 | - Simplified architecture diagram #1 265 | - Security sequence diagram #1 266 | 267 | ## [1.0.0] - 2021-04-09 268 | 269 | ### Added 270 | 271 | - example-function-js sample microservice 272 | - added unit tests for example-function-js 273 | 274 | ### Changed 275 | 276 | - example.template to yaml file example with JS. 277 | - updated build-s3-dist.sh script to include soltion-name parameter 278 | - updated build-open-source.sh script to include soltion-name parameter 279 | - updated run-unit-tests.sh script to execute example-function-js unit tests 280 | 281 | ### Removed 282 | 283 | - deployment/buildspec files. 284 | - helper function 285 | 286 | ## [0.0.1] - 2019-04-15 287 | 288 | ### Added 289 | 290 | - CHANGELOG templated file 291 | - README templated file 292 | - NOTICE file 293 | - LICENSE file 294 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | ## Code of Conduct 2 | 3 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 4 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 5 | opensource-codeofconduct@amazon.com with any additional questions or comments. 6 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional 4 | documentation, we greatly value feedback and contributions from our community. 5 | 6 | Please read through this document before submitting any issues or pull requests to ensure we have all the necessary 7 | information to effectively respond to your bug report or contribution. 8 | 9 | 10 | ## Reporting Bugs/Feature Requests 11 | 12 | We welcome you to use the GitHub issue tracker to report bugs or suggest features. 13 | 14 | When filing an issue, please check [existing open](https://github.com/awslabs/efs-file-manager/issues), or [recently closed](https://github.com/awslabs/efs-file-manager/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), issues to make sure somebody else hasn't already 15 | reported the issue. Please try to include as much information as you can. Details like these are incredibly useful: 16 | 17 | * A reproducible test case or series of steps 18 | * The version of our code being used 19 | * Any modifications you've made relevant to the bug 20 | * Anything unusual about your environment or deployment 21 | 22 | 23 | ## Contributing via Pull Requests 24 | Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that: 25 | 26 | 1. You are working against the latest source on the *development* branch. 27 | 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 28 | 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. 29 | 30 | To send us a pull request, please: 31 | 32 | 1. Fork the repository. 33 | 2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change. 34 | 3. Ensure local tests pass. 35 | 4. Commit to your fork using clear commit messages. 36 | 5. Send us a pull request, answering any default questions in the pull request interface. 37 | 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. 38 | 39 | GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and 40 | [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). 41 | 42 | 43 | ## Finding contributions to work on 44 | Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels ((enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any ['help wanted'](https://github.com/awslabs/efs-file-manager/labels/help%20wanted) issues is a great place to start. 45 | 46 | 47 | ## Code of Conduct 48 | This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). 49 | For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact 50 | opensource-codeofconduct@amazon.com with any additional questions or comments. 51 | 52 | 53 | ## Security issue notifications 54 | If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. 55 | 56 | 57 | ## Licensing 58 | 59 | See the [LICENSE](https://github.com/aws-solutions/simple-file-manager-for-amazon-efs/blob/master/LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. 60 | 61 | We may ask you to sign a [Contributor License Agreement (CLA)](https://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes. -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ⚠️🚨⚠️ __Important: This solution will retire in November 2025. Until then, deployments (via CloudFormation or GitHub) will remain operational, but customers will assume responsibility for maintenance and API-related updates after support ends.__ ⚠️🚨⚠️ 2 | 3 | 4 | ![SFM logo](docs/assets/images/sfm_logo.svg) 5 | 6 | 7 | Simple File Manager provides access to Amazon EFS through a RESTful API and responsive web app. Together, these components allow you the ability to manage data in your Amazon EFS filesystem from any location or device that can access the internet. You simply log-in to the Simple File Manager application from a web browser and directly upload, view, delete, or download data from any filesystem in your AWS account. All without the need to setup or maintain any dedicated EC2 or networking infrastructure. 8 | 9 | You can deploy the open source solution by clicking one of the one-click deployment links in the install section below. 10 | 11 | # Install 12 | 13 | Install the solution by visiting the AWS Solutions library and selecting *Launch in the AWS Console*: 14 | 15 | https://aws.amazon.com/solutions/implementations/simple-file-manager-for-amazon-efs/ 16 | 17 | # Getting Started 18 | 19 | 1. Launch the solution by following the steps in the [Install](#Install) section. 20 | * *Make sure to review the [installation parameters](#installation-parameters) section.* 21 | 2. Follow the stack creation prompts in CloudFormation. 22 | 3. When the deployment is completed, you will find the URL to the application in the "Outputs" tab of the stack. 23 | 4. Navigate to the application URL in a web browser. 24 | 25 | *During stack creation, you will have received an email containing your initial login credentials.* 26 | 27 | 5. Use the inital credentials to sign in. You will be required to create a new password. 28 | 6. Upon successful authentication, the application will route you to the home page, where you will see all the EFS Filesystems in your account for the selected region. 29 | 7. To grant Simple File Manager access to a file system, click the link labeled "false". This will take you to the file manager lambda creation page. 30 | 8. In the form, fill out the required input fields. Leave them at their default values if you're unsure what the options are. 31 | 9. Click submit and wait for the application to complete the request. 32 | 10. After completion, you will be routed back to the home page. 33 | 34 | *Lambda can take several minutes to provision a new function. Please allow 1-2 minutes if the managed state returns "Creating" and refresh the page.* 35 | 36 | 11. The link previously labeled false now returns true and the file system id is now a clickable link. 37 | 12. Click on the file system id link to access the file system. 38 | 39 | The application will route you to the file system page, where you can now perform file system operations. The current supported operations are: *List*, *Make directory*, *Upload*, *Download*, and *Delete.* 40 | 41 | # Cost 42 | 43 | The cost to deploy and use the solution is minimal due to its serverless architecture, which means users pay a small fee per request, rather than an always-on fee. In most cases the cost will fall entirely within the AWS Free Tier. 44 | 45 | # Installation Parameters 46 | 47 | ## Required parameters 48 | 49 | **Stack Name**: The name of the stack. 50 | 51 | **Admin Email**: The email address that will be used by the application Admin. The inital credentials will be sent to this address. 52 | 53 | # Architecture 54 | 55 | ![SFM simple](docs/assets/images/simple_file_manager_simple.png) 56 | 57 | *A detailed architecture diagram can be found in the docs directory* 58 | 59 | ___ 60 | 61 | 62 | 63 | 64 | ## Building distributable for customization 65 | 66 | 67 | ## Prerequisites 68 | [//]: # (Add any prerequisites for customization steps. e.g. Prerequisite: Node.js>10) 69 | 70 | * Install/update to Python 3.x 71 | * Install/update npm, this is needed to build and install the Vue.JS Web interface. 72 | * Install the AWS Command Line Interface (CLI) 73 | * Create an S3 bucket to store your CloudFormation template and resources with the instructions listed below. 74 | 75 | ## Running unit tests for customization 76 | * Clone the repository, then make the desired code changes 77 | * Next, run unit tests to make sure added customization passes the tests 78 | ``` 79 | cd test/unit 80 | chmod +x ./run_unit.sh 81 | ./run_unit.sh api 82 | ./run_unit.sh manager 83 | ``` 84 | 85 | * Configure the bucket name of your target Amazon S3 distribution bucket 86 | 87 | _Note:_ You would have to create an S3 bucket with the prefix 'my-bucket-name-'; aws_region is where you are testing the customized solution. Also, the assets in bucket should be publicly accessible. 88 | 89 | * Now build the distributable: 90 | For example if you want to deploy in us-east-1 make sure you have a bucket that is named BUCKET_BASE_NAME-region where region is us-east-1 or which ever region you are wanting to deploy your deployment assets to. Version number can be changed to what ever you want, I put 1.0.0 as a placeholder. 91 | 92 | This script will use the default AWS profile in your AWS CLI to upload assets to the bucket you provide. 93 | _Note:_ you must have the AWS Command Line Interface installed. 94 | ``` 95 | chmod +x ./build-s3-dist.sh \n 96 | ./build-s3-dist.sh --template-bucket BUCKET_BASE_NAME-us-east-1 --code-bucket BUCKET_BASE_NAME --version 1.0.0 --region us-east-1 \n 97 | ``` 98 | 99 | * Get the link of the solution template uploaded to your Amazon S3 bucket. 100 | The main template is called efs-file-manager.template 101 | 102 | * Deploy the solution to your account by launching a new AWS CloudFormation stack using the link of the solution template in Amazon S3. 103 | 104 | 105 | 106 | *** 107 | 108 | Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 109 | 110 | Licensed under the Apache License Version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at 111 | 112 | http://www.apache.org/licenses/ 113 | 114 | or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions and limitations under the License. 115 | 116 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting Security Issues 2 | 3 | We take all security reports seriously. 4 | When we receive such reports, 5 | we will investigate and subsequently address 6 | any potential vulnerabilities as quickly as possible. 7 | If you discover a potential security issue in this project, 8 | please notify AWS/Amazon Security via our 9 | [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/) 10 | or directly via email to [AWS Security](mailto:aws-security@amazon.com). 11 | Please do *not* create a public GitHub issue in this project. -------------------------------------------------------------------------------- /deployment/efs-file-manager-auth.yaml: -------------------------------------------------------------------------------- 1 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"). 4 | # You may not use this file except in compliance with the License. 5 | # A copy of the License is located at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # or in the "license" file accompanying this file. This file is distributed 10 | # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 11 | # express or implied. See the License for the specific language governing 12 | # permissions and limitations under the License. 13 | AWSTemplateFormatVersion: "2010-09-09" 14 | Description: (SO0145-Auth) Simple File Manager for Amazon EFS Solution Auth %%VERSION%% 15 | 16 | Parameters: 17 | AdminEmail: 18 | Description: Email address of the Simple File Manager Administrator 19 | Type: String 20 | ApiId: 21 | Description: REST API ID of the Simple File Manager API 22 | Type: String 23 | 24 | Resources: 25 | SimpleFileManagerUserPool: 26 | Type: AWS::Cognito::UserPool 27 | Properties: 28 | AdminCreateUserConfig: 29 | AllowAdminCreateUserOnly: True 30 | InviteMessageTemplate: 31 | EmailMessage: !Join ["", [ 32 | "Your username is {username} and temporary password is {####}
Stack Name: ", 33 | Ref: "AWS::StackName", 34 | "
Stack Overview:
", 35 | "https://", 36 | Ref: "AWS::Region", 37 | ".console.aws.amazon.com/cloudformation/home?region=", 38 | Ref: "AWS::Region", 39 | "#/stacks/stackinfo?stackId=", 40 | Ref: "AWS::StackId" 41 | ]] 42 | EmailSubject: "Welcome to AWS Simple File Manager for Amazon EFS" 43 | EmailConfiguration: 44 | EmailSendingAccount: 'COGNITO_DEFAULT' 45 | AutoVerifiedAttributes: ['email'] 46 | 47 | SimpleFileManagerWebAppClient: 48 | Type: AWS::Cognito::UserPoolClient 49 | Properties: 50 | UserPoolId: !Ref SimpleFileManagerUserPool 51 | PreventUserExistenceErrors: "ENABLED" 52 | 53 | # Service - cognito / security infrastructure 54 | 55 | # Super hacky lambda for formatting cognito role mapping since cognito is severely lacking in CF support 56 | # https://forums.aws.amazon.com/message.jspa?messageID=790437#790437 57 | # https://stackoverflow.com/questions/53131052/aws-cloudformation-can-not-create-stack-when-awscognitoidentitypoolroleattac 58 | 59 | CognitoRoleMappingTransformer: 60 | Type: AWS::Lambda::Function 61 | Metadata: 62 | cfn_nag: 63 | rules_to_suppress: 64 | - id: W89 65 | reason: "Custom resource deployed in default VPC" 66 | - id: W92 67 | reason: "ReservedConcurrentExecutions not needed since this function runs once when CloudFormation deploys" 68 | Properties: 69 | Code: 70 | ZipFile: | 71 | import json 72 | import cfnresponse 73 | def handler(event, context): 74 | print("Event: %s" % json.dumps(event)) 75 | resourceProperties = event["ResourceProperties"] 76 | responseData = { 77 | "RoleMapping": { 78 | resourceProperties["IdentityProvider"]: { 79 | "Type": resourceProperties["Type"] 80 | } 81 | } 82 | } 83 | if resourceProperties["AmbiguousRoleResolution"]: 84 | responseData["RoleMapping"][resourceProperties["IdentityProvider"]]["AmbiguousRoleResolution"] = \ 85 | resourceProperties["AmbiguousRoleResolution"] 86 | print(responseData) 87 | cfnresponse.send(event, context, cfnresponse.SUCCESS, responseData) 88 | Handler: !Join 89 | - '' 90 | - - index 91 | - .handler 92 | Role: !GetAtt CognitoRoleMapperLambdaExecutionRole.Arn 93 | Runtime: python3.11 94 | Timeout: 30 95 | 96 | CognitoRoleMapperLambdaExecutionRole: 97 | Type: 'AWS::IAM::Role' 98 | Properties: 99 | AssumeRolePolicyDocument: 100 | Version: 2012-10-17 101 | Statement: 102 | - Effect: Allow 103 | Principal: 104 | Service: 105 | - lambda.amazonaws.com 106 | Action: 107 | - 'sts:AssumeRole' 108 | Path: / 109 | Policies: 110 | - PolicyName: root 111 | PolicyDocument: 112 | Version: 2012-10-17 113 | Statement: 114 | - Effect: Allow 115 | Action: 116 | - 'logs:CreateLogGroup' 117 | - 'logs:CreateLogStream' 118 | - 'logs:PutLogEvents' 119 | Resource: 'arn:aws:logs:*' 120 | Metadata: 121 | guard: 122 | SuppressedRules: 123 | - IAM_NO_INLINE_POLICY_CHECK 124 | 125 | 126 | SimpleFileManagerIdentityPool: 127 | Type: AWS::Cognito::IdentityPool 128 | Properties: 129 | AllowUnauthenticatedIdentities: False 130 | CognitoIdentityProviders: 131 | - ClientId: !Ref SimpleFileManagerWebAppClient 132 | ProviderName: !GetAtt SimpleFileManagerUserPool.ProviderName 133 | 134 | # More hacky cfn for getting the role mapping 135 | TransformedRoleMapping: 136 | Type: Custom::TransformedRoleMapping 137 | Properties: 138 | ServiceToken: !GetAtt CognitoRoleMappingTransformer.Arn 139 | Type: Token 140 | AmbiguousRoleResolution: Deny 141 | IdentityProvider: 142 | 'Fn::Join': 143 | - ':' 144 | - - 'Fn::GetAtt': 145 | - SimpleFileManagerUserPool 146 | - ProviderName 147 | - Ref: SimpleFileManagerWebAppClient 148 | 149 | CognitoStandardAuthDefaultRole: 150 | Type: "AWS::IAM::Role" 151 | Metadata: 152 | cfn_nag: 153 | rules_to_suppress: 154 | - id: F38 155 | reason: "* resource is used to deny access in this policy" 156 | guard: 157 | SuppressedRules: 158 | - IAM_NO_INLINE_POLICY_CHECK 159 | Properties: 160 | AssumeRolePolicyDocument: 161 | Version: "2012-10-17" 162 | Statement: 163 | - Effect: "Allow" 164 | Principal: 165 | Federated: "cognito-identity.amazonaws.com" 166 | Action: 167 | - "sts:AssumeRoleWithWebIdentity" 168 | Condition: 169 | StringEquals: 170 | "cognito-identity.amazonaws.com:aud": !Ref SimpleFileManagerIdentityPool 171 | "ForAnyValue:StringEquals": 172 | "cognito-identity.amazonaws.com:amr": authenticated 173 | Policies: 174 | - PolicyName: !Sub "${AWS::StackName}-AuthNoGroup" 175 | PolicyDocument: 176 | Version: "2012-10-17" 177 | Statement: 178 | - Action: "*" 179 | Resource: "*" 180 | Effect: "Deny" 181 | 182 | CognitoStandardUnauthDefaultRole: 183 | Type: "AWS::IAM::Role" 184 | Properties: 185 | AssumeRolePolicyDocument: 186 | Version: "2012-10-17" 187 | Statement: 188 | - Effect: "Allow" 189 | Principal: 190 | Federated: "cognito-identity.amazonaws.com" 191 | Action: 192 | - "sts:AssumeRoleWithWebIdentity" 193 | Condition: 194 | StringEquals: 195 | "cognito-identity.amazonaws.com:aud": !Ref SimpleFileManagerIdentityPool 196 | "ForAnyValue:StringEquals": 197 | "cognito-identity.amazonaws.com:amr": unauthenticated 198 | 199 | SimpleFileManagerIdentityPoolRoleMapping: 200 | Type: AWS::Cognito::IdentityPoolRoleAttachment 201 | Properties: 202 | IdentityPoolId: !Ref SimpleFileManagerIdentityPool 203 | RoleMappings: !GetAtt TransformedRoleMapping.RoleMapping 204 | Roles: 205 | authenticated: !GetAtt CognitoStandardAuthDefaultRole.Arn 206 | unauthenticated: !GetAtt CognitoStandardUnauthDefaultRole.Arn 207 | 208 | SimpleFileManagerAdminGroup: 209 | Type: AWS::Cognito::UserPoolGroup 210 | Properties: 211 | Description: 'User group for Simple File Manager Admins' 212 | RoleArn: !GetAtt SimpleFileManagerAdminRole.Arn 213 | UserPoolId: !Ref SimpleFileManagerUserPool 214 | GroupName: !Sub "${AWS::StackName}-Admins" 215 | 216 | SimpleFileManagerAdminAccount: 217 | Type: AWS::Cognito::UserPoolUser 218 | Properties: 219 | DesiredDeliveryMediums: 220 | - EMAIL 221 | UserAttributes: [{"Name": "email", "Value": !Ref AdminEmail}] 222 | Username: !Ref AdminEmail 223 | UserPoolId: !Ref SimpleFileManagerUserPool 224 | 225 | SimpleFileManagerAdminRole: 226 | Type: "AWS::IAM::Role" 227 | Properties: 228 | AssumeRolePolicyDocument: 229 | Version: "2012-10-17" 230 | Statement: 231 | - Effect: "Allow" 232 | Principal: 233 | Federated: "cognito-identity.amazonaws.com" 234 | Action: 235 | - "sts:AssumeRoleWithWebIdentity" 236 | Condition: 237 | StringEquals: 238 | "cognito-identity.amazonaws.com:aud": !Ref SimpleFileManagerIdentityPool 239 | "ForAnyValue:StringEquals": 240 | "cognito-identity.amazonaws.com:amr": authenticated 241 | Policies: 242 | - PolicyName: !Sub "${AWS::StackName}-AdminPolicy" 243 | PolicyDocument: !Sub 244 | - |- 245 | { 246 | "Version": "2012-10-17", 247 | "Statement": [ 248 | { 249 | "Action": [ 250 | "execute-api:Invoke" 251 | ], 252 | "Effect": "Allow", 253 | "Resource": ["arn:aws:execute-api:${region}:${account}:${api}/*"] 254 | } 255 | ] 256 | } 257 | - { 258 | region: !Ref "AWS::Region", 259 | account: !Ref "AWS::AccountId", 260 | api: !Ref ApiId, 261 | } 262 | Metadata: 263 | guard: 264 | SuppressedRules: 265 | - IAM_NO_INLINE_POLICY_CHECK 266 | 267 | AddAdminUserToAdminGroup: 268 | DependsOn: SimpleFileManagerAdminAccount 269 | Type: AWS::Cognito::UserPoolUserToGroupAttachment 270 | Properties: 271 | GroupName: !Ref SimpleFileManagerAdminGroup 272 | Username: !Ref AdminEmail 273 | UserPoolId: !Ref SimpleFileManagerUserPool 274 | 275 | Outputs: 276 | AdminRoleArn: 277 | Value: !GetAtt SimpleFileManagerAdminRole.Arn 278 | UserPoolId: 279 | Value: !Ref SimpleFileManagerUserPool 280 | IdentityPoolId: 281 | Value: !Ref SimpleFileManagerIdentityPool 282 | UserPoolClientId: 283 | Value: !Ref SimpleFileManagerWebAppClient 284 | -------------------------------------------------------------------------------- /deployment/efs-file-manager-web.yaml: -------------------------------------------------------------------------------- 1 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"). 4 | # You may not use this file except in compliance with the License. 5 | # A copy of the License is located at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # or in the "license" file accompanying this file. This file is distributed 10 | # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 11 | # express or implied. See the License for the specific language governing 12 | # permissions and limitations under the License. 13 | AWSTemplateFormatVersion: "2010-09-09" 14 | Description: (SO0145-Web) Simple File Manager for Amazon EFS Solution Web %%VERSION%% 15 | 16 | Parameters: 17 | FileManagerAPIEndpoint: 18 | Type: String 19 | UserPoolId: 20 | Type: String 21 | IdentityPoolId: 22 | Type: String 23 | PoolClientId: 24 | Type: String 25 | 26 | Mappings: 27 | EFSFileSimpleApp: 28 | SourceCode: 29 | S3Bucket: "%%REGIONAL_BUCKET_NAME%%" 30 | CodeKeyPrefix: "simple-file-manager-for-amazon-efs/%%VERSION%%" 31 | TemplateKeyPrefix: "simple-file-manager-for-amazon-efs/%%VERSION%%" 32 | WebsitePrefix: "simple-file-manager-for-amazon-efs/%%VERSION%%/website" 33 | 34 | Resources: 35 | EFSFileSimpleLoggingBucket: 36 | Type: 'AWS::S3::Bucket' 37 | DeletionPolicy: Retain 38 | Metadata: 39 | cfn_nag: 40 | rules_to_suppress: 41 | - id: W35 42 | reason: "Logs bucket does not require logging configuration" 43 | - id: W51 44 | reason: "Logs bucket is private and does not require a bucket policy" 45 | Properties: 46 | AccessControl: LogDeliveryWrite 47 | OwnershipControls: 48 | Rules: 49 | - ObjectOwnership: ObjectWriter 50 | BucketEncryption: 51 | ServerSideEncryptionConfiguration: 52 | - ServerSideEncryptionByDefault: 53 | SSEAlgorithm: AES256 54 | VersioningConfiguration: 55 | Status: Enabled 56 | 57 | EFSFileSimpleWebsiteBucket: 58 | Type: AWS::S3::Bucket 59 | DeletionPolicy: Retain 60 | Properties: 61 | BucketEncryption: 62 | ServerSideEncryptionConfiguration: 63 | - ServerSideEncryptionByDefault: 64 | SSEAlgorithm: AES256 65 | WebsiteConfiguration: 66 | IndexDocument: "index.html" 67 | ErrorDocument: "index.html" 68 | LoggingConfiguration: 69 | DestinationBucketName: !Ref EFSFileSimpleLoggingBucket 70 | LogFilePrefix: "access_logs/" 71 | LifecycleConfiguration: 72 | Rules: 73 | - Id: "Keep access log for 30 days" 74 | Status: Enabled 75 | Prefix: "access_logs/" 76 | ExpirationInDays: 30 77 | AbortIncompleteMultipartUpload: 78 | DaysAfterInitiation: 1 79 | - Id: "Keep cloudfront log for 30 days" 80 | Status: Enabled 81 | Prefix: "cf_logs/" 82 | ExpirationInDays: 30 83 | AbortIncompleteMultipartUpload: 84 | DaysAfterInitiation: 1 85 | 86 | CopyWebSource: 87 | Type: Custom::WebsiteDeployHelper 88 | Properties: 89 | ServiceToken: !GetAtt WebsiteDeployHelper.Arn 90 | WebsiteCodeBucket: 91 | !Join ["-", [!FindInMap ["EFSFileSimpleApp", "SourceCode", "S3Bucket"], Ref: "AWS::Region"]] 92 | WebsiteCodePrefix: !FindInMap ["EFSFileSimpleApp", "SourceCode", "WebsitePrefix"] 93 | DeploymentBucket: !GetAtt EFSFileSimpleWebsiteBucket.DomainName 94 | 95 | EFSFileSimpleOriginAccessIdentity: 96 | Type: AWS::CloudFront::CloudFrontOriginAccessIdentity 97 | Properties: 98 | CloudFrontOriginAccessIdentityConfig: 99 | Comment: !Sub "access-identity-${EFSFileSimpleWebsiteBucket}" 100 | 101 | EFSFileSimpleWebsiteBucketPolicy: 102 | Type: "AWS::S3::BucketPolicy" 103 | Metadata: 104 | cfn_nag: 105 | rules_to_suppress: 106 | - id: F16 107 | reason: "website bucket policy requires a wildcard principal" 108 | Properties: 109 | Bucket: 110 | Ref: "EFSFileSimpleWebsiteBucket" 111 | PolicyDocument: 112 | Statement: 113 | - Effect: "Allow" 114 | Action: 115 | - "s3:GetObject" 116 | Resource: 117 | - !Sub "arn:aws:s3:::${EFSFileSimpleWebsiteBucket}/*" 118 | Principal: 119 | CanonicalUser: !GetAtt EFSFileSimpleOriginAccessIdentity.S3CanonicalUserId 120 | - Effect: Deny 121 | Principal: "*" 122 | Action: "*" 123 | Resource: !Sub "arn:aws:s3:::${EFSFileSimpleWebsiteBucket}/*" 124 | Condition: 125 | Bool: 126 | aws:SecureTransport: false 127 | 128 | EFSFileSimpleWebsiteDistribution: 129 | Type: AWS::CloudFront::Distribution 130 | Metadata: 131 | cfn_nag: 132 | rules_to_suppress: 133 | - id: W70 134 | reason: "Cloudfront protocol version TLS 1.2" 135 | Properties: 136 | DistributionConfig: 137 | Comment: "Website distribution for Simple File Manager for EFS Solution" 138 | Logging: 139 | Bucket: !Sub "${EFSFileSimpleLoggingBucket}.s3.amazonaws.com" 140 | Prefix: cf_logs/ 141 | IncludeCookies: true 142 | Origins: 143 | - Id: S3-solution-website 144 | DomainName: !Sub "${EFSFileSimpleWebsiteBucket}.s3.${AWS::Region}.amazonaws.com" 145 | S3OriginConfig: 146 | OriginAccessIdentity: !Sub "origin-access-identity/cloudfront/${EFSFileSimpleOriginAccessIdentity}" 147 | DefaultCacheBehavior: 148 | TargetOriginId: S3-solution-website 149 | AllowedMethods: 150 | - GET 151 | - HEAD 152 | - OPTIONS 153 | - PUT 154 | - POST 155 | - DELETE 156 | - PATCH 157 | CachedMethods: 158 | - GET 159 | - HEAD 160 | - OPTIONS 161 | ForwardedValues: 162 | QueryString: false 163 | ViewerProtocolPolicy: redirect-to-https 164 | DefaultRootObject: "index.html" 165 | CustomErrorResponses: 166 | - ErrorCode: 404 167 | ResponsePagePath: "/index.html" 168 | ResponseCode: 200 169 | - ErrorCode: 403 170 | ResponsePagePath: "/index.html" 171 | ResponseCode: 200 172 | IPV6Enabled: true 173 | ViewerCertificate: 174 | CloudFrontDefaultCertificate: true 175 | Enabled: true 176 | HttpVersion: 'http2' 177 | 178 | WebsiteHelperRole: 179 | Type: AWS::IAM::Role 180 | Metadata: 181 | cfn_nag: 182 | rules_to_suppress: 183 | - id: W11 184 | reason: "Website helper Lambda requires ability to read / write to both Content Analysis website bucket and build bucket" 185 | guard: 186 | SuppressedRules: 187 | - IAM_NO_INLINE_POLICY_CHECK 188 | DependsOn: EFSFileSimpleWebsiteBucket 189 | Properties: 190 | AssumeRolePolicyDocument: 191 | Version: 2012-10-17 192 | Statement: 193 | - Effect: Allow 194 | Principal: 195 | Service: 196 | - lambda.amazonaws.com 197 | Action: 198 | - sts:AssumeRole 199 | Policies: 200 | - PolicyName: !Sub "${AWS::StackName}-WebsiteHelperS3Access" 201 | PolicyDocument: 202 | Statement: 203 | - Effect: Allow 204 | Action: 205 | - "s3:GetObject" 206 | - "s3:PutObject" 207 | - "s3:ListBucket" 208 | Resource: 209 | - !Sub ${EFSFileSimpleWebsiteBucket.Arn}/* 210 | - Fn::Sub: 211 | - arn:aws:s3:::${websitecode}/* 212 | - websitecode: !Join ["-", [!FindInMap ["EFSFileSimpleApp", "SourceCode", "S3Bucket"], Ref: "AWS::Region"]] 213 | - Effect: Allow 214 | Action: 215 | - "s3:ListBucket" 216 | Resource: 217 | - !Sub ${EFSFileSimpleWebsiteBucket.Arn} 218 | - Fn::Sub: 219 | - arn:aws:s3:::${websitecode} 220 | - websitecode: !Join ["-", [!FindInMap ["EFSFileSimpleApp", "SourceCode", "S3Bucket"], Ref: "AWS::Region"]] 221 | - Effect: Allow 222 | Action: 223 | - "logs:CreateLogGroup" 224 | - "logs:CreateLogStream" 225 | - "logs:PutLogEvents" 226 | Resource: 227 | - !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/*" 228 | 229 | WebsiteDeployHelper: 230 | Type: AWS::Lambda::Function 231 | Metadata: 232 | cfn_nag: 233 | rules_to_suppress: 234 | - id: W89 235 | reason: "Custom resource deployed in default VPC" 236 | - id: W92 237 | reason: "ReservedConcurrentExecutions not needed since this function runs once when CloudFormation deploys" 238 | Properties: 239 | Code: 240 | S3Bucket: !Join ["-", [!FindInMap ["EFSFileSimpleApp", "SourceCode", "S3Bucket"], Ref: "AWS::Region"]] 241 | S3Key: 242 | !Join [ 243 | "/", 244 | [ 245 | !FindInMap ["EFSFileSimpleApp", "SourceCode", "CodeKeyPrefix"], 246 | "websitehelper.zip", 247 | ], 248 | ] 249 | Handler: website_helper.lambda_handler 250 | MemorySize: 256 251 | Role: !GetAtt WebsiteHelperRole.Arn 252 | Runtime: python3.11 253 | Timeout: 900 254 | Environment: 255 | Variables: 256 | FileManagerAPIEndpoint: !Ref FileManagerAPIEndpoint 257 | AwsRegion: !Ref AWS::Region 258 | UserPoolId: !Ref UserPoolId 259 | IdentityPoolId: !Ref IdentityPoolId 260 | PoolClientId: !Ref PoolClientId 261 | 262 | Outputs: 263 | EFSFileSimpleWebsiteUrl: 264 | Value: !Join ["", ["https://", !GetAtt EFSFileSimpleWebsiteDistribution.DomainName]] 265 | -------------------------------------------------------------------------------- /deployment/run-unit-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # This assumes all of the OS-level configuration has been completed and git repo has already been cloned 4 | # 5 | # This script should be run from the repo's deployment directory 6 | # cd deployment 7 | # ./run-unit-tests.sh 8 | # 9 | 10 | # Get reference for all important folders 11 | template_dir="$PWD" 12 | source_dir="$template_dir/../source" 13 | 14 | echo "------------------------------------------------------------------------------" 15 | echo "[Init] Clean old dist and node_modules folders" 16 | echo "------------------------------------------------------------------------------" 17 | echo "find $source_dir/services -iname "node_modules" -type d -exec rm -r "{}" \; 2> /dev/null" 18 | find $source_dir/services -iname "node_modules" -type d -exec rm -r "{}" \; 2> /dev/null 19 | echo "find $source_dir/services -iname "dist" -type d -exec rm -r "{}" \; 2> /dev/null" 20 | find $source_dir/services -iname "dist" -type d -exec rm -r "{}" \; 2> /dev/null 21 | echo "find ../ -type f -name 'package-lock.json' -delete" 22 | find $source_dir/services -type f -name 'package-lock.json' -delete 23 | echo "find $source_dir/resources -iname "node_modules" -type d -exec rm -r "{}" \; 2> /dev/null" 24 | find $source_dir/resources -iname "node_modules" -type d -exec rm -r "{}" \; 2> /dev/null 25 | echo "find $source_dir/resources -iname "dist" -type d -exec rm -r "{}" \; 2> /dev/null" 26 | find $source_dir/resources -iname "dist" -type d -exec rm -r "{}" \; 2> /dev/null 27 | echo "find ../ -type f -name 'package-lock.json' -delete" 28 | find $source_dir/resources -type f -name 'package-lock.json' -delete 29 | echo "find $source_dir/simulator -iname "node_modules" -type d -exec rm -r "{}" \; 2> /dev/null" 30 | find $source_dir/simulator -iname "node_modules" -type d -exec rm -r "{}" \; 2> /dev/null 31 | echo "find $source_dir/simulator -iname "dist" -type d -exec rm -r "{}" \; 2> /dev/null" 32 | find $source_dir/simulator -iname "dist" -type d -exec rm -r "{}" \; 2> /dev/null 33 | echo "find ../ -type f -name 'package-lock.json' -delete" 34 | find $source_dir/simulator -type f -name 'package-lock.json' -delete 35 | 36 | echo "------------------------------------------------------------------------------" 37 | echo "[Test] Services - Example Function" 38 | echo "------------------------------------------------------------------------------" 39 | cd $source_dir/example-function-js 40 | npm install 41 | npm test 42 | -------------------------------------------------------------------------------- /deployment/simple-file-manager-for-amazon-efs.yaml: -------------------------------------------------------------------------------- 1 | # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"). 4 | # You may not use this file except in compliance with the License. 5 | # A copy of the License is located at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # or in the "license" file accompanying this file. This file is distributed 10 | # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 11 | # express or implied. See the License for the specific language governing 12 | # permissions and limitations under the License. 13 | # 14 | # Template for Simple File Manager for Amazon EFS Solution 15 | # 16 | # author: aws-solutions-builder@ 17 | AWSTemplateFormatVersion: 2010-09-09 18 | 19 | Description: (SO0145) Simple File Manager for Amazon EFS Solution Main %%VERSION%% 20 | 21 | Parameters: 22 | AdminEmail: 23 | Description: Email address of the Simple File Manager Administrator 24 | Type: String 25 | 26 | Mappings: 27 | Solution: 28 | Data: 29 | ID: "SO0145" 30 | Version: "%%VERSION%%" 31 | AppRegistryApplicationName: "sfm" 32 | SolutionName: "Simple File Manager for Amazon EFS" 33 | ApplicationType: "AWS-Solutions" 34 | AttributeGroupName: "Solution-Metadata" 35 | SourceCode: 36 | General: 37 | GlobalS3Bucket: "%%GLOBAL_BUCKET_NAME%%" 38 | RegionalS3Bucket: "%%REGIONAL_BUCKET_NAME%%" 39 | CodeKeyPrefix: "simple-file-manager-for-amazon-efs/%%VERSION%%" 40 | TemplateKeyPrefix: "simple-file-manager-for-amazon-efs/%%VERSION%%" 41 | 42 | Resources: 43 | Application: 44 | Type: AWS::ServiceCatalogAppRegistry::Application 45 | Properties: 46 | Description: Service Catalog application to track and manage all your resources. The Solution ID is SO0145 and Solution Version is %%VERSION%%. 47 | Name: 48 | !Join 49 | - "-" 50 | - - !FindInMap [Solution, Data, "AppRegistryApplicationName"] 51 | - !Ref AWS::Region 52 | - !Ref AWS::AccountId 53 | - !Ref AWS::StackName 54 | Tags: { 55 | 'Solutions:SolutionID': !FindInMap [Solution, Data, "ID"], 56 | 'Solutions:SolutionVersion': !FindInMap [Solution, Data, "Version"], 57 | 'Solutions:SolutionName': !FindInMap [Solution, Data, "SolutionName"], 58 | 'Solutions:ApplicationType': !FindInMap [Solution, Data, "ApplicationType"], 59 | } 60 | 61 | AppRegistryApplicationStackAssociation0: 62 | Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation 63 | Properties: 64 | Application: !GetAtt Application.Id 65 | Resource: 66 | !Ref AWS::StackId 67 | ResourceType: CFN_STACK 68 | 69 | AppRegistryApplicationStackAssociationNestedStack1: 70 | Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation 71 | Properties: 72 | Application: !GetAtt Application.Id 73 | Resource: 74 | !Ref EFSFileManagerAPI 75 | ResourceType: CFN_STACK 76 | 77 | AppRegistryApplicationStackAssociationNestedStack2: 78 | Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation 79 | Properties: 80 | Application: !GetAtt Application.Id 81 | Resource: 82 | !Ref EFSFileAuthentication 83 | ResourceType: CFN_STACK 84 | 85 | AppRegistryApplicationStackAssociationNestedStack3: 86 | Type: AWS::ServiceCatalogAppRegistry::ResourceAssociation 87 | Properties: 88 | Application: !GetAtt Application.Id 89 | Resource: 90 | !Ref EFSFileWebApplication 91 | ResourceType: CFN_STACK 92 | 93 | DefaultApplicationAttributes: 94 | Type: AWS::ServiceCatalogAppRegistry::AttributeGroup 95 | Properties: 96 | Name: !Ref AWS::StackName 97 | Description: Attribute group for solution information. 98 | Attributes: 99 | { "ApplicationType" : !FindInMap [Solution, Data, "ApplicationType"], 100 | "Version": !FindInMap [Solution, Data, "Version"], 101 | "SolutionID": !FindInMap [Solution, Data, "ID"], 102 | "SolutionName": !FindInMap [Solution, Data, "SolutionName"] 103 | } 104 | 105 | AppRegistryApplicationAttributeAssociation: 106 | Type: AWS::ServiceCatalogAppRegistry::AttributeGroupAssociation 107 | Properties: 108 | Application: !GetAtt Application.Id 109 | AttributeGroup: !GetAtt DefaultApplicationAttributes.Id 110 | 111 | ApplicationInsightsConfiguration: 112 | Type: AWS::ApplicationInsights::Application 113 | DependsOn: 114 | - Application 115 | Properties: 116 | ResourceGroupName: 117 | !Join 118 | - "-" 119 | - - AWS_AppRegistry_Application 120 | - !FindInMap [Solution, Data, "AppRegistryApplicationName"] 121 | - !Ref AWS::Region 122 | - !Ref AWS::AccountId 123 | - !Ref AWS::StackName 124 | AutoConfigurationEnabled: true 125 | CWEMonitorEnabled: true 126 | OpsCenterEnabled: true 127 | 128 | # File Manager API Handler IAM Role 129 | # TODO: Scope some of the inline policies down 130 | EFSFileManagerIamRole: 131 | Type: "AWS::IAM::Role" 132 | Metadata: 133 | cfn_nag: 134 | rules_to_suppress: 135 | - id: W11 136 | reason: "* resource needed for ec2:DescribeSecurityGroups and lambda:CreateFunction in this policy" 137 | guard: 138 | SuppressedRules: 139 | - IAM_NO_INLINE_POLICY_CHECK 140 | Properties: 141 | AssumeRolePolicyDocument: 142 | Version: 2012-10-17 143 | Statement: 144 | - Effect: Allow 145 | Principal: 146 | Service: 147 | - lambda.amazonaws.com 148 | Action: 149 | - sts:AssumeRole 150 | Policies: 151 | - PolicyName: !Sub "${AWS::StackName}-API-Policy" 152 | PolicyDocument: 153 | Version: 2012-10-17 154 | Statement: 155 | - Effect: Allow 156 | Action: 157 | - logs:CreateLogGroup 158 | - logs:CreateLogStream 159 | - logs:PutLogEvents 160 | Resource: 161 | !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:*" 162 | - Effect: Allow 163 | Action: 164 | - "iam:CreateRole" 165 | Resource: "arn:aws:iam::*:*" 166 | - Effect: Allow 167 | Action: 168 | - "lambda:CreateFunction" 169 | - "ec2:DescribeSecurityGroups" 170 | - "ec2:DescribeSubnets" 171 | - "ec2:DescribeVpcs" 172 | - "ec2:DescribeSecurityGroupRules" 173 | Resource: "*" 174 | - Effect: Allow 175 | Action: 176 | - "elasticfilesystem:DescribeMountTargets" 177 | - "elasticfilesystem:DescribeFileSystems" 178 | - "elasticfilesystem:CreateAccessPoint" 179 | - "elasticfilesystem:DescribeAccessPoints" 180 | - "elasticfilesystem:DescribeMountTargetSecurityGroups" 181 | Resource: 182 | - "arn:aws:elasticfilesystem:*:*:file-system/*" 183 | - "arn:aws:elasticfilesystem:*:*:access-point/*" 184 | - "arn:aws:elasticfilesystem:*:*:*" 185 | - Effect: Allow 186 | Action: 187 | - "elasticfilesystem:TagResource" 188 | Resource: 189 | - "arn:aws:elasticfilesystem:*:*:access-point/*" 190 | - "arn:aws:elasticfilesystem:*:*:file-system/*" 191 | Condition: 192 | StringEquals: 193 | elasticfilesystem:CreateAction: CreateAccessPoint 194 | - Effect: Allow 195 | Action: 196 | - "iam:PassRole" 197 | Resource: 198 | - "arn:aws:iam::*:role/fs-*-manager-role" 199 | Condition: 200 | StringEquals: 201 | iam:PassedToService: lambda.amazonaws.com 202 | - Effect: Allow 203 | Action: 204 | - "iam:GetRole" 205 | Resource: 206 | - "arn:aws:iam::*:role/fs-*-manager-role" 207 | - Effect: Allow 208 | Action: 209 | - "elasticfilesystem:DeleteAccessPoint" 210 | Resource: "arn:aws:elasticfilesystem:*:*:access-point/*" 211 | Condition: 212 | StringEquals: 213 | aws:ResourceTag/Name: "simple-file-manager-access-point" 214 | - Effect: Allow 215 | Action: 216 | - "iam:DetachRolePolicy" 217 | - "iam:AttachRolePolicy" 218 | - "iam:DeleteRole" 219 | Resource: "arn:aws:iam::*:role/fs-*-manager-role" 220 | - Effect: Allow 221 | Action: 222 | - "lambda:InvokeFunction" 223 | - "lambda:GetFunction" 224 | - "lambda:DeleteFunction" 225 | Resource: "arn:aws:lambda:*:*:function:fs-*-manager-lambda" 226 | - Effect: Allow 227 | Action: 228 | - "cloudformation:CreateStack" 229 | - "cloudformation:DeleteStack" 230 | - "cloudformation:DescribeStacks" 231 | Resource: "arn:aws:cloudformation:*:*:stack/*" 232 | 233 | # File Manager API stack 234 | EFSFileManagerAPI: 235 | Type: "AWS::CloudFormation::Stack" 236 | Properties: 237 | TemplateURL: 238 | !Join [ 239 | "", 240 | [ 241 | "https://", 242 | !FindInMap [ "SourceCode", "General", "GlobalS3Bucket" ], 243 | ".s3.amazonaws.com/", 244 | !FindInMap ["SourceCode", "General", "TemplateKeyPrefix"], 245 | "/file-manager-api-stack.template", 246 | ], 247 | ] 248 | Parameters: 249 | ApiHandlerIamRole: !GetAtt EFSFileManagerIamRole.Arn 250 | botoConfig: '{"user_agent_extra": "AwsSolution/SO0145/%%VERSION%%"}' 251 | DeploymentPackageBucket: 252 | !Join ["-", [!FindInMap ["SourceCode", "General", "RegionalS3Bucket"], Ref: "AWS::Region"]] 253 | DeploymentPackageKey: 254 | !Join [ 255 | "/", 256 | [ 257 | !FindInMap ["SourceCode", "General", "CodeKeyPrefix"], 258 | "filemanagerapi.zip", 259 | ], 260 | ] 261 | stackPrefix: !Sub "${AWS::StackName}" 262 | 263 | # Deploy Authentication stack. 264 | EFSFileAuthentication: 265 | Type: "AWS::CloudFormation::Stack" 266 | Properties: 267 | TemplateURL: 268 | !Join [ 269 | "", 270 | [ 271 | "https://", 272 | !FindInMap [ "SourceCode", "General", "GlobalS3Bucket" ], 273 | ".s3.amazonaws.com/", 274 | !FindInMap ["SourceCode", "General", "TemplateKeyPrefix"], 275 | "/efs-file-manager-auth.template", 276 | ], 277 | ] 278 | Parameters: 279 | AdminEmail: !Ref AdminEmail 280 | ApiId: !GetAtt EFSFileManagerAPI.Outputs.RestAPIId 281 | 282 | 283 | # Deploy Web Application stack 284 | EFSFileWebApplication: 285 | Type: "AWS::CloudFormation::Stack" 286 | Properties: 287 | TemplateURL: 288 | !Join [ 289 | "", 290 | [ 291 | "https://", 292 | !FindInMap [ "SourceCode", "General", "GlobalS3Bucket" ], 293 | ".s3.amazonaws.com/", 294 | !FindInMap ["SourceCode", "General", "TemplateKeyPrefix"], 295 | "/efs-file-manager-web.template", 296 | ], 297 | ] 298 | Parameters: 299 | FileManagerAPIEndpoint: !Join [ '', !Split [ '/api/', !GetAtt EFSFileManagerAPI.Outputs.EndpointURL ] ] 300 | UserPoolId: !GetAtt EFSFileAuthentication.Outputs.UserPoolId 301 | IdentityPoolId: !GetAtt EFSFileAuthentication.Outputs.IdentityPoolId 302 | PoolClientId: !GetAtt EFSFileAuthentication.Outputs.UserPoolClientId 303 | 304 | Outputs: 305 | EFSFileSimpleWebsiteUrl: 306 | Value: !GetAtt EFSFileWebApplication.Outputs.EFSFileSimpleWebsiteUrl 307 | 308 | 309 | -------------------------------------------------------------------------------- /docs/assets/diagrams/simple_file_manager_auth_simple.xml: -------------------------------------------------------------------------------- 1 | 7Vhbc5s4FP41PJYBZC5+9CXpdqfd8ayn2+apo4AMagWHESI2/fUrgbC5GCdt4s1Od5MHo4Nu5/u+c6SDgVbp4S3HefIBIsIMx4oOBlobjuNYnid/lKVqLIHvN4aY06gx2SfDln4n2mhpa0kjUvQ6CgAmaN43hpBlJBQ9G+Yc9v1uO2D9VXMck5FhG2I2tn6ikUi0F651sv9GaJy0K9uWfpPitrM2FAmOYN8xoRsDrTiAaJ7Sw4owBV6LSzPuduLtcWOcZOIpAz4+3P2e/Um+fIa71R95/NfXIlu90bM8YFZqh/VmRdUiwKHMIqImsQ20xDzUJEmG0DLCRVK/U40dZWwFDLhsZ5DJTsuY44jKDQ7MheDw7QiohGKp90G4IIdJB+0jbFJvBFIieCW76AHID0x/3ozSanOQ9md/4s7xNCFJhzfUGrHWS3yc/gSpfNCo/gDCzuMI90BMRMo01lIxueqSHmIVXCbeF8gMGZTRAGzDQbdu4CJvGvHeGi8A9qzVeYt02+4g7TrngL4Szv4F4SqfgYsEYsgwew+Qa4S/EiEqrWdcCujjL6Hg1Wc9vm7cqYbpts31oftyXXVbG8Kp9IzwHuYkGqWbAeLSBSh5SC64inQexDwm4kK/2XkGOWFY0If+Pl6cjzaBd4Rvm7K9KEUiPaYhFkStm0Uqy0s/VGL/RrJixKPC7D2+lwdLjx3MaJzJ51DOplBeKj3LadlCv0hpFKk5lpwU9Du+r+dTVORAM1H76y4Nd30pIPSxogefknmXtmk5TkbPG8ucuXO7F0G69WR29OQb5Uxn5sEI2O0KBe6AzeOWfp7g4PHEppjb6qbOQ88Oyubo6GQ+q/57nQhzXzXCxoe3oyLs5hAmOItJJ6LkvYcbSrsek+4s72XDi9XT4tNWqZyT6BeJu+Bi3Fkmmnm9qGuS5M+H3fXjbP7fCyvvVcNqfGND9cEVhqRQsbSlac5UdN3S+ucDzmQVwOu7j7z6/FLhNH/sGEPW4MqNnhdP1dkB14su9PgpBqVgNJOx0VaYda0Dpyu2jBb5f6tWnbp+D27rx+79sDt3V2/lUEtnAwUVFJQs7kEISM/oRaiIH8uqIzm197aIc9q29lctiYu8cXRHD2ofjdIIv3kgjeAmipOZWRb1WpM6fHp9Ybv9+gK5+oLfqS98fQXp1het7cXTwmwklI9FHfQbAPY0zVyb1/P1IsQZrbP9QIOLtRcEy2nJjlTwAqzOgkHV6J6pGn3TPUfstQp0d0Tsu0gVKKL6n9xnkYs8+9XJ9UbkTp/ei827fzHVOKdfYlkz73E1pns9X/gz+x+m2/fM9mNu1ZrGSdpzzcAeMx78OOOyefpa2pz/p2/O6OZv -------------------------------------------------------------------------------- /docs/assets/diagrams/simple_file_manager_detailed.xml: -------------------------------------------------------------------------------- 1 | 7Vxbk5u4Ev418xgXQlwffRknqZNsTdXsbnbPi0sG2SbByAXyeLy/fgVIXCTwkDGM7ew4UxXUCEmo++v+Wgju4HT7/DFGu81X4uPwTtf85zs4u9N1HWiQ/ZdKjrnEhUYuWMeBn4tAKXgM/sFcqHHpPvBxUqtICQlpsKsLPRJF2KM1GYpjcqhXW5Gw3usOrXmPWil49FCIlWrfAp9ucqljVmp/wsF6I3oGGj+zRaIyFyQb5JNDRQTv7+A0JoTmR9vnKQ7TyRPzkl83bzlbDCzGEe1ywf/GaPbnRx19/H3925zMt+h78ukDb+UJhXt+w+Nvj0wwDcne5+OmRzEZOxJENJtQc8L+WH9T7c5kZ6ZpaaSbkkAu23UBUEtpG3WBXLbrAiA3D6T+gTzAikAp1ZrXpP61ygDZH5yQPQ2DCE8L09OYcB0jP2AqmZKQxEwWkYjN3mRDtyErAXZ42AQUP+6Ql87qgcGGyVYkotz4gS7KfOLTVpnx7NLj7fM6xdkIHRJjtI7Jfpd1+ZmZf+PZBTtceJkyWSM0Jj+wGNidDtm/eWosk1UQhtKAn3BMA4aDcRis07YpSbtCvBTiFU1bZHcRROsvWWkGNT7ypi58lGywz29HtV1hiKxX/FwRcVv+iMkW0/jIqgjXYnNcccfi8OKhRCmwhBfZVCDqGFyIuGtYF22X6GEHHEA/ASaoK2hSICR0FqIlDh9IEtCAVCZUzPoX6fQ28P20iUIBcX5DipqKilULSq2O9Rv5r1BA4VrRMqx6ylbFAAjrmgG6qhrDbtCMbQ2lGV31c4pmGjCgAMYcW1PHqlozaIWKDGEJGEVTqipOG9fLCKnP80ir/qy3nHZbmfX7+WO3qNIYWZqiS2OEUaNMrVrm9xt6kIVNMlsVArWaCBWqsEnWFBflq0HD1UC6uj0qtXllOVqxc5Y2htCunJsFMWso90MRiVPTqgWMtD3bBsBqQswq+8n+/0U31+rWZP9XiasvxVCU7PIJWQXP2G8LqjFOyD72cB5SJ6zYFFxxiBI2wAWbB7xIjgnF23an3j/C+VlDh43orjgAaI8Mw9VtE1o6BI5jqPhvqdK/E1a8wZ8P03eOefsc82nnNbJLw3GA0S+77JtFlvmaICuuSlZs2EBWLH2oqAksBSgPcfCEKE6Rsl9GmL6j5vZRk2BvHwf0uCgrP2YQEg3LeAKGfT8Zq8H33prrc6e/lK3op3ewQSlnM20VbHoT2AAcDGwqRx0/oYBF8iBkymFn/p+aia5NXpUwqHP56oShaEpmGR7TCI5PsKoloZRsK6ZQXNGHUnXJg5qmqlRDb1KqPVjeoWZ32F9jMbkphyVrEqHwvpRKCXJZ5wtJtZPp7Tum9MidAdpTUvceCUUxHadrjlWDYLJ5kA7/NIpy0nninpy8HmtvjU+xSJPTt/SGT+ovZhyWBk/1dc4mVfBLH9IQU+pdSvJdINHGfKD8olKfbH7QsVKNB67WboBlurWOxPLNvOWCD/K6UL0+O8iHUFpXMSevNzhHcSJM55jnBbIpnpWgcbvqln/xyj2nXjyQnJN5ZVrH8f0TzlkLaAukp/MrkQT24cYKPsftxjDtlKXIVNBR/ZgNh4pNsGNsGg8Ym4rgMVh4qtOUQWOTbl08NgHznd2/s/v/ArvXHffS7F48bH5bIsjmMD7+xa/PCn+nBWbSvDh7rp6cHaulBxwH7OZTF3gmYwRdKSNwB6GMP031ikjKDciC4CTVA1CsVTZfMAzXM8x3m3rZpkRQvbRNMV5XMxFovWRTunvqgmFsCjQnEEzyFUVozRSna1/QdoneIpmYaeYU2L9gMhGyGfTRYrWP+OOsQRMKIBmSYarphGWq0VDI+g+Gl3FczwH9q3RVrPS3cE3suPRaaeFYKfTos9yuPkvv22edlym4ilP4yrSROqvf81vp5Aw6AbbI8k6zzCI5qy57qVCDxfNRls0cSPxjkSF0lVFv2d3MTceERrt3as0n+wCpwb17wSA0NUG0GiirNZTSoXU9IAVvCFLBF24NpGLcbwHSHIutCzT/GZAWG8wuBlL7EiA9A1x6R3A514UtXcHW2PNwwvi+Vj5Y+JWW1vvY1dSZDq9xhGMULlA2pwuxyNh9F9MrkGw6r+LEYtm9dxMT2eGtINkQ70C8hGTjusKkGHcFyo/BdpeluEqmO374fMXUFu2CxRpRfEgXAZTc2R3bBmh3Lgpae0CVDQzxpErAylA3AloNT64cfWQNtdtP9HczyOoaI8F1BUkx7mqQTPGjfUIRCy5i5ci/laWjM+B6yZWjPgmvY8uPoo2Ro3cKlIMtHpk3RnkNuyOczd4Xqs9zm+AXnWfBAK5kng113983vGSCx/yObyOzuEpnudx7PzBdHAK6WZDld9ZKothoD14SOpKXNJwRVL2k/ZbphKE+x8nepF3FJFsSmgVM18Fyn6nveimuV465eSXIajfyup6VbQ75eyo9pZPyli1Da4qTtjVqsAF3qF1b5kWI75U8Hza7LuOa1xUOTHUZ948kI88PhIRJj1jtexHXI+soyKxBAup4ZjnO5HygDsl0oe1mm8MqIAYNi7tvjWD3tjiY2XVRyLyuRSFTXRSaYx/HiLJ51LXPPpsJZnX4HX4Dwc+UAugVYE88x7kZ7HVdNhrovYyf3RBlG/VdKQD83OsUUv1htkOJSa04hs/jr928wHk52dQGEMzPysmuc+8TxdsdiVF8LHcmezHOPCwKFQgNuC/KBrLPaXzPwlZ9zmBZm3mRjVG118W8ECVJ4N3V3xg70zUZHV2TWAu5FlpgtHDxLvBvg7n08RXDnFhGG8wln+DYLnCt/uE/2Ccs2PD37MZQOqKFj58CL/2CWqOvOA37/p78fgCwvofDEOSv+r0mrWETx2BvV1nXxfKHfl/TtoD0lJC53pHlVr4eIj07yB2M8gZnh5YNUx85wC1/3d4N7Ys+2NfFIQfXLLSU+ddOzn9nzSotM/530mZerVlWLD+FmFcvPygJ7/8F -------------------------------------------------------------------------------- /docs/assets/diagrams/simple_file_manager_simple.xml: -------------------------------------------------------------------------------- 1 | 7Zltc6M2EIB/jT/Wg3j3RwfbyU1zbWbc3rX94lFAxroTyAPyW399JRCvErFzsXPXTh3PhF1kadndZ7XAyAqS430Gt5uPNEJkZBrRcWTNRqYJLMPi/4TmVGomll0q4gxHclCjWOK/kVQaUrvDEco7AxmlhOFtVxnSNEUh6+hgltFDd9iaku6qWxjLFY1GsQwhQcqwzzhim1LrO63RDwjHm2plYMgzCawGS0W+gRE9tFTWfGQFGaWsPEqOASLCeZVfyt8tBs7WhmUoZZf84OcpnH26N+H9b/EvC7pI4Jf84Sc5yx6Snbzg6eclVwSE7iJpNztVzthSnLLCoc4d//L1AmPk8DOBkMam01P0Za+rAKok5ugq+rLXVYD+9KC3Pugb2FIoUmd6o7e+0TKQf607umMEpyioU8/gyjiDEeYhCSihGdelNOXeu9uwhHAJ8MPDBjO03MJQePXAseG6NU2ZTH5gVrJ0vJiVJ89WHCfHWHA2hofcHscZ3W2LJT/w9NeeXfHDVVgEk0/CMvoVVYaNTIv/LUSy3K0xIT2D9yhjmHMwJTgWczMqloJSImjNxIz8KnAaPxbSzDKk5bolIphvUCQvR83dKhH5qujYUslcvkc0QSw78SHVWcOXYMnKYlWgHVqcVjRuWoxarlRCWRvievIGH34gCXoFTZap4KQwVAWNwGdEnmiOGaYtj1Zuf+ydTnAUiSnqCGTlBSlxqge2U0ikHV83jb4hAnVthc+kXSqHI+Ma3cgAV42MaRR49mPj3iw2plrqlNhoMFCYcaZu4LvthAaXRkGDRz3btdJBjevLmXqet1MdMF0Q1RCa/hVC+BjkfvCA/b9M88OvGWDpV3TQbFbzxVIJorYqd6rPWacORrPv7VZV11Roa4zWea+68pjPDce0reGtopciRvERi+fb8oLW+CiuZShnBjm+MCuGwfa6XOtSwtJibXljw78V2EpWfHoK/m9d/v2ty34bapsW2/eBfd2m5erNSd2MSFRsDSoO0FVP41YboK9wssAE5aecoeSyIjrU2g3VsW7ZMz0PAFeJqBx85QItQ91K3XNpqlTXomKgbL5HZeEYKPL2mF8nWkk/qkV5eGN+fVa5LuhmleNX1baVV56vppVn3WhPtpTUQRG/gZYizdiGxjSFZN5oe51oM+aRClwLR39BjJ1kuOCOUTWWuh2ytEUYMLjvSVVOd1mIXqAFSCcymMXopT3T14csQwQyvO8acnWmgR5qrvkIUxijjB89wuQZvgfgM8MJgPcmwJ8pYzQ5W8hDJMh8L74Jd2AEV+tdGpZmKozX9lwDcpsXyS7kEx3kmr3Du1Xj7fxHIberJ4rnIAfflXJbvfFZ4mRbcK7gPn36cMVbojcAqb0hglu8iiFDB3jSFJDJ1LPBcL1REL4GbsDudWqOOfZdhTdXs6n65ti1b4ScrYT8R2KQ+zs7/SHmHVtOJf9ZyLU4O8p1S+nUlp5QhrmfRMpIZTQVD+ubWHMNT23Sacmvw/ylG7s9kDjvxLy6sxfP5NcZDwnXzzDfZfHzruD0x+U9bGxWcF84vmO5w7h3s1e5D+xtCG+qApN+EbA9XRHwXN3DjckVemttDjjfZd/NORmsojEkMM9xWKklkuAlr58l0LEvJdDXcv8GJOVPn0Tr10Tf6r1JsH1vbBvNpzdhabecoxfi2qg3RF0t/b/nYmu/BPLLHik6tnPn2kOdeg9T35uAifsOBeTVHby2W+fG7/hlQWHPKkJ7HIrXx9puv4vKLZt6z+g3Gd646iha9QXonqd/w607F5v3ymVeNm/nrfk/ -------------------------------------------------------------------------------- /docs/assets/images/launch-stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-solutions/simple-file-manager-for-amazon-efs/2ecb7521b3a81e48e49ff885a6e530924ae9b8f5/docs/assets/images/launch-stack.png -------------------------------------------------------------------------------- /docs/assets/images/sfm_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-solutions/simple-file-manager-for-amazon-efs/2ecb7521b3a81e48e49ff885a6e530924ae9b8f5/docs/assets/images/sfm_logo.png -------------------------------------------------------------------------------- /docs/assets/images/simple_file_manager_auth_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-solutions/simple-file-manager-for-amazon-efs/2ecb7521b3a81e48e49ff885a6e530924ae9b8f5/docs/assets/images/simple_file_manager_auth_flow.png -------------------------------------------------------------------------------- /docs/assets/images/simple_file_manager_auth_simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-solutions/simple-file-manager-for-amazon-efs/2ecb7521b3a81e48e49ff885a6e530924ae9b8f5/docs/assets/images/simple_file_manager_auth_simple.png -------------------------------------------------------------------------------- /docs/assets/images/simple_file_manager_detailed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-solutions/simple-file-manager-for-amazon-efs/2ecb7521b3a81e48e49ff885a6e530924ae9b8f5/docs/assets/images/simple_file_manager_detailed.png -------------------------------------------------------------------------------- /docs/assets/images/simple_file_manager_detailed_numbered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-solutions/simple-file-manager-for-amazon-efs/2ecb7521b3a81e48e49ff885a6e530924ae9b8f5/docs/assets/images/simple_file_manager_detailed_numbered.png -------------------------------------------------------------------------------- /docs/assets/images/simple_file_manager_simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aws-solutions/simple-file-manager-for-amazon-efs/2ecb7521b3a81e48e49ff885a6e530924ae9b8f5/docs/assets/images/simple_file_manager_simple.png -------------------------------------------------------------------------------- /sonar-project.properties: -------------------------------------------------------------------------------- 1 | # Uncomment to enable debugging by default 2 | #sonar.verbose=true 3 | #sonar.log.level=DEBUG 4 | 5 | # Disable if needed 6 | #sonar.scm.disabled=true 7 | 8 | # 9 | # Refer to https://docs.sonarqube.org/latest/project-administration/narrowing-the-focus/ 10 | # for details on sources and exclusions. Note also .gitignore 11 | # 12 | 13 | sonar.sources= \ 14 | source/api 15 | 16 | 17 | sonar.exclusions= \ 18 | test/ 19 | 20 | sonar.sourceEncoding=UTF-8 21 | 22 | ## Python Specific Properties* 23 | # coverage 24 | # https://docs.sonarqube.org/pages/viewpage.action?pageId=4784149 25 | # Comma-separated list of ant pattern describing paths to coverage reports, relative to projects 26 | # root. Leave unset to use the default ("coverage-reports/*coverage-*.xml"). 27 | 28 | sonar.python.coverage.reportPaths= \ 29 | test/unit/coverage.xml 30 | -------------------------------------------------------------------------------- /source/api/.chalice/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0", 3 | "app_name": "api", 4 | "environment_variables": { 5 | "botoConfig": "{}", 6 | "stackPrefix": "" 7 | }, 8 | "stages": { 9 | "dev": { 10 | "manage_iam_role": false, 11 | "iam_role_arn": "arn:aws:iam::999999999999:role/DummyRoleToBeReplaced", 12 | "api_gateway_stage": "api" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /source/api/.idea/api.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /source/api/.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /source/api/.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | -------------------------------------------------------------------------------- /source/api/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /source/api/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /source/api/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | format_file 45 | 46 | 47 | 48 | 56 | 57 | 58 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 |