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

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 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)BUCKET_NAME: Restrict the buckets view to a single named bucket (defaults to unset, showing all buckets)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 encryption (defaults blank) Valid values can be SSE, KMS, SSE-C all others values don't enable the SSESSE_KEY: The key needed for SSE method (only for KMS and SSE-C)TIMEOUT: The read and write timeout in seconds (default to 600 - 10 minutes)ROOT_URL: A root URL prefix if running behind a reverse proxy (defaults to unset)make builddocker run -p 8080:8080 -e 'ACCESS_KEY_ID=XXX' -e 'SECRET_ACCESS_KEY=xxx' cloudlena/s3managerYou can deploy S3 Manager to a Kubernetes cluster using the Helm chart.
If there are multiple S3 users/accounts in a site then multiple instances of the S3 manager can be run in Kubernetes and expose behind a single nginx reverse proxy ingress.
The s3manager can be run with a ROOT_URL environment variable set that accounts for the reverse proxy location.
If the nginx configuration block looks like:
location /teamx/ {
proxy_pass http://s3manager-teamx:8080/;
auth_basic "teamx";
auth_basic_user_file /conf/teamx-htpasswd;
}
location /teamy/ {
proxy_pass http://s3manager-teamy:8080/;
<other nginx settings>
}
Then the instance behind the s3manager-teamx service has ROOT_URL=teamx and the instance behind s3manager-teamy has ROOT_URL=teamy.
Other nginx settings can be applied to each location.
The nginx instance can be hosted on some reachable address and reverse proxy to the different S3 accounts.
make lintmake testThe image is available on Docker Hub.
make build-imageThere is an example docker-compose.yml file that spins up an S3 service and the S3 Manager. You can try it by issuing the following command:
$ docker-compose up
$ claude mcp add s3manager \
-- python -m otcore.mcp_server <graph>