Skip to content

Amazon S3

FlexFS stores file data as compressed blocks in object storage (optionally encrypted end-to-end with AES-256). Amazon S3 is the most commonly used backend and serves as the reference implementation for S3-compatible services such as MinIO, Wasabi, Backblaze B2, and Ceph RGW.

Create a dedicated S3 bucket for flexFS block storage. FlexFS writes opaque binary blocks — there is no reason to enable versioning or lifecycle rules.

Terminal window
aws s3api create-bucket \
--bucket my-flexfs-blocks \
--region us-east-1

For regions other than us-east-1, include a location constraint:

Terminal window
aws s3api create-bucket \
--bucket my-flexfs-blocks \
--region eu-west-1 \
--create-bucket-configuration LocationConstraint=eu-west-1
  • Block Public Access: Enable all four “Block Public Access” settings. FlexFS never requires public access.
  • Versioning: Not required. FlexFS manages its own block lifecycle.
  • Object Lock: Not required.
  • Encryption: See the Server-Side Encryption section below if you want S3-managed encryption at rest.

FlexFS requires the following S3 permissions on the bucket:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-flexfs-blocks",
"arn:aws:s3:::my-flexfs-blocks/*"
]
}
]
}

Attach this policy to the IAM user or role that flexFS will authenticate as.

FlexFS supports two authentication methods for S3. The method is determined by whether static credentials are provided.

Provide an IAM access key ID and secret access key. During block store creation, set:

  • blockUser — the AWS access key ID
  • blockPass — the AWS secret access key

These values are stored in the credentials file for the metadata server and proxy server. For example, a metadata server credentials file at ~/.flexfs/meta/creds would contain:

adminAddr = "admin.example.com:443"
blockUser = "$USERNAME"
blockPass = "$PASSWORD"
token = "$TOKEN"

When blockPass is left empty, flexFS automatically attempts to use EC2 instance role credentials via the instance metadata service (IMDS). If instance role credentials are unavailable, it falls back to the default AWS credential chain (environment variables, shared credentials file, etc.).

Instance roles are the recommended authentication method for production deployments on AWS, as they eliminate the need to manage static credentials.

FlexFS uses the AWS SDK v2 with path-style addressing for any endpoint that does not end in amazonaws.com. This enables compatibility with S3-compatible object storage services.

Set the block store endpoint to your MinIO server address:

  • API code: s3
  • Endpoint: https://minio.example.com:9000 (or http:// for non-TLS)
  • blockUser: MinIO access key
  • blockPass: MinIO secret key

Wasabi provides an S3-compatible API with regional endpoints:

  • API code: s3
  • Endpoint: https://s3.wasabisys.com (or the region-specific endpoint, e.g. https://s3.us-east-2.wasabisys.com)
  • Region: The Wasabi region (e.g. us-east-2)
  • blockUser: Wasabi access key
  • blockPass: Wasabi secret key

Use Backblaze B2’s S3-compatible API:

  • API code: s3
  • Endpoint: https://s3.us-west-004.backblazeb2.com (use your account’s regional endpoint)
  • blockUser: B2 application key ID
  • blockPass: B2 application key

For Ceph RADOS Gateway deployments:

  • API code: s3
  • Endpoint: Your RGW endpoint (e.g. https://rgw.example.com)
  • blockUser: RGW access key
  • blockPass: RGW secret key

FlexFS supports S3 server-side encryption with Amazon S3-managed keys (SSE-S3, AES256). When enabled, every PutObject call includes the x-amz-server-side-encryption: AES256 header, instructing S3 to encrypt blocks at rest using AWS-managed keys.

Enable SSE on the proxy server or mount client with the --sse flag.

When creating a block store via configure.flexfs (Enterprise) or the installer, provide:

FieldValue
Provideraws
RegionAWS region code (e.g. us-east-1)
APIs3
BucketYour S3 bucket name
PrefixOptional key prefix for multi-tenant buckets
EndpointLeave empty for standard AWS S3; set for S3-compatible stores
blockUserAccess key ID (or leave empty for instance roles)
blockPassSecret access key (or leave empty for instance roles)