Giter Club home page Giter Club logo

s3manager's Introduction

S3 Manager

Go Report Card Build Status

A Web GUI written in Go to manage S3 buckets from any provider.

Screenshot

Features

  • List all buckets in your account
  • Create a new bucket
  • List all objects in a bucket
  • Upload new objects to a bucket
  • Download object from a bucket
  • Delete an object in a bucket

Usage

Configuration

The application can be configured with the following environment variables:

  • ENDPOINT: The endpoint of your S3 server (defaults to s3.amazonaws.com)
  • REGION: The region of your S3 server (defaults to "")
  • ACCESS_KEY_ID: Your S3 access key ID (required) (works only if USE_IAM is false)
  • SECRET_ACCESS_KEY: Your S3 secret access key (required) (works only if USE_IAM is false)
  • USE_SSL: Whether your S3 server uses SSL or not (defaults to true)
  • SKIP_SSL_VERIFICATION: Whether the HTTP client should skip SSL verification (defaults to false)
  • SIGNATURE_TYPE: The signature type to be used (defaults to V4; valid values are V2, V4, V4Streaming, Anonymous)
  • PORT: The port the s3manager app should listen on (defaults to 8080)
  • ALLOW_DELETE: Enable buttons to delete objects (defaults to true)
  • FORCE_DOWNLOAD: Add response headers for object downloading instead of opening in a new tab (defaults to true)
  • LIST_RECURSIVE: List all objects in buckets recursively (defaults to false)
  • USE_IAM: Use IAM role instead of key pair (defaults to false)
  • IAM_ENDPOINT: Endpoint for IAM role retrieving (Can be blank for AWS)
  • SSE_TYPE: Specified server side encrpytion (defaults blank) Valid values can be SSE, KMS, SSE-C all others values don't enable the SSE
  • SSE_KEY: The key needed for SSE method (only for KMS and SSE-C)
  • TIMEOUT: The read and write timout in seconds (default to 600 - 10 minutes)

Build and Run Locally

  1. Run make build
  2. Execute the created binary and visit http://localhost:8080

Run Container image

  1. Run docker run -p 8080:8080 -e 'ACCESS_KEY_ID=XXX' -e 'SECRET_ACCESS_KEY=xxx' cloudlena/s3manager

Deploy to Kubernetes

You can deploy s3manager to a Kubernetes cluster using the Helm chart.

Development

Lint Code

  1. Run make lint

Run Tests

  1. Run make test

Build Container Image

The image is available on Docker Hub.

  1. Run make build-image

Run Locally for Testing

There is an example docker-compose.yml file that spins up an S3 service and the s3manager. You can try it by issuing the following command:

$ docker-compose up

s3manager's People

Contributors

cloudlena avatar fortunen avatar fortunengwenya avatar lynxstarshine avatar nphmuller avatar sergeyshevch avatar tokibi avatar tri-vo-wfo avatar vominhtri231 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

s3manager's Issues

`USE_SSL=false` does not work

error listing buckets: Get "https://localhost:4572/": dial tcp 127.0.0.1:4572: connect: connection refused

With:

  s3-manager:
    image: mastertinner/s3manager
    ports:
      - 8002:8080
    environment:
      - ACCESS_KEY_ID=abc
      - SECRET_ACCESS_KEY=def
      - REGION=eu-central-1
      - ENDPOINT=localhost:4572
      - PORT=8080
      - USE_SSL=false

What does it actually provide?

Your screenshot just shows a list and you have nothing in your readme, but what feature set does this s3 manager provide? What can you accomplish with it?

error listing objects: Truncated response should have continuation token set

View bucket details, server error.

2020/09/07 08:27:22 GET	/buckets/test	89.997741ms
2020/09/07 08:27:22 error listing objects: Truncated response should have continuation token set
2020/09/07 08:27:23 error listing objects: Truncated response should have continuation token set

env:

  • docker image: mastertinner/s3manager
  • s3 provider: ceph

s3 manager is unable to list files

The S3 Manager is not able to list all files on S3 Bucket.

What I see on the S3 Manager:
Screenshot 2022-06-20 at 15 24 49

