Skip to content

Add tart VM tester pool role (gecko_t_osx_1500_m_vms) for host-mediated vault injection#47

Merged
rcurranmoz merged 1 commit into
mainfrom
add-tart-vms-role
Jul 16, 2026
Merged

Add tart VM tester pool role (gecko_t_osx_1500_m_vms) for host-mediated vault injection#47
rcurranmoz merged 1 commit into
mainfrom
add-tart-vms-role

Conversation

@rcurranmoz

Copy link
Copy Markdown
Collaborator

Onboards the macOS Tart VM tester pool (gecko-t-osx-1500-m-vms, + a _staging variant) to the broker, so credential-free VM images can fetch their Taskcluster vault at runtime instead of baking it into the image / leaving it on the build runner — the root cause of Bug 2049579.

Adds the role in the two standard places (matches the arm64 onboarding):

  • puppet_roles (variables.tf) → secrets.tf for_each creates an empty vault-gecko_t_osx_1500_m_vms (+ _staging) Secret Manager container; values populated separately via gcloud secrets versions add, out of state/git.
  • SCEP_ROLES (bootstrap-step-ca.sh) → one SCEP provisioner per role, created on the next CA bootstrap.

Trust model: the VMs are not MDM-enrolled, so they can't authenticate to the broker themselves. The MDM-enrolled tart host authenticates as the VM pool role (its SCEP cert identity), fetches that vault, and injects it into the credential-free VM at launch.

Rollout after merge: terraform apply (creates the empty containers) → gcloud secrets versions add vault-gecko_t_osx_1500_m_vms --data-file=… (tester vault — L1/try, low-sensitivity, token already rotated) → re-run CA bootstrap for the SCEP provisioner → SimpleMDM SCEP profile for the tart hosts → ronin_puppet host-injection. _staging container stays empty until the staging pool exists.

Validated: terraform fmt/validate clean, bash -n clean.

🤖 Generated with Claude Code

…ed vault injection

Onboards the macOS Tart VM tester pool to the broker so the credential-free VM
images can get their Taskcluster vault at runtime instead of having it baked in
/ left on the build runner (the root cause of Bug 2049579).

Adds the role (+ a staging variant) in the two standard places:
  * puppet_roles (variables.tf) -> creates an empty vault-<role> Secret Manager
    container via secrets.tf for_each; value populated separately with
    `gcloud secrets versions add`, out of state/git.
  * SCEP_ROLES (bootstrap-step-ca.sh) -> one SCEP provisioner per role, created
    on the next CA bootstrap.

Trust model: the MDM-enrolled tart *host* authenticates to the broker as the VM
pool role (its SCEP cert identity) and fetches + injects that vault into the VM
at launch. The VMs themselves are not MDM-enrolled, so they can't authenticate
to the broker directly — the host mediates.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rcurranmoz
rcurranmoz requested a review from a team as a code owner July 16, 2026 21:55
@rcurranmoz
rcurranmoz merged commit 9b1fefe into main Jul 16, 2026
3 checks passed
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.

2 participants