Umbra Group / Studio / Identity & Secrets
← Day 0 Bring-Up v1.0 · Identity
Studio Infra Kit · Identity Runbook

Identity, access,
and secrets.

The single foundation every other system inherits from. Workspace SSO + 1Password Business + two YubiKeys + Tailscale ACLs. Get this layer right and a single revocation kills access everywhere; get it wrong and re-rolling credentials becomes a multi-day project.

Companion to USI-RB-01 §03 (Phase 0 abridged). This runbook is the deep-dive: vault structure, key recovery, mesh ACLs, and the secrets-rotation cadence enforced from USO-ST-06 §03.

Doc-IDUSI-RB-02
LayerIdentity
Duration~6 hours
StatusLive
01

How to use this runbook.

Identity is the foundation under every other system. This runbook stands up the four-piece identity stack and codifies the policies that govern it for the lifetime of the Studio.

Run it once at Day 0. Re-read §08 (Secrets policy) and §10 (Identity checklist) every quarter, and any time a credential rotates, a key is lost, or a seat is added.

The order matters — Workspace before 1Password (so 1Password can use Workspace SSO), 1Password before YubiKey (so the keys protect the right account), YubiKey before Tailscale and GitHub (so those services can require hardware-backed 2FA from the start). Skipping the order means re-doing earlier steps with the protective layer added back later, which is the most common way credentials end up unprotected.

02

The four-piece stack.

One identity provider, one password manager, one hardware factor, one network mesh. Every other SaaS surface federates against this stack — nothing stands alone.

LayerToolRoleCost
SSO / IdPGoogle Workspace Business StandardThe single identity. Every SaaS surface federates here.$14 / seat / mo
Vault1Password BusinessStores every credential, secret, and recovery code. SSO via Workspace.$20 / seat / mo
Hardware factor2x YubiKey 5C NFCPhishing-proof second factor for Workspace + 1Password + GitHub.~$110 (one-time)
Network meshTailscaleZero-trust mesh between workstation, NAS, and any future server.Free tier (1 admin)

Total cost: ~$34/mo + ~$110 one-time. Tailscale stays free until the team grows past the personal tier.

03

Google Workspace setup.

~75 minutes
Step 01Provision the tenant.~30 min
  1. Sign up at workspace.google.com. Choose Business Standard ($14/seat/mo) — required for Shared Drives and Vault.
  2. Enter umbra.group as the primary domain.
  3. Verify domain ownership via DNS TXT record at the registrar (Cloudflare/etc).
  4. Add MX records pointing to Google. Disable any prior mail routes.
Step 02Primary identity & aliases.~20 min
  1. Create user abe@umbra.group. Generate a strong password in 1Password (32+ chars).
  2. Create five Groups (not seats) for role aliases. Groups are free; seats are not:
hello@umbra.group        # public inbound
billing@umbra.group      # invoices, finance
contracts@umbra.group    # legal, MSAs, SOWs
security@umbra.group     # security disclosures
press@umbra.group        # press & media inquiries

All five forward to abe@.

Step 03Hardening & admin policies.~25 min
In Admin Console → Security
  • 2-Step Verification: enforce on all users. Allowed methods: Security Key only (no SMS, no Authenticator app fallback once YubiKey is enrolled).
  • Less Secure Apps: disabled.
  • Session length: 8 hours, then re-auth.
  • Recovery email/phone: disable user-set recovery; admin-only.
  • Login challenges: enable.
  • Context-Aware Access: enable; restrict admin actions to managed devices.
In Admin Console → Apps → Google Workspace
  • Drive sharing: restrict external sharing to allowlisted domains.
  • Gmail: enable enhanced pre-delivery scanning.
  • Calendar: disable external visibility of free/busy by default.
§ §03 gate
Sign out everywhere. Sign back in via private window. If 2-Step prompts and accepts your password (YubiKey enrollment is next section), and the role aliases all forward correctly, the Workspace tenant is ready.
04

1Password vault structure.

~75 minutes

