You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -343,14 +343,15 @@ If you need to serve partial files (like for streaming video), `air3` fully supp
343
343
344
344
If you're using signed URLs and expect clients to send `Range` headers, you must include the exact range claim when generating the URL (e.g., `cmd/signurl -range 'bytes=0-99'`). The Connector forwards authorized ranges to S3, seamlessly returning a `206 Partial Content` response to the client.
345
345
346
-
## Optional: Read-Only S3-Compatible API
346
+
## Optional: S3-Compatible API
347
347
348
-
While air3 primarily relies on its highly-secure HMAC signed URLs, you can optionally enable a **read-only S3-compatible API** (`AIR3_S3_API_ENABLED=true`). This is extremely useful if your clients or internal tools already use standard S3 SDKs (like `aws-cli` or `boto3`) and you want them to fetch files without modifying their code.
348
+
While air3 primarily relies on its highly-secure HMAC signed URLs, you can optionally enable a **path-style S3-compatible API** (`AIR3_S3_API_ENABLED=true`). It is read-only by default and is useful if your clients or internal tools already use standard S3 SDKs (like `aws-cli` or `boto3`) and you want them to fetch files without modifying their code.
349
349
350
350
### Security First
351
351
352
352
-**No Real S3 Credentials at the Edge:** You must define a *brand new, gateway-only* set of credentials (`AIR3_S3_API_ACCESS_KEY_ID` and `AIR3_S3_API_SECRET_ACCESS_KEY`). The Edge Gateway only uses these to verify incoming AWS SigV4 requests. It **does not** give the Edge access to the backend storage. These are completely separate from your real, private S3 credentials and your HMAC `AIR3_SIGNING_SECRET`.
353
-
-**Mutations Off by Default:** The API defaults to safe read operations: `GetObject`, `HeadObject`, `ListObjectsV2`, and `HeadBucket`. S3-compatible `PUT`/`DELETE` handling must be explicitly gated with `MUTATIONS_ENABLED=true`.
353
+
-**Supported v1 Operations:** The API supports read paths `GET`/`GetObject`, `HEAD`/`HeadObject`, `ListObjectsV2`, and `HeadBucket`, plus gated `PutObject` and `DeleteObject`.
354
+
-**Mutations Off by Default:** S3-compatible `PUT`/`DELETE` handling must be explicitly gated with `MUTATIONS_ENABLED=true`. `PutObject` requires `Content-Length` and `x-amz-content-sha256: UNSIGNED-PAYLOAD`; multipart upload, ACLs, tagging, versioning, AWS chunked/streaming payloads, and signed-payload `PUT` requests are unsupported.
354
355
-**Independent Edge/Connector Gates:** Routed mutations require `MUTATIONS_ENABLED=true` on both the Edge and the target Connector. Direct-server aliases bypass the Connector, so direct alias mutations require only the Edge gate. `AIR3_MUTATIONS_ENABLED` remains as a compatibility alias; if both names are non-empty, their boolean values must match.
Copy file name to clipboardExpand all lines: docs/configuration.md
+14-6Lines changed: 14 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -23,7 +23,7 @@ The Edge Gateway is your public-facing entry point. In the default recommended t
23
23
|`S3_{SUFFIX}_BUCKET`| unset | Optional per-server default bucket for multi-server public paths. For alias `blue`, `S3_BLUE_BUCKET=demo` lets signed URLs use `/blue/{key}` instead of `/blue/demo/{key}`. |
24
24
|`DIRECT_SERVERS`| unset | Bare fallback name for `AIR3_DIRECT_SERVERS`. If both are set, the values must match exactly or startup fails. |
25
25
|`AIR3_EDGE_ALLOWED_CONNECTOR_IDENTITIES`| unset | (Optional) Comma-separated list of allowed Connector certificate identities for mTLS ingest connections. |
26
-
|`AIR3_S3_API_ENABLED`|`false`| Opt in to the public read-only S3-compatible API for AWS SigV4-shaped requests. When `false`, normal air3 HMAC signed URLs continue unchanged and S3 API credentials are not required. |
26
+
|`AIR3_S3_API_ENABLED`|`false`| Opt in to the public S3-compatible API for AWS SigV4-shaped requests. It is read-only by default; gated mutation operations require `MUTATIONS_ENABLED=true`. When `false`, normal air3 HMAC signed URLs continue unchanged and S3 API credentials are not required. |
27
27
|`MUTATIONS_ENABLED`|`false`| Enables S3-compatible mutation methods at the Edge when mutation handling is installed. S3 API mutations are off by default. `AIR3_MUTATIONS_ENABLED` is a compatibility alias; if both names are non-empty, they must parse to the same boolean. Routed Connector mutations require this gate on both Edge and Connector; direct-server alias mutations require only the Edge gate. |
28
28
|`AIR3_S3_API_REGION`|`us-east-1`| Region clients must use in the AWS SigV4 credential scope. Region matching is strict. |
29
29
|`AIR3_S3_API_ACCESS_KEY_ID`| unset | Public gateway SigV4 verifier access key ID. Required only when `AIR3_S3_API_ENABLED=true`; not a backend connector/direct S3 credential. |
@@ -94,16 +94,17 @@ Use `AIR3_MULTI_SERVER=true` when a single Edge Gateway needs to route requests
94
94
**Combining Multi-Server with Short URLs:**
95
95
You can assign default buckets to specific server aliases using `S3_{SUFFIX}_BUCKET`. For example, setting `S3_BLUE_BUCKET=demo` allows the Edge to serve `/blue/file.txt` and automatically map it to the `demo` bucket for the "blue" connector.
96
96
97
-
## 3. Optional Read-Only S3-Compatible API
97
+
## 3. Optional S3-Compatible API
98
98
99
-
The Edge Gateway can expose a **read-only, path-style S3-compatible API** for clients and SDKs (like `aws-cli` or `boto3`) that natively speak AWS SigV4. Enable it with `AIR3_S3_API_ENABLED=true`.
99
+
The Edge Gateway can expose a **path-style S3-compatible API** for clients and SDKs (like `aws-cli` or `boto3`) that natively speak AWS SigV4. Enable it with `AIR3_S3_API_ENABLED=true`.
100
100
101
101
### Security First
102
102
You must provide a brand new set of *gateway verifier credentials*: `AIR3_S3_API_ACCESS_KEY_ID` and `AIR3_S3_API_SECRET_ACCESS_KEY`.
103
103
- These credentials **only** live on the Edge and are used merely to authenticate incoming AWS SigV4 requests.
104
104
- They **do not** grant access to backend S3 storage, and they are completely separate from your real S3 backend credentials.
105
-
- By default, the API is read-only (`GetObject`, `HeadObject`, `ListObjectsV2`, `HeadBucket`). S3-compatible mutations (`PUT`/`DELETE`) are disabled unless `MUTATIONS_ENABLED=true` is set.
106
-
- Routed S3 mutations require `MUTATIONS_ENABLED=true` on both the Edge and the target Connector. Direct-server aliases bypass the Connector, so direct alias mutations require only the Edge gate.
105
+
- Supported v1 operations are read paths `GET`/`GetObject`, `HEAD`/`HeadObject`, `ListObjectsV2`, `HeadBucket`, and gated mutations `PutObject` and `DeleteObject`. S3-compatible mutations (`PUT`/`DELETE`) are disabled unless `MUTATIONS_ENABLED=true` is set.
106
+
-`PutObject` accepts only known-length, unsigned-payload uploads: clients must send `Content-Length` and use `x-amz-content-sha256: UNSIGNED-PAYLOAD`. Multipart upload, ACLs, tagging, versioning, AWS chunked transfer (`aws-chunked`), streaming payloads, and signed-payload `PUT` requests are not supported.
107
+
- Routed S3 mutations require `MUTATIONS_ENABLED=true` on both the Edge and the target Connector. Direct-server aliases bypass the Connector, so direct alias mutations require only the Edge gate. `AIR3_MUTATIONS_ENABLED` is a compatibility alias; if both names are non-empty, their boolean values must match.
107
108
108
109
### Path-Style Mapping Examples
109
110
@@ -243,13 +244,20 @@ Our included `deploy/compose.yaml` demo clearly illustrates the required network
243
244
|`broker`|`edge-gateway`, `nats`, `private-connector`| The middle ground for NATS control messages and Edge ingest routing. |
The Compose demo wires the optional S3-compatible API variables through to the Edge with `AIR3_S3_API_ENABLED=false`, `MUTATIONS_ENABLED=false`, and empty verifier credentials by default, so credentials and mutation support are not required unless you explicitly enable them:
247
+
The Compose demo wires the optional S3-compatible API variables through to the Edge with `AIR3_S3_API_ENABLED=false`, `MUTATIONS_ENABLED=false`, and empty verifier credentials by default, so credentials and mutation support are not required unless you explicitly enable them. Leave `MUTATIONS_ENABLED` unset/false for the normal read-only demos; set it only when you intentionally want the opt-in mutation smoke checks to run:
0 commit comments