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: custom-domain/dstack-ingress/README.md
+41Lines changed: 41 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -179,9 +179,50 @@ environment:
179
179
| `EVIDENCE_SERVER` | `true` | Serve evidence files at `/evidences/` on the TLS port |
180
180
| `EVIDENCE_PORT` | `80` | Internal port for evidence HTTP server |
181
181
| `ALPN` | | TLS ALPN protocols (e.g. `h2,http/1.1`). Only set if backends support h2c |
182
+
| `ACME_CHALLENGE_ALIAS` | | Delegate the ACME DNS-01 challenge to this zone (see below) so the DNS token needs no access to the served domain's own zone |
183
+
| `ACME_CHALLENGE_PROPAGATION_SECONDS` | `30` | Wait after writing the delegated challenge TXT before validation (only with `ACME_CHALLENGE_ALIAS`). Keep well under ~250s — certbot is killed after a 300s per-run timeout |
184
+
| `ALLOW_MISSING_CAA` | `false` | In delegation mode, continue even if the required `accounturi` CAA cannot be confirmed. Default fails closed (see below) |
182
185
183
186
For DNS provider credentials, see [DNS_PROVIDERS.md](DNS_PROVIDERS.md).
184
187
188
+
### ACME challenge delegation (least-privilege DNS token)
189
+
190
+
By default the DNS token must be able to edit the **served domain's own zone**
191
+
(to write `_acme-challenge`, and — with `SET_CAA` — the CAA record). If the
192
+
served name lives under a shared production zone (e.g. `svc.example.com` under
193
+
`example.com`), that token can edit every record in the zone, which may be more
194
+
privilege than you want.
195
+
196
+
Set `ACME_CHALLENGE_ALIAS=<delegation-zone>` to answer the DNS-01 challenge in a
197
+
separate zone that your token controls, so the token never touches the served
198
+
domain's zone. In this mode dstack-ingress **only** manages the challenge TXT in
199
+
the delegation zone; you set the following records **once, statically**, in the
200
+
served domain's production zone (the container prints the exact values on start):
> **Security note.** The `accounturi` CAA restricts issuance to this enclave's
210
+
> ACME account and is the control that prevents forged certificates. In
211
+
> delegation mode dstack-ingress cannot set it for you (no token for the served
212
+
> zone), so it prints the record and verifies its presence via DoH. **If the
213
+
> CAA is confirmed absent the container fails to start** (set `ALLOW_MISSING_CAA=true`
214
+
> to override; a transient DoH failure only warns, it does not block). Without
215
+
> this CAA, anyone who can satisfy the delegated challenge could obtain a
216
+
> certificate for the domain.
217
+
>
218
+
> Use a **dedicated** delegation zone and scope the token to only that zone — a
219
+
> zone shared with other tenants lets anyone with write access to it complete
220
+
> the challenge. `SET_CAA` does not affect delegation mode (this CAA path always
221
+
> runs). If a certificate was previously issued with the standard DNS-plugin
222
+
> authenticator, delete `/etc/letsencrypt/renewal/<domain>.conf` before enabling
223
+
> delegation, otherwise `certbot renew` reuses the old plugin (which needs the
224
+
> production-zone token this mode avoids).
225
+
185
226
## Evidence & Attestation
186
227
187
228
Evidence files are served at `https://your-domain.com/evidences/` by default (via payload inspection in HAProxy's TCP mode). They can also be accessed by the backend application through the shared `/evidences` volume.
0 commit comments