Six vaults, each with a specific isolation purpose. From USO-ST-06 §03.

VaultHoldsAccessRotation
studioStudio-internal SaaS credentials, dev API keys, internal infra logins.Studio members only90 days
studio-sharedCredentials shared between Studio and a contractor for a specific scope.Studio + named contractorat handoff
client-<short>Per-client production credentials. One vault per active client, never shared across clients.Studio engagement team onlyat handoff or 180d
contractsSigned PDFs, MSA/SOW originals, e-signature certificates.Studio Lead onlynever
recoveryFileVault keys, hardware-key backup codes, Workspace super-admin emergency access.Studio Lead only365 days (review)
engineeringProduction API keys (Anthropic, OpenAI, etc.), deploy tokens, signing keys.Studio engineering only180 days
Step 01Sign up & create vaults.~30 min
  1. Sign up for 1Password Business at 1password.com/business. One seat, $20/mo.
  2. Create the primary identity using abe@umbra.group.
  3. Generate a 32-character master password. Print it. The Emergency Kit (master password + Secret Key) goes in a fireproof safe before any data lands in the vault.
  4. Configure SSO via Workspace OIDC (now or after Workspace is fully hardened).
  5. Create the six vaults named per the table above (substitute client-template as a placeholder for the per-client vault pattern).
Step 02Install apps & CLI.~20 min
  1. Install the desktop app and browser extension on the workstation.
  2. Install the 1Password CLI: brew install 1password-cli. Verify with op signin.
  3. Configure SSH agent: enable in 1Password → Developer. Generate a per-Studio SSH key inside the engineering vault.
  4. Configure shell helper for secret injection in scripts: op run -- <cmd>.
Step 03Vault ACLs.~20 min
  1. For each vault, set the access policy per the table above.
  2. Disable the default Personal and Shared vaults — they bypass the ACL discipline.
  3. Configure travel mode toggle for the engineering vault (excludes it from device sync when traveling internationally).
Gate
  • Six vaults visible, each with the correct ACL.
  • Emergency Kit printed, signed, dated, in the safe.
  • op signin works from a fresh shell using the YubiKey.
05

YubiKey enrollment & recovery.

~45 minutes

Two keys, always. The primary lives on the keychain; the backup lives in the safe. Every service that supports WebAuthn / FIDO2 enrolls both keys at the same time — not one and "we'll add the backup later." The cost of enrolling later is one full re-enrollment per service, the cost of enrolling now is one minute per service.

Step 01Unbox & label.~5 min
  1. Two YubiKey 5C NFC keys, ordered direct from yubico.com.
  2. Label one P (primary), one B (backup). Use a small adhesive label, not a marker.
  3. Set a PIN on each key via Yubico Authenticator (8–15 chars). Same PIN on both is acceptable; the keys themselves are the second factor.
Step 02Enroll on Workspace.~10 min
  1. Workspace → My Account → Security → 2-Step Verification → Add Security Key.
  2. Tap the primary key. Name it YK-P.
  3. Repeat with the backup key. Name it YK-B.
  4. Disable all other 2FA methods: SMS, Authenticator app, backup codes (or store backup codes in recovery vault and disable in UI).
Step 03Enroll on 1Password.~10 min
  1. 1Password → My Profile → Manage Two-Factor Authentication → Security Key.
  2. Enroll both keys.
  3. Verify by signing out and back in using each key.
Step 04Enroll on GitHub & everywhere else.~15 min
  1. GitHub → Settings → Password & Authentication → Security Keys. Enroll both.
  2. Anthropic Console: enroll both as 2FA.
  3. Mercury, Wave, Dropbox Sign, Tailscale: enroll wherever supported.
  4. For services that don't support WebAuthn (rare in this stack), use TOTP stored in 1Password's built-in TOTP — never SMS.
§ Critical
If a YubiKey is lost, immediately revoke it from every enrolled service — do not wait for the new replacement to arrive. Treat a lost primary as a Studio-SEV-1 incident per USO-ST-06 §07. Order a third replacement within 24 hours.
06

Tailscale mesh & ACLs.

~45 minutes

Tailscale provides the encrypted mesh between workstation, NAS, and any future server or contractor device. Free tier covers the Studio at one admin / personal usage scale; upgrade to Personal Pro or Business when contractors join.

Step 01Sign up & install.~15 min
  1. Sign up at tailscale.com using Workspace SSO (Google identity provider).
  2. Install the Tailscale macOS app on the MBP. Sign in.
  3. Install Tailscale on the Synology NAS via the Package Center.
  4. Confirm both devices appear on the tailnet within 2 minutes.
Step 02ACL policy.~20 min

Edit the tailnet policy file (Admin console → Access Controls). Default-deny; explicit allow for what's actually needed.

{
  "tagOwners": {
    "tag:studio-workstation": ["abe@umbra.group"],
    "tag:studio-nas":         ["abe@umbra.group"],
    "tag:contractor":         ["abe@umbra.group"]
  },
  "acls": [
    // Workstation can reach NAS for Time Machine + file shares
    { "action": "accept",
      "src": ["tag:studio-workstation"],
      "dst": ["tag:studio-nas:445,548,5000-5001"] },

    // Contractors get only what's named per engagement
    { "action": "accept",
      "src": ["tag:contractor"],
      "dst": ["tag:studio-workstation:0"] }   // none by default
  ],
  "ssh": [
    { "action": "check",
      "src": ["autogroup:member"],
      "dst": ["tag:studio-workstation"],
      "users": ["autogroup:nonroot"] }
  ]
}
Step 03Tag devices & verify.~10 min
  1. Tag the workstation as tag:studio-workstation.
  2. Tag the NAS as tag:studio-nas.
  3. Verify Time Machine still backs up over the mesh, and that any other ports are blocked (test from a third device if available).
07

GitHub organization.

~45 minutes

The GitHub org is the engineering surface. Every commit signed, every contributor 2FA-enforced, every secret kept out of the tree.

Step 01Create the org.~15 min
  1. Create the umbra-studio organization. Subscribe to Team plan ($4/seat/mo).
  2. In Org → Settings → Authentication: require 2FA org-wide. Enable IP allow lists if and when team grows.
  3. In Org → Settings → Member privileges: default repository permission = Read. No member can create public repos by default.
Step 02Signed commits.~15 min
  1. In 1Password, generate an SSH commit-signing key in the engineering vault.
  2. Add the public key to GitHub → Settings → SSH and GPG keys, marked as a signing key.
  3. Configure git locally: git config --global gpg.format ssh, git config --global commit.gpgsign true.
  4. Test by making a signed commit and verifying the green Verified badge appears on GitHub.
Step 03Template repos.~15 min
  1. Create the four template repos: studio-shared, patterns, contracts, infra.
  2. Create client-template. Mark as Template repository in settings.
  3. For each repo: enable Dependabot, enable secret scanning, require signed commits on the default branch.
  4. Add the standard .gitignore, SECURITY.md, and CODEOWNERS files.
08

Secrets policy.

The rules that govern every credential stored in the Studio. Enforced manually by the Studio Lead and audited monthly.

Naming convention

<system>-<env>-<purpose>
e.g.   anthropic-prod-evals
       mercury-prod-debit-saas
       github-prod-actions-deploy

Storage rules

  • Never in Git. If a key is committed, treat as compromised — revoke and re-issue, even if the commit is reverted.
  • Never in Slack. If a credential is shared in Slack, immediately re-rotate. Then delete the message and remind whoever sent it.
  • Never in DM. Same logic.
  • Always in 1Password. Pull at runtime via op CLI or the 1Password SSH agent — not by copy-paste into .env files (the file becomes the new attack surface).
  • Per-environment isolation. Dev / eval / prod always separate keys. Compromising a dev key never touches prod.

Rotation cadence

TypeCadenceTrigger
Studio internal SaaS passwords90 daysCalendar reminder
Production API keys (Anthropic, etc.)180 daysCalendar reminder
Per-client production credentialsat handoffEngagement close
Per-engagement scoped tokensat handoffEngagement close
Master password & YubiKey backup365 days (review only)Annual policy review
Recovery codes / FileVault keysnever (re-print on key change)Hardware change
§ Tripwires
Three things trigger an immediate full rotation, not a scheduled one: (1) a YubiKey lost or stolen, (2) a credential committed to Git or pasted into Slack, (3) a workstation lost or stolen. Treat these as Studio-SEV-1 incidents per USO-ST-06 §07.
09

Adding & revoking seats.

The Studio scales by adding contractors and senior engineers. The 1-hour rule from USO-ST-06 §09 governs both directions: add or remove access in under an hour, end-to-end.

Adding a seat (Day 0 for a new person)

  1. Workspace: create the user, assign to relevant Groups, enforce 2FA, mail YubiKey to their address before first login.
  2. 1Password: invite via SSO. Grant access to the specific vaults their role requires — never all.
  3. Slack: invite, add to relevant channels.
  4. Notion: invite via SSO, set page-level permissions per the seven-page structure.
  5. Linear: invite, assign to the relevant team.
  6. GitHub: invite to the org, set role (typically Member, never Owner). Assign to teams that map to repos they need.
  7. Tailscale: invite via SSO, tag their device as tag:contractor (least privilege).
  8. Anthropic Console: invite, scope key access via Workspace.
  9. Drive: shared drives inherit Workspace identity; verify access works.
  10. Welcome email with the Studio handbook link, the 1Password Emergency Kit policy, and the 1-hour rule expectation.

Revoking a seat (Day-Last for an exiting person)

  1. Workspace: suspend the user. This kills SSO across all federated apps within ~10 minutes.
  2. 1Password: revoke their account. Confirm vault removal.
  3. Slack, Notion, Linear, GitHub, Tailscale, Anthropic: explicit removal — do not rely on SSO suspension alone for sensitive surfaces. Audit the membership lists.
  4. Active client vaults: rotate any credentials they had access to in the next 24 hours.
  5. YubiKey: physically retrieve, or revoke remotely if not retrievable, treat as Studio-SEV-2.
  6. Mercury debit cards issued to them: cancel.
  7. Email forwards: redirect their alias to abe@ for 90 days.
  8. Document the revocation in the Studio decision log with date, person, scope, and verification evidence.
§ The 1-hour rule
Both onboarding and offboarding happen in a single hour-long block, with the checklist visible. The cost of leaving access live for a few extra hours is the cost of an entire engagement going wrong.
10

Identity checklist.

Weekly · 10 min

  1. Audit Workspace login activity for any unfamiliar IPs or geographies.
  2. Confirm the YubiKey backup is still in the safe.
  3. Skim 1Password Watchtower for any flagged credentials.

Monthly · 30 min

  1. Audit GitHub org members; remove anyone who shouldn't be there.
  2. Audit 1Password vault membership against the access table in §04.
  3. Audit Tailscale device list; revoke any stale device.
  4. Skim the secrets-rotation calendar and rotate anything coming due.

Quarterly · 60 min

  1. Rotate Studio-internal SaaS passwords (90-day cadence).
  2. Rotate production API keys (180-day cadence).
  3. Test recovery: pretend the primary YubiKey is lost; sign in via backup; restore primary status. Re-print the Emergency Kit if anything changed.
  4. Review the secrets policy in §08; update if a tool changed.

Annual · half-day

  1. Full identity stack walkthrough: re-read this runbook end-to-end, fix anything stale.
  2. Review and re-print the Emergency Kit.
  3. Order a fresh backup YubiKey to replace any 3+ year old key.
  4. Review the seat-add and seat-revoke checklists for any tools added in the past year.
§ Bottom line
The identity stack is the single most leveraged piece of the Studio's security posture. An hour a quarter to maintain it — and an hour a year to deeply audit it — is the price of every other system being trustworthy.