docs(dstack-ingress): correct what delegation does about CAA - #112
Merged
Conversation
677599f removed the fail-closed CAA gate -- once the container publishes the delegated CAA itself, an absent record means "not published yet" rather than "nobody can create it", so check_caa follows RFC 8659 here as it does everywhere else. That commit updated the README and left TESTING.md describing the old design, in two places: - the negative table still promised "delegation with no CAA record at all: blocked". A 2.3 test run reports the opposite on every first pass, which is the documented behaviour and not a defect. - the walkthrough still told the tester to create the CAA by hand and said the container blocks until they do. It publishes the record itself; there is nothing to wait for. Both now say what the code does, with the reasoning for the change kept so the next reader does not re-derive it as a bug -- and the row that does carry the weight, a delegated CAA forbidding the CA, is called out as the one that proves reachability through the operator's CNAME. The dnsman.py set_caa snippet is kept, repurposed for planting a CAA by hand in the negative case, which is still the only convenient way to write a structured CAA through Cloudflare's API.
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.
TESTING.mddescribes the pre-#108 delegation design in two places. Docs only — no behaviour change.#677599f removed the fail-closed CAA gate, with sound reasoning: once the container publishes the delegated CAA itself, an absent record means "not published yet" rather than "nobody can create it", so
check_caafollows RFC 8659 here as it does everywhere else. That commit updated the README and leftTESTING.mdbehind.What was wrong
The negative table promised:
A 2.3 run reports the opposite on every delegation first pass — necessarily so, since the CAA names the ACME account and the account has to exist first:
This reads as a security regression to anyone testing against the doc. It isn't, but the doc is what makes it look like one.
The walkthrough still told the tester to create the CAA by hand and said the container blocks until they do. It publishes the record itself:
What this changes
dig +short CAA <domain> @<ns>) rather than create it.dnsman.py set_caasnippet is kept but repurposed for the negative case — it is still the only convenient way to write a structured CAA through Cloudflare's API.Verified against a real run
Both behaviours were observed while testing
dstacktee/dstack-ingress:2.3against Let's Encrypt staging and a real Cloudflare zone:issue/issuewildon the base), and the challenge TXT was cleaned up afterwards;issue allows 'example.com', not letsencrypt.org.