Skip to content

Commit 50b5a21

Browse files
committed
docs(security): drop the stale cost superlative from the public listener
Review of #1119 caught the section contradicting itself. One bullet called `GetAttestationForAppKey` "by far the most expensive method here"; the next bullet, added by the same commit, says the frozen `Info` also generates a hardware quote per call and replays the event log under the same global lock. The superlative predates that second bullet and is now false. It also misdirects: a reader deciding what to rate-limit follows it to the method that needs an algorithm argument, not to the one clients actually poll. Name both quote-generating methods, then say plainly which of the two is worth bounding first. Two smaller corrections in the same section: - The v1 `Info` row promised "identity and configuration" while the bullets below explain that the external surface blanks the configuration documents unless the app set `public_tcbinfo`. The row now carries the condition. - "the internal socket ... is reachable only by the application itself" is true of the platform, not of every deployment: the socket is bind-mounted per the app's own compose, so an app that proxies it has moved the boundary. Say so, rather than leaving an absolute claim in a security document.
1 parent 10ca9b2 commit 50b5a21

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

docs/security/cvm-boundaries.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,9 @@ Neither surface returns key material, and no caller chooses what gets signed
192192
or attested. That boundary, not the method list, is what makes this listener
193193
safe to expose: key material and caller-chosen attestation live only on the
194194
internal Unix socket (`/var/run/dstack.sock`), which is not a CVM boundary —
195-
it is reachable only by the application itself.
195+
it is reachable only by the application itself. An application that re-exports
196+
that socket has moved the boundary itself, and everything behind it moves with
197+
it.
196198

197199
**Frozen `Worker` (`/prpc`, alias `/prpc/v0`):**
198200

@@ -206,7 +208,7 @@ it is reachable only by the application itself.
206208

207209
| Method | Description | Return Type |
208210
|--------|-------------|------------|
209-
| Info | Get application identity and configuration | InfoResponse |
211+
| Info | Get application identity, plus configuration when `public_tcbinfo` is set | InfoResponse |
210212
| Version | Get guest agent version | VersionResponse |
211213
| Health | Report whether the application is serving | HealthResponse |
212214

@@ -223,15 +225,19 @@ what it costs and in what it says:
223225
back. Container names and statuses were already public through the dashboard
224226
below.
225227
- `GetAttestationForAppKey` (frozen) generates a fresh platform attestation per
226-
call and is by far the most expensive method here. It has no v1 counterpart
228+
call. With the frozen `Info` below, it is one of the two methods here that
229+
let an anonymous caller drive quote generation. It has no v1 counterpart
227230
on purpose: a v1 application attests its own key through the internal socket
228231
(`/v1/GetKey`, then `/v1/Attest`) and serves the result itself, so the public
229232
listener never gained a second attestation-on-demand entry point.
230233
- The frozen `Info` decodes identity out of a boot attestation per call, which
231234
costs a hardware quote under the agent's global quote lock. The v1 `Info`
232235
serves the same identity from a cache decoded once at startup, so an
233236
anonymous caller cannot drive quote generation through it; if the boot-time
234-
decode failed, retries are throttled to one attempt per interval.
237+
decode failed, retries are throttled to one attempt per interval. Of the two
238+
quote-generating methods, the frozen `Info` is the one worth rate-limiting
239+
first: it is what clients actually poll, and it replays the event log on top
240+
of the quote.
235241
- Both `Info` methods honour the app's `public_tcbinfo` choice, with different
236242
reach. The frozen one blanks `tcb_info` and `vm_config` but always serves
237243
`key_provider_info`. The v1 one blanks `app_compose`, `vm_config`, and

0 commit comments

Comments
 (0)