Portal Community
  Why a satellite node? None of the 13 bucket/object/folder operation nodes have accessKeyId/secretKey/region fields. Connection settings live in one place — this satellite node — and are merged onto every operation node wired to it via property merge. This keeps a workflow with many S3 operations from needing the same credential and region set repeatedly, and lets one workflow point different S3 nodes at different backends simply by connecting different satellites.

How It Works

Fields

FieldRequiredDescription
regionRequiredOne of 15 fixed AWS region codes (see below). Needed for SigV4 request signing even when Service URL points at a non-AWS backend. Default: us-east-1.
useIamRoleOptionalOnly enable when the host runs on AWS with an attached IAM role (EC2/ECS/Lambda). When on, the vault credential is ignored and the SDK walks its default credential chain. Default: false.
serviceURLOptionalEndpoint override. Leave blank for real AWS S3. Set to redirect to an S3-compatible backend — Backblaze B2, MinIO, Cloudflare R2, LocalStack, DigitalOcean Spaces. Must be a well-formed http(s) URL.
forcePathStyleOptionalUse bucket-in-path URLs (https://host/bucket/key) instead of virtual-hosted style (https://bucket.host/key). Almost always required once serviceURL is set. Default: false.
timeoutSecondsOptionalPer-request SDK timeout. Range 1–3600. Default: 60.
maxRetriesOptionalSDK retry attempts on throttling/5xx (standard mode, exponential backoff with jitter). Range 0–10. Default: 5.
credentialTtlSecondsOptionalHow long the resolved vault credential is cached in memory before the next call re-reads it (picks up rotated keys). Range 30–86400. Default: 300.
maxUploadBytesOptionalUpload payload ceiling. Range 1024 (1 KB) – 5368709120 (5 GB). Default: 104857600 (100 MB).
maxDownloadBytesOptionalDownload payload ceiling. Same range as upload. Default: 104857600 (100 MB).

The 15 Region Values

This exact list is the only set of values the Region field accepts — on the satellite and on every operation node's own standalone Region field — and the only set the backend validates against (INVALID_REGION otherwise, even when serviceURL points somewhere else entirely):

Region IDLocationRegion IDLocation
us-east-1US East (N. Virginia)eu-west-1Europe (Ireland)
us-east-2US East (Ohio)eu-west-2Europe (London)
us-west-1US West (N. California)eu-west-3Europe (Paris)
us-west-2US West (Oregon)eu-central-1Europe (Frankfurt)
ca-central-1Canada (Central)ap-south-1Asia Pacific (Mumbai)
ap-southeast-1Asia Pacific (Singapore)ap-northeast-1Asia Pacific (Tokyo)
ap-southeast-2Asia Pacific (Sydney)ap-northeast-2Asia Pacific (Seoul)
sa-east-1South America (São Paulo)
  Pointing at Backblaze B2, MinIO, R2, or another non-AWS backend? Pick any region from the list above (e.g. us-east-1) — it's a signing-only value, not a routing value; it does not need to match the backend's own region naming. Service URL is what actually redirects traffic, and it accepts any well-formed http(s) URL regardless of which AWS region name you picked.

Credential Model

ModeWhenWhat you provide
Vault credential (default)Normal use, any environmentAn ApiKey-type vault record — Username = access key ID, Password = secret key
IAM role (useIamRole=true)Host runs on EC2/ECS/Lambda with a role attachedNothing — the AWS SDK walks its default credential chain

An optional STS session token is read from a secondary vault alias (sessionToken) rather than a config field, so a temporary token never lands in workflow JSON, exports, or backups.

  Access-key format check is AWS-only. When Service URL is blank (real AWS), the access key ID must match AWS's own format (16–128 chars, ^[A-Z0-9]+$) or the node fails fast with INVALID_ACCESS_KEY_FORMAT. This check is skipped whenever Service URL is set, since S3-compatible providers use their own key-ID formats — e.g. Backblaze B2's keyID is lowercase hex.

Connecting to Backblaze B2

FieldValue
RegionAny value from the list above (e.g. us-east-1) — signing-only, does not need to match B2's own region code
Service URLYour bucket's real B2 S3-compatible endpoint, e.g. https://s3.us-east-005.backblazeb2.com
Force Path StyleChecked
Vault credentialSecret type ApiKey — Username = B2 keyID, Password = B2 applicationKey

The same pattern applies to MinIO, Cloudflare R2, DigitalOcean Spaces, and LocalStack — set Service URL to that backend's S3-compatible endpoint and Force Path Style on.

  Untested field parity on non-AWS backends: Canned ACL, Storage Class, and Server-Side Encryption option lists on the operation nodes are AWS-specific concepts, passed through verbatim to whatever endpoint Service URL points at. Non-AWS backends may silently ignore or reject some of these — verify each field against the specific backend's real behavior. Backblaze B2, for example, has no per-object canned ACL or storage-class concept; visibility is a bucket-level Private/Public setting instead.

Sample Configuration

// S3 Server satellite — real AWS
{
  "region": "us-east-1",
  "useIamRole": false,
  "timeoutSeconds": 60,
  "maxRetries": 5,
  "credentialTtlSeconds": 300,
  "maxUploadBytes": 104857600,
  "maxDownloadBytes": 104857600
}

// S3 Server satellite — Backblaze B2
{
  "region": "us-east-1",
  "serviceURL": "https://s3.us-east-005.backblazeb2.com",
  "forcePathStyle": true
}

Node Policies & GuardRails

Policy AreaRecommendation
Credential StorageStore the access key ID / secret key pair in the BizFirst vault as an ApiKey record. Never hardcode in workflow configuration.
One Satellite Per BackendUse a separate satellite per distinct backend/credential pair. An operation node can only be wired to one satellite at a time, so routing a workflow across two backends requires two satellites.
Region Field ConfusionDon't spend time trying to match a non-AWS backend's own region naming in the Region field — any valid AWS region code works since it's signing-only.
Force Path StyleTurn this on whenever Service URL is set. Almost every non-AWS S3-compatible backend requires bucket-in-path URLs.
Byte CapsLower maxUploadBytes/maxDownloadBytes from the 100 MB default if the workflow should never handle unexpectedly large files.