What Is the actual state of S3:
Screenshot 2022-06-20 at 15 28 27

Both (s3manager and minio client) are using the same credentials to connect to S3.

I am also able to create new buckets and delete them with S3 Manager; except the present one which has actual files (see screenshots above).

S3 Manager does not list those files, does not report any error logs, the download and delete button does not work.

Running the image on K8S. What could be the cause of the issue? Is it possible that S3 Manager has performance issues when S3 contains to many files?

login form

Hey 👋🏼 — this looks like something I'd like to use.

I was wondering if you'd take a contribution/PR where I add a login form to provide the key/secret/endpoint/region?

Just wanted to ask before I write the code for it.

Add support for base path

By policy I have to add a base path when using Ingress. Something like myHost.com/myBasepath/s3Manager.
It would be awesome to be able to configure the tool in way that it automatically adds /myBasepath/s3Manager to any link and the redirect on / to /buckets

License missing

Hi @mastertinner

Can you please provide a license for this code?

Thank you and kind regards
Sascha

USE_IAM not working

Hi,
when I try using the USE_IAM-environment variable using docker I get the error message "please provide ACCESS_KEY_ID". Tested with:

version: '3.4'
services:
  s3manager:
    image: cloudlena/s3manager
    environment:
      - USE_IAM=true
    ports:
      - 80:8080

and

docker run -p 80:8080 -e 'USE_IAM=true' cloudlena/s3manager

Cannot access files in sub-directories

We are uploading a file to bucket/subdir1/file1 and we can access the file from S3 using Spring Clients, but s3manager gives a "404 not found" error.

How do I browse subdirectories and access files under those subdirectories?

error parsing multipart form ... i/o timeout

Thank you for this awesome light-weight user friendly webui. :)

I'm trying to upload to a bucket using s3manager. I can confirm that I can upload small files. When I attempt to upload a file of 1.4Gb I get the error.

Below is the logs from the container.


