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
docs: update README and add chart configuration reference
- Rewrite README to be more concise with streamlined diagrams
- Add chart/README.md with complete helm values reference
- Link to chart/README.md from main README
Copy file name to clipboardExpand all lines: README.md
+28-77Lines changed: 28 additions & 77 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@
7
7
<h1align="center">S3Proxy</h1>
8
8
9
9
<palign="center">
10
-
<strong>Transparent encryption for S3. Zero code changes.</strong>
10
+
<strong>Transparent client-side encryption for S3. Zero code changes.</strong>
11
11
</p>
12
12
13
13
<palign="center">
@@ -21,23 +21,16 @@
21
21
22
22
## Overview
23
23
24
-
S3's server-side encryption is great, but your cloud provider holds the keys. With S3Proxy, **you**control encryption.
24
+
S3's server-side encryption is great, but your cloud provider holds the keys. S3Proxy sits between your app and S3, encrypting everything **before**it leaves your infrastructure.
All verified: **backup → cluster delete → restore → data integrity check**
79
+
All verified: **backup, cluster delete, restore, data integrity check.**
87
80
88
81
---
89
82
90
83
## How It Works
91
84
92
-
### Credential Flow
85
+
**Credential flow** — S3 clients sign requests with their secret key. When S3Proxy encrypts the payload, the body changes and the original signature is invalidated. The proxy re-signs with the same key. Configure credentials once on the proxy, all clients use them.
S3 clients sign requests with their secret key. When S3Proxy encrypts the payload, it changes the body—invalidating the original signature. The proxy must re-sign, which requires the secret key.
103
-
104
-
**→ Configure credentials once on the proxy. All clients use those same credentials.**
105
-
106
-
### Encryption Architecture
87
+
**Envelope encryption** — Your master key derives a KEK (Key Encryption Key). Each object gets a random DEK (Data Encryption Key), encrypted with AES-256-GCM. The DEK is wrapped by the KEK and stored as object metadata. Your master key never touches S3.
|`secrets.existingSecrets.enabled`|`false`| Use existing K8s secret |
175
133
|`redis-ha.enabled`|`true`| Deploy embedded Redis HA |
176
-
|`gateway.enabled`|`false`| Create `s3-gateway` service |
134
+
|`gateway.enabled`|`false`| Create gateway service |
177
135
|`ingress.enabled`|`false`| Enable ingress |
178
-
|`performance.memoryLimitMb`|`64`| Memory budget for concurrency (Linux only) |
179
-
180
-
> **Note:** Memory-based concurrency limiting requires Linux. The `malloc_trim` syscall used to release memory back to the OS is not available on macOS.
136
+
|`performance.memoryLimitMb`|`64`| Memory budget for streaming concurrency |
181
137
182
-
→[chart/values.yaml](chart/values.yaml) for all options.
138
+
See[chart/README.md](chart/README.md) for all options.
183
139
184
140
---
185
141
186
142
## FAQ
187
143
188
-
**Can I use existing unencrypted data?**
189
-
Yes. S3Proxy detects unencrypted objects and returns them as-is. To migrate, copy through the proxy.
144
+
**Can I use existing unencrypted data?** Yes. S3Proxy detects unencrypted objects and returns them as-is. Migrate by copying through the proxy.
190
145
191
-
**What if I lose my encryption key?**
192
-
Data is unrecoverable. Back up your key.
146
+
**What if I lose my encryption key?** Data is unrecoverable. Back up your key.
193
147
194
-
**What if Redis fails during multipart upload?**
195
-
Upload fails and must restart. Use `redis-ha.enabled=true` with persistence.
148
+
**What if Redis fails mid-upload?** Upload fails and must restart. Use `redis-ha.enabled=true` with persistence.
196
149
197
-
**Does it work with MinIO/R2/Spaces?**
198
-
Yes. Set `s3.host` to your endpoint.
150
+
**MinIO / R2 / Spaces?** Yes. Set `s3.host` to your endpoint.
199
151
200
-
**Presigned URLs?**
201
-
GET works. PUT/POST don't (signature computed over plaintext, but proxy encrypts).
152
+
**Presigned URLs?** GET works. PUT/POST don't — the proxy encrypts the body which invalidates the pre-signed signature.
0 commit comments