2023-01-09 08:12:11 +00:00
< p align = "center" >
2023-06-07 11:16:58 +00:00
< img src = "./.github/logo.svg" width = "500px" alt = "FrostFS logo" >
2023-01-09 08:12:11 +00:00
< / p >
< p align = "center" >
< a href = "https://frostfs.info" > FrostFS< / a > is a decentralized distributed object storage integrated with the < a href = "https://neo.org" > NEO Blockchain< / a > .
< / p >
---
2023-03-07 14:38:08 +00:00
[![Report ](https://goreportcard.com/badge/git.frostfs.info/TrueCloudLab/frostfs-s3-gw )](https://goreportcard.com/report/git.frostfs.info/TrueCloudLab/frostfs-s3-gw)
2023-06-06 14:36:56 +00:00
![Release ](https://img.shields.io/badge/dynamic/json.svg?label=release&url=https://git.frostfs.info/api/v1/repos/TrueCloudLab/frostfs-s3-gw/releases&query=$[0].tag_name&color=orange )
![License ](https://img.shields.io/badge/license-GPL--3.0-orange.svg )
2023-01-09 08:12:11 +00:00
2022-12-15 13:37:18 +00:00
# FrostFS S3 Gateway
2020-12-02 09:46:51 +00:00
2022-12-15 13:37:18 +00:00
FrostFS S3 gateway provides API compatible with Amazon S3 cloud storage service.
2021-06-10 13:29:12 +00:00
## Installation
2023-03-07 14:38:08 +00:00
```go get -u git.frostfs.info/TrueCloudLab/frostfs-s3-gw```
2021-06-10 13:29:12 +00:00
Or you can call `make` to build it from the cloned repository (the binary will
2022-12-15 13:37:18 +00:00
end up in `bin/frostfs-s3-gw` with authmate helper in `bin/frostfs-s3-authmate` ).
2022-06-15 10:30:55 +00:00
To build binaries in clean docker environment, call `make docker/all` .
2021-06-10 13:29:12 +00:00
2022-06-15 10:30:55 +00:00
Other notable make targets:
2021-06-10 13:29:12 +00:00
```
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
2022-12-15 14:08:25 +00:00
image](https://hub.docker.com/r/truecloudlab/frostfs-s3-gw) provided for released
2021-06-10 13:29:12 +00:00
(and occasionally unreleased) versions of gateway (`:latest` points to the
latest stable release).
## Execution
Minimalistic S3 gateway setup needs:
2022-12-15 13:37:18 +00:00
* FrostFS node(s) address (S3 gateway itself is not a FrostFS node)
2021-06-10 13:29:12 +00:00
Passed via `-p` parameter or via `S3_GW_PEERS_<N>_ADDRESS` and
`S3_GW_PEERS_<N>_WEIGHT` environment variables (gateway supports multiple
2022-12-15 13:37:18 +00:00
FrostFS nodes with weighted load balancing).
* a wallet used to fetch key and communicate with FrostFS nodes
2022-07-28 13:26:42 +00:00
Passed via `--wallet` parameter or `S3_GW_WALLET_PATH` environment variable.
2021-06-10 13:29:12 +00:00
These two commands are functionally equivalent, they run the gate with one
backend node, some keys and otherwise default settings:
```
2022-12-15 13:37:18 +00:00
$ frostfs-s3-gw -p 192.168.130.72:8080 --wallet wallet.json
2021-06-10 13:29:12 +00:00
$ S3_GW_PEERS_0_ADDRESS=192.168.130.72:8080 \
2021-06-25 09:54:01 +00:00
S3_GW_WALLET=wallet.json \
2022-12-15 13:37:18 +00:00
frostfs-s3-gw
2021-06-10 13:29:12 +00:00
```
2021-06-10 08:15:32 +00:00
It's also possible to specify uri scheme (grpc or grpcs) when using `-p` or environment variables:
```
2022-12-15 13:37:18 +00:00
$ frostfs-s3-gw -p grpc://192.168.130.72:8080 --wallet wallet.json
2021-06-10 08:15:32 +00:00
$ S3_GW_PEERS_0_ADDRESS=grpcs://192.168.130.72:8080 \
2021-06-25 09:54:01 +00:00
S3_GW_WALLET=wallet.json \
2022-12-15 13:37:18 +00:00
frostfs-s3-gw
2021-06-10 08:15:32 +00:00
```
2021-06-10 13:29:12 +00:00
2022-08-30 10:52:37 +00:00
## Domains
2023-03-24 12:49:23 +00:00
By default, s3-gw enable only `path-style access` .
2022-08-30 10:52:37 +00:00
To be able to use both: `virtual-hosted-style` and `path-style` access you must configure `listen_domains` :
```shell
2022-12-15 13:37:18 +00:00
$ frostfs-s3-gw -p 192.168.130.72:8080 --wallet wallet.json --listen_domains your.first.domain --listen_domains your.second.domain
2022-08-30 10:52:37 +00:00
```
So now you can use (e.g. `HeadBucket` . Make sure DNS is properly configured):
```shell
$ curl --head http://bucket-name.your.first.domain:8080
HTTP/1.1 200 OK
...
```
or
```shell
$ 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.
2024-06-17 11:36:53 +00:00
## Fuzzing
To run fuzzing tests use the following command:
```shell
$ make fuzz
```
This command will install dependencies for the fuzzing process and run existing fuzzing tests.
You can also use the following arguments:
```
FUZZ_TIMEOUT - time to run each fuzzing test (default 30)
FUZZ_FUNCTIONS - fuzzing tests that will be started (default "all")
FUZZ_AUX - additional parameters for the fuzzer (for example, "-debug")
FUZZ_NGFUZZ_DIR - path to ngfuzz tool
````
2021-08-18 19:18:49 +00:00
## Documentation
2021-06-10 13:29:12 +00:00
2021-08-18 19:18:49 +00:00
- [Configuration ](./docs/configuration.md )
2022-12-15 13:37:18 +00:00
- [FrostFS S3 AuthMate ](./docs/authmate.md )
- [FrostFS Tree service ](./docs/tree_service.md )
2021-08-18 19:18:49 +00:00
- [AWS CLI basic usage ](./docs/aws_cli.md )
2021-08-19 17:16:49 +00:00
- [AWS S3 API compatibility ](./docs/aws_s3_compat.md )
2021-08-24 10:39:18 +00:00
- [AWS S3 Compatibility test results ](./docs/s3_test_results.md )
2021-06-23 16:44:44 +00:00
2023-03-24 12:49:23 +00:00
## Credits
2022-07-14 08:40:57 +00:00
Please see [CREDITS ](CREDITS.md ) for details.