FrostFS S3 Protocol Gateway
Find a file
Denis Kirillov 094eb12578 [#726] Use client time on regular requests
Use `X-Amz-Date` header as `now` when
* compute expiration epoch
* set Timestamp for object and container
* forming locks
* send notifications

Signed-off-by: Denis Kirillov <denis@nspcc.ru>
2022-11-14 14:53:55 +03:00
.docker [#694] Update go version to 1.19 2022-08-30 15:54:33 +03:00
.github [#738] Run CI on support branch PR 2022-11-02 14:05:33 +03:00
api [#726] Use client time on regular requests 2022-11-14 14:53:55 +03:00
authmate [#488] Sync using oid.ID 2022-07-22 15:19:16 +03:00
cmd [#568] Add configuration for region to policy map 2022-11-11 13:12:49 +03:00
config [#568] Update docs 2022-11-11 13:12:49 +03:00
creds [#617] Unify test names 2022-10-25 19:04:37 +03:00
docs [#568] Update docs 2022-11-11 13:12:49 +03:00
internal [#726] Use client time on regular requests 2022-11-14 14:53:55 +03:00
.dockerignore [#471] Add docker/* target in Makefile 2022-06-16 11:12:42 +03:00
.gitignore [#407] Update gitignore 2022-07-22 15:19:16 +03:00
.golangci.yml [#272] Replace golint by revive 2021-10-01 12:25:54 +03:00
CHANGELOG.md [#568] Update docs 2022-11-11 13:12:49 +03:00
CONTRIBUTING.md [#579] Add CONTRIBUTING guide 2022-07-06 10:49:46 +03:00
CREDITS.md Add credits 2022-07-14 12:08:52 +03:00
go.mod [#712] Update SDK to support interrupt pool dial 2022-10-11 16:55:26 +03:00
go.sum [#712] Update SDK to support interrupt pool dial 2022-10-11 16:55:26 +03:00
help.mk [#725] Fix help 2022-10-17 19:16:05 +03:00
LICENSE [#264] Change NeoFS S3 Gateway license to AGPLv3 2021-09-20 10:38:28 +03:00
Makefile [#725] Fix help 2022-10-17 19:16:05 +03:00
README.md [#667] Add docs for listen_domains config param 2022-09-06 16:32:04 +03:00
syncTree.sh [#699] sync tree: Update service 2022-10-15 13:59:54 +03:00
updateTestsResult.sh [#454] Support repeating tests in resulting file 2022-06-07 17:37:05 +03:00
VERSION Release v0.25.0 2022-10-31 15:50:17 +03:00

NeoFS S3 Gateway

NeoFS S3 gateway provides API compatible with Amazon S3 cloud storage service.

Installation

go get -u github.com/nspcc-dev/neofs-s3-gw

Or you can call make to build it from the cloned repository (the binary will end up in bin/neofs-s3-gw with authmate helper in bin/neofs-s3-authmate). To build binaries in clean docker environment, call make docker/all.

Other notable make targets:

dep          Check and ensure dependencies
image        Build clean docker image
dirty-image  Build dirty docker image with host-built binaries
format       Run all code formatters
lint         Run linters
version      Show current version

Or you can also use a Docker image provided for released (and occasionally unreleased) versions of gateway (:latest points to the latest stable release).

Execution

Minimalistic S3 gateway setup needs:

  • NeoFS node(s) address (S3 gateway itself is not a NeoFS node) Passed via -p parameter or via S3_GW_PEERS_<N>_ADDRESS and S3_GW_PEERS_<N>_WEIGHT environment variables (gateway supports multiple NeoFS nodes with weighted load balancing).
  • a wallet used to fetch key and communicate with NeoFS nodes Passed via --wallet parameter or S3_GW_WALLET_PATH environment variable.

These two commands are functionally equivalent, they run the gate with one backend node, some keys and otherwise default settings:

$ neofs-s3-gw -p 192.168.130.72:8080 --wallet wallet.json

$ S3_GW_PEERS_0_ADDRESS=192.168.130.72:8080 \
  S3_GW_WALLET=wallet.json \
  neofs-s3-gw

It's also possible to specify uri scheme (grpc or grpcs) when using -p or environment variables:

$ neofs-s3-gw -p grpc://192.168.130.72:8080 --wallet wallet.json

$ S3_GW_PEERS_0_ADDRESS=grpcs://192.168.130.72:8080 \
  S3_GW_WALLET=wallet.json \
  neofs-s3-gw

Domains

By default, s3-gw enable only path-style access. To be able to use both: virtual-hosted-style and path-style access you must configure listen_domains:

$ neofs-s3-gw -p 192.168.130.72:8080 --wallet wallet.json --listen_domains your.first.domain --listen_domains your.second.domain

So now you can use (e.g. HeadBucket. Make sure DNS is properly configured):

$ curl --head http://bucket-name.your.first.domain:8080
HTTP/1.1 200 OK
...

or

$ curl --head http://your.second.domain:8080/bucket-name
HTTP/1.1 200 OK
...

Also, you can configure domains using .env variables or yaml file.

Documentation

Credits

Please see CREDITS for details.