feat: pluggable snapshot storage broker with per-snapshot signed URLs - #1282
Draft
Anish Ramasekar (aramase) wants to merge 8 commits into
Draft
feat: pluggable snapshot storage broker with per-snapshot signed URLs#1282Anish Ramasekar (aramase) wants to merge 8 commits into
Anish Ramasekar (aramase) wants to merge 8 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a vendor-neutral snapshot storage broker. The control plane mints
short-lived, per-snapshot signed URLs and atelet reads and writes snapshots over
plain HTTP, so the node links no cloud SDK and holds no cloud credential. The
cloud-specific signer runs out of process as a sidecar over a Unix socket, which
keeps the control-plane core free of any cloud SDK as well. Ships an S3 sidecar.
Off by default.
This is the storage-decoupling touchpoint from the Cloud Provider Decoupling
design, and it stands up the same per-snapshot capability #777 needs: the node
stops holding a broad, permanent storage credential. It does not yet make the
authorization decision before minting; that needs the broader control-plane
authz layer.
Design doc: https://docs.google.com/document/d/1I2SlYey0Y2mcGQBZNpfYufWhwLbQDmaqI5T56sz33_4/edit?usp=sharing
What's in it
storagebrokerinterface and registry in ate-api-server.New(backend)selects one; empty disables signing and the existing in-atelet path is
unchanged.
golden) and suspend (write), passed to atelet via a new
signed_accessmap onthe atelet proto.
signedObjectStoresatisfies the existingategcs.ObjectStorageandspeaks S3 (presigned GET, POST starts-with policy) or Azure (PUT plus token)
over net/http, with no SDK and no credential.
packages (was 39 with the in-tree signer).
cmd/s3-broker-server: the S3 sidecar (presigned GET per object, one POSTpolicy per snapshot).
ATE_SNAPSHOT_BROKER(for exampleuds), separate from atelet'sATE_STORAGE_BACKEND.Testing
verify-allis green.atelet presigned GET/POST end to end.
253 ms in-tree signer vs 243 ms over the socket, so no measurable latency.
Not in this PR
node to zero SDK.