aws-s3-bucket-browser
                                
                                 aws-s3-bucket-browser copied to clipboard
                                
                                    aws-s3-bucket-browser copied to clipboard
                            
                            
                            
                        Single page application to browse AWS S3 bucket content
AWS S3 Bucket Browser 
Single HTML file to browse AWS S3 buckets
Demo
Installation
Self-Hosted
- Just download index.htmland upload it to your bucket.- Adjust config within index.htmlif needed, e.g.const config = { title: 'Bucket Browser', subtitle: 'made with ♥ by qoomon', logo: 'https://qoomon.github.io/aws-s3-bucket-browser/logo.png', favicon: 'https://qoomon.github.io/aws-s3-bucket-browser/favicon.ico', primaryColor: '#167df0', bucketUrl: undefined, // If bucketUrl is undefined, this script tries to determine bucket Rest API URL from this file location itself. // This will only work for locations like these // * https://s3.BUCKET-REGION.amazonaws.com/BUCKET-NAME/index.html // * http://BUCKET-NAME.s3-website-BUCKET-REGION.amazonaws.com/index.html // * https://storage.googleapis.com/BUCKET-NAME/index.html // * https://BUCKET-NAME.s3-web.BUCKET-REGION.cloud-object-storage.appdomain.cloud/ // If bucketUrl is set manually, ensure this is the bucket Rest API URL, e.g. // * https://s3.BUCKET-REGION.amazonaws.com/BUCKET-NAME // * https://storage.googleapis.com/BUCKET-NAME // The URL should return an XML document with <ListBucketResult> as root element. rootPrefix: undefined, // e.g. 'subfolder/' keyExcludePatterns: [/^index\.html$/], pageSize: 50, bucketMaskUrl: undefined, // If bucketMaskUrl is set file urls will be changed from ${bucketUrl}/${file} to ${bucketMaskUrl}/${file} // bucketMaskUrl: 'https://example.org' // => https://example.org/foo/bar.txt // bucketMaskUrl: document.location.origin // => ${document.location.origin}/foo/bar.txt defaultOrder: 'name-asc' // (name|size|dateModified)-(asc|desc) }
 
- Adjust config within 
- ⚠️ Ensure following Bucket Permissions
- Go to https://s3.console.aws.amazon.com/s3/buckets/<YOUR BUCKET NAME>/?tab=permissions
- Grant public read permission by Access Control ListorBucket Policy- Access Control List
- Enable List objectsforEveryone
 
- Enable 
- Bucket Policy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicRead", "Principal": "*", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<YOUR BUCKET NAME>", "arn:aws:s3:::<YOUR BUCKET NAME>/*" ] } ] }
 
- Access Control List
 
- Go to 
- Open <YOUR BUCKET URL>/index.htmlin your browser.
Hosted
- ⚠️ Ensure following Bucket Permissions
- Go to https://s3.console.aws.amazon.com/s3/buckets/<YOUR BUCKET NAME>/?tab=permissions
- Grant public read permission by Access Control ListorBucket Policy- see Self-Hosted
 
- Grant Cross Origin Access by CORS Configuration[ { "AllowedHeaders": [ "*" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "http://www.example.com" ], "ExposeHeaders": [ "x-amz-server-side-encryption", "x-amz-request-id", "x-amz-id-2" ], "MaxAgeSeconds": 3000 } ]
 
- Go to 
- Open hosted index.htmlin your browser and provide bucket url asbucketrequest parameter- ${INDEX_FILE_LOCATION}?bucket=${S3_BUCKET_URL}
- e.g. https://qoomon.github.io/aws-s3-bucket-browser/index.html?bucket=https://s3.eu-west-1.amazonaws.com/data.openspending.org
 
CloudFront Setup
If you use CloudFront in upfront of your S3 bucket ensure following CloudFront settings.
- Allowed/Cached HTTP Methods: GET,HEAD,OPTIONS
- Cached Based on Selected Headers: Whitelist- Access-Control-Request-Headers
- Access-Control-Request-Method
- Origin
 
- Query String Forwarding and Caching: Forward all
IBM Cloud Object Storage Setup
IBM Cloud Object storage only supports virtual host-style addressing, i.e. https://<bucket-name>s3-web.<region>.cloud-object-storage.appdomain.cloud/ for static website hosting. Otherwise follow the instructions
in this tutorial to configure your bucket. In addition, you may need to configure CORS for your bucket.
<CORSConfiguration>
  <CORSRule>
      <AllowedOrigin>*</AllowedOrigin>
      <AllowedMethod>GET</AllowedMethod>
      <AllowedHeader>*</AllowedHeader>
  </CORSRule>
</CORSConfiguration>
A example deployment is available here.