2023/07/24 08:31:54 GET	/buckets	529.695212ms
2023/07/24 08:31:54 GET	/static/js/jquery-3.6.0.min.js	3.571188ms
2023/07/24 08:31:54 GET	/static/css/material-fonts.css	4.534327ms
2023/07/24 08:31:54 GET	/static/css/materialize.min.css	4.665875ms
2023/07/24 08:31:54 GET	/static/js/materialize.min.js	9.776546ms
2023/07/24 08:31:55 GET	/static/css/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2	1.945775ms
2023/07/24 08:31:56 GET	/buckets/uploads	371.396447ms
2023/07/24 08:31:57 GET	/static/css/material-fonts.css	1.716284ms
2023/07/24 08:31:57 GET	/static/js/jquery-3.6.0.min.js	2.522539ms
2023/07/24 08:31:57 GET	/static/css/materialize.min.css	3.027266ms
2023/07/24 08:31:57 GET	/static/js/materialize.min.js	3.070578ms
2023/07/24 08:35:55 GET	/buckets/uploads/	57.839621ms
2023/07/24 08:35:55 GET	/static/css/materialize.min.css	1.48533ms
2023/07/24 08:35:55 GET	/static/css/material-fonts.css	113.423µs
2023/07/24 08:35:55 GET	/static/js/jquery-3.6.0.min.js	465.394µs
2023/07/24 08:35:55 GET	/static/js/materialize.min.js	15.216274ms
2023/07/24 08:35:58 GET	/buckets	3.015084ms
2023/07/24 08:35:58 GET	/static/css/material-fonts.css	108.604µs
2023/07/24 08:35:58 GET	/static/js/jquery-3.6.0.min.js	279.164µs
2023/07/24 08:35:58 GET	/static/css/materialize.min.css	233.249µs
2023/07/24 08:35:58 GET	/static/js/materialize.min.js	229.151µs
2023/07/24 08:35:59 GET	/buckets/uploads	3.821679ms
2023/07/24 08:35:59 GET	/static/css/material-fonts.css	102.171µs
2023/07/24 08:35:59 GET	/static/css/materialize.min.css	204.654µs
2023/07/24 08:35:59 GET	/static/js/jquery-3.6.0.min.js	217.96µs
2023/07/24 08:35:59 GET	/static/js/materialize.min.js	176.682µs
2023/07/24 08:36:01 GET	/buckets/uploads/	2.401802ms
2023/07/24 08:36:02 GET	/static/css/material-fonts.css	81.022µs
2023/07/24 08:36:02 GET	/static/js/jquery-3.6.0.min.js	162.475µs
2023/07/24 08:36:02 GET	/static/css/materialize.min.css	196.139µs
2023/07/24 08:36:02 GET	/static/js/materialize.min.js	420.229µs
2023/07/24 08:38:20 GET	/buckets/uploads/	54.228247ms
2023/07/24 08:38:20 GET	/static/css/material-fonts.css	173.797µs
2023/07/24 08:38:20 GET	/static/js/jquery-3.6.0.min.js	185.85µs
2023/07/24 08:38:20 GET	/static/css/materialize.min.css	556.916µs
2023/07/24 08:38:20 GET	/static/js/materialize.min.js	13.022241ms
2023/07/24 08:38:20 GET	/static/css/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2	234.681µs
2023/07/24 08:38:20 GET	/favicon.ico	23.614µs
2023/07/24 08:38:31 POST	/api/buckets/uploads/objects	5.020486351s
2023/07/24 08:38:31 error parsing multipart form: read tcp 172.25.0.7:8080->172.25.0.2:35326: i/o timeout
2023/07/24 08:38:31 GET	/buckets/uploads/	2.265115ms
2023/07/24 08:38:31 GET	/static/css/material-fonts.css	96.743µs
2023/07/24 08:38:31 GET	/static/css/materialize.min.css	264.217µs
2023/07/24 08:38:31 GET	/static/js/jquery-3.6.0.min.js	311.956µs
2023/07/24 08:38:31 GET	/static/js/materialize.min.js	198.183µs
2023/07/24 08:38:31 GET	/static/css/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2	218.702µs
2023/07/24 08:38:34 GET	/buckets/uploads/	2.41638ms
2023/07/24 08:38:34 GET	/static/css/material-fonts.css	147.477µs
2023/07/24 08:38:34 GET	/static/js/jquery-3.6.0.min.js	225.174µs
2023/07/24 08:38:34 GET	/static/css/materialize.min.css	516.801µs
2023/07/24 08:38:34 GET	/static/js/materialize.min.js	368.822µs
2023/07/24 08:38:34 GET	/static/css/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2	248.457µs
2023/07/24 08:41:32 POST	/api/buckets/uploads/objects	5.018585869s
2023/07/24 08:41:32 error parsing multipart form: read tcp 172.25.0.7:8080->172.25.0.2:32776: i/o timeout
2023/07/24 08:41:32 GET	/buckets/uploads/	25.159823ms
2023/07/24 08:41:33 GET	/static/css/materialize.min.css	202.68µs
2023/07/24 08:41:33 GET	/static/js/jquery-3.6.0.min.js	94.768µs
2023/07/24 08:41:33 GET	/static/css/material-fonts.css	279.826µs
2023/07/24 08:41:33 GET	/static/js/materialize.min.js	966.496µs
2023/07/24 08:41:33 GET	/static/css/2fcrYFNaTjcS6g4U3t-Y5ZjZjT5FdEJ140U2DJYC3mY.woff2	170.792µs

s3 manager does not work with object store having self signed certificates

many object like Noobaa and others when hosted with self signed certificate require the s3 clients to connect with skip ssl verfiy
as and example the amazon s3 client also gives a provision to skip ssl verfiy for s3 compatible object store hosted with self signed certificate
aws --endpoint xxxxx --no-verify-ssl s3 mv s3:xxxx aws-bucket-data/pod.yaml

hence need to enhance s3 manager with USE_Skip_SSL_Verification option in environment variable
i have patched this issue by adding the above option
4b00800

Support for "subdirectories"

Are there any plan to support "sub" buckets

Id like to manage the bucket like a filesystem with paths like this:

  • Bucket/public/asset

Thanks
Happy to contribute

Setting endpoint: error creating s3 client: Endpoint url cannot have fully qualified paths

