Skip to content

Enable DNSSEC stage 2: DS record at the registrar - #194

Merged
irvingpop merged 1 commit into
mainfrom
dnssec-ds-record
Nov 3, 2026
Merged

irvingpop merged 1 commit into
mainfrom
dnssec-ds-record

Conversation

@irvingpop

Copy link
Copy Markdown
Member

Summary

Completes DNSSEC for operationcode.org (stage 1, zone signing, was in #193).

  • Uncomments aws_route53domains_delegation_signer_record.operationcode in terraform/dns_operationcode_org_security.tf, with depends_on the zone signing.
  • Signing ran for 53 hours before this change (longer than the 48h apex NS TTL). Every checked RRset (apex A, MX, CAA, TXT, _dmarc TXT, api A, www TXT, coders MX) validated against the zone KSK (tag 23956), and NXDOMAIN answers carry signed NSEC proofs.
  • The registrar DS is 23956 13 2 658739A5FEF7929BDE0024F7AA443061AB22906C9A7AE00BD46FB4A690F54474, which matches the DS computed from the live KSK.

Provider bug and workaround

Applied locally from this branch. Route53 Domains accepted the DS (operation ADD_DNSSEC: SUCCESSFUL), but AWS provider 5.100.0 failed on read-back with empty result, so the resource was missing from state. Importing it with the 5.x ID format (domain_name,dnssec_key_id) leaves signing_attributes empty and forces a destroy/recreate of the live DS. Workaround: lifecycle { ignore_changes = [signing_attributes] }, then the import was applied and the import block removed. A KSK rotation needs a new DS record anyway, so the ignore does not hide a real change.

The provider changelog for 6.70.0 changes this resource's import ID to domain_name,flags,algorithm,public_key because AWS no longer returns DNSKEY flags. Upgrading to provider 6.x is a separate change: terraform-aws-modules/autoscaling ~> 8.0 pins aws < 6.0.

State

terraform plan reports No changes. The DS appears at the .org registry after the registry publishes it (minutes to hours).

Rollback

Remove the DS record first and wait for the DS TTL at the .org parent. Only then disable signing. Disabling signing or deleting the KSK while the DS is live breaks resolution for validating resolvers.

🤖 Generated with Claude Code

Signing ran 53 hours (longer than the 48h apex NS TTL) and all checked
RRsets validated against KSK tag 23956. The DS record was added by apply;
provider 5.100.0 failed on read-back, so it was imported with
ignore_changes on signing_attributes. terraform plan reports No changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 3, 2026

Copy link
Copy Markdown

🟢 All clear: Claude of Duty review passed

Mission: Review the code. Protect the branch. Deploy the future.

Tip

No findings. This review found no reason to block. Nothing to do for this review.
The merge box shows whether the other required checks pass.

File checks Review Security Supply chain Dependency review Coverage
✅ ok ✅ ran, 0 findings ✅ ran, 0 findings ✅ ran, 0 findings ✅ ok ✅ complete

Run 41730132250, attempt 1 for head 91a6bf9 into main. The required workflow in the merge box is the result that counts.

Claude of Duty never approves a PR. A human reviewer gives the final approval.

📋 Full review record: reasons, checks, signals, finding details, model summaries, token usage

Reviewed snapshot

Head SHA Merge base SHA Base branch Run
91a6bf9b747ea19715bb1d339f8d934b15b158b5 ea43574789115c5a14767f64e5a50289fcfcd51e main 41730132250, attempt 1

Reasons the gate failed

None. No reason applies.

Checks (code, no model)

Check Result Detail
Hard blocks ✅ none
Coverage ✅ complete files in comparison 1, files collected 1, trees complete
Dependency changes ✅ none
Dependency review job ✅ success

Signals (context only, never block)

None.

Dependency changes

None.

Finding details

Model output from untrusted input. Check it before you act on it. Verified means only that the quoted text is at that place. It does not mean the claim is true.

Blocking is decided by code from category and severity, never by the model. A finding in a blocking category blocks only at high or critical severity.

No findings. All three passes completed.

Model summaries

Model output from untrusted input. Check it before you act on it. Verified means only that the quoted text is at that place. It does not mean the claim is true.

Pass Status Model Summary
Review ✅ ok claude-sonnet-5-5 The PR uncomments the Route53 Domains DS record resource, adds depends_on on zone signing, and adds ignore_changes on signing_attributes to work around a provider read-back bug. No clear correctness bugs are visible in the shown code. The ignore_changes tradeoff is documented and intentional.
Security ✅ ok claude-sonnet-5-5 The PR enables the Route53 Domains DS record for operationcode.org, completing DNSSEC, and adds ignore_changes on signing_attributes to work around a provider read-back bug. No injection, secrets, or weakened security controls are visible. The redacted line in the file is an AWS KMS key spec attribute, not a real credential. The operational risk of a live DS record (resolution failures if signing is removed) is documented in the PR. No security findings.
Supply chain ✅ ok claude-sonnet-5-5 The PR enables the Route53 Domains delegation signer (DS) record for operationcode.org, completing DNSSEC, and adds an ignore_changes lifecycle workaround for a provider read-back bug. It adds no dependencies, scripts, CI changes, obfuscation, network calls to unexpected hosts, or text aimed at an AI reviewer. The only 'Generated with Claude Code' line in the body is an attribution footer, not an instruction. No supply-chain or malicious concerns found.

Token usage

Pass Input Output Cache write Cache read Attempts
Review 722 114 0 9407 1
Security 1048 161 0 9407 1
Supply chain 1240 180 9407 0 1
Total 3010 455 9407 18814 3

@irvingpop irvingpop mentioned this pull request Nov 3, 2026
4 tasks
@irvingpop
irvingpop merged commit 0c7e347 into main Nov 3, 2026
5 checks passed
@irvingpop
irvingpop deleted the dnssec-ds-record branch November 3, 2026 22:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant