diff --git a/README.md b/README.md index 6c332f3..be34d56 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ Note that if you specify more than one storage option, *all* options will be wri `local_storage` - Object for writing to a file on disk. -`aws_storage` - Object for writing to an S3 bucket. +`aws_storage` - Object for writing to an S3 bucket (Support AWS S3 but also S3 Compatible Storage). `google_storage` - Object for writing to GCS. @@ -87,6 +87,10 @@ Note that if you specify more than one storage option, *all* options will be wri `secret_access_key` - Recommended to use the standard `SECRET_ACCESS_KEY` env var, but its possible to specify this in the config +`s3_endpoint` - S3 compatible storage endpoint (ex: http://127.0.0.1:9000) + +`s3_force_path_style` - Needed if your S3 Compatible storage support only path-style or you would like to use S3's FIPS Endpoint. + `s3_region` - S3 region as is required for programmatic interaction with AWS `s3_bucket` - bucket to store snapshots in (required for AWS writes to work) diff --git a/config/config.go b/config/config.go index d5073a1..35e1087 100644 --- a/config/config.go +++ b/config/config.go @@ -44,11 +44,13 @@ type S3Config struct { Uploader *s3manager.Uploader AccessKeyID string `json:"access_key_id"` SecretAccessKey string `json:"secret_access_key"` + Endpoint string `json:"s3_endpoint"` Region string `json:"s3_region"` Bucket string `json:"s3_bucket"` KeyPrefix string `json:"s3_key_prefix"` SSE bool `json:"s3_server_side_encryption"` StaticSnapshotName string `json:"s3_static_snapshot_name"` + S3ForcePathStyle bool `json:"s3_force_path_style"` } // ReadConfig reads the configuration file diff --git a/snapshot_agent/agent.go b/snapshot_agent/agent.go index 09d0c1a..afe014e 100644 --- a/snapshot_agent/agent.go +++ b/snapshot_agent/agent.go @@ -93,6 +93,14 @@ func (s *Snapshotter) ConfigureS3(config *config.Configuration) error { awsConfig.Credentials = credentials.NewStaticCredentials(config.AWS.AccessKeyID, config.AWS.SecretAccessKey, "") } + if config.AWS.Endpoint != "" { + awsConfig.Endpoint = aws.String(config.AWS.Endpoint) + } + + if config.AWS.S3ForcePathStyle != false { + awsConfig.S3ForcePathStyle = aws.Bool(config.AWS.S3ForcePathStyle) + } + sess := session.Must(session.NewSession(awsConfig)) s.S3Client = s3.New(sess) s.Uploader = s3manager.NewUploader(sess) diff --git a/vault_raft_snapshot_agent b/vault_raft_snapshot_agent new file mode 100755 index 0000000..d8f3d23 Binary files /dev/null and b/vault_raft_snapshot_agent differ