I get this error:

error creating s3 client: Endpoint url cannot have fully qualified paths

docker-composer.yaml:

s3-manager:
    image: mastertinner/s3manager
    ports:
      - 8082:8080
    environment:
      - ACCESS_KEY_ID=abc
      - SECRET_ACCESS_KEY=def
      - REGION=eu-central-1
      - ENDPOINT=http://localhost
      - PORT=4572

I tried:

  • http://localhost/
  • http://localhost
  • localhost/ (nothing happens / does not start)
  • localhost (error: Endpoint: localhost/ does not follow ip address or domain name standards)

Workaround to List Additional Shared Buckets

I've encountered this issue with Ceph Rgw where it is possible for a user to have access to some buckets that they won't see listed:

https://serverfault.com/questions/1153389/setting-read-only-access-on-ceph-rgw-bucket-for-another-user-on-same-tenant-not

I've figured out this workaround which seems reasonable for small deployments with not too many shared buckets to manage: Magnitus-@b9ccec7

Basically, you create an object containing a list of additional buckets you've shared with the user and then you can remotely edit the bucket without having to redeploy the user's s3manager environment.

I've edited my fork to work with that use-case and while it could be fancier (support json, newline separated entries, a file on the fs in addition to an s3 object, integration in the tests, etc), it appears to be good enough for what I need at the moment.

If you are interested in integrating it into the upstream project after a few adjustments, let me know.

Support for login ui

Hi

A feature to login to s3 based services would be aweseome.

  • Logging in to any provided s3 service
  • Logging in to restricted list of s3 services
  • Logging in via http basic auth

Kind regards
Sascha

Unable to connect to MinIO locally

Hey there,
maybe this question can be fixed easily.
I have installed s3manager via docker with this command:
docker run -p 8080:8080 -e 'ENDPOINT=localhost:9000' -e 'ACCESS_KEY_ID=XXX' -e 'SECRET_ACCESS_KEY=XXX' -e 'USE_SSL=false' cloudlena/s3manager
But i got an error:
2024/03/01 14:57:33 error listing buckets: Get "http://localhost:9000/": dial tcp 127.0.0.1:9000: connect: connection refused
The connection is working well with php. But there i have the option to set "USE_PATH_STYLE_ENDPOINT=true".

When i clone the repo and only run "docker-compose up" the connection with MINIO is working very well, cause a new instance was build. But i don't want to use a new instance, cause i have one. And i would like to use Ceph also.

Thanks in advance
Jonas

Access local environment / different endpoint

How may I access a different environment? Normally with aws-sdk we can specify and endpoint (e.g. http://localhost:4572) but is this possible in s3manager, too?

Currently I get:

s3-manager_1 | 2020/05/01 13:24:49 GET / 34.807µs
s3-manager_1 | 2020/05/01 13:24:49 error listing buckets: Get "https://s3.dualstack.us-east-1.amazonaws.com/": x509: certificate signed by unknown authority

Here is my docker-compose:

s3-manager:
    image: mastertinner/s3manager
    ports:
      - 8082:8080
    environment:
      - ACCESS_KEY_ID=abc
      - SECRET_ACCESS_KEY=def
      - REGION=eu-central-1
      - ENVIRONMENT=http://localhost:4572

P.S. Could you please add a docker-compose example to the docker-hub? Currently it is just a copy of the readme which was not very useful (explains how to build an image but on docker-hub I already have an image). This could also explain which environment variables can be set, currently I have to guess them... Example: https://hub.docker.com/r/taydy/dynamodb-manager/

P.P.S. A screenshot in the readme of the GUI would have been nice, too :)

Support any S3 compliant provider

Hello,
It could be a good idea to allow S3 compliant providers to work.

I've tried to use Scaleway and Alibaba Object Storage Service.
But as we can't modify the region, it's not working at all.

2021/08/04 21:00:29 error listing buckets: The authorization header is malformed; the region 'us-east-1' is wrong; expecting 'fr-par'
Here I've used Scaleway, and even tried to add the env. variable "REGION", but as it doesn't exists, it can't work at all.

Thanks